Verilog,截断genvar宽度大小
Verilog, truncate genvar width size
如何截断 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])
但它们在语法上不正确。
如何解决这个问题?
您可以为此使用声明了数据类型的中间参数
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
如何截断 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])
但它们在语法上不正确。
如何解决这个问题?
您可以为此使用声明了数据类型的中间参数
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