Vhdl 进程内信号的顺序赋值是如何工作的

Vhdl 进程内信号的顺序赋值是如何工作的,vhdl,Vhdl,我想知道,在VHDL中如何处理进程内部相同信号的顺序赋值 我见过如下代码: ENTITY some_entity IS ... ... END some_entity; ARCHITECTURE Behavioral OF some_entity IS SIGNAL some_signal : STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN PROCESS (clk) ... ... IF condition3 THEN

我想知道,在VHDL中如何处理进程内部相同信号的顺序赋值

我见过如下代码:

ENTITY some_entity IS
    ...
    ...
END some_entity;

ARCHITECTURE Behavioral OF some_entity IS
    SIGNAL some_signal : STD_LOGIC_VECTOR(1 DOWNTO 0);
BEGIN PROCESS (clk)
    ...
    ...
    IF condition3 THEN
        some_signal <= "11";
    ELSIF condition 2 THEN
        some_signal <= "10";
    ELSIF condition1 THEN
        some_signal <= "01";
    ELSE
        some_signal <= (others => '0');
    END IF;
    ...
    ...
END PROCESS;
...
...
END Behavioral;
实体某些实体是
...
...
结束某个实体;
某些实体的架构行为是
一些信号:标准逻辑向量(1到0);
开始进程(clk)
...
...
如果条件1那么
一些信号“最后一次分配获胜”。。。像你那样改变情况是正确的。。。但是,由于最后一个if语句在两个分支中都有赋值,它将覆盖前面的两个语句:您将永远看不到它们的执行(除非由于其他条件而没有执行)

输出将仅为
“11”
“00”

需要理解的关键术语:增量周期、延期任务


你可能会发现我类似的问题对你的背景很有用。理解信号的用途非常关键——它们是VHDL如何解决进程间通信问题的。

“最后一次分配获胜”。。。像你那样改变情况是正确的。。。但是,由于最后一个
if
语句在两个分支中都有赋值,它将覆盖前面的两个语句:您将永远看不到它们的执行。输出将仅为
“11”
“00”
。需要理解的关键术语:增量周期,推迟的任务。@BrianDrummond:谢谢,这正是我想知道的。我没有想到最后一个if会覆盖前面的ifs,但是仔细想想,这是很明显的。你为什么不把这条评论作为一个答案发表呢?在问这个问题之前,我确实读过那个“标准答案”,但它没有明确说明信号的赋值可以在进程的一次运行中被覆盖。再次感谢您的回答。在一个被称为“投影输出波形”的过程中,分配的每个信号都有一个按时间顺序排列的预定值队列。对于任何特定的模拟时间,它只保留一个条目。在某个特定时间或更早的时间(如果存在)安排一个值来取代预测值的赋值。有关详细说明,请参见IEEE Std 1076-2008 10.5.2.2执行简单赋值语句。