摘 要: 從描述方法,、設(shè)計(jì)規(guī)則、時(shí)序等方面分析了用硬件描述語言VHDL在EDA設(shè)計(jì)中容易出現(xiàn)問題的原因,,并提出了相應(yīng)的解決方案,。
關(guān)鍵詞: VHDL語言 數(shù)字系統(tǒng)設(shè)計(jì) 問題
VHDL語言作為一個(gè)系統(tǒng)設(shè)計(jì)語言的工業(yè)標(biāo)準(zhǔn)已被廣大的硬件設(shè)計(jì)者所接受。但因其具有龐大,、繁瑣以及易于出錯(cuò)的特性[1][2],,且在實(shí)際設(shè)計(jì)過程中,每個(gè)設(shè)計(jì)工程師對(duì)語言規(guī)則,、電路行為的理解程度和編程風(fēng)格不同,,造成同樣的系統(tǒng)功能綜合出來的電路結(jié)構(gòu)往往大相徑庭,其電路的復(fù)雜程度和時(shí)延特性也差異較大,,有時(shí)某些臃腫的電路還會(huì)產(chǎn)生難以預(yù)料的問題,。因此,有必要對(duì)在VHDL設(shè)計(jì)中如何簡(jiǎn)化電路結(jié)構(gòu)及優(yōu)化電路設(shè)計(jì)的問題進(jìn)行深入探討,。
1 設(shè)計(jì)問題探討
1.1 描述方法對(duì)電路結(jié)構(gòu)的影響
用VHDL語言進(jìn)行電路設(shè)計(jì),,其最終綜合出的電路的復(fù)雜程度除取決于該設(shè)計(jì)所要求功能的難易程度外,還受設(shè)計(jì)工程師對(duì)電路描述方法和設(shè)計(jì)規(guī)則理解程度的影響,。最常見的使電路復(fù)雜化的原因之一是設(shè)計(jì)中存在許多本不必要的類似鎖存器的結(jié)構(gòu)而導(dǎo)致電路復(fù)雜,、工作速度低,且由于時(shí)序問題而導(dǎo)致不可預(yù)料的后果,。
VHDL語言中引入寄存器的是Wait和If語句,。所以如果要描述一個(gè)組合電路和時(shí)序電路混合的系統(tǒng),可以將描述時(shí)序的部分放在具有邊沿檢測(cè)條件的If或Wait語句的進(jìn)程中,,而將描述組合電路的語句放在普通進(jìn)程中,。在此普通進(jìn)程中,應(yīng)盡量使用When...Else來代替If結(jié)構(gòu)或If語句中必須帶有的Else,。典型電路是FSM(有限狀態(tài)機(jī))電路,,建議用3個(gè)進(jìn)程來描述。具體如下:
1.2 毛刺信號(hào)
任何組合電路都可能是潛在毛刺信號(hào)的發(fā)生器,。當(dāng)毛刺信號(hào)影響后續(xù)電路時(shí),,整個(gè)設(shè)計(jì)就只能宣告失敗。因此,,當(dāng)后續(xù)電路對(duì)組合電路輸出的毛刺敏感時(shí),,最好的辦法是將此輸出進(jìn)行鎖存后再輸出到下一級(jí),,如圖1所示。
1.3 時(shí) 序
在原始設(shè)計(jì)電路中,,應(yīng)充分考慮在每一步時(shí)序上留有如圖2所示的充分裕量,,以避免由于電壓、溫度和工藝等變化出現(xiàn)時(shí)序上的問題,。
1.4 時(shí)鐘電路
若時(shí)鐘電路設(shè)計(jì)不當(dāng),,在環(huán)境因素(如溫度、電壓等)變化時(shí),,會(huì)導(dǎo)致電路邏輯混亂,。時(shí)鐘電路設(shè)計(jì)過程中,建議盡可能使用如圖3所示的全局時(shí)鐘,,少用門控時(shí)鐘,,不用多級(jí)時(shí)鐘、級(jí)聯(lián)時(shí)鐘和多時(shí)鐘網(wǎng)絡(luò),。使用門控時(shí)鐘時(shí)要求門控時(shí)鐘只能由單個(gè)的“與門”或“或門”構(gòu)成,,且門的輸入信號(hào)中只能有1個(gè)信號(hào)作為時(shí)鐘信號(hào)。最好的辦法是將門控時(shí)鐘改為全局時(shí)鐘,,以改善設(shè)計(jì)電路的可靠性,,如圖4、圖5所示,。并且用控制門控時(shí)鐘的控制信號(hào)作為觸發(fā)器的使能信號(hào)或用其控制輸入數(shù)據(jù),。
1.5 異步邏輯
EDA(Electronics Design Automation)設(shè)計(jì)中,由EDA系統(tǒng)自動(dòng)完成布線,。特別是在FPGA設(shè)計(jì)中,,為了均衡邏輯塊的資源,信號(hào)在整個(gè)芯片內(nèi)部經(jīng)過的門數(shù)可能并非與邏輯表達(dá)式中所期望的一致,,有時(shí)甚至無法正確估計(jì)某個(gè)信號(hào)的延時(shí),。因而常規(guī)的諸如利用增加冗余項(xiàng)或增加慣性延時(shí)環(huán)節(jié)來消除異步電路帶來的冒險(xiǎn)方法均不一定能起作用。所以數(shù)字系統(tǒng)設(shè)計(jì)中盡量少用異步電路,,或用選通脈沖在信號(hào)作用時(shí)間上加以控制來避開產(chǎn)生冒險(xiǎn)的尖峰,。
1.6 異步輸入
許多輸入要求各異步系統(tǒng)之間進(jìn)行同步通信,或者同步系統(tǒng)需要異步輸入控制,。如果異步輸入不能滿足建立時(shí)鐘和保持時(shí)鐘的限制,,則會(huì)導(dǎo)致受控的同步系統(tǒng)出現(xiàn)邏輯混亂。
如果是寄存器的異步置位或清零端,,最好用全局的置位或清零控制信號(hào)驅(qū)動(dòng),;對(duì)于其他控制輸入可以插入D觸發(fā)器來解決異步輸入不穩(wěn)定的問題。
2 結(jié) 論
通過以上討論可知,,用VHDL語言進(jìn)行電路設(shè)計(jì)時(shí),,涉及到VHDL語言的使用方法和對(duì)設(shè)計(jì)的理解程度,。因此在編程前首先要對(duì)整個(gè)設(shè)計(jì)進(jìn)行較深入的了解,科學(xué)地設(shè)計(jì)規(guī)劃,,在進(jìn)行具體設(shè)計(jì)時(shí)應(yīng)注意以下問題:
(1)保證時(shí)鐘無毛刺,,盡量利用全局時(shí)鐘,少用門控時(shí)鐘,。(2)盡量使用全局置位復(fù)位信號(hào),。(3)寄存所有對(duì)毛刺敏感的組合輸出,組合電路復(fù)雜時(shí)可采用“流水”技術(shù),。(4)同步所有異步輸入信號(hào),,盡量不用異步電路,。(5)對(duì)同步時(shí)序電路應(yīng)消除“滯留”狀態(tài),。(6)為每一步時(shí)序留有充分的裕度等。
參考文獻(xiàn)
1 IEEE Standard VHDL Language Reference Module.IEEE,,Std 1076-1993.1993
2 IEEE Standard VHDL Mathermatical Packages.IEEE,,Std 1076.2-1996.1996