以下是从源代码中提取的几行代码。 当我尝试构建代码时,select中缺少" Enumerated值U"错误出现,我不明白为什么。我知道,STD_LOGIC有9个州(' U'' X',' 0',' 1',' Z',' W',' L',' H',' - ')。不知如何掩饰你。
entity cpu is
port (
DATA_ADDR : out std_logic_vector(12 downto 0);
-- a few more ports
);
end cpu;
architecture behavioral of cpu is
signal prog_data : STD_LOGIC_VECTOR(12 downto 0);
signal uk_data : STD_LOGIC_VECTOR(12 downto 0);
signal sel : STD_LOGIC;
-- a few more signals
begin
with sel select
DATA_ADDR <= prog_data when '0', -- error in this section
uk_data when '1';
--a few lines of code
end behavioral;
答案 0 :(得分:3)
两个(更简单)的选择:
如果您关心其他状态(可能是sim?),请明确处理:
with sel select
DATA_ADDR <= prog_data when '0',
uk_data when '1',
(others => 'X') when others;
如果你没有做出假设:
with sel select
DATA_ADDR <= prog_data when '0',
uk_data when others,
或者为了更简单的代码,使用条件赋值而不是选定的赋值:
DATA_ADDR <= prog_data when sel = '0' else uk_data;
所选分配类似于顺序case
语句 - 必须涵盖每个可能的值,并且others
可用于捕获您不需要明确处理的值。条件赋值类似于顺序if ... else
,您可以在其中处理您想要的任何条件 - 不要求您为每个可能的条件都有分支。