我想访问具有动态值的切片。我尝试过以不同的方式做到这一点。在第一种情况下,减少了用于控制索引值等的模块逻辑,verilator告诉我这不是一个常量值,我同意这一点,然后我更改了第二个版本,但得到了相同的结果。
1:
module m1 (
input logic [4:0] in1, // 8-bit input vector 1
input logic [4:0] in2, // 8-bit index
output logic [4:0] out // 8-bit output vector
);
logic add;
always_comb begin
add = (in2[in1[4:0]-1] & (in2[(in1[4:0]-2):0] != '0); //summary rounding
end
out = in1 + add;//summary of the final operation
endmodule
2:
module m1 (
input logic [4:0] in1, // 8-bit input vector 1
input logic [4:0] in2, // 8-bit index
output logic [4:0] out // 8-bit output vector
);
logic add;
always_comb begin
for (int i = 0; i < 4; i++) begin
if((in1[4:0]-2) == i)begin
add = (in2[in1[4:0]-1] & (in2[(i:0] != '0); //summary rounding
end
end
out = in1 + add;//summary of the final operation
endmodule
我试图实现的逻辑是 riscv-v 1.0 的舍入模式。
我已经尝试了几次尝试进行静态逻辑的测试,但我找不到解决问题的方法。我如何在硬件中实现这个逻辑。