我的架构中有以下声明:
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.
当所有选择在编译时明显是常量时。
答案 0 :(得分:0)
这是我发现的。希望它能帮助下一个寻找这个答案的人:
警告是由于编译器(VHDL-2008之前)在架构级别定义的常量在进程内不被视为静态的事实引起的。为了实现这一点,必须在流程的声明块中定义它们。
一种解决方案是使用VHDL 2008( vcom 中的-2008
选项)进行编译。另一个选择是将nocasestaticerror
选项传递给 vcom ,这将取消警告。