此VHDL代码是否存在赋值冲突?

此VHDL代码是否存在赋值冲突?,vhdl,assign,Vhdl,Assign,在VHDL和其他硬件语言中,我的理解是,一个进程中真实逻辑的所有条件都同时发生。我有一个std_逻辑标志变量,在我看来似乎有冲突。我在出版物中看到了这段代码,我不理解它。似乎可以为标志变量指定两个值。这是坏代码还是我遗漏了什么?(进程有一些输入触发器,但没有CLK。) 变量名已更改以保护无辜者 ... process(op_state, ...) begin FLAG <= '0'; case op_state is when STATE_SLEEP

在VHDL和其他硬件语言中,我的理解是,一个进程中真实逻辑的所有条件都同时发生。我有一个std_逻辑标志变量,在我看来似乎有冲突。我在出版物中看到了这段代码,我不理解它。似乎可以为标志变量指定两个值。这是坏代码还是我遗漏了什么?(进程有一些输入触发器,但没有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;
。。。
过程(操作状态,…)
开始
旗帜

FLAG我将假设两个任务都在同一个过程中

这种编码风格是允许的。如果一个流程中有多个分配,则最后一个分配将从上一个分配中“获胜”。这甚至是向量的一部分

我经常使用此设置默认值:

  -- 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;
  ... 
--默认将所有读取位设置为零
轴心数据“0”);
案例(radrs)为

当X“00”=>axil_rdata(7到0)axil_rdata(15到0)axil_rdata时,这是相同的过程。自动编辑器更改了它。我已经读了很多关于VHDL的著作,很多人都在谈论另一个包含所有底层基础的条款。我将永远记住:“最后一个‘赢’”。