2016-08-30 941 views
0

如何截断genvar变量的宽度?举例来说,如果我有: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 

当我的ModelSim仿真,我会得到口尺寸不匹配连接尺寸。我知道问题在于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 
相关问题