select中缺少值U.

时间:2014-12-18 17:14:41

标签: hardware vhdl

以下是从源代码中提取的几行代码。 当我尝试构建代码时,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;

1 个答案:

答案 0 :(得分:3)

两个(更简单)的选择:

  1. 如果您关心其他状态(可能是sim?),请明确处理:

    with sel select
      DATA_ADDR <= prog_data when '0',
                   uk_data   when '1',
                   (others => 'X') when others;
    
  2. 如果你没有做出假设:

    with sel select
      DATA_ADDR <= prog_data when '0',
                   uk_data   when others,
    
  3. 或者为了更简单的代码,使用条件赋值而不是选定的赋值:

    DATA_ADDR <= prog_data when sel = '0' else uk_data;
    

    所选分配类似于顺序case语句 - 必须涵盖每个可能的值,并且others可用于捕获您不需要明确处理的值。条件赋值类似于顺序if ... else,您可以在其中处理您想要的任何条件 - 不要求您为每个可能的条件都有分支。