此 VHDL 代码是否使分配发生冲突



在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;

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

允许使用这种编码方式。如果一个流程中有多个分配,则最后一个任务从前一个分配中"获胜"。这甚至是矢量的一部分。

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

  -- 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位首先设置为零。然后为一些位分配一个新值。

最新更新