2015-05-19 130 views
0

我試圖從tdf(文本設計文件)轉換成一大塊代碼到vhdl。 在這個tdf文件中實現了一個狀態機。TDF文件轉換爲VHDL

Y <= state0 # state1 # state2 # state3 // start at state 0 and stop at state 3 

如何在VHDL中編寫上述語句,假設我已定義了所有狀態。 有什麼建議嗎?

回答

1

Text Design File (.tdf)

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沒有賦值運算符,賦值是基本運算,運算符可能超載,基本運算不能)

轉換此賦值語句取決於Ystate0是否爲相同類型。

如果它們是相同的類型:

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設計師。