VHDL常量数组案例选择

时间:2017-02-13 18:53:13

标签: vhdl modelsim

我的架构中有以下声明:

architecture behavioral of my_widget is
    type register_bank_t is array(1 to 4) of std_logic_vector(31 downto 0); 
    -- register addresses
    constant address : register_bank_t := (
        x"0000_1081", -- 1 
        x"0000_1082", -- 2 
        x"0000_1083", -- 3 
        x"0000_1084"  -- 4 
    );
..

然后,在同一架构内的一个过程中,我这样做:

case bus_addr is
    when address(1) =>
        r_output_value <= reg(1);
    when address(2) =>
        r_output_value <= reg(2);
    when address(3) =>
        r_output_value <= reg(3);
    when address(4) =>
        r_output_value <= reg(4);
    when others =>
        r_output_value <= (others => '0'); 
end case;

我无法弄清楚为什么Modelsim会给我以下警告:

(vcom-1937) Choice in CASE statement alternative must be locally static.

当所有选择在编译时明显是常量时。

1 个答案:

答案 0 :(得分:0)

这是我发现的。希望它能帮助下一个寻找这个答案的人:

警告是由于编译器(VHDL-2008之前)在架构级别定义的常量在进程内不被视为静态的事实引起的。为了实现这一点,必须在流程的声明块中定义它们。

一种解决方案是使用VHDL 2008( vcom 中的-2008选项)进行编译。另一个选择是将nocasestaticerror选项传递给 vcom ,这将取消警告。