我无法弄清楚如何将此VHDL代码翻译成Verilog。
v_Upper := r_Digit_Index*4 + 3;
v_Lower := r_Digit_Index*4;
v_BCD_Digit := unsigned(r_BCD(v_Upper downto v_Lower));
if v_BCD_Digit > 4 then
v_BCD_Digit := v_BCD_Digit + 3;
end if;
r_BCD(v_Upper downto v_Lower) <= std_logic_vector(v_BCD_Digit);
如果我在Verilog中尝试这样做,我会得到错误,&#34;范围必须由常量表达式绑定。&#34;我理解错误,但我无法找到解决这个问题的好方法。基本上我想解析r_BCD的特定半字节,如果需要更新则更新它,然后将其写回我从中提取的相同位置。 2D阵列会更好吗?
这是导致问题的Verilog代码行:+
r_BCD[r_Digit_Index*4 + 3:r_Digit_Index*4] <= w_BCD_Digit + 3;
答案 0 :(得分:1)
在verilog中你不能有这样的变量选择。
即不允许r_BCD[r_Digit_Index*4 + 3:r_Digit_Index*4]
。
自2001年以来,您可以使用特殊的+:
语法进行变量部分选择。
例如:
r_BCD[r_Digit_Index*4 +: 4]
//[ index +: width]
有关详细信息,请参阅Sutherland 2001 part 1-48。