此VHDL代码是否导致分配冲突?

时间:2019-04-10 13:31:09

标签: vhdl assign

在VHDL和其他硬件语言中,据我了解,一个过程中来自真实逻辑的所有条件都是同时发生的。我有一个std_logic FLAG变量,对我来说似乎有冲突。我在出版物中看到了此代码,但我听不懂。看起来可以为FLAG变量分配两个值。这是错误的代码还是我错过了什么? (该进程具有一些输入触发器,但没有CLK。) 变量名称已更改以保护无辜者。

... 

process(op_state, ...)
begin
    FLAG <= '0';

    case op_state is
        when STATE_SLEEP =>
            FLAG <= '1';

    when    some other cases not containing FLAG

    end case;
end process;

1 个答案:

答案 0 :(得分:2)

我将假定两个作业都在同一过程中。

允许使用该编码样式。如果一个过程中有多个分配,则最后一个“胜出”。这甚至是向量的一部分。

我经常使用它来设置默认值:

  -- Default set all read bits to zero 
  axil_rdata<= (others => '0');

  case (radrs) is                                     
  when X"00" => axil_rdata( 7 downto 0) <= control;   
  when X"04" => axil_rdata(15 downto 0) <= status;
  when X"08" => axil_rdata              <= counter;
  ... 

因此,axil_rdata的所有位都首先设置为零。然后为某些位分配一个新值。