VHDL常量数组案例选择

VHDL constant array case choice

我的架构中有以下声明:

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.

当所有的选择在编译时都是明确的常量。

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

该警告是由于编译器(VHDL-2008 之前)在进程中不认为在体系结构级别定义的常量是局部静态的。为了实现这一点,它们必须在进程的声明块中定义。

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