2017-09-19 11 views
0

これはVerilogを使用する私の最初の試みです。 私は8ビットの双方向ポート、以下の方法でデータ・レジスタとデータ方向レジスタ定義している:それは完璧に動作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; 

を私は確信している、しかし、実現するための簡単な方法がなければなりません同じ結果。

Iは、サイクルのために用いて試みた:

integer i; 

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

を同様に一度に全体ベクトルを割り当てるように:

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

任意結果なし。 ありがとうございました。

ルカ

答えて

0

あなたはgenerate-forループをしたいです。

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

これは、最初に書き込んだものに展開されます。

+0

ありがとうございました。私はgenerate-forループについては知らなかったが、あなたの答えともう少し読んだところでは、コンパイル時と実行時に評価されるループの違いがあると思う。 – Luca

関連する問題