你在暗示你的問題的地方與併發分配或順序語句無關。它與if和case之間的區別更多。在我們開始之前,讓我們瞭解一些等價物。併發有條件分配:
Y <= A when ASel = '1' else B when BSel = '1' else C ;
完全等效於一個過程用下面的代碼:
process(A, ASel, B, BSel, C)
begin
if ASel = '1' then
Y <= A ;
elsif BSel = '1' then
Y <= B ;
else
Y <= C ;
end if ;
end process ;
同樣併發選擇的分配:
With MuxSel select
Y <= A when "00", B when "01", C when others ;
是等同於用一個過程以下:
process(MuxSel, A, B , C)
begin
case MuxSel is
when "00" => Y <= A;
when "01" => Y <= B ;
when others => Y <= C ;
end case ;
end process ;
從編碼的角度來看,上面的順序形式比賦值形式有更多的編碼能力,因爲case和if允許代碼塊,其中賦值形式只賦值給一個信號。但除此之外,它們具有相同的語言限制並生成相同的硬件(與綜合工具相同)。此外,對於許多簡單的硬件問題,賦值表單運行良好,並且簡明地捕獲了問題。
所以,你的想法是否領先,真正歸結爲if和case之間的區別。如果在它們(或暗示)中具有多個「elsif」的語句(及其等價的條件賦值)傾向於創建優先級邏輯或至少級聯邏輯。在情況下(及其等效的選擇分配)傾向於非常適合多路複用器之類的事物,並且它們的邏輯結構往往更多地是平衡的樹結構。
有時候工具會重構一個if語句,使它與case語句等價。對於某些目標(特別是基於LUT的邏輯,如Xilinx和Altera),硬件效率方面的差異直到有足夠的「elsif」分支纔會顯示出來。
在VHDL-2008中,賦值形式也被允許在順序代碼中。除非沒有進程包裝,轉換是相同的。
你的問題是什麼? – mkrieger1
爲什麼選擇投票?...我編輯了這個職位 – mahmood