趙 航 張文婷
1.三江學院電子信息工程學院 江蘇南京 210012
2.南京磐能電力科技股份有限公司 江蘇南京 210061
VHDL(Very high speed intergated circuit Hardware Description Language)是指超高速集成電路硬件描述語言。它用軟件編程的方式來描述電子系統(tǒng)的邏輯功能、電路結(jié)構和連接形式,與傳統(tǒng)的門級方式相比,它更適合大規(guī)模系統(tǒng)的設計。因此很多高校的信息技術、計算機技術等專業(yè)都開出了VHDL設計課程[1]。筆者在教學過程中發(fā)現(xiàn)學生學習VHDL語言時會受到已經(jīng)學習過的其他軟件語言的影響,對VHDL語言作為硬件語言的一些特性和語法問題理解不夠,往往會影響到對VHDL語言的靈活合理運用。本文結(jié)合多輪課程教學實踐,針對學生最難掌握的幾個問題做了深入探討。
學好VHDL的關鍵是充分理解VHDL語句和硬件電路的關系。 編寫VHDL,就是在描述一個電路,我們寫完一段程序后,應當對生成的電路有一些大體上的了解, 而不能用純軟件的設計思路來編寫硬件描述語言[2]。
下面以四選一數(shù)據(jù)選擇器的設計為例來加以說明。四選一數(shù)據(jù)選擇器是一種常用的組合邏輯電路,用VHDL語言設計比較簡單,可以用when_else語句實現(xiàn),也可以用with_select語句實現(xiàn),兩者仿真結(jié)果相同,但綜合的結(jié)果不同。具體情況如下:
【程序1】
使用Quartus II軟件對程序1進行編譯仿真,仿真結(jié)果如圖1所示。
圖1 程序1仿真結(jié)果
將程序1中的when_else語句實現(xiàn)改成with_select語句實現(xiàn),修改后的部分程序如下:
【程序2】
同樣使用Quartus II軟件對程序2進行編譯仿真,仿真結(jié)果與圖1完全相同。說明程序1和程序2都能完成四選一數(shù)據(jù)選擇器的功能,仿真結(jié)果一致。
但是如果對程序1和程序2進行綜合,得出它們對應的RTL電路,分別如圖2和圖3所示。從圖2和圖3的比較看,電路差別比較大。根據(jù)四選一數(shù)據(jù)選擇器的功能,應該是圖3的電路更合適。
圖2 程序1的RTL電路
圖3 程序2的RTL電路
綜合來看,雖然when_else語句和with_select_when語句都能實現(xiàn)四選一數(shù)據(jù)選擇器功能,但是實現(xiàn)的硬件電路完全不同,這就告訴我們在設計某一功能的電路時要盡量使用合適的語句來表達,這樣才能得到最優(yōu)的結(jié)果,而不能僅僅滿足于功能實現(xiàn)。因為這是硬件電路的設計,要考慮最后實現(xiàn)的電路的合理性。
組合電路和時序電路是數(shù)字電路系統(tǒng)的兩大種類,在設計中至少要用到它們中的一種或兩種都會用到,這就要求正確掌握它們各自的設計要領。在VHDL語言中,組合電路和時序電路是以完整條件語句和不完整條件語句來區(qū)別的,如果在組合電路設計中使用了不完整條件語句,會使設計結(jié)果出現(xiàn)意想不到的問題,影響設計的正確性,設計時要加以注意[3]。比如程序3是一個數(shù)值比較器的設計,數(shù)值比較器屬于組合電路,應該使用完整條件語句來描述,但是程序中if語句判斷了a>b和a<b兩種情況,漏掉了a=b的情況,因此構成不完整條件語句,所以其綜合的結(jié)果比較復雜,如圖4所示,電路包含多級邏輯電路和一個寄存器,使原本簡單的數(shù)值比較變得復雜了,不利于電路的實現(xiàn)。而程序4只是對程序3進行了簡單修改,使其成為完整條件語句,其綜合的結(jié)果如圖5所示。我們發(fā)現(xiàn),經(jīng)過這樣的改變,電路被大大簡化了,而且能夠正確實現(xiàn)數(shù)值比較的功能??梢娬`用不完整條件語句會給電路設計帶來很大的影響。同理,在時序電路中誤用完整條件語句也是不合適的。
【程序3】
圖4 程序3的RTL電路
【程序4】
圖5 程序4的RTL電路
在VHDL中,數(shù)據(jù)對象(Data objects)有3類:信號(signal)、變量(variable)和常量(constant)。變量和常量與軟件語言中的變量和常量的含義相似,而信號則具有更多的硬件特征,是硬件描述語言所特有的數(shù)據(jù)對象。由于信號和變量在使用上有很多相似的地方,但又存在本質(zhì)的區(qū)別,學生比較容易混淆,在設計中常常不注意區(qū)分它們的區(qū)別,造成錯誤[4]。在變量和信號的使用過程中,有時可以互換,有時候又不能互換。兩者從形式上差別并不大,所以學生在沒弄清其本質(zhì)區(qū)別前往往按照例子生搬硬套,這樣做有時候系統(tǒng)也能正常運轉(zhuǎn),但是在系統(tǒng)需要利用到變量和信號的根本特性時,錯誤地使用數(shù)據(jù)對象往往會導致系統(tǒng)的邏輯錯誤,使設計結(jié)果與預期有很大差距,而學生很難發(fā)現(xiàn)其中的錯誤。所以,如何使學生分清兩者,并正確的使用,成為影響VHDL語言教學的關鍵問題之一。
為了更好地區(qū)分信號和變量,需要通過一定數(shù)量的實例分析,通過對比,使學生對兩者之間的物理含義、使用范圍及值代入的區(qū)別有較明確的認識。下面給出用中間變量和信號表達四選一數(shù)據(jù)選擇器的VHDL源程序,從中可以看出信號、變量的定義和使用方法之間的不同以及它們對系統(tǒng)的影響。
【程序5】
程序5的仿真結(jié)果如圖6所示。從圖6中可以看出,輸出信號q并沒有得到預想的波形,而是未知數(shù)據(jù),這是因為muxval在程序中被定義為信號,而信號的含義是電路的實際硬件連接,因此對信號賦值存在延時[5]。故此在case語句中根據(jù)muxval值去選擇不同的信號進行輸出時,muxval的值還沒有產(chǎn)生,因此結(jié)果不對。為了產(chǎn)生正確的結(jié)果,對本程序,只需要把muxval的定義改為變量,其他地方做適當修改,則可得到如圖7所示的正確仿真結(jié)果。
圖6 程序5的仿真結(jié)果圖
圖7 仿真結(jié)果圖
在VHDL設計課程教學中,筆者特別注意上述幾個問題的講解和舉例說明,力求使學生對這些問題理解透徹,讓學生真正認識到運用VHDL語言進行電路設計,不僅要熟悉VHDL語言的基本語法和常用語句,還要對硬件描述語言的本質(zhì)有深刻的認識,對所設計的電路有深刻理解,在此基礎上才能更好地使用掌握這門硬件描述語言進行電路設計。
[1]朱奕丹.VHDL設計課程教學改革實踐[J].電氣電子教學學報,2007,29(2):22-23
[2]潘松,黃繼業(yè).EDA技術與VHDL[M].北京:清華大學出版社,2009
[3]夏炎,師衛(wèi).硬件描述語言與數(shù)字電路設計[J].電力學報,2009,24(2):156-158
[4]楊丹,樹林.VHDL中信號與變量的教學體會[J].電氣電子教學學報,2006,28(3):30-35
[5]龔蘭芳.VHDL硬件描述語言教學探討[J].廣東水利電力職業(yè)技術學院學報,2009(4):29-32.