此 VHDL 代码是否造成赋值冲突?
Is this VHDL code making an assignment conflict?
在 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;
我假设这两个任务在同一个过程中。
允许这种编码风格。如果一个过程中有多个分配,则上一个过程中的最后一个 'wins'。这甚至是向量的一部分。
我经常用这个来设置默认值:
-- 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 和其他硬件语言中,我的理解是一个过程中来自真实逻辑的所有条件同时发生。我有一个 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;
我假设这两个任务在同一个过程中。
允许这种编码风格。如果一个过程中有多个分配,则上一个过程中的最后一个 'wins'。这甚至是向量的一部分。
我经常用这个来设置默认值:
-- 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
的所有位都首先设置为零。然后一些位被分配一个新值。