我认为错误是“范围必须恒定”的错误!
我要执行的操作是这样:
给出一个8位有符号/无符号向量和VARIABLE点,如: b7b6b5b4b3b2.b1b0或b7b6b5b4b3.b2b1b0
我必须在整数部分加上第一个小数位,例如:
b7b6b5b4b3b2 + b1表示第一个单词, b7b6b5b4b3 + b2。
小数位数由一个名为“ port_scale”宽C_SHIFT_BITS的端口给出。
这是我的代码,我想生成所有组合:
C_SHIFT_BITS = 4;
always_comb begin
for (int k=1; k<2**(C_SHIFT_BITS-1); k++) begin
dout_temp[k-1][8:0] = din[(k-1)+:8-k] + din[(k-1)+:1]
end
for (int k=1; k<2**(C_SHIFT_BITS-1); k++) begin
if (port_scale == k) begin
dout = dout_temp[k][8:0];
end
end
end
您是否有其他解决方案或方法可以对此进行编码?我不会编写大量的case语句,因为参数C_SHIFT_BITS可以是任何数字,小于din的宽度。 for循环应能解决非法din [port_scale ...],但无法正常工作。
谢谢
答案 0 :(得分:0)
我认为您只需要移动k
dout_temp[k-1][8:0] = (din >> k-1) + din[k];
您还可以摆脱第二个for循环并执行
dout = dout_temp[port_scale][8:0];