【问题标题】:Is this VHDL code making an assignment conflict?这个 VHDL 代码会造成分配冲突吗?
【发布时间】:2019-04-10 13:31:08
【问题描述】:

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

【问题讨论】:

    标签: vhdl assign


    【解决方案1】:

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

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

    我经常用这个来设置默认值:

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

    【讨论】:

    • 是同一个过程。自动编辑器改变了它。我已经阅读了很多关于 VHDL 的作品,并且很多关于 else 的其他条款涵盖了底部的所有基础。我会永远记得,:最后一个'赢'”。
    猜你喜欢
    • 2019-02-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-12
    • 1970-01-01
    • 2013-12-31
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多