Verilog范围必须以常量表达为界

时间:2014-08-04 17:05:22

标签: vhdl verilog

我无法弄清楚如何将此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;

1 个答案:

答案 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