2016-08-30 3 views
0

genvar変数の幅を切り捨てるにはどうすればよいですか?例えば、私が持っている場合:私はModelSimの中でシミュレートする場合Verilog、genvarの幅のサイズを切り捨てます

parameter LENGTH = 8; 

genvar i; 
for(i = 0; i < LENGTH; i = i + 2) begin 
    somemodule #(WIDTH($clog2(LENGTH)) 
       ) 
       tmp (.a(i) 
        ,.b(i+1) 
        ,.c(output) 
        ); 
end 
endgenerate 

、私は接続サイズと一致していないポートの大きさになるだろう。私は、問題はgenvarが32ビット幅であり、モジュールの幅が異なるということにあります。

私は

genvar [$clog2(LENGTH)-1:0] i; 

.a(i[$clog2(LENGTH)-1:0]) 

を試してみましたが、彼らは文法的に正しくありません。私はこの問題を回避するにはどうすればよい

答えて

3

あなたはこの

parameter int LENGTH = 8; 
parameter int WIDTH = $clog2(LENGTH); 
for(genvar i = 0; i < LENGTH; i = i + 2) begin 

    parameter bit [WIDTH-1:0] A = i; 
    somemodule #(.WIDTH(WIDTH)) 
       ) 
       tmp (.a(A) 
        ,.b(A+1'b1) 
        ,.c(output) 
        ); 
end 
のデータ型で宣言された中間パラメータを使用することができます
関連する問題