《數(shù)字電路與系統(tǒng)設(shè)計(jì) 》課件第8章_第1頁
《數(shù)字電路與系統(tǒng)設(shè)計(jì) 》課件第8章_第2頁
《數(shù)字電路與系統(tǒng)設(shè)計(jì) 》課件第8章_第3頁
《數(shù)字電路與系統(tǒng)設(shè)計(jì) 》課件第8章_第4頁
《數(shù)字電路與系統(tǒng)設(shè)計(jì) 》課件第8章_第5頁
已閱讀5頁,還剩222頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

第8章電子設(shè)計(jì)自動(dòng)化8.1EDA概述8.2硬件描述語言VHDL初步8.3VHDL設(shè)計(jì)實(shí)例8.4

QuartusⅡ開發(fā)系統(tǒng)8.1EDA概述EDA就是以計(jì)算機(jī)為工作平臺(tái)、以EDA軟件工具為開發(fā)環(huán)境、以硬件描述語言為設(shè)計(jì)語言、以ASIC為實(shí)現(xiàn)載體的電子產(chǎn)品自動(dòng)化設(shè)計(jì)過程,它包括半導(dǎo)體工藝設(shè)計(jì)自動(dòng)化、可編程邏輯器件設(shè)計(jì)自動(dòng)化、電子系統(tǒng)設(shè)計(jì)自動(dòng)化、印刷電路板(PrintedCircuitBoard)PCB設(shè)計(jì)自動(dòng)化、仿真測試、故障診斷以及形式驗(yàn)證自動(dòng)化。需要說明的是,這里所講的是狹義的EDA,沒有包括模擬電路的設(shè)計(jì)自動(dòng)化。EDA作為一門嶄新的學(xué)科,它的知識(shí)體系結(jié)構(gòu)為:①現(xiàn)代電子設(shè)計(jì)理論;②可編程邏輯器件原理、結(jié)構(gòu)及應(yīng)用;③硬件描述語言;④EDA工具的開發(fā)和應(yīng)用;⑤EDA設(shè)計(jì)方法論;⑥EDA的應(yīng)用及實(shí)踐。8.1.1EDA的發(fā)展概況

集成電路技術(shù)的發(fā)展不斷對(duì)EDA技術(shù)提出新的要求,對(duì)EDA技術(shù)的發(fā)展起了巨大的推動(dòng)作用。從20世紀(jì)60年代中期開始,人們就不斷地開發(fā)出各種計(jì)算機(jī)輔助設(shè)計(jì)工具來幫助設(shè)計(jì)人員進(jìn)行集成電路和電子系統(tǒng)的設(shè)計(jì)。近40年來,EDA技術(shù)大致經(jīng)歷了計(jì)算機(jī)輔助設(shè)計(jì)CAD(ComputerAidedDesign)、計(jì)算機(jī)輔助工程CAE(ComputerAidedEngineering)和電子系統(tǒng)設(shè)計(jì)自動(dòng)化ESDA(ElectronicSystemDesignAutomation)三個(gè)發(fā)展階段。

1.CAD階段(20世紀(jì)60年代中期~20世紀(jì)80年代初期)

20世紀(jì)70年代,隨著中、小規(guī)模集成電路的開發(fā)和應(yīng)用,傳統(tǒng)的手工制圖設(shè)計(jì)印刷電路板和集成電路的方法已無法滿足設(shè)計(jì)精度和效率的要求,于是工程師們開始進(jìn)行二維平面圖形的計(jì)算機(jī)輔助設(shè)計(jì),這樣就產(chǎn)生了第一代EDA工具,設(shè)計(jì)者也從繁雜、機(jī)械的計(jì)算、布局和布線工作中解放了出來。但在EDA發(fā)展的初始階段,EDA工具的供應(yīng)商只有幾家,產(chǎn)品幾乎全部面向PCB設(shè)計(jì)、電路模擬或IC版圖設(shè)計(jì)。例如,目前常用的PCB布線軟件Protel的早期版本Tango、用于電路模擬的SPICE軟件以及后來產(chǎn)品化的IC版圖編輯與設(shè)計(jì)規(guī)則檢查系統(tǒng)等軟件,都是這個(gè)時(shí)期的產(chǎn)品。20世紀(jì)80年代初,隨著集成電路規(guī)模的增大,EDA技術(shù)有了較快的發(fā)展。更多的軟件公司,如當(dāng)時(shí)的Mentor公司、DaisySystems及LogicSystem公司等進(jìn)入EDA領(lǐng)域,開始提供帶電路圖編輯工具和邏輯模擬工具的EDA軟件,主要解決了設(shè)計(jì)實(shí)現(xiàn)之前的功能檢驗(yàn)問題。總的來講,這一階段的EDA水平還很低,對(duì)設(shè)計(jì)工作的支持十分有限,主要存在兩個(gè)方面的問題需要解決:①EDA軟件的功能單一、相互獨(dú)立。這個(gè)時(shí)期的EDA工具軟件都是分別針對(duì)設(shè)計(jì)流程中的某個(gè)階段開發(fā)的,一個(gè)軟件只能完成其中的一部分工作,所以設(shè)計(jì)者不得不在設(shè)計(jì)流程的不同階段分別使用不同的EDA軟件包。然而,由于不同的公司開發(fā)的EDA工具之間的兼容性較差,為了使設(shè)計(jì)流程前一級(jí)軟件的輸出結(jié)果能夠被后一級(jí)軟件接受,就需要人工處理或再運(yùn)行另外的轉(zhuǎn)換軟件,這往往很繁瑣,勢必影響設(shè)計(jì)的速度。②對(duì)于復(fù)雜電子系統(tǒng)的設(shè)計(jì),不能提供系統(tǒng)級(jí)的仿真和綜合,所以設(shè)計(jì)中的錯(cuò)誤往往只能在產(chǎn)品開發(fā)的后期才能被發(fā)現(xiàn),這時(shí)再進(jìn)行修改十分困難。

2.CAE階段(20世紀(jì)80年代初期~20世紀(jì)90年代初期)這個(gè)階段在集成電路與電子系統(tǒng)設(shè)計(jì)方法學(xué)以及設(shè)計(jì)工具集成化方面取得了許多成果。各種設(shè)計(jì)工具,如原理圖輸入、編譯與連接、邏輯模擬、邏輯綜合、測試碼生成、版圖自動(dòng)布局以及各種單元庫均已齊全。不同功能的設(shè)計(jì)工具之間的兼容性得到了很大改善,那些不走兼容道路、想獨(dú)樹一幟的CAD工具受到了用戶的抵制,逐漸被淘汰。EDA軟件設(shè)計(jì)者采用統(tǒng)一數(shù)據(jù)管理技術(shù),把多個(gè)不同功能的設(shè)計(jì)軟件結(jié)合成一個(gè)集成設(shè)計(jì)環(huán)境。按照設(shè)計(jì)方法學(xué)制定的設(shè)計(jì)流程,在一個(gè)集成設(shè)計(jì)環(huán)境中就能實(shí)現(xiàn)由寄存器傳輸級(jí)RTL(RegisterTransfersLevel)開始,從設(shè)計(jì)輸入到版圖輸出的全程設(shè)計(jì)自動(dòng)化。在這個(gè)階段,基于門陣列和標(biāo)準(zhǔn)單元庫設(shè)計(jì)的半定制ASIC得到了極大的發(fā)展,將電子系統(tǒng)設(shè)計(jì)推入了ASIC時(shí)代。但是,大部分從原理圖出發(fā)的CAE工具仍然不能適應(yīng)復(fù)雜電子系統(tǒng)的要求,而且具體化的元件圖形制約著優(yōu)化設(shè)計(jì)。

3.ESDA階段(20世紀(jì)90年代以來)

20世紀(jì)90年代以來,集成電路技術(shù)以驚人的速度發(fā)展,其工藝水平已經(jīng)達(dá)到深亞微米級(jí),一個(gè)芯片上可以集成數(shù)百萬甚至上千萬只晶體管,工作頻率可達(dá)GHz。這不僅為片上系統(tǒng)SOC(SystemOnChip)的實(shí)現(xiàn)提供了可能,同時(shí)也給EDA技術(shù)提出了更高的要求,促進(jìn)了EDA技術(shù)的發(fā)展。在這一階段,出現(xiàn)了以硬件描述語言、系統(tǒng)級(jí)仿真和綜合技術(shù)為基本特征的第三代EDA技術(shù),它使設(shè)計(jì)師們擺脫了大量的具體設(shè)計(jì)工作,而把精力集中于創(chuàng)造性的方案與概念構(gòu)思上,從而極大地提高了系統(tǒng)設(shè)計(jì)的效率,縮短了產(chǎn)品的研制周期。EDA技術(shù)在這一階段的發(fā)展主要有以下幾個(gè)方面。1)用硬件描述語言來描述數(shù)字電路與系統(tǒng)這是現(xiàn)代EDA技術(shù)的基本特征之一,并且已經(jīng)形成了VHDL和VerilogHDL兩種IEEE(TheInstituteofElectricalandElectronicsEngineers,電氣和電子工程師協(xié)會(huì))標(biāo)準(zhǔn)硬件描述語言。它們均能支持系統(tǒng)級(jí)、算法級(jí)、RTL級(jí)(又稱數(shù)據(jù)流級(jí))和門級(jí)各個(gè)層次的描述或多個(gè)不同層次的混合描述,涉及的領(lǐng)域有行為描述和結(jié)構(gòu)描述兩種形式。硬件描述與實(shí)現(xiàn)工藝無關(guān),而且還支持不同層次上的綜合與仿真。硬件描述語言的使用規(guī)范了設(shè)計(jì)文檔,便于設(shè)計(jì)的傳遞、交流、保存、修改及重復(fù)使用。2)高層次的仿真與綜合所謂綜合,就是由較高層次描述到低層次描述、由行為描述到結(jié)構(gòu)描述的轉(zhuǎn)換過程;仿真是在電子系統(tǒng)設(shè)計(jì)過程中對(duì)設(shè)計(jì)者的硬件描述或設(shè)計(jì)結(jié)果進(jìn)行查錯(cuò)、驗(yàn)證的一種方法。對(duì)應(yīng)于不同層次的硬件描述,有不同級(jí)別的綜合與仿真工具。高層次的綜合與仿真將自動(dòng)化設(shè)計(jì)的層次提高到了算法行為級(jí),使設(shè)計(jì)者無需面對(duì)低層電路,而把精力集中到系統(tǒng)行為建模和算法設(shè)計(jì)上,而且可以幫助設(shè)計(jì)者在最早的時(shí)間發(fā)現(xiàn)設(shè)計(jì)中的錯(cuò)誤,從而大大縮短了設(shè)計(jì)周期。3)平面規(guī)劃技術(shù)平面規(guī)劃(Floorplaning)技術(shù)對(duì)邏輯綜合和物理版圖設(shè)計(jì)進(jìn)行聯(lián)合管理,做到在邏輯綜合早期設(shè)計(jì)階段就考慮到物理設(shè)計(jì)信息的影響。通過這些信息,可以再進(jìn)一步地對(duì)設(shè)計(jì)進(jìn)行綜合和優(yōu)化,并保證不會(huì)對(duì)版圖設(shè)計(jì)帶來負(fù)面的影響。這在深亞微米級(jí)布線時(shí)延已經(jīng)成為主要時(shí)延的情況下,對(duì)加速設(shè)計(jì)過程的收斂與成功是有所幫助的。在Synopsys和Cadence等著名公司的EDA系統(tǒng)中都采用了這項(xiàng)技術(shù)。4)可測試性綜合設(shè)計(jì)隨著ASIC規(guī)模和復(fù)雜性的增加,測試的難度和費(fèi)用急劇上升,由此而產(chǎn)生了將可測試性電路結(jié)構(gòu)做在ASIC芯片上的思想,于是開發(fā)出了掃描插入、內(nèi)建自測試(BIST)和邊界掃描等可測試性設(shè)計(jì)(DFT)工具,并已集成到EDA系統(tǒng)中。如Compass公司的TestAssistant和MentorGraphics公司的LBLSTAchitect、BSDAchitect和DFTAdvisor等。5)開放性、標(biāo)準(zhǔn)化框架結(jié)構(gòu)的集成設(shè)計(jì)環(huán)境和并行設(shè)計(jì)工程近年來,隨著硬件描述語言等設(shè)計(jì)數(shù)據(jù)格式的逐漸標(biāo)準(zhǔn)化,不同設(shè)計(jì)風(fēng)格和應(yīng)用的要求使得有必要建立開放性、標(biāo)準(zhǔn)化的EDA框架。所謂框架,就是一種軟件平臺(tái)結(jié)構(gòu),為EDA工具提供操作環(huán)境??蚣艿年P(guān)鍵在于建立與硬件平臺(tái)無關(guān)的圖形用戶界面以及工具之間的通信、設(shè)計(jì)數(shù)據(jù)和設(shè)計(jì)流程的管理等,此外還包括各種與數(shù)據(jù)庫相關(guān)的服務(wù)項(xiàng)目。任何一個(gè)EDA系統(tǒng)只要建立一個(gè)符合標(biāo)準(zhǔn)的開放式框架結(jié)構(gòu),就可以接納其它廠商的EDA工具一起進(jìn)行設(shè)計(jì)工作。這樣,框架作為一套使用和配置EDA軟件包的規(guī)范,就可以實(shí)現(xiàn)各種EDA工具間的優(yōu)化組合,并集成在一個(gè)易于管理的統(tǒng)一環(huán)境下,實(shí)現(xiàn)資源共享。

針對(duì)當(dāng)今電子設(shè)計(jì)中數(shù)字電路與模擬電路并存、硬件設(shè)計(jì)與軟件設(shè)計(jì)并存以及產(chǎn)品更新?lián)Q代快的特點(diǎn),并行設(shè)計(jì)工程CE(ConcurrentEngineering)要求一開始就從管理層次上把工藝、工具、任務(wù)、智力和時(shí)間安排協(xié)調(diào)好;在統(tǒng)一的集成設(shè)計(jì)環(huán)境下,由若干相關(guān)的設(shè)計(jì)小組共享數(shù)據(jù)庫和知識(shí)庫,同步進(jìn)行設(shè)計(jì)。CE改變了傳統(tǒng)的設(shè)計(jì)過程中,過分依賴專業(yè)分工和設(shè)計(jì)人員過分強(qiáng)調(diào)所學(xué)專業(yè)知識(shí)的狀況。8.1.2EDA設(shè)計(jì)語言

1.VHDL和VerilogHDL語言

VHDL是由美國國防部在70年代末和80年代初提出的超高速集成電路VHSIC(VeryHighSpeedIntegratedCircuit)計(jì)劃的產(chǎn)物,其目的是為了在承擔(dān)國防部定貨的各集成電路廠商之間建立一個(gè)統(tǒng)一的設(shè)計(jì)數(shù)據(jù)和文檔交換格式。1987年12月,IEEE接受HDL為標(biāo)準(zhǔn)HDL,也就是IEEEStd1076-1987[LRM87]。此后又做了一些修改,新的版本為IEEEStd1076-1993[LRM93]。VerilogHDL是在1983年,由GDA(GateWayDesignAutomation)公司的PhilMoorby首創(chuàng)的。1986年,Moorby提出了用于快速門級(jí)仿真的VerilogXL算法,使VerilogHDL得到了迅速發(fā)展。1989年,Cadence公司收購了GDA公司,VerilogHDL成了Cadence公司的私有財(cái)產(chǎn)。1990年,Cadence公司決定公開發(fā)表VerilogHDL,并成立了OVI(OpenVerilogInternational)組織來負(fù)責(zé)VerilogHDL的推廣。基于VerilogHDL的優(yōu)越性,VerilogHDL于1995年成為了IEEE的另一個(gè)HDL標(biāo)準(zhǔn)。

幾年以來,EDA界對(duì)VHDL和VerilogHDL這兩種語言一直爭論不休。實(shí)際上這兩種語言各有所長,市場占有率也相差不多。一般認(rèn)為,VerilogHDL是從集成電路的設(shè)計(jì)中發(fā)展而來的,在門級(jí)電路、晶體管開關(guān)級(jí)電路的描述方面比VHDL強(qiáng),在系統(tǒng)級(jí)的抽象描述方面,VHDL則更合適。目前,大多數(shù)的EDA軟件都同時(shí)支持這兩種硬件描述語言。2.ABEL和AHDL語言與VHDL和VerilogHDL相比,ABEL和AHDL的功能相對(duì)比較簡單,它們適合于RTL級(jí)和門級(jí)電路的描述,主要用于可編程邏輯器件的開發(fā)。

ABEL語言是由美國DataI/O公司推出的,該公司也是ABEL語言綜合器的惟一供應(yīng)商,有不少EDA軟件支持ABEL語言,如ispEXPERT、Synario、Foundation等。

AHDL語言則只集成在Altera公司的可編程邏輯器件開發(fā)工具中,只能在Altera的開發(fā)軟件中進(jìn)行編譯和調(diào)試。3.C語言

在電子系統(tǒng)設(shè)計(jì)中,硬件設(shè)計(jì)采用VHDL和VerilogHDL之類硬件描述語言,軟件設(shè)計(jì)則采用C和C++等編程語言。這種硬件設(shè)計(jì)和軟件設(shè)計(jì)使用不同語言的現(xiàn)象,給設(shè)計(jì)帶來了不便,延長了產(chǎn)品開發(fā)的周期。從EDA的發(fā)展趨勢來看,直接用C語言來描述硬件是未來的一個(gè)發(fā)展方向,這樣軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員之間就有了“共同語言”,從而能夠?qū)崿F(xiàn)軟、硬件協(xié)同設(shè)計(jì),提高設(shè)計(jì)效率。目前,用C語言描述硬件主要有兩個(gè)分支:SystemC和SpecC。SystemC適用于從系統(tǒng)設(shè)計(jì)到邏輯設(shè)計(jì)這一階段;SpecC則適用于從對(duì)技術(shù)要求的把握到系統(tǒng)設(shè)計(jì)這一階段。圖8-1EDA工具的范疇8.1.3EDA開發(fā)工具EDA工具主要能夠進(jìn)行三個(gè)方面的輔助設(shè)計(jì)工作:①印刷電路板PCB設(shè)計(jì);②ASIC設(shè)計(jì);③電子系統(tǒng)設(shè)計(jì)。沒有EDA工具的支持,想要完成超大規(guī)模集成電路或復(fù)雜電子系統(tǒng)的設(shè)計(jì)制造是不可想象的。

全球的EDA軟件供應(yīng)商有近百家之多,大體上可以分成兩類:一類是專業(yè)的EDA軟件公司,如MentorGraphics、CadenceDesignSystems、Synopsys、ViewlogicSystems和Protel等;另一類是半導(dǎo)體器件廠商,為銷售他們的產(chǎn)品而開發(fā)EDA工具,Altera、Xilinx、Lattice和Actel等。專業(yè)的EDA軟件公司獨(dú)立于半導(dǎo)體器件廠商,推出的EDA工具有較好的標(biāo)準(zhǔn)化和兼容性,也比較注意追求技術(shù)上的先進(jìn)性,一般將這類工具稱為第三方工具;而半導(dǎo)體器件廠商開發(fā)的EDA工具則能夠作出針對(duì)自己器件特點(diǎn)的優(yōu)化設(shè)計(jì)。在表8-1中列出了部分EDA軟件,其中也包括了一些模擬/數(shù)字混合電路的EDA軟件。表8-1部分EDA軟件簡介表8-1部分EDA軟件簡介8.1.4EDA設(shè)計(jì)方法

EDA設(shè)計(jì)方法屬于現(xiàn)代電子設(shè)計(jì)的范疇,它與經(jīng)典的電子設(shè)計(jì)方法不同。主要涵蓋行為描述法、IP復(fù)用法、ASIC設(shè)計(jì)方法、數(shù)字系統(tǒng)的高層次設(shè)計(jì)方法、e-DA網(wǎng)上設(shè)計(jì)方法、軟硬件協(xié)同設(shè)計(jì)方法、基于集成平臺(tái)的設(shè)計(jì)方法。數(shù)字系統(tǒng)的設(shè)計(jì)包括行為、結(jié)構(gòu)和物理三個(gè)領(lǐng)域。行為是指系統(tǒng)的功能,或者說系統(tǒng)應(yīng)該做什么;結(jié)構(gòu)是指系統(tǒng)的組成,或者說系統(tǒng)的抽象實(shí)現(xiàn),典型的是抽象模塊的相互連接;物理是指系統(tǒng)具體實(shí)現(xiàn)的幾何特征與物理特性,也就是把結(jié)構(gòu)領(lǐng)域中的抽象元件代之以真實(shí)的物理元件。根據(jù)抽象級(jí)別的不同,數(shù)字系統(tǒng)又劃分為若干層次,一般從頂向下包括系統(tǒng)級(jí)、算法級(jí)、寄存器傳輸級(jí)(RTL)、邏輯級(jí)、電路級(jí)等。通常將寄存器傳輸級(jí)以上的層次稱為高層次。利用硬件描述語言在寄存器傳輸級(jí)以上的層次進(jìn)行描述、設(shè)計(jì)的方法稱為數(shù)字系統(tǒng)的高層次設(shè)計(jì)方法,描述的層次越高,設(shè)計(jì)的層次就越高。

數(shù)字系統(tǒng)的高層次設(shè)計(jì)方法代表了現(xiàn)代數(shù)字系統(tǒng)設(shè)計(jì)的發(fā)展方向,它的基本特征是:用一片或幾片ASIC實(shí)現(xiàn)整個(gè)數(shù)字系統(tǒng);設(shè)計(jì)人員遵循“自頂向下”的設(shè)計(jì)思想,首先對(duì)整個(gè)系統(tǒng)進(jìn)行方案設(shè)計(jì)、功能劃分和算法設(shè)計(jì),并采用硬件描述語言完成算法級(jí)行為描述,最后由EDA工具完成目標(biāo)器件的設(shè)計(jì)。ASIC、EDA工具和硬件描述語言是高層次設(shè)計(jì)方法的三大基石。圖8-2數(shù)字系統(tǒng)高層次設(shè)計(jì)的設(shè)計(jì)流程①在明確系統(tǒng)功能的前提下,首先設(shè)計(jì)系統(tǒng)的實(shí)現(xiàn)方案,然后進(jìn)行功能劃分和算法設(shè)計(jì)。這些富有創(chuàng)造性的工作與上一章所介紹的基本相同,仍然需要由人工完成,只不過在高層次設(shè)計(jì)方法中,這些工作不再受市場上通用邏輯器件的局限。②設(shè)計(jì)輸入。一般是采用VHDL/VerilogHDL在算法級(jí)對(duì)系統(tǒng)進(jìn)行行為描述,此外還可以采用比較直觀的圖形輸入方式(方框圖、狀態(tài)圖等)。③編譯。編譯器對(duì)以上設(shè)計(jì)中的HDL描述的語法和語意進(jìn)行檢查和解釋,并將以上的輸入轉(zhuǎn)換成適當(dāng)?shù)闹虚g數(shù)據(jù)格式,為下一步的綜合作好準(zhǔn)備。④功能仿真。功能仿真又稱為前仿真,主要是檢驗(yàn)系統(tǒng)的邏輯功能設(shè)計(jì)的正確性,除了系統(tǒng)規(guī)定的定時(shí)關(guān)系以外,對(duì)實(shí)際電路中的慣性時(shí)延、傳輸時(shí)延均不予考慮。對(duì)于大型的設(shè)計(jì),綜合、適配要花費(fèi)數(shù)小時(shí),在綜合之前進(jìn)行功能仿真就可以及早發(fā)現(xiàn)設(shè)計(jì)錯(cuò)誤,節(jié)約設(shè)計(jì)時(shí)間。一般情況下,對(duì)于比較簡單的設(shè)計(jì),可以略去這一仿真步驟。⑤綜合。利用綜合器對(duì)HDL源代碼進(jìn)行綜合優(yōu)化處理,生成門級(jí)描述的網(wǎng)表文件,這是將高層次描述轉(zhuǎn)化為硬件電路的關(guān)鍵步驟。⑥適配。利用適配器將綜合后的網(wǎng)表文件針對(duì)某一具體的目標(biāo)器件進(jìn)行邏輯映射操作,包括底層器件配置、邏輯分割、邏輯優(yōu)化和布局布線。適配完成后,產(chǎn)生多項(xiàng)設(shè)計(jì)結(jié)果:適配報(bào)告(包括芯片內(nèi)部資源利用情況)、引腳分配和設(shè)計(jì)的布爾方程描述情況;適配后的仿真模型;器件編程文件。⑦時(shí)序仿真。根據(jù)適配后的仿真模型,可以進(jìn)行時(shí)序仿真(又稱為后仿真),因?yàn)橐呀?jīng)得到器件的實(shí)際硬件特性(如時(shí)延特性),所以仿真結(jié)果能比較精確地預(yù)期未來芯片的實(shí)際性能。如果仿真結(jié)果達(dá)不到設(shè)計(jì)要求,就需要修改HDL源代碼或選擇不同速度品質(zhì)的器件,直至滿足設(shè)計(jì)要求為止。⑧PLD編程。將適配器產(chǎn)生的器件編程文件通過編程器或下載電纜載入到目標(biāo)芯片——可編程邏輯器件中。⑨器件測試。在器件編程后,需要利用實(shí)驗(yàn)手段測試器件最終的功能和性能指標(biāo)。如果是大批量產(chǎn)品的開發(fā),通過更換相應(yīng)廠家的綜合庫,可以很容易轉(zhuǎn)由掩膜ASIC形式實(shí)現(xiàn)。8.2硬件描述語言VHDL初步8.2.1VHDL源程序的基本結(jié)構(gòu)

一個(gè)完整的VHDL源程序通常包含實(shí)體說明(EntityDeclaration)、結(jié)構(gòu)體(Architecture)、庫(Library)、程序包(Package)和配置(Configuration)5個(gè)部分。設(shè)計(jì)實(shí)體(DesignEntity)是VHDL源程序的基本單元,由實(shí)體說明和結(jié)構(gòu)體兩部分組成。實(shí)體所代表的對(duì)象幾乎沒有限制,小可至一個(gè)邏輯門,大可至一個(gè)復(fù)雜的CPU芯片,甚至整個(gè)系統(tǒng)。如果設(shè)計(jì)時(shí)采用自頂向下的層次化設(shè)計(jì)和模塊劃分,則各層的設(shè)計(jì)模塊都可以作為實(shí)體,高層次的實(shí)體可以調(diào)用低層次的實(shí)體。

1.實(shí)體說明(EntityDeclaration)實(shí)體說明是一個(gè)實(shí)體的外部視圖,其中包括對(duì)該實(shí)體輸入/輸出端口的描述。下面就是實(shí)體說明語句的格式:

ENTITY實(shí)體名IS

[類屬參數(shù)說明][端口說明][實(shí)體說明部分][BEGIN

實(shí)體語句部分]

ENDENTITY實(shí)體名;其中,實(shí)體名是設(shè)計(jì)者為該實(shí)體取的一個(gè)名稱。必須強(qiáng)調(diào)的是,VHDL語句都以分號(hào)(;)結(jié)尾,一般不可省略。端口說明的書寫格式如下:

PORT({端口名{,端口名}:端口方向數(shù)據(jù)類型;}

端口名{,端口名}:端口方向數(shù)據(jù)類型);端口名是設(shè)計(jì)者賦予每個(gè)外部端口的名稱。表8-2端口方向說明

數(shù)據(jù)類型用于定義端口數(shù)據(jù)的具體類型,VHDL中的數(shù)據(jù)類型將在后面再作介紹。在邏輯設(shè)計(jì)中,通常用位(BIT或STD-LOGIC)定義單個(gè)端口,用位矢量(BIT-VECTOR或STD-LOGIC-ECTOR)定義總線端口。

2.結(jié)構(gòu)體(Architecture)結(jié)構(gòu)體與實(shí)體說明相配合,用于描述實(shí)體的具體功能,也就是輸入和輸出信號(hào)之間的邏輯關(guān)系。在VHDL文件中,結(jié)構(gòu)體的位置在實(shí)體說明之后,編譯器通常是先編譯實(shí)體說明,再對(duì)其結(jié)構(gòu)體進(jìn)行編譯。一個(gè)實(shí)體中可以包含多個(gè)結(jié)構(gòu)體,它們分別代表了對(duì)實(shí)體功能的不同實(shí)現(xiàn)方案或不同的描述風(fēng)格。

一個(gè)結(jié)構(gòu)體的具體結(jié)構(gòu)描述如下:

ARCHITECTURE結(jié)構(gòu)體名OF實(shí)體名IS

[說明語句]

BEGIN

[并發(fā)描述語句]

ENDARCHITECTURE結(jié)構(gòu)體名;說明語句用于定義或說明在該結(jié)構(gòu)體中用到的信號(hào)(Signal)、常量(Constant)、共享變量、元件(Component)和數(shù)據(jù)類型。并發(fā)描述語句是描述實(shí)體功能的主要語句,也是最富有變化的部分。必須強(qiáng)調(diào)的是,這些語句都是并發(fā)(同時(shí))執(zhí)行的,與它們?cè)诔绦蛑谐霈F(xiàn)的先后次序無關(guān)?!纠?-1】1位二進(jìn)制全加器的VHDL源程序。設(shè)被加數(shù)、加數(shù)分別為a、b,進(jìn)位輸入為c-in,進(jìn)位輸出為c-out,和數(shù)為sum。ENTITYone-bit-full-adderISPORT(a,b,c-in:INBIT;-定義輸入端口

c-out,sum:OUTBIT);-定義輸出端口

ENDENTITYone-bit-full-adder;

ARCHITECTUREarchOFone-bit-full-adderISBEGINc-out<=(aANDb)OR((aXORb)ANDc-in);

-用輸出變量的邏輯方程進(jìn)行描述

sum<=(aXORb)XORc-in;

ENDARCHITECTUREarch;

3.配置(Configuration)在層次化設(shè)計(jì)中,一個(gè)已經(jīng)設(shè)計(jì)好的設(shè)計(jì)實(shí)體可以在另一個(gè)設(shè)計(jì)實(shí)體中被定義成一個(gè)元件來使用,而且任何一個(gè)設(shè)計(jì)實(shí)體都可以有多個(gè)結(jié)構(gòu)體。配置語句描述的就是高層設(shè)計(jì)中的元件與低層實(shí)體之間的對(duì)應(yīng)關(guān)系以及實(shí)體與結(jié)構(gòu)體之間的連接關(guān)系。在對(duì)實(shí)體進(jìn)行仿真時(shí),設(shè)計(jì)者可以利用配置語句為實(shí)體選擇不同的結(jié)構(gòu)體,進(jìn)行性能對(duì)比以求獲得性能最佳的結(jié)構(gòu)體。

配置語句一般跟在結(jié)構(gòu)體的后面,其基本書寫格式如下:CONFIGURATION配置名OF實(shí)體名IS

[配置說明語句]

END配置名;其中,配置說明語句有多種形式,有簡有繁。對(duì)于不包含塊(Block)語句和元件(Component)語句的結(jié)構(gòu)體,配置說明語句有最簡單的形式:

FOR選配的結(jié)構(gòu)體名

ENDFOR;【例8-2】含有兩個(gè)結(jié)構(gòu)體的1位二進(jìn)制全加器的VHDL源文件。ENTITYone-bit-full-adderISPORT(a,b,c-in:INBIT;

c-out,sum:OUTBIT);

ENDENTITYone-bit-full-adder;

ARCHITECTUREarch1OFone-bit-full-adderISBEGINc-out<=(aANDb)OR((aXORb)ANDc-in);

sum<=(aXORb)XORc-in;

ENDARCHITECTUREarch1;

ARCHITECTUREarch2OFone-bit-full-adderISSIGNALtemp-in:BIT-VECTOR(2DOWNTO0);

SIGNALtemp-out:BIT-VECTOR(1DOWNTO0);BEGINtemp-in<=a&b&c-in;(c-out,sum)<=temp-out;

PROCESS(temp-in)BEGINCASEtemp-inISWHEN"000"=>temp-out<="00";WHEN"001"=>temp-out<="01";

WHEN"010"=>temp-out<="01";WHEN"011"=>temp-out<="10";

WHEN"100"=>temp-out<="01";WHEN"101"=>temp-out<="10";

WHEN"110"=>temp-out<="10";WHEN"111"=>temp-out<="11";

ENDCASE;

ENDPROCESS;ENDARCHITECTUREarch2;CONFIGURATIONconfigOFone-bit-full-adderISFORarch2ENDFOR;ENDCONFIGURATIONconfig;

對(duì)于包含Component語句的結(jié)構(gòu)體,配置說明語句可以采用如下形式:

FOR選配結(jié)構(gòu)體名

FOR元件標(biāo)號(hào){,元件標(biāo)號(hào)}:元件名

USEENTITYWORK.實(shí)體名[(結(jié)構(gòu)體名)];

ENDFOR;

{FOR元件標(biāo)號(hào){,元件標(biāo)號(hào)}:元件名

USEENTITYWORK.實(shí)體名[(結(jié)構(gòu)體名)];

ENDFOR;}ENDFOR;這里還可以使用

FOROTHERS:元件名USEENTITYWORK.實(shí)體名(結(jié)構(gòu)體名);

FORALL:元件名USEENTITYWORK.實(shí)體名(結(jié)構(gòu)體名);如果沒有指定實(shí)體所對(duì)應(yīng)的結(jié)構(gòu)體,則默認(rèn)最新編譯的結(jié)構(gòu)體與實(shí)體連接。

4.程序包(Package)在一個(gè)設(shè)計(jì)的實(shí)體說明和結(jié)構(gòu)體說明部分定義的數(shù)據(jù)類型、常量和子程序等,對(duì)其它設(shè)計(jì)單元是不可見(不能引用)的,為了使它們可以為多個(gè)設(shè)計(jì)單元所共享,VHDL語言提供了程序包機(jī)制。程序包是一個(gè)可以單獨(dú)編譯的單元,在其中可以定義一些公用數(shù)據(jù)類型、常量、子程序和元件等,作用與C語言中的H文件類似。在VHDL編譯系統(tǒng)中有許多標(biāo)準(zhǔn)的程序包,用戶也可以自己編寫程序包。

一個(gè)程序包由兩大部分組成:程序包說明和程序包體,其基本格式為:

PACKAGE程序包名IS

[說明語句]

ENDPACKAGE程序包名;

PACKAGEBODY程序包名IS

[說明語句]

ENDPACKAGEBODY程序包名;在程序包說明中首先對(duì)數(shù)據(jù)類型、常量、子程序(函數(shù)、過程)和元件等進(jìn)行定義,在程序包體中再描述各項(xiàng)的具體細(xì)節(jié),如常量賦值、子程序的實(shí)現(xiàn)等。程序包說明程序包體【例8-3】一個(gè)用戶自己編寫的程序包。PACKAGEpkg-exampleISTYPEdigitISINTEGERRANGE0TO9;

CONSTANTpi:REAL:=3.1415926535897936;-定義常量并賦值

CONSTANTdeferred-constant:INTEGER;-定義常量,沒有賦值

COMPONENTand2-gateIS -定義元件

PORT(a,b:INBIT;c:OUTBIT);

ENDCONPONENTand2-gate;FUNCTIONsum(a1,a2,a3:digit)RETURNINTEGER;-定義函數(shù)

ENDPACKAGEpkg-example;

PACKAGEBODYpkg-exampleISCONSTANTdeferred-constant:INTEGER:=10; -常量賦值

FUNCTIONsum(a1,a2,a3:digit)RETURNINTEGERIS-函數(shù)的實(shí)現(xiàn)

BEGINRETURN(a1+a2+a3);

ENDFUNCTIONsum;

ENDPACKAGEBODYpkg-example

除了子程序的實(shí)現(xiàn)必須放在程序包體中以外,其它實(shí)質(zhì)性操作(如常量賦值)也可以在程序包說明中完成,所以在程序包說明中沒有定義子程序時(shí),程序包體可以省略。

5.庫(Library)庫的作用與程序包類似,是VHDL設(shè)計(jì)的公共資源,但級(jí)別高于程序包。庫中存放著已經(jīng)編譯過的實(shí)體說明、結(jié)構(gòu)體、配置和程序包,相當(dāng)于操作系統(tǒng)中的目錄。在VHDL語言中,主要有以下幾種庫:

1)STD庫

STD庫是VHDL的標(biāo)準(zhǔn)庫,庫中有兩個(gè)程序包:STANDARD和TEXTIO(文本文件輸入輸出)。在STANDARD程序包中定義了多種VHDL常用的數(shù)據(jù)類型(如BIT、BIT-ECTOR)、子類型和函數(shù)等;在TEXTIO程序包中定義了支持ASCIII/O操作的若干數(shù)據(jù)類型和子程序,多用于測試。2)WORK庫

WORK庫是現(xiàn)行作業(yè)庫。設(shè)計(jì)者正在進(jìn)行的設(shè)計(jì)不需任何說明,經(jīng)編譯后都會(huì)自動(dòng)存放到WORK庫中。

3)IEEE庫除了STD庫和WORK庫以外,其它的庫都被稱為資源庫。IEEE庫是最常用、最重要的一個(gè)資源庫。在該庫中有一個(gè)很常用的程序包STD-LOGIC-1164,它是被IEEE正式認(rèn)可的標(biāo)準(zhǔn)程序包;另外該庫中還有一些常用的程序包是由公司提供的,如Synopsys公司提供的STD-LOGIC-ARITH和STD-LOGIC-UNSIGNED。4)ASIC庫

ASIC庫是由各個(gè)公司提供的ASIC邏輯單元信息,在進(jìn)行門級(jí)仿真時(shí)可針對(duì)具體的公司進(jìn)行。5)用戶自定義庫用戶根據(jù)自身設(shè)計(jì)需要而開發(fā)的一些公用程序包、實(shí)體等匯集在一起定義成一個(gè)庫,這就是用戶自定義庫或稱為用戶庫。如果在設(shè)計(jì)中要用到某個(gè)庫中所定義的項(xiàng)目(數(shù)據(jù)類型、子程序、實(shí)體等),首先必須在設(shè)計(jì)之前,用LIBRARY和USE語句使這些項(xiàng)目對(duì)設(shè)計(jì)而言是可見的。這兩條語句的作用與C語言中的INCLUDE語句的作用類似,其一般格式為:

LIBRARY庫名{,庫名};

USE庫名.程序包名.項(xiàng)目名;

第一個(gè)語句表明使用什么庫,第二個(gè)語句表明使用庫中的哪個(gè)程序包以及程序包中的哪個(gè)項(xiàng)目。最后的項(xiàng)目名也可以用關(guān)鍵字ALL代替,表明程序包中的所有內(nèi)容都可以使用。例如,在使用數(shù)據(jù)類型STD-LOGIC和STD-LOGIC-VECTOR時(shí),由于這兩個(gè)數(shù)據(jù)類型都是在IEEE庫的STD-LOGIC-1164程序包中定義的,所以必須在實(shí)體說明之前增加兩條語句:

LIBRARYIEEE;

USEIEEE.STD-LOGIC-1164.ALL;

但是,“LIBRARYSTD,WORK;”和“USESTD.STANDARD.ALL”這兩條語句對(duì)于任何VHDL源程序都是隱含存在的,不必再顯式寫出。

LIBRARY和USE語句的作用范圍從跟在其后的設(shè)計(jì)實(shí)體開始,直到這個(gè)實(shí)體的配置結(jié)束。如果一個(gè)VHDL程序中有多個(gè)設(shè)計(jì)實(shí)體,那么在每個(gè)設(shè)計(jì)實(shí)體之前應(yīng)根據(jù)需要重復(fù)使用這兩條語句。8.2.2VHDL的基本語法

1.標(biāo)識(shí)符

VHDL′87中關(guān)于標(biāo)識(shí)符的語法規(guī)則被VHDL′93全部接受并加以擴(kuò)展。為了對(duì)兩者加以區(qū)分,前者稱為短標(biāo)識(shí)符,后者稱為擴(kuò)展標(biāo)識(shí)符。

1)短標(biāo)識(shí)符

VHDL中使用的短標(biāo)識(shí)符應(yīng)遵循以下規(guī)則:

(1)有效字符:英文字母、數(shù)字和下劃線。

(2)必須以英文字母開頭。

(3)下劃線的前后必須有英文字母或數(shù)字。

(4)短標(biāo)識(shí)符不區(qū)分大小寫。

下面這些標(biāo)識(shí)符是VHDL語言的關(guān)鍵字(保留字),用戶自定義的標(biāo)識(shí)符不能與這些關(guān)鍵字重名。VHDL語言的關(guān)鍵字包括:

ABS、ACCESS、AFTER、ALIAS、ALL、AND、ARCHITECTURE、ARRAY、ASSERT、ATTRIBUTE、BEGIN、BLOCK、BODY、BUFFER、BUS、CASE、COMPONENT、CONFIGURATION、CONSTANT、DISCONNECT、DOWNTO、ELSE、ELSIF、END、ENTITY、EXIT、FILE、FOR、FUNCTION、GENERATE、GENERIC、GROUP、GUARDED、IF、IMPURE、IN、INERTIAL、INOUT、IS、LABEL、LIBRARY、LINKAGE、LITERAL、LOOP、MAP、MOD、NAND、NEW、NEXT、NOR、NOT、NULL、OF、ON、OPEN、OR、OTHERS、OUT、PACKAGE、PORT、POSTPONED、PROCEDURE、PROCESS、PURE、RANGE、RECORD、REGISTER、REJECT、REM、REPORT、RETURN、ROL、ROR、SELECT、SEVERITY、SIGNAL、、SHARED、SLA、SLL、SRA、SRL、SUBTYPE、THEN、TO、TRANSPORT、TYPE、UNAFFECTED、UNITS、UNTIL、USE、VARIABLE、WAIT、WHEN、WHILE、WITH、XNOR和XOR。2)擴(kuò)展標(biāo)識(shí)符擴(kuò)展標(biāo)識(shí)符具有以下特性:

(1)用反斜杠來定界。如:\valid\,\eda-control\。

(2)永遠(yuǎn)與短標(biāo)識(shí)符不同。如:\valid\與valid不同。

(3)區(qū)分大小寫。如:\valid\與\Valid\不同。

(4)允許包含圖形符號(hào)和空格符。如:\modeAandB\,\$100\,\p%name\。

(5)反斜杠之間的字符可以是保留字。如:\entity\,\architecture\。

(6)允許下畫線相鄰。如:\two--computers\。

(7)擴(kuò)展標(biāo)識(shí)符的名字中如果有一個(gè)反斜杠,則用兩個(gè)相鄰的反斜杠代表它。如:\ab\\c\表示該標(biāo)識(shí)符的名字為ab\c。

2.對(duì)象

VHDL語言中的對(duì)象(Object)是一些能夠存放或接收數(shù)據(jù)的容器(客體),共有4種基本類型:常量(CONSTANT)、變量(VARIABLE)、信號(hào)(SIGNAL)和文件(FILE)。1)常量常量中存放的是固定不變的值,可以在程序包、實(shí)體說明、結(jié)構(gòu)體、子程序(函數(shù)、過程)和進(jìn)程中定義,定義的格式如下:

CONSTANT常量名{,常量名}:數(shù)據(jù)類型[約束條件][:=初值];例如,

CONSTANTa1,a2:STD-LOGIC-VECTOR(3DOWNTO0):="1001";

CONSTANTa3:INTEGERRANGE0TO15:=9;常量只能被賦值一次,一般在定義一個(gè)常量時(shí)必須同時(shí)給它一個(gè)值,但在某些特殊情況下,如在程序包說明中定義常量時(shí)可以先不賦值,在程序包體中再賦值,這種常量被稱為緩定常量,如例8-3中的常量deferred-constant。2)變量變量用于暫時(shí)數(shù)據(jù)的存儲(chǔ),普通變量只能在子程序(函數(shù)、過程)和進(jìn)程中定義,定義的格式為:

VARIABLE變量名{,變量名}:數(shù)據(jù)類型[約束條件][:=初值];例如,

VARLABLEsum:BIT:=′1′;在VHDL′93中增加了“共享變量”,共享變量可以在程序包、實(shí)體說明或結(jié)構(gòu)體中進(jìn)行定義,定義的格式為:

SHAREDVARIABLE變量名{,變量名}:數(shù)據(jù)類型[約束條件][:=初值];3)信號(hào)信號(hào)代表電路中各元件之間的連接線,可以在程序包、實(shí)體說明或結(jié)構(gòu)體中定義,設(shè)計(jì)實(shí)體的端口也被默認(rèn)為信號(hào)。信號(hào)定義的格式為:

SIGNAL信號(hào)名{,信號(hào)名}:數(shù)據(jù)類型[約束條件][:=初值];例如,

SIGNALclock:STD-LOGIC:=′1′;4)文件在VHDL′93中,文件也被看作對(duì)象。文件用于存放大量數(shù)據(jù),在仿真測試時(shí),測試輸入的激勵(lì)數(shù)據(jù)和測試的結(jié)果都可以存放在文件中。文件不能像變量或信號(hào)那樣通過賦值更新內(nèi)容,但可以作為參數(shù)向子程序傳遞,通過子程序?qū)ξ募M(jìn)行讀和寫操作。文件定義的格式為:

FILE文件名:文件的類型OPEN[打開文件的模式]IS"物理文件名";例如,

FILEin-file:TEXTOPENREAD-MODEIS"test/test1.dat";

FILEout-file:TEXTOPENWRITE-MODEIS"result1.dat";

該例說明,in-file是一個(gè)文本(TEXT)文件,由于打開文件的模式為READ-MODE,所以in-file是一個(gè)輸入文件,其代表的實(shí)際文件為當(dāng)前工作目錄下test子目錄下的test1.dat;out-file則是一個(gè)輸出文本文件,其代表的實(shí)際文件為當(dāng)前工作目錄下的result1.dat。另外,如果打開文件的模式缺省,則默認(rèn)為READ-MODE。

需要強(qiáng)調(diào)的是,對(duì)象必須遵循先定義后使用的原則,而且其作用范圍與其定義的位置密切相關(guān)。例如,在結(jié)構(gòu)體說明部分定義的共享變量可以用于整個(gè)結(jié)構(gòu)體;而在某個(gè)進(jìn)程中定義的普通變量,其作用范圍僅限于該進(jìn)程,如果希望該變量的值作用于進(jìn)程之外,則只能將該變量賦值給相同數(shù)據(jù)類型的信號(hào)或共享變量。

另外,一條對(duì)象說明語句中的初值是賦給這條語句中所有對(duì)象的,初值的形式除了可以是直接的具體數(shù)值以外,還可以是表達(dá)式或函數(shù),例如:CONSTANTconst-a:INTEGER:=y(tǒng)our-function(TRUE,3);變量和信號(hào)均可多次被賦予不同的值,如果說明信號(hào)或變量時(shí)沒有賦初值,則編譯系統(tǒng)取其默認(rèn)值,相同數(shù)據(jù)類型的信號(hào)與變量之間可以相互賦值。

3.?dāng)?shù)據(jù)類型

VHDL有很強(qiáng)的數(shù)據(jù)類型,這種強(qiáng)類型語言的特點(diǎn)在于:每個(gè)對(duì)象都具有惟一的數(shù)據(jù)類型,而且只能被賦予那個(gè)類型的數(shù)據(jù);施加于某個(gè)對(duì)象的操作也必須與該對(duì)象的數(shù)據(jù)類型相匹配,即定義一個(gè)操作時(shí)必須同時(shí)指明其操作對(duì)象(操作數(shù))的數(shù)據(jù)類型。

1)標(biāo)準(zhǔn)數(shù)據(jù)類型在STD庫的STANDARD程序包中預(yù)定義了10種數(shù)據(jù)類型,這些數(shù)據(jù)類型被稱為標(biāo)準(zhǔn)數(shù)據(jù)類型或預(yù)定義數(shù)據(jù)類型,如表8-3所示。表8-3標(biāo)準(zhǔn)數(shù)據(jù)類型2)其它常用程序包中定義的數(shù)據(jù)類型在其它的一些程序包中也有數(shù)據(jù)類型的定義,但在使用之前必須首先聲明使用相應(yīng)的程序包。例如,在STD庫的TEXTIO程序包中定義了一個(gè)文件類型TEXT:

TYPETEXTISFILEOFSTRING;在IEEE庫的STD-LOGIC-1164程序包中定義了應(yīng)用非常廣泛的數(shù)據(jù)類型STD-LOGIC和STD-LOGIC-VECTOR,STD-LOGIC共有9個(gè)值,除了′0′和′1′外,還有′U′(初始值)、′X′(不定)、′Z′(高阻抗)、′W′(弱信號(hào)不定)、′L′(弱信號(hào)0)、′H′(弱信號(hào)1)和′-′(不可能情況),這大大增強(qiáng)了VHDL的描述能力。

在IEEE庫的STD-LOGIC-ARITH程序包中定義了數(shù)據(jù)類型SIGNED和UNSIGNED。SIGNED被看作二進(jìn)制補(bǔ)碼的STD-LOGIC-VECTOR,UNSIGNED被看作無符號(hào)二進(jìn)制數(shù)的STD-LOGIC-VECTOR。3)用戶自定義數(shù)據(jù)類型除了使用VHDL編譯系統(tǒng)自帶的程序包中定義的數(shù)據(jù)類型外,用戶也可以自己定義新的數(shù)據(jù)類型(TYPE)及子類型(SUBTYPE)。數(shù)據(jù)類型、子類型定義語句的格式一般為:

TYPE數(shù)據(jù)類型名{,數(shù)據(jù)類型名}IS[數(shù)據(jù)類型定義];

SUBTYPETYPE子類型名IS數(shù)據(jù)類型名[范圍];

可由用戶定義的數(shù)據(jù)類型有枚舉(Enumberated)類型、整數(shù)(Integer)類型、數(shù)組(Array)類型和記錄(Record)類型等。例如:

TYPEweekIS(sun,mon,tue,wed,thu,fri,sat);-枚舉類型

TYPEwordISARRAY(1TO8)OFSTD-LOGIC;-一維數(shù)組類型

TYPEmemISARRAY(0TO4,7DOWNTO0)OFSTD-LOGIC;-二維數(shù)組類型在VHDL中,數(shù)據(jù)的類型可以變換。表8-4中列出了在程序包中定義的一些數(shù)據(jù)類型轉(zhuǎn)換函數(shù)。表8-4數(shù)據(jù)類型轉(zhuǎn)換函數(shù)

4.操作符

VHDL中共有4類操作符,如表8-5所示。需要注意的是,VHDL對(duì)數(shù)據(jù)類型要求非常嚴(yán)格,操作符的操作對(duì)象是操作數(shù),操作數(shù)的數(shù)據(jù)類型必須與操作符所要求的數(shù)據(jù)類型相一致;另外,每個(gè)操作符都是有優(yōu)先級(jí)的,如下所示(同一行操作符的優(yōu)先級(jí)相同):**ABSNOT*/MODREM+(正號(hào))-(負(fù)號(hào))SLLSRLSLASRAROLROR+-&=/=<><=>=ANDORNANDNORXORXNOR最高優(yōu)先級(jí)最低優(yōu)先級(jí)表8-5VHDL中的操作符8.2.3VHDL的主要描述語句

按照語句執(zhí)行的順序,VHDL的描述語句可以分成兩類:順序描述語句和并發(fā)描述語句。顧名思義,順序描述語句是按照語句書寫的順序依次執(zhí)行,這與高級(jí)語言的編程是一樣的;而并發(fā)描述語句則是同時(shí)執(zhí)行的,與語句在源文件中的先后次序無關(guān)。

1.順序描述語句順序描述語句只能出現(xiàn)在進(jìn)程或子程序(函數(shù)、過程)中,它包括:變量賦值語句、信號(hào)代入語句、WAIT語句、IF語句、CASE語句、LOOP語句、NEXT語句、EXIT語句、RETURN語句、NULL語句、過程調(diào)用語句、斷言語句和REPORT語句。1)變量賦值語句變量賦值語句的書寫格式為:目的變量名:=表達(dá)式;該語句表明目的變量的值將由表達(dá)式所表達(dá)的新值代替,但兩者的數(shù)據(jù)類型必須相同。表達(dá)式可以是數(shù)值、字符、信號(hào)或函數(shù)調(diào)用。2)信號(hào)代入語句信號(hào)代入語句的書寫格式為:目的信號(hào)名<=表達(dá)式;信號(hào)代入與變量賦值不僅形式不同,而且其操作過程也不相同。在變量賦值語句中,該語句一旦被執(zhí)行,其值立即被賦予變量,在執(zhí)行下一條語句時(shí),該變量的值就是上一句新賦的值。但在信號(hào)代入語句被執(zhí)行時(shí),不會(huì)立即發(fā)生代入操作,在執(zhí)行下一條語句時(shí),信號(hào)仍采用原來的值。這是因?yàn)樾盘?hào)代入語句有兩個(gè)操作過程:代入語句的處理過程和實(shí)際的代入過程,這兩個(gè)過程是分開進(jìn)行的。在執(zhí)行信號(hào)代入語句時(shí),首先對(duì)所有的信號(hào)代入語句進(jìn)行處理,也就是先把相關(guān)信號(hào)中的值讀出來,并不進(jìn)行代入操作;在處理完畢后,再用前面讀出的值進(jìn)行實(shí)際的代入操作。3)IF語句①IF語句作門閂控制:其書寫格式為:[IF標(biāo)號(hào):]IF布爾表達(dá)式THEN

順序描述語句

ENDIF[IF標(biāo)號(hào)];當(dāng)執(zhí)行到該IF語句時(shí),首先判斷布爾表達(dá)式的值。如果布爾表達(dá)式的值為TRUE,則執(zhí)行其中的順序描述語句;否則,就跳過該IF語句,轉(zhuǎn)而執(zhí)行該IF語句后的其它語句。例如:

IF(en=′1′)THENa<=b;ENDIF;該語句表明,當(dāng)en=′1′時(shí),a、b完全相等,a隨b的變化而變化;當(dāng)en≠′1′時(shí),a<=b語句不被執(zhí)行,無論b發(fā)生什么變化,a都將維持原值不變。(2)IF語句作二選擇控制:其書寫格式為:[IF標(biāo)號(hào):]IF布爾表達(dá)式THEN

順序描述語句

ELSE

順序描述語句

ENDIF[IF標(biāo)號(hào)];當(dāng)執(zhí)行到該IF語句時(shí),首先判斷布爾表達(dá)式的值。如果布爾表達(dá)式的值為TRUE,則執(zhí)行THEN與ELSE之間的順序描述語句;否則,就執(zhí)行ELSE與ENDIF之間的順序描述語句。(3)IF語句作多選擇控制:其書寫格式為:[IF標(biāo)號(hào):]IF布爾表達(dá)式THEN

順序描述語句

ELSIF布爾表達(dá)式THEN-注意,不是ELSEIF

順序描述語句

{ELSIF布爾表達(dá)式THEN

順序描述語句}

[ELSE

順序描述語句]

ENDIF[IF標(biāo)號(hào)];

在這種多選擇控制的IF語句中,設(shè)置了多個(gè)條件(布爾表達(dá)式)。在執(zhí)行時(shí),按照書寫的順序依次判斷各個(gè)條件,如果上一個(gè)條件不滿足,再判斷下一個(gè)條件;當(dāng)滿足其中的一個(gè)條件時(shí),執(zhí)行該條件后所跟的順序描述語句,執(zhí)行完畢后不再對(duì)剩余的條件作判斷,而是直接跳出該IF語句,轉(zhuǎn)而執(zhí)行該IF語句后的其它語句;當(dāng)所有的條件都不滿足時(shí),如果有ELSE語句,則在執(zhí)行完ELSE之后的順序描述語句后跳出該IF語句,否則直接跳出該IF語句。4)CASE語句

CASE語句的一般格式如下:[CASE標(biāo)號(hào):]CASE條件表達(dá)式ISWHEN條件表達(dá)式的值=>順序描述語句

{WHEN條件表達(dá)式的值=>順序描述語句}

[WHENOTHERS=>順序描述語句]

ENDCASE[CASE標(biāo)號(hào)];其中條件表達(dá)式必須是離散類型或一維數(shù)組類型;條件表達(dá)式的值有4種表示形式,分別為單個(gè)值、多個(gè)值、取值范圍和其它所有的值:WHEN值=>順序描述語句-單個(gè)值

WHEN值{︱值}=>順序描述語句-多個(gè)值

WHEN值TO值=>順序描述語句-取值范圍

WHEN值DOWNTO值=>順序描述語句-取值范圍

WHENOTHERS=>順序描述語句-其它所有的值CASE語句根據(jù)條件表達(dá)式的取值,選擇執(zhí)行相應(yīng)的分支(WHEN子句)中“=>”后面的順序描述語句。CASE語句的各個(gè)分支之間是并行、互斥的關(guān)系,不允許在不同分支中出現(xiàn)相同的值;并且所有的分支合起來應(yīng)包括條件表達(dá)式值域中的所有值;如果要使用OTHERS分支,則只能有一個(gè),并且要放在最后。5)LOOP語句

LOOP語句類似于高級(jí)編程語言中的循環(huán)語句。LOOP語句有兩種書寫格式:

(1)FOR循環(huán)變量,其格式為:[LOOP標(biāo)號(hào):]FOR循環(huán)變量IN循環(huán)范圍LOOP

順序描述語句

ENDLOOP[LOOP標(biāo)號(hào)];循環(huán)變量不需要顯式說明,必須為離散量;循環(huán)范圍就是循環(huán)變量的取值范圍,用它來說明循環(huán)的次數(shù)。每循環(huán)一次,循環(huán)變量的值自動(dòng)改變,但不能人為對(duì)其賦值。(2)WHILE條件,其格式為:[LOOP標(biāo)號(hào):]WHILE(布爾表達(dá)式)LOOP

順序描述語句

ENDLOOP[LOOP標(biāo)號(hào)];每次執(zhí)行循環(huán)之前先檢查布爾表達(dá)式的值,如果為TRUE,則執(zhí)行循環(huán);如果為FALSE,則結(jié)束循環(huán)狀態(tài),繼而執(zhí)行該LOOP語句之后的下一條語句。6)NEXT語句和EXIT語句

NEXT語句和EXIT語句均為LOOP語句中的循環(huán)控制語句。

NEXT語句的書寫格式為:

NEXT[LOOP標(biāo)號(hào)][WHEN布爾表達(dá)式];在LOOP語句中執(zhí)行NEXT語句將停止當(dāng)前的這一次循環(huán),轉(zhuǎn)入下一次新的循環(huán)。NEXT后的標(biāo)號(hào)表示下一次循環(huán)的起始位置;如果標(biāo)號(hào)缺省,即進(jìn)入當(dāng)前這一層LOOP語句的下一次循環(huán)?!癢HEN布爾表達(dá)式”表示只有當(dāng)布爾表達(dá)式取值為TRUE時(shí)NEXT語句才被執(zhí)行,否則不執(zhí)行;如果這一項(xiàng)缺省,表示無條件執(zhí)行NEXT語句。EXIT語句的書寫格式為:

EXIT[LOOP標(biāo)號(hào)][WHEN布爾表達(dá)式];與NEXT語句不同,在LOOP語句中執(zhí)行EXIT語句將結(jié)束當(dāng)前這一層的循環(huán)狀態(tài),從當(dāng)前這一層的LOOP語句中跳出。如果EXIT后有標(biāo)號(hào),則表示將跳到標(biāo)號(hào)處繼續(xù)執(zhí)行;如果標(biāo)號(hào)缺省,下一條要執(zhí)行的語句就是繼本層LOOP語句之后的下一條語句?!癢HEN布爾表達(dá)式”的作用與NEXT語句中的相同。

2.并發(fā)描述語句

在VHDL的結(jié)構(gòu)體中沒有規(guī)定語句的執(zhí)行次序,所有的語句都可以同時(shí)執(zhí)行。在任何一個(gè)時(shí)刻,每個(gè)語句是否執(zhí)行僅取決于該語句中的敏感信號(hào)是否發(fā)生了新的變化,敏感信號(hào)每發(fā)生一次變化,該語句就執(zhí)行一次。

VHDL結(jié)構(gòu)體中的并發(fā)語句包括:信號(hào)代入語句、塊(BLOCK)語句、進(jìn)程(PROCESS)語句、斷言(ASSERT)語句、過程調(diào)用語句、生成(GENERATE)語句和元件例化語句。1)進(jìn)程語句在VHDL中,一個(gè)功能相對(duì)獨(dú)立的電路模塊可以用一個(gè)PROCESS語句來描述。VHDL的結(jié)構(gòu)體中允許有多個(gè)進(jìn)程語句,各進(jìn)程語句之間是并行關(guān)系,而每個(gè)進(jìn)程內(nèi)部的各語句則是按照它們排列的順序執(zhí)行的。PROCESS語句的基本格式為:[進(jìn)程名:]PROCESS(敏感信號(hào)表)[IS] [進(jìn)程說明區(qū)]

BEGIN

順序并發(fā)語句

ENDPROCESS[進(jìn)程名];

在敏感信號(hào)表中列出了進(jìn)程所有的敏感信號(hào),它們是進(jìn)程的某些輸入信號(hào),之所以被稱為敏感信號(hào),是因?yàn)楫?dāng)有一個(gè)或多個(gè)這樣的信號(hào)發(fā)生變化時(shí),進(jìn)程便被激活,從而開始按順序執(zhí)行進(jìn)程中的語句,在執(zhí)行完進(jìn)程的最后一條語句后,進(jìn)程被掛起,等待再次被激活。反之,如果沒有這樣的信號(hào)發(fā)生變化,進(jìn)程中的語句就不會(huì)被執(zhí)行。【例8-4】具有異步清零、同步置位功能的D觸發(fā)器的VHDL描述。、、LIBRARYIEEE;

USEIEEE.STD-LOGIC-1164.ALL;

ENTITYd-ffISPORT(aclr,clk,sset:INSTD-LOGIC;

q,nq:OUTSTD-LOGIC);

ENDENTITYd-ff;

ARCHITECTUREarchOFd-ffISBEGINPROCESS(aclr,clk)ISBEGINIF(aclr=′1′)THENq<=′0′;nq<=′1′;

ELSIF(clk′EVENTANDclk=′1′)THENIF(sset=′1′)THENq<=′1′;nq<=′0′;

ELSEq<=d;nq<=NOTd;

ENDIF;

ENDIF;

ENDPROCESS;

ENDARCHITECTUREarch;在VHDL中時(shí)鐘的表示方法如表8-6所示。表8-6時(shí)鐘的表示方法2)信號(hào)代入語句信號(hào)代入語句也可以作為并行語句出現(xiàn)在結(jié)構(gòu)體中,共有三種形式:

(1)并發(fā)信號(hào)代入語句,其格式為:目的信號(hào)名<=表達(dá)式;(2)條件信號(hào)代入語句,其格式為:目的信號(hào)名<=表達(dá)式WHEN布爾表達(dá)式ELSE{表達(dá)式WHEN布爾表達(dá)式ELSE}

表達(dá)式;(3)選擇信號(hào)代入語句,其格式為:

WITH條件表達(dá)式SELECT

目的信號(hào)名<={表達(dá)式WHEN條件表達(dá)式的值,}

表達(dá)式WHEN條件表達(dá)式的值;

結(jié)構(gòu)體中的這三種信號(hào)代入語句實(shí)際上是進(jìn)程語句在特定情況下的縮寫。在功能上和語法上,分別與順序語句中的信號(hào)代入語句、IF語句和CASE語句類似。需要強(qiáng)調(diào)的是,由于結(jié)構(gòu)體中的信號(hào)代入語句是并發(fā)執(zhí)行(并發(fā)處理、并發(fā)代入)的,所以不允許出現(xiàn)多個(gè)對(duì)同一個(gè)信號(hào)的代入語句;而這種情況對(duì)順序信號(hào)代入語句是允許的,因?yàn)榇胧前错樞虻?,所以信?hào)以最后代入的值作為最終值。3)元件例化語句元件例化是指在層次化設(shè)計(jì)中,將已經(jīng)編譯好的設(shè)計(jì)實(shí)體定義為元件并在當(dāng)前的設(shè)計(jì)中調(diào)用的過程。元件例化一般由元件定義語句、元件例化語句和元件配置語句三部分組成。(1)元件定義語句:用于將一個(gè)設(shè)計(jì)實(shí)體定義成一個(gè)元件,存在于結(jié)構(gòu)體說明部分或程序包說明部分,其書寫格式為:

COMPONENT元件名IS

[類屬參數(shù)說明]端口說明

ENDCOMPONENT元件名;

元件名是用戶給例化元件起的名字,一般就是它所代表的實(shí)體的名字。元件定義中的類屬參數(shù)說明和端口說明與例化元件所代表的實(shí)體中的這兩項(xiàng)完全相同。(2)元件例化語句:用于調(diào)用例化元件,即把例化元件的端口與當(dāng)前設(shè)計(jì)中指定的信號(hào)相連接(端口

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論