我在想,如何按照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 condition1 THEN
some_signal <= "01";
ELSE
some_signal <= (others => '0');
END IF;
IF condition2 THEN
some_signal <= "10";
ELSE
some_signal <= (others => '0');
END IF;
IF condition3 THEN
some_signal <= "11";
ELSE
some_signal <= (others => '0');
END IF;
...
...
END PROCESS;
...
...
END Behavioral;
起初我以爲,這並沒有什麼意義,因爲some_signal
是在同一時間分配多個值。 Vivado是無投訴,雖然它的合成和有關進程的一個小小的研究之後,我想這可能實際行爲等同於以下:
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;
是這個概念是否正確?如果不是,第一個代碼示例實際上做了什麼?
「最後分配勝」 ......扭轉像你一樣的條件是正確的......然而作爲最後'if'語句具有雙臂的分配,它會覆蓋前面的語句:你永遠不會看到它們的執行。輸出只能是「11」或「00」。關鍵術語理解:增量循環,推遲分配。 –
@BrianDrummond:謝謝,那正是我想知道的。如果壓倒前面的ifs,我沒有想過最後一次,但考慮一下,這很明顯。你爲什麼不發表這個評論作爲答案? – FSMaxB