C'est ma première tentative d'utilisation de Verilog. J'ai défini un port bidirectionnel 8 bits, un registre de données et un registre de direction de données de la manière suivante:Affectation de vecteur dans Verilog
inout [7:0] pa; // 8-bit bidirectional parallel port
reg [7:0] data_reg;
reg [7:0] data_dir_reg; // 0 --> input; 1 --> output
assign pa [7] = (data_dir_reg [7]) ? data_reg [7] : 1'bZ;
assign pa [6] = (data_dir_reg [6]) ? data_reg [6] : 1'bZ;
assign pa [5] = (data_dir_reg [5]) ? data_reg [5] : 1'bZ;
assign pa [4] = (data_dir_reg [4]) ? data_reg [4] : 1'bZ;
assign pa [3] = (data_dir_reg [3]) ? data_reg [3] : 1'bZ;
assign pa [2] = (data_dir_reg [2]) ? data_reg [2] : 1'bZ;
assign pa [1] = (data_dir_reg [1]) ? data_reg [1] : 1'bZ;
assign pa [0] = (data_dir_reg [0]) ? data_reg [0] : 1'bZ;
Il fonctionne parfaitement, mais je suis sûr, il doit y avoir un moyen plus facile d'accomplir le même résultat.
J'ai essayé avec un pour le cycle:
integer i;
for (i = 0; i < 8; i = i + 1)
begin
assign pa [i] = (data_dir_reg [i]) ? data_reg [i] : 1'bZ;
end
ainsi que l'affectation à la fois tout le vecteur:
assign pa [7:0] = (data_dir_reg [7:0]) ? data_reg [7:0] : {8{1'bZ}}[7:0];
sans aucun résultat. Merci pour toute aide.
Luca
Merci beaucoup. Je ne connaissais pas la boucle generate-for, mais après votre réponse et un peu plus de lecture, je pense que j'ai la différence entre la boucle évaluée au moment de la compilation et le temps d'exécution. – Luca