我試圖從tdf(文本設計文件)轉換成一大塊代碼到vhdl。 在這個tdf文件中實現了一個狀態機。TDF文件轉換爲VHDL
Y <= state0 # state1 # state2 # state3 // start at state 0 and stop at state 3
如何在VHDL中編寫上述語句,假設我已定義了所有狀態。 有什麼建議嗎?
我試圖從tdf(文本設計文件)轉換成一大塊代碼到vhdl。 在這個tdf文件中實現了一個狀態機。TDF文件轉換爲VHDL
Y <= state0 # state1 # state2 # state3 // start at state 0 and stop at state 3
如何在VHDL中編寫上述語句,假設我已定義了所有狀態。 有什麼建議嗎?
ASCII文本文件(擴展名爲.tdf)寫在Altera硬件描述語言(AHDL)。
AHDL是一種VHDL語法子集,疊加在大多數ABEL語言語法上(這更像Verilog/C)。
從ABEL-HDL參考手冊ABEL-HDL Reference Manual,運算符,表達式和方程式第24頁和表1-3邏輯運算符我們看到#是一個OR運算符。
有一個AHDL手冊見Altera AHDL Language Reference,見表3-1。 AHDL符號(第3部分,共3部分)文件第96頁(PDF第117頁),其中我們還發現#是一個OR運算符(也可用OR保留字表示,見表3-3。算術運算符和用於算術的比較器表達式(2/2),文件第104頁(PDF第125頁)。
也見表3.4。邏輯運算符用於布爾表達式,文件第107頁(PDF第128頁)。
從另外請注意您的問題「< =」不是AHDL或ABEL中的賦值運算符(VHDL沒有賦值運算符,賦值是基本運算,運算符可能超載,基本運算不能)
轉換此賦值語句取決於Y
和state0
是否爲相同類型。
如果它們是相同的類型:
Y <= state0 or state1 or state2 or state3;
而且你可以信任的綜合工具,如果能夠優化。
如果他們是不同類型的聲明是必要的。 (歷史上信號的ABEL標識符具有相同的匿名類型,問題是您是否聲明瞭不同的類型)。
AHDL不支持用戶定義的類型,但允許枚舉狀態名稱。
這將意味着沿
type state is (state0, state1, state2, state3, state4,...);
signal sm: state;
線的狀態類型和要求或者有條件分配或case語句。
Y <= '1' when sm = state0 or sm = state1 or sm = state2 or
sm = state3 else
'0';
在一個地方適合順序語句:
case sm is
when state0 | state1 | state2 | state2 =>
Y <= '1';
when others =>
Y <= '0';
end case;
或與if語句在一個地方適合順序語句:
if sm = state0 or sm = state1 or sm = state2 or sm = state3 then
Y <= '1';
else
Y <= '0';
end if;
也看到這個VHDL Reference Manual,附錄C. VHDL爲ABEL-HDL設計師。