《電子技術(shù)應(yīng)用》
您所在的位置:首頁 > 可編程邏輯 > 設(shè)計應(yīng)用 > 數(shù)字系統(tǒng)設(shè)計中VHDL語言設(shè)計問題探討
數(shù)字系統(tǒng)設(shè)計中VHDL語言設(shè)計問題探討
謝正光
摘要: 從描述方法、設(shè)計規(guī)則、時序等方面分析了用硬件描述語言VHDL在EDA設(shè)計中容易出現(xiàn)問題的原因,并提出了相應(yīng)的解決方案。
關(guān)鍵詞: 開發(fā)工具 VHDL EDA
Abstract:
Key words :

  摘  要: 從描述方法、設(shè)計規(guī)則、時序等方面分析了用硬件描述語言VHDLEDA設(shè)計中容易出現(xiàn)問題的原因,并提出了相應(yīng)的解決方案。
  關(guān)鍵詞: VHDL語言  數(shù)字系統(tǒng)設(shè)計  問題

   VHDL語言作為一個系統(tǒng)設(shè)計語言的工業(yè)標(biāo)準(zhǔn)已被廣大的硬件設(shè)計者所接受。但因其具有龐大、繁瑣以及易于出錯的特性[1][2],且在實際設(shè)計過程中,每個設(shè)計工程師對語言規(guī)則、電路行為的理解程度和編程風(fēng)格不同,造成同樣的系統(tǒng)功能綜合出來的電路結(jié)構(gòu)往往大相徑庭,其電路的復(fù)雜程度和時延特性也差異較大,有時某些臃腫的電路還會產(chǎn)生難以預(yù)料的問題。因此,有必要對在VHDL設(shè)計中如何簡化電路結(jié)構(gòu)及優(yōu)化電路設(shè)計的問題進(jìn)行深入探討。
1   設(shè)計問題探討
1.1 描述方法對電路結(jié)構(gòu)的影響

  用VHDL語言進(jìn)行電路設(shè)計,其最終綜合出的電路的復(fù)雜程度除取決于該設(shè)計所要求功能的難易程度外,還受設(shè)計工程師對電路描述方法和設(shè)計規(guī)則理解程度的影響。最常見的使電路復(fù)雜化的原因之一是設(shè)計中存在許多本不必要的類似鎖存器的結(jié)構(gòu)而導(dǎo)致電路復(fù)雜、工作速度低,且由于時序問題而導(dǎo)致不可預(yù)料的后果。
  VHDL語言中引入寄存器的是Wait和If語句。所以如果要描述一個組合電路和時序電路混合的系統(tǒng),可以將描述時序的部分放在具有邊沿檢測條件的If或Wait語句的進(jìn)程中,而將描述組合電路的語句放在普通進(jìn)程中。在此普通進(jìn)程中,應(yīng)盡量使用When...Else來代替If結(jié)構(gòu)或If語句中必須帶有的Else。典型電路是FSM(有限狀態(tài)機(jī))電路,建議用3個進(jìn)程來描述。具體如下:

1.2 毛刺信號
  任何組合電路都可能是潛在毛刺信號的發(fā)生器。當(dāng)毛刺信號影響后續(xù)電路時,整個設(shè)計就只能宣告失敗。因此,當(dāng)后續(xù)電路對組合電路輸出的毛刺敏感時,最好的辦法是將此輸出進(jìn)行鎖存后再輸出到下一級,如圖1所示。

 

1.3 時  序
  在原始設(shè)計電路中,應(yīng)充分考慮在每一步時序上留有如圖2所示的充分裕量,以避免由于電壓、溫度和工藝等變化出現(xiàn)時序上的問題。


1.4 時鐘電路
  若時鐘電路設(shè)計不當(dāng),在環(huán)境因素(如溫度、電壓等)變化時,會導(dǎo)致電路邏輯混亂。時鐘電路設(shè)計過程中,建議盡可能使用如圖3所示的全局時鐘,少用門控時鐘,不用多級時鐘、級聯(lián)時鐘和多時鐘網(wǎng)絡(luò)。使用門控時鐘時要求門控時鐘只能由單個的“與門”或“或門”構(gòu)成,且門的輸入信號中只能有1個信號作為時鐘信號。最好的辦法是將門控時鐘改為全局時鐘,以改善設(shè)計電路的可靠性,如圖4、圖5所示。并且用控制門控時鐘的控制信號作為觸發(fā)器的使能信號或用其控制輸入數(shù)據(jù)。


1.5 異步邏輯
  EDA(Electronics Design Automation)設(shè)計中,由EDA系統(tǒng)自動完成布線。特別是在FPGA設(shè)計中,為了均衡邏輯塊的資源,信號在整個芯片內(nèi)部經(jīng)過的門數(shù)可能并非與邏輯表達(dá)式中所期望的一致,有時甚至無法正確估計某個信號的延時。因而常規(guī)的諸如利用增加冗余項或增加慣性延時環(huán)節(jié)來消除異步電路帶來的冒險方法均不一定能起作用。所以數(shù)字系統(tǒng)設(shè)計中盡量少用異步電路,或用選通脈沖在信號作用時間上加以控制來避開產(chǎn)生冒險的尖峰。
1.6 異步輸入
  許多輸入要求各異步系統(tǒng)之間進(jìn)行同步通信,或者同步系統(tǒng)需要異步輸入控制。如果異步輸入不能滿足建立時鐘和保持時鐘的限制,則會導(dǎo)致受控的同步系統(tǒng)出現(xiàn)邏輯混亂。
  如果是寄存器的異步置位或清零端,最好用全局的置位或清零控制信號驅(qū)動;對于其他控制輸入可以插入D觸發(fā)器來解決異步輸入不穩(wěn)定的問題。
2  結(jié)  論
  通過以上討論可知,用VHDL語言進(jìn)行電路設(shè)計時,涉及到VHDL語言的使用方法和對設(shè)計的理解程度。因此在編程前首先要對整個設(shè)計進(jìn)行較深入的了解,科學(xué)地設(shè)計規(guī)劃,在進(jìn)行具體設(shè)計時應(yīng)注意以下問題:
  (1)保證時鐘無毛刺,盡量利用全局時鐘,少用門控時鐘。(2)盡量使用全局置位復(fù)位信號。(3)寄存所有對毛刺敏感的組合輸出,組合電路復(fù)雜時可采用“流水”技術(shù)。(4)同步所有異步輸入信號,盡量不用異步電路。(5)對同步時序電路應(yīng)消除“滯留”狀態(tài)。(6)為每一步時序留有充分的裕度等。
參考文獻(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
 

此內(nèi)容為AET網(wǎng)站原創(chuàng),未經(jīng)授權(quán)禁止轉(zhuǎn)載。