2017-09-19 1 views
0

Es ist mein erster Versuch, Verilog zu verwenden. Ich habe einen 8-Bit bidirektionaler Anschluss, ein Datenregister und ein Datenrichtungsregister in folgenden Weise definiert:Vektorzuordnung in 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; 

Es funktioniert perfekt, aber ich bin sicher, es muss ein einfacher Weg, um zu erreichen das gleiche Ergebnis.

Ich habe für den Zyklus mit einem versucht:

integer i; 

for (i = 0; i < 8; i = i + 1) 
    begin 
    assign pa [i] = (data_dir_reg [i]) ? data_reg [i] : 1'bZ; 
    end 

sowie den gesamten Vektor auf einmal zuweisen:

assign pa [7:0] = (data_dir_reg [7:0]) ? data_reg [7:0] : {8{1'bZ}}[7:0]; 

ohne Ergebnis. Danke für jede Hilfe.

Luca

Antwort

0

Sie wollen eine generate-for Schleife.

genvar i; 
for (i = 0; i < 8; i = i + 1) 
    begin 
    assign pa [i] = (data_dir_reg [i]) ? data_reg [i] : 1'bZ; 
    end 

Dies wird entrollt in das, was Sie ursprünglich geschrieben haben.

+0

Vielen Dank. Ich wusste nicht über generate-for-Schleife, aber nach Ihrer Antwort und ein bisschen mehr lesen ich denke, ich habe den Unterschied zwischen Schleife ausgewertet zur Kompilierungszeit im Vergleich zur Laufzeit. – Luca