版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第8章電子設(shè)計(jì)自動(dòng)化8.1EDA概述8.2硬件描述語(yǔ)言VHDL初步8.3VHDL設(shè)計(jì)實(shí)例8.4
QuartusⅡ開(kāi)發(fā)系統(tǒng)8.1EDA概述EDA就是以計(jì)算機(jī)為工作平臺(tái)、以EDA軟件工具為開(kāi)發(fā)環(huán)境、以硬件描述語(yǔ)言為設(shè)計(jì)語(yǔ)言、以ASIC為實(shí)現(xiàn)載體的電子產(chǎn)品自動(dòng)化設(shè)計(jì)過(guò)程,它包括半導(dǎo)體工藝設(shè)計(jì)自動(dòng)化、可編程邏輯器件設(shè)計(jì)自動(dòng)化、電子系統(tǒng)設(shè)計(jì)自動(dòng)化、印刷電路板(PrintedCircuitBoard)PCB設(shè)計(jì)自動(dòng)化、仿真測(cè)試、故障診斷以及形式驗(yàn)證自動(dòng)化。需要說(shuō)明的是,這里所講的是狹義的EDA,沒(méi)有包括模擬電路的設(shè)計(jì)自動(dòng)化。EDA作為一門(mén)嶄新的學(xué)科,它的知識(shí)體系結(jié)構(gòu)為:①現(xiàn)代電子設(shè)計(jì)理論;②可編程邏輯器件原理、結(jié)構(gòu)及應(yīng)用;③硬件描述語(yǔ)言;④EDA工具的開(kāi)發(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年代中期開(kāi)始,人們就不斷地開(kāi)發(fā)出各種計(jì)算機(jī)輔助設(shè)計(jì)工具來(lái)幫助設(shè)計(jì)人員進(jìn)行集成電路和電子系統(tǒng)的設(shè)計(jì)。近40年來(lái),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ī)模集成電路的開(kāi)發(fā)和應(yīng)用,傳統(tǒng)的手工制圖設(shè)計(jì)印刷電路板和集成電路的方法已無(wú)法滿足設(shè)計(jì)精度和效率的要求,于是工程師們開(kāi)始進(jìn)行二維平面圖形的計(jì)算機(jī)輔助設(shè)計(jì),這樣就產(chǎn)生了第一代EDA工具,設(shè)計(jì)者也從繁雜、機(jī)械的計(jì)算、布局和布線工作中解放了出來(lái)。但在EDA發(fā)展的初始階段,EDA工具的供應(yīng)商只有幾家,產(chǎn)品幾乎全部面向PCB設(shè)計(jì)、電路模擬或IC版圖設(shè)計(jì)。例如,目前常用的PCB布線軟件Protel的早期版本Tango、用于電路模擬的SPICE軟件以及后來(lái)產(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)域,開(kāi)始提供帶電路圖編輯工具和邏輯模擬工具的EDA軟件,主要解決了設(shè)計(jì)實(shí)現(xiàn)之前的功能檢驗(yàn)問(wèn)題??偟膩?lái)講,這一階段的EDA水平還很低,對(duì)設(shè)計(jì)工作的支持十分有限,主要存在兩個(gè)方面的問(wèn)題需要解決:①EDA軟件的功能單一、相互獨(dú)立。這個(gè)時(shí)期的EDA工具軟件都是分別針對(duì)設(shè)計(jì)流程中的某個(gè)階段開(kāi)發(fā)的,一個(gè)軟件只能完成其中的一部分工作,所以設(shè)計(jì)者不得不在設(shè)計(jì)流程的不同階段分別使用不同的EDA軟件包。然而,由于不同的公司開(kāi)發(fā)的EDA工具之間的兼容性較差,為了使設(shè)計(jì)流程前一級(jí)軟件的輸出結(jié)果能夠被后一級(jí)軟件接受,就需要人工處理或再運(yùn)行另外的轉(zhuǎn)換軟件,這往往很繁瑣,勢(shì)必影響設(shè)計(jì)的速度。②對(duì)于復(fù)雜電子系統(tǒng)的設(shè)計(jì),不能提供系統(tǒng)級(jí)的仿真和綜合,所以設(shè)計(jì)中的錯(cuò)誤往往只能在產(chǎn)品開(kāi)發(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ì)工具,如原理圖輸入、編譯與連接、邏輯模擬、邏輯綜合、測(cè)試碼生成、版圖自動(dòng)布局以及各種單元庫(kù)均已齊全。不同功能的設(shè)計(jì)工具之間的兼容性得到了很大改善,那些不走兼容道路、想獨(dú)樹(shù)一幟的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)開(kāi)始,從設(shè)計(jì)輸入到版圖輸出的全程設(shè)計(jì)自動(dòng)化。在這個(gè)階段,基于門(mén)陣列和標(biāo)準(zhǔn)單元庫(kù)設(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年代以來(lái))
20世紀(jì)90年代以來(lái),集成電路技術(shù)以驚人的速度發(fā)展,其工藝水平已經(jīng)達(dá)到深亞微米級(jí),一個(gè)芯片上可以集成數(shù)百萬(wàn)甚至上千萬(wàn)只晶體管,工作頻率可達(dá)GHz。這不僅為片上系統(tǒng)SOC(SystemOnChip)的實(shí)現(xiàn)提供了可能,同時(shí)也給EDA技術(shù)提出了更高的要求,促進(jìn)了EDA技術(shù)的發(fā)展。在這一階段,出現(xiàn)了以硬件描述語(yǔ)言、系統(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)用硬件描述語(yǔ)言來(lái)描述數(shù)字電路與系統(tǒng)這是現(xiàn)代EDA技術(shù)的基本特征之一,并且已經(jīng)形成了VHDL和VerilogHDL兩種IEEE(TheInstituteofElectricalandElectronicsEngineers,電氣和電子工程師協(xié)會(huì))標(biāo)準(zhǔn)硬件描述語(yǔ)言。它們均能支持系統(tǒng)級(jí)、算法級(jí)、RTL級(jí)(又稱數(shù)據(jù)流級(jí))和門(mén)級(jí)各個(gè)層次的描述或多個(gè)不同層次的混合描述,涉及的領(lǐng)域有行為描述和結(jié)構(gòu)描述兩種形式。硬件描述與實(shí)現(xiàn)工藝無(wú)關(guān),而且還支持不同層次上的綜合與仿真。硬件描述語(yǔ)言的使用規(guī)范了設(shè)計(jì)文檔,便于設(shè)計(jì)的傳遞、交流、保存、修改及重復(fù)使用。2)高層次的仿真與綜合所謂綜合,就是由較高層次描述到低層次描述、由行為描述到結(jié)構(gòu)描述的轉(zhuǎn)換過(guò)程;仿真是在電子系統(tǒng)設(shè)計(jì)過(guò)程中對(duì)設(shè)計(jì)者的硬件描述或設(shè)計(jì)結(jié)果進(jìn)行查錯(cuò)、驗(yàn)證的一種方法。對(duì)應(yīng)于不同層次的硬件描述,有不同級(jí)別的綜合與仿真工具。高層次的綜合與仿真將自動(dòng)化設(shè)計(jì)的層次提高到了算法行為級(jí),使設(shè)計(jì)者無(wú)需面對(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ì)信息的影響。通過(guò)這些信息,可以再進(jìn)一步地對(duì)設(shè)計(jì)進(jìn)行綜合和優(yōu)化,并保證不會(huì)對(duì)版圖設(shè)計(jì)帶來(lái)負(fù)面的影響。這在深亞微米級(jí)布線時(shí)延已經(jīng)成為主要時(shí)延的情況下,對(duì)加速設(shè)計(jì)過(guò)程的收斂與成功是有所幫助的。在Synopsys和Cadence等著名公司的EDA系統(tǒng)中都采用了這項(xiàng)技術(shù)。4)可測(cè)試性綜合設(shè)計(jì)隨著ASIC規(guī)模和復(fù)雜性的增加,測(cè)試的難度和費(fèi)用急劇上升,由此而產(chǎn)生了將可測(cè)試性電路結(jié)構(gòu)做在ASIC芯片上的思想,于是開(kāi)發(fā)出了掃描插入、內(nèi)建自測(cè)試(BIST)和邊界掃描等可測(cè)試性設(shè)計(jì)(DFT)工具,并已集成到EDA系統(tǒng)中。如Compass公司的TestAssistant和MentorGraphics公司的LBLSTAchitect、BSDAchitect和DFTAdvisor等。5)開(kāi)放性、標(biāo)準(zhǔn)化框架結(jié)構(gòu)的集成設(shè)計(jì)環(huán)境和并行設(shè)計(jì)工程近年來(lái),隨著硬件描述語(yǔ)言等設(shè)計(jì)數(shù)據(jù)格式的逐漸標(biāo)準(zhǔn)化,不同設(shè)計(jì)風(fēng)格和應(yīng)用的要求使得有必要建立開(kāi)放性、標(biāo)準(zhǔn)化的EDA框架。所謂框架,就是一種軟件平臺(tái)結(jié)構(gòu),為EDA工具提供操作環(huán)境??蚣艿年P(guān)鍵在于建立與硬件平臺(tái)無(wú)關(guān)的圖形用戶界面以及工具之間的通信、設(shè)計(jì)數(shù)據(jù)和設(shè)計(jì)流程的管理等,此外還包括各種與數(shù)據(jù)庫(kù)相關(guān)的服務(wù)項(xiàng)目。任何一個(gè)EDA系統(tǒng)只要建立一個(gè)符合標(biāo)準(zhǔn)的開(kāi)放式框架結(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)要求一開(kāi)始就從管理層次上把工藝、工具、任務(wù)、智力和時(shí)間安排協(xié)調(diào)好;在統(tǒng)一的集成設(shè)計(jì)環(huán)境下,由若干相關(guān)的設(shè)計(jì)小組共享數(shù)據(jù)庫(kù)和知識(shí)庫(kù),同步進(jìn)行設(shè)計(jì)。CE改變了傳統(tǒng)的設(shè)計(jì)過(guò)程中,過(guò)分依賴專業(yè)分工和設(shè)計(jì)人員過(guò)分強(qiáng)調(diào)所學(xué)專業(yè)知識(shí)的狀況。8.1.2EDA設(shè)計(jì)語(yǔ)言
1.VHDL和VerilogHDL語(yǔ)言
VHDL是由美國(guó)國(guó)防部在70年代末和80年代初提出的超高速集成電路VHSIC(VeryHighSpeedIntegratedCircuit)計(jì)劃的產(chǎn)物,其目的是為了在承擔(dān)國(guó)防部定貨的各集成電路廠商之間建立一個(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提出了用于快速門(mén)級(jí)仿真的VerilogXL算法,使VerilogHDL得到了迅速發(fā)展。1989年,Cadence公司收購(gòu)了GDA公司,VerilogHDL成了Cadence公司的私有財(cái)產(chǎn)。1990年,Cadence公司決定公開(kāi)發(fā)表VerilogHDL,并成立了OVI(OpenVerilogInternational)組織來(lái)負(fù)責(zé)VerilogHDL的推廣?;赩erilogHDL的優(yōu)越性,VerilogHDL于1995年成為了IEEE的另一個(gè)HDL標(biāo)準(zhǔn)。
幾年以來(lái),EDA界對(duì)VHDL和VerilogHDL這兩種語(yǔ)言一直爭(zhēng)論不休。實(shí)際上這兩種語(yǔ)言各有所長(zhǎng),市場(chǎng)占有率也相差不多。一般認(rèn)為,VerilogHDL是從集成電路的設(shè)計(jì)中發(fā)展而來(lái)的,在門(mén)級(jí)電路、晶體管開(kāi)關(guān)級(jí)電路的描述方面比VHDL強(qiáng),在系統(tǒng)級(jí)的抽象描述方面,VHDL則更合適。目前,大多數(shù)的EDA軟件都同時(shí)支持這兩種硬件描述語(yǔ)言。2.ABEL和AHDL語(yǔ)言與VHDL和VerilogHDL相比,ABEL和AHDL的功能相對(duì)比較簡(jiǎn)單,它們適合于RTL級(jí)和門(mén)級(jí)電路的描述,主要用于可編程邏輯器件的開(kāi)發(fā)。
ABEL語(yǔ)言是由美國(guó)DataI/O公司推出的,該公司也是ABEL語(yǔ)言綜合器的惟一供應(yīng)商,有不少EDA軟件支持ABEL語(yǔ)言,如ispEXPERT、Synario、Foundation等。
AHDL語(yǔ)言則只集成在Altera公司的可編程邏輯器件開(kāi)發(fā)工具中,只能在Altera的開(kāi)發(fā)軟件中進(jìn)行編譯和調(diào)試。3.C語(yǔ)言
在電子系統(tǒng)設(shè)計(jì)中,硬件設(shè)計(jì)采用VHDL和VerilogHDL之類硬件描述語(yǔ)言,軟件設(shè)計(jì)則采用C和C++等編程語(yǔ)言。這種硬件設(shè)計(jì)和軟件設(shè)計(jì)使用不同語(yǔ)言的現(xiàn)象,給設(shè)計(jì)帶來(lái)了不便,延長(zhǎng)了產(chǎn)品開(kāi)發(fā)的周期。從EDA的發(fā)展趨勢(shì)來(lái)看,直接用C語(yǔ)言來(lái)描述硬件是未來(lái)的一個(gè)發(fā)展方向,這樣軟件設(shè)計(jì)人員和硬件設(shè)計(jì)人員之間就有了“共同語(yǔ)言”,從而能夠?qū)崿F(xiàn)軟、硬件協(xié)同設(shè)計(jì),提高設(shè)計(jì)效率。目前,用C語(yǔ)言描述硬件主要有兩個(gè)分支:SystemC和SpecC。SystemC適用于從系統(tǒng)設(shè)計(jì)到邏輯設(shè)計(jì)這一階段;SpecC則適用于從對(duì)技術(shù)要求的把握到系統(tǒng)設(shè)計(jì)這一階段。圖8-1EDA工具的范疇8.1.3EDA開(kāi)發(fā)工具EDA工具主要能夠進(jìn)行三個(gè)方面的輔助設(shè)計(jì)工作:①印刷電路板PCB設(shè)計(jì);②ASIC設(shè)計(jì);③電子系統(tǒng)設(shè)計(jì)。沒(méi)有EDA工具的支持,想要完成超大規(guī)模集成電路或復(fù)雜電子系統(tǒng)的設(shè)計(jì)制造是不可想象的。
全球的EDA軟件供應(yīng)商有近百家之多,大體上可以分成兩類:一類是專業(yè)的EDA軟件公司,如MentorGraphics、CadenceDesignSystems、Synopsys、ViewlogicSystems和Protel等;另一類是半導(dǎo)體器件廠商,為銷售他們的產(chǎn)品而開(kāi)發(fā)EDA工具,Altera、Xilinx、Lattice和Actel等。專業(yè)的EDA軟件公司獨(dú)立于半導(dǎo)體器件廠商,推出的EDA工具有較好的標(biāo)準(zhǔn)化和兼容性,也比較注意追求技術(shù)上的先進(jìn)性,一般將這類工具稱為第三方工具;而半導(dǎo)體器件廠商開(kāi)發(fā)的EDA工具則能夠作出針對(duì)自己器件特點(diǎn)的優(yōu)化設(shè)計(jì)。在表8-1中列出了部分EDA軟件,其中也包括了一些模擬/數(shù)字混合電路的EDA軟件。表8-1部分EDA軟件簡(jiǎn)介表8-1部分EDA軟件簡(jiǎn)介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)的功能,或者說(shuō)系統(tǒng)應(yīng)該做什么;結(jié)構(gòu)是指系統(tǒng)的組成,或者說(shuō)系統(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í)以上的層次稱為高層次。利用硬件描述語(yǔ)言在寄存器傳輸級(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ì),并采用硬件描述語(yǔ)言完成算法級(jí)行為描述,最后由EDA工具完成目標(biāo)器件的設(shè)計(jì)。ASIC、EDA工具和硬件描述語(yǔ)言是高層次設(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)造性的工作與上一章所介紹的基本相同,仍然需要由人工完成,只不過(guò)在高層次設(shè)計(jì)方法中,這些工作不再受市場(chǎng)上通用邏輯器件的局限。②設(shè)計(jì)輸入。一般是采用VHDL/VerilogHDL在算法級(jí)對(duì)系統(tǒng)進(jìn)行行為描述,此外還可以采用比較直觀的圖形輸入方式(方框圖、狀態(tài)圖等)。③編譯。編譯器對(duì)以上設(shè)計(jì)中的HDL描述的語(yǔ)法和語(yǔ)意進(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ì)于比較簡(jiǎn)單的設(shè)計(jì),可以略去這一仿真步驟。⑤綜合。利用綜合器對(duì)HDL源代碼進(jìn)行綜合優(yōu)化處理,生成門(mén)級(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ù)期未來(lái)芯片的實(shí)際性能。如果仿真結(jié)果達(dá)不到設(shè)計(jì)要求,就需要修改HDL源代碼或選擇不同速度品質(zhì)的器件,直至滿足設(shè)計(jì)要求為止。⑧PLD編程。將適配器產(chǎn)生的器件編程文件通過(guò)編程器或下載電纜載入到目標(biāo)芯片——可編程邏輯器件中。⑨器件測(cè)試。在器件編程后,需要利用實(shí)驗(yàn)手段測(cè)試器件最終的功能和性能指標(biāo)。如果是大批量產(chǎn)品的開(kāi)發(fā),通過(guò)更換相應(yīng)廠家的綜合庫(kù),可以很容易轉(zhuǎn)由掩膜ASIC形式實(shí)現(xiàn)。8.2硬件描述語(yǔ)言VHDL初步8.2.1VHDL源程序的基本結(jié)構(gòu)
一個(gè)完整的VHDL源程序通常包含實(shí)體說(shuō)明(EntityDeclaration)、結(jié)構(gòu)體(Architecture)、庫(kù)(Library)、程序包(Package)和配置(Configuration)5個(gè)部分。設(shè)計(jì)實(shí)體(DesignEntity)是VHDL源程序的基本單元,由實(shí)體說(shuō)明和結(jié)構(gòu)體兩部分組成。實(shí)體所代表的對(duì)象幾乎沒(méi)有限制,小可至一個(gè)邏輯門(mén),大可至一個(gè)復(fù)雜的CPU芯片,甚至整個(gè)系統(tǒng)。如果設(shè)計(jì)時(shí)采用自頂向下的層次化設(shè)計(jì)和模塊劃分,則各層的設(shè)計(jì)模塊都可以作為實(shí)體,高層次的實(shí)體可以調(diào)用低層次的實(shí)體。
1.實(shí)體說(shuō)明(EntityDeclaration)實(shí)體說(shuō)明是一個(gè)實(shí)體的外部視圖,其中包括對(duì)該實(shí)體輸入/輸出端口的描述。下面就是實(shí)體說(shuō)明語(yǔ)句的格式:
ENTITY實(shí)體名IS
[類屬參數(shù)說(shuō)明][端口說(shuō)明][實(shí)體說(shuō)明部分][BEGIN
實(shí)體語(yǔ)句部分]
ENDENTITY實(shí)體名;其中,實(shí)體名是設(shè)計(jì)者為該實(shí)體取的一個(gè)名稱。必須強(qiáng)調(diào)的是,VHDL語(yǔ)句都以分號(hào)(;)結(jié)尾,一般不可省略。端口說(shuō)明的書(shū)寫(xiě)格式如下:
PORT({端口名{,端口名}:端口方向數(shù)據(jù)類型;}
端口名{,端口名}:端口方向數(shù)據(jù)類型);端口名是設(shè)計(jì)者賦予每個(gè)外部端口的名稱。表8-2端口方向說(shuō)明
數(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í)體說(shuō)明相配合,用于描述實(shí)體的具體功能,也就是輸入和輸出信號(hào)之間的邏輯關(guān)系。在VHDL文件中,結(jié)構(gòu)體的位置在實(shí)體說(shuō)明之后,編譯器通常是先編譯實(shí)體說(shuō)明,再對(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
[說(shuō)明語(yǔ)句]
BEGIN
[并發(fā)描述語(yǔ)句]
ENDARCHITECTURE結(jié)構(gòu)體名;說(shuō)明語(yǔ)句用于定義或說(shuō)明在該結(jié)構(gòu)體中用到的信號(hào)(Signal)、常量(Constant)、共享變量、元件(Component)和數(shù)據(jù)類型。并發(fā)描述語(yǔ)句是描述實(shí)體功能的主要語(yǔ)句,也是最富有變化的部分。必須強(qiáng)調(diào)的是,這些語(yǔ)句都是并發(fā)(同時(shí))執(zhí)行的,與它們?cè)诔绦蛑谐霈F(xiàn)的先后次序無(wú)關(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è)元件來(lái)使用,而且任何一個(gè)設(shè)計(jì)實(shí)體都可以有多個(gè)結(jié)構(gòu)體。配置語(yǔ)句描述的就是高層設(shè)計(jì)中的元件與低層實(shí)體之間的對(duì)應(yīng)關(guān)系以及實(shí)體與結(jié)構(gòu)體之間的連接關(guān)系。在對(duì)實(shí)體進(jìn)行仿真時(shí),設(shè)計(jì)者可以利用配置語(yǔ)句為實(shí)體選擇不同的結(jié)構(gòu)體,進(jìn)行性能對(duì)比以求獲得性能最佳的結(jié)構(gòu)體。
配置語(yǔ)句一般跟在結(jié)構(gòu)體的后面,其基本書(shū)寫(xiě)格式如下:CONFIGURATION配置名OF實(shí)體名IS
[配置說(shuō)明語(yǔ)句]
END配置名;其中,配置說(shuō)明語(yǔ)句有多種形式,有簡(jiǎn)有繁。對(duì)于不包含塊(Block)語(yǔ)句和元件(Component)語(yǔ)句的結(jié)構(gòu)體,配置說(shuō)明語(yǔ)句有最簡(jiǎn)單的形式:
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語(yǔ)句的結(jié)構(gòu)體,配置說(shuō)明語(yǔ)句可以采用如下形式:
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)體名);如果沒(méi)有指定實(shí)體所對(duì)應(yīng)的結(jié)構(gòu)體,則默認(rèn)最新編譯的結(jié)構(gòu)體與實(shí)體連接。
4.程序包(Package)在一個(gè)設(shè)計(jì)的實(shí)體說(shuō)明和結(jié)構(gòu)體說(shuō)明部分定義的數(shù)據(jù)類型、常量和子程序等,對(duì)其它設(shè)計(jì)單元是不可見(jiàn)(不能引用)的,為了使它們可以為多個(gè)設(shè)計(jì)單元所共享,VHDL語(yǔ)言提供了程序包機(jī)制。程序包是一個(gè)可以單獨(dú)編譯的單元,在其中可以定義一些公用數(shù)據(jù)類型、常量、子程序和元件等,作用與C語(yǔ)言中的H文件類似。在VHDL編譯系統(tǒng)中有許多標(biāo)準(zhǔn)的程序包,用戶也可以自己編寫(xiě)程序包。
一個(gè)程序包由兩大部分組成:程序包說(shuō)明和程序包體,其基本格式為:
PACKAGE程序包名IS
[說(shuō)明語(yǔ)句]
ENDPACKAGE程序包名;
PACKAGEBODY程序包名IS
[說(shuō)明語(yǔ)句]
ENDPACKAGEBODY程序包名;在程序包說(shuō)明中首先對(duì)數(shù)據(jù)類型、常量、子程序(函數(shù)、過(guò)程)和元件等進(jìn)行定義,在程序包體中再描述各項(xiàng)的具體細(xì)節(jié),如常量賦值、子程序的實(shí)現(xiàn)等。程序包說(shuō)明程序包體【例8-3】一個(gè)用戶自己編寫(xiě)的程序包。PACKAGEpkg-exampleISTYPEdigitISINTEGERRANGE0TO9;
CONSTANTpi:REAL:=3.1415926535897936;-定義常量并賦值
CONSTANTdeferred-constant:INTEGER;-定義常量,沒(méi)有賦值
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ì)性操作(如常量賦值)也可以在程序包說(shuō)明中完成,所以在程序包說(shuō)明中沒(méi)有定義子程序時(shí),程序包體可以省略。
5.庫(kù)(Library)庫(kù)的作用與程序包類似,是VHDL設(shè)計(jì)的公共資源,但級(jí)別高于程序包。庫(kù)中存放著已經(jīng)編譯過(guò)的實(shí)體說(shuō)明、結(jié)構(gòu)體、配置和程序包,相當(dāng)于操作系統(tǒng)中的目錄。在VHDL語(yǔ)言中,主要有以下幾種庫(kù):
1)STD庫(kù)
STD庫(kù)是VHDL的標(biāo)準(zhǔn)庫(kù),庫(kù)中有兩個(gè)程序包:STANDARD和TEXTIO(文本文件輸入輸出)。在STANDARD程序包中定義了多種VHDL常用的數(shù)據(jù)類型(如BIT、BIT-ECTOR)、子類型和函數(shù)等;在TEXTIO程序包中定義了支持ASCIII/O操作的若干數(shù)據(jù)類型和子程序,多用于測(cè)試。2)WORK庫(kù)
WORK庫(kù)是現(xiàn)行作業(yè)庫(kù)。設(shè)計(jì)者正在進(jìn)行的設(shè)計(jì)不需任何說(shuō)明,經(jīng)編譯后都會(huì)自動(dòng)存放到WORK庫(kù)中。
3)IEEE庫(kù)除了STD庫(kù)和WORK庫(kù)以外,其它的庫(kù)都被稱為資源庫(kù)。IEEE庫(kù)是最常用、最重要的一個(gè)資源庫(kù)。在該庫(kù)中有一個(gè)很常用的程序包STD-LOGIC-1164,它是被IEEE正式認(rèn)可的標(biāo)準(zhǔn)程序包;另外該庫(kù)中還有一些常用的程序包是由公司提供的,如Synopsys公司提供的STD-LOGIC-ARITH和STD-LOGIC-UNSIGNED。4)ASIC庫(kù)
ASIC庫(kù)是由各個(gè)公司提供的ASIC邏輯單元信息,在進(jìn)行門(mén)級(jí)仿真時(shí)可針對(duì)具體的公司進(jìn)行。5)用戶自定義庫(kù)用戶根據(jù)自身設(shè)計(jì)需要而開(kāi)發(fā)的一些公用程序包、實(shí)體等匯集在一起定義成一個(gè)庫(kù),這就是用戶自定義庫(kù)或稱為用戶庫(kù)。如果在設(shè)計(jì)中要用到某個(gè)庫(kù)中所定義的項(xiàng)目(數(shù)據(jù)類型、子程序、實(shí)體等),首先必須在設(shè)計(jì)之前,用LIBRARY和USE語(yǔ)句使這些項(xiàng)目對(duì)設(shè)計(jì)而言是可見(jiàn)的。這兩條語(yǔ)句的作用與C語(yǔ)言中的INCLUDE語(yǔ)句的作用類似,其一般格式為:
LIBRARY庫(kù)名{,庫(kù)名};
USE庫(kù)名.程序包名.項(xiàng)目名;
第一個(gè)語(yǔ)句表明使用什么庫(kù),第二個(gè)語(yǔ)句表明使用庫(kù)中的哪個(gè)程序包以及程序包中的哪個(gè)項(xiàng)目。最后的項(xiàng)目名也可以用關(guān)鍵字ALL代替,表明程序包中的所有內(nèi)容都可以使用。例如,在使用數(shù)據(jù)類型STD-LOGIC和STD-LOGIC-VECTOR時(shí),由于這兩個(gè)數(shù)據(jù)類型都是在IEEE庫(kù)的STD-LOGIC-1164程序包中定義的,所以必須在實(shí)體說(shuō)明之前增加兩條語(yǔ)句:
LIBRARYIEEE;
USEIEEE.STD-LOGIC-1164.ALL;
但是,“LIBRARYSTD,WORK;”和“USESTD.STANDARD.ALL”這兩條語(yǔ)句對(duì)于任何VHDL源程序都是隱含存在的,不必再顯式寫(xiě)出。
LIBRARY和USE語(yǔ)句的作用范圍從跟在其后的設(shè)計(jì)實(shí)體開(kāi)始,直到這個(gè)實(shí)體的配置結(jié)束。如果一個(gè)VHDL程序中有多個(gè)設(shè)計(jì)實(shí)體,那么在每個(gè)設(shè)計(jì)實(shí)體之前應(yīng)根據(jù)需要重復(fù)使用這兩條語(yǔ)句。8.2.2VHDL的基本語(yǔ)法
1.標(biāo)識(shí)符
VHDL′87中關(guān)于標(biāo)識(shí)符的語(yǔ)法規(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)必須以英文字母開(kāi)頭。
(3)下劃線的前后必須有英文字母或數(shù)字。
(4)短標(biāo)識(shí)符不區(qū)分大小寫(xiě)。
下面這些標(biāo)識(shí)符是VHDL語(yǔ)言的關(guān)鍵字(保留字),用戶自定義的標(biāo)識(shí)符不能與這些關(guān)鍵字重名。VHDL語(yǔ)言的關(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)用反斜杠來(lái)定界。如:\valid\,\eda-control\。
(2)永遠(yuǎn)與短標(biāo)識(shí)符不同。如:\valid\與valid不同。
(3)區(qū)分大小寫(xiě)。如:\valid\與\Valid\不同。
(4)允許包含圖形符號(hào)和空格符。如:\modeAandB\,\$100\,\p%name\。
(5)反斜杠之間的字符可以是保留字。如:\entity\,\architecture\。
(6)允許下畫(huà)線相鄰。如:\two--computers\。
(7)擴(kuò)展標(biāo)識(shí)符的名字中如果有一個(gè)反斜杠,則用兩個(gè)相鄰的反斜杠代表它。如:\ab\\c\表示該標(biāo)識(shí)符的名字為ab\c。
2.對(duì)象
VHDL語(yǔ)言中的對(duì)象(Object)是一些能夠存放或接收數(shù)據(jù)的容器(客體),共有4種基本類型:常量(CONSTANT)、變量(VARIABLE)、信號(hào)(SIGNAL)和文件(FILE)。1)常量常量中存放的是固定不變的值,可以在程序包、實(shí)體說(shuō)明、結(jié)構(gòu)體、子程序(函數(shù)、過(guò)程)和進(jìn)程中定義,定義的格式如下:
CONSTANT常量名{,常量名}:數(shù)據(jù)類型[約束條件][:=初值];例如,
CONSTANTa1,a2:STD-LOGIC-VECTOR(3DOWNTO0):="1001";
CONSTANTa3:INTEGERRANGE0TO15:=9;常量只能被賦值一次,一般在定義一個(gè)常量時(shí)必須同時(shí)給它一個(gè)值,但在某些特殊情況下,如在程序包說(shuō)明中定義常量時(shí)可以先不賦值,在程序包體中再賦值,這種常量被稱為緩定常量,如例8-3中的常量deferred-constant。2)變量變量用于暫時(shí)數(shù)據(jù)的存儲(chǔ),普通變量只能在子程序(函數(shù)、過(guò)程)和進(jìn)程中定義,定義的格式為:
VARIABLE變量名{,變量名}:數(shù)據(jù)類型[約束條件][:=初值];例如,
VARLABLEsum:BIT:=′1′;在VHDL′93中增加了“共享變量”,共享變量可以在程序包、實(shí)體說(shuō)明或結(jié)構(gòu)體中進(jìn)行定義,定義的格式為:
SHAREDVARIABLE變量名{,變量名}:數(shù)據(jù)類型[約束條件][:=初值];3)信號(hào)信號(hào)代表電路中各元件之間的連接線,可以在程序包、實(shí)體說(shuō)明或結(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ù),在仿真測(cè)試時(shí),測(cè)試輸入的激勵(lì)數(shù)據(jù)和測(cè)試的結(jié)果都可以存放在文件中。文件不能像變量或信號(hào)那樣通過(guò)賦值更新內(nèi)容,但可以作為參數(shù)向子程序傳遞,通過(guò)子程序?qū)ξ募M(jìn)行讀和寫(xiě)操作。文件定義的格式為:
FILE文件名:文件的類型OPEN[打開(kāi)文件的模式]IS"物理文件名";例如,
FILEin-file:TEXTOPENREAD-MODEIS"test/test1.dat";
FILEout-file:TEXTOPENWRITE-MODEIS"result1.dat";
該例說(shuō)明,in-file是一個(gè)文本(TEXT)文件,由于打開(kāi)文件的模式為READ-MODE,所以in-file是一個(gè)輸入文件,其代表的實(shí)際文件為當(dāng)前工作目錄下test子目錄下的test1.dat;out-file則是一個(gè)輸出文本文件,其代表的實(shí)際文件為當(dāng)前工作目錄下的result1.dat。另外,如果打開(kāi)文件的模式缺省,則默認(rèn)為READ-MODE。
需要強(qiáng)調(diào)的是,對(duì)象必須遵循先定義后使用的原則,而且其作用范圍與其定義的位置密切相關(guān)。例如,在結(jié)構(gòu)體說(shuō)明部分定義的共享變量可以用于整個(gè)結(jié)構(gòu)體;而在某個(gè)進(jìn)程中定義的普通變量,其作用范圍僅限于該進(jìn)程,如果希望該變量的值作用于進(jìn)程之外,則只能將該變量賦值給相同數(shù)據(jù)類型的信號(hào)或共享變量。
另外,一條對(duì)象說(shuō)明語(yǔ)句中的初值是賦給這條語(yǔ)句中所有對(duì)象的,初值的形式除了可以是直接的具體數(shù)值以外,還可以是表達(dá)式或函數(shù),例如:CONSTANTconst-a:INTEGER:=y(tǒng)our-function(TRUE,3);變量和信號(hào)均可多次被賦予不同的值,如果說(shuō)明信號(hào)或變量時(shí)沒(méi)有賦初值,則編譯系統(tǒng)取其默認(rèn)值,相同數(shù)據(jù)類型的信號(hào)與變量之間可以相互賦值。
3.?dāng)?shù)據(jù)類型
VHDL有很強(qiáng)的數(shù)據(jù)類型,這種強(qiáng)類型語(yǔ)言的特點(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庫(kù)的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庫(kù)的TEXTIO程序包中定義了一個(gè)文件類型TEXT:
TYPETEXTISFILEOFSTRING;在IEEE庫(kù)的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庫(kù)的STD-LOGIC-ARITH程序包中定義了數(shù)據(jù)類型SIGNED和UNSIGNED。SIGNED被看作二進(jìn)制補(bǔ)碼的STD-LOGIC-VECTOR,UNSIGNED被看作無(wú)符號(hào)二進(jìn)制數(shù)的STD-LOGIC-VECTOR。3)用戶自定義數(shù)據(jù)類型除了使用VHDL編譯系統(tǒng)自帶的程序包中定義的數(shù)據(jù)類型外,用戶也可以自己定義新的數(shù)據(jù)類型(TYPE)及子類型(SUBTYPE)。數(shù)據(jù)類型、子類型定義語(yǔ)句的格式一般為:
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的主要描述語(yǔ)句
按照語(yǔ)句執(zhí)行的順序,VHDL的描述語(yǔ)句可以分成兩類:順序描述語(yǔ)句和并發(fā)描述語(yǔ)句。顧名思義,順序描述語(yǔ)句是按照語(yǔ)句書(shū)寫(xiě)的順序依次執(zhí)行,這與高級(jí)語(yǔ)言的編程是一樣的;而并發(fā)描述語(yǔ)句則是同時(shí)執(zhí)行的,與語(yǔ)句在源文件中的先后次序無(wú)關(guān)。
1.順序描述語(yǔ)句順序描述語(yǔ)句只能出現(xiàn)在進(jìn)程或子程序(函數(shù)、過(guò)程)中,它包括:變量賦值語(yǔ)句、信號(hào)代入語(yǔ)句、WAIT語(yǔ)句、IF語(yǔ)句、CASE語(yǔ)句、LOOP語(yǔ)句、NEXT語(yǔ)句、EXIT語(yǔ)句、RETURN語(yǔ)句、NULL語(yǔ)句、過(guò)程調(diào)用語(yǔ)句、斷言語(yǔ)句和REPORT語(yǔ)句。1)變量賦值語(yǔ)句變量賦值語(yǔ)句的書(shū)寫(xiě)格式為:目的變量名:=表達(dá)式;該語(yǔ)句表明目的變量的值將由表達(dá)式所表達(dá)的新值代替,但兩者的數(shù)據(jù)類型必須相同。表達(dá)式可以是數(shù)值、字符、信號(hào)或函數(shù)調(diào)用。2)信號(hào)代入語(yǔ)句信號(hào)代入語(yǔ)句的書(shū)寫(xiě)格式為:目的信號(hào)名<=表達(dá)式;信號(hào)代入與變量賦值不僅形式不同,而且其操作過(guò)程也不相同。在變量賦值語(yǔ)句中,該語(yǔ)句一旦被執(zhí)行,其值立即被賦予變量,在執(zhí)行下一條語(yǔ)句時(shí),該變量的值就是上一句新賦的值。但在信號(hào)代入語(yǔ)句被執(zhí)行時(shí),不會(huì)立即發(fā)生代入操作,在執(zhí)行下一條語(yǔ)句時(shí),信號(hào)仍采用原來(lái)的值。這是因?yàn)樾盘?hào)代入語(yǔ)句有兩個(gè)操作過(guò)程:代入語(yǔ)句的處理過(guò)程和實(shí)際的代入過(guò)程,這兩個(gè)過(guò)程是分開(kāi)進(jìn)行的。在執(zhí)行信號(hào)代入語(yǔ)句時(shí),首先對(duì)所有的信號(hào)代入語(yǔ)句進(jìn)行處理,也就是先把相關(guān)信號(hào)中的值讀出來(lái),并不進(jìn)行代入操作;在處理完畢后,再用前面讀出的值進(jìn)行實(shí)際的代入操作。3)IF語(yǔ)句①I(mǎi)F語(yǔ)句作門(mén)閂控制:其書(shū)寫(xiě)格式為:[IF標(biāo)號(hào):]IF布爾表達(dá)式THEN
順序描述語(yǔ)句
ENDIF[IF標(biāo)號(hào)];當(dāng)執(zhí)行到該IF語(yǔ)句時(shí),首先判斷布爾表達(dá)式的值。如果布爾表達(dá)式的值為T(mén)RUE,則執(zhí)行其中的順序描述語(yǔ)句;否則,就跳過(guò)該IF語(yǔ)句,轉(zhuǎn)而執(zhí)行該IF語(yǔ)句后的其它語(yǔ)句。例如:
IF(en=′1′)THENa<=b;ENDIF;該語(yǔ)句表明,當(dāng)en=′1′時(shí),a、b完全相等,a隨b的變化而變化;當(dāng)en≠′1′時(shí),a<=b語(yǔ)句不被執(zhí)行,無(wú)論b發(fā)生什么變化,a都將維持原值不變。(2)IF語(yǔ)句作二選擇控制:其書(shū)寫(xiě)格式為:[IF標(biāo)號(hào):]IF布爾表達(dá)式THEN
順序描述語(yǔ)句
ELSE
順序描述語(yǔ)句
ENDIF[IF標(biāo)號(hào)];當(dāng)執(zhí)行到該IF語(yǔ)句時(shí),首先判斷布爾表達(dá)式的值。如果布爾表達(dá)式的值為T(mén)RUE,則執(zhí)行THEN與ELSE之間的順序描述語(yǔ)句;否則,就執(zhí)行ELSE與ENDIF之間的順序描述語(yǔ)句。(3)IF語(yǔ)句作多選擇控制:其書(shū)寫(xiě)格式為:[IF標(biāo)號(hào):]IF布爾表達(dá)式THEN
順序描述語(yǔ)句
ELSIF布爾表達(dá)式THEN-注意,不是ELSEIF
順序描述語(yǔ)句
{ELSIF布爾表達(dá)式THEN
順序描述語(yǔ)句}
[ELSE
順序描述語(yǔ)句]
ENDIF[IF標(biāo)號(hào)];
在這種多選擇控制的IF語(yǔ)句中,設(shè)置了多個(gè)條件(布爾表達(dá)式)。在執(zhí)行時(shí),按照書(shū)寫(xiě)的順序依次判斷各個(gè)條件,如果上一個(gè)條件不滿足,再判斷下一個(gè)條件;當(dāng)滿足其中的一個(gè)條件時(shí),執(zhí)行該條件后所跟的順序描述語(yǔ)句,執(zhí)行完畢后不再對(duì)剩余的條件作判斷,而是直接跳出該IF語(yǔ)句,轉(zhuǎn)而執(zhí)行該IF語(yǔ)句后的其它語(yǔ)句;當(dāng)所有的條件都不滿足時(shí),如果有ELSE語(yǔ)句,則在執(zhí)行完ELSE之后的順序描述語(yǔ)句后跳出該IF語(yǔ)句,否則直接跳出該IF語(yǔ)句。4)CASE語(yǔ)句
CASE語(yǔ)句的一般格式如下:[CASE標(biāo)號(hào):]CASE條件表達(dá)式ISWHEN條件表達(dá)式的值=>順序描述語(yǔ)句
{WHEN條件表達(dá)式的值=>順序描述語(yǔ)句}
[WHENOTHERS=>順序描述語(yǔ)句]
ENDCASE[CASE標(biāo)號(hào)];其中條件表達(dá)式必須是離散類型或一維數(shù)組類型;條件表達(dá)式的值有4種表示形式,分別為單個(gè)值、多個(gè)值、取值范圍和其它所有的值:WHEN值=>順序描述語(yǔ)句-單個(gè)值
WHEN值{︱值}=>順序描述語(yǔ)句-多個(gè)值
WHEN值TO值=>順序描述語(yǔ)句-取值范圍
WHEN值DOWNTO值=>順序描述語(yǔ)句-取值范圍
WHENOTHERS=>順序描述語(yǔ)句-其它所有的值CASE語(yǔ)句根據(jù)條件表達(dá)式的取值,選擇執(zhí)行相應(yīng)的分支(WHEN子句)中“=>”后面的順序描述語(yǔ)句。CASE語(yǔ)句的各個(gè)分支之間是并行、互斥的關(guān)系,不允許在不同分支中出現(xiàn)相同的值;并且所有的分支合起來(lái)應(yīng)包括條件表達(dá)式值域中的所有值;如果要使用OTHERS分支,則只能有一個(gè),并且要放在最后。5)LOOP語(yǔ)句
LOOP語(yǔ)句類似于高級(jí)編程語(yǔ)言中的循環(huán)語(yǔ)句。LOOP語(yǔ)句有兩種書(shū)寫(xiě)格式:
(1)FOR循環(huán)變量,其格式為:[LOOP標(biāo)號(hào):]FOR循環(huán)變量IN循環(huán)范圍LOOP
順序描述語(yǔ)句
ENDLOOP[LOOP標(biāo)號(hào)];循環(huán)變量不需要顯式說(shuō)明,必須為離散量;循環(huán)范圍就是循環(huán)變量的取值范圍,用它來(lái)說(shuō)明循環(huán)的次數(shù)。每循環(huán)一次,循環(huán)變量的值自動(dòng)改變,但不能人為對(duì)其賦值。(2)WHILE條件,其格式為:[LOOP標(biāo)號(hào):]WHILE(布爾表達(dá)式)LOOP
順序描述語(yǔ)句
ENDLOOP[LOOP標(biāo)號(hào)];每次執(zhí)行循環(huán)之前先檢查布爾表達(dá)式的值,如果為T(mén)RUE,則執(zhí)行循環(huán);如果為FALSE,則結(jié)束循環(huán)狀態(tài),繼而執(zhí)行該LOOP語(yǔ)句之后的下一條語(yǔ)句。6)NEXT語(yǔ)句和EXIT語(yǔ)句
NEXT語(yǔ)句和EXIT語(yǔ)句均為L(zhǎng)OOP語(yǔ)句中的循環(huán)控制語(yǔ)句。
NEXT語(yǔ)句的書(shū)寫(xiě)格式為:
NEXT[LOOP標(biāo)號(hào)][WHEN布爾表達(dá)式];在LOOP語(yǔ)句中執(zhí)行NEXT語(yǔ)句將停止當(dāng)前的這一次循環(huán),轉(zhuǎn)入下一次新的循環(huán)。NEXT后的標(biāo)號(hào)表示下一次循環(huán)的起始位置;如果標(biāo)號(hào)缺省,即進(jìn)入當(dāng)前這一層LOOP語(yǔ)句的下一次循環(huán)?!癢HEN布爾表達(dá)式”表示只有當(dāng)布爾表達(dá)式取值為T(mén)RUE時(shí)NEXT語(yǔ)句才被執(zhí)行,否則不執(zhí)行;如果這一項(xiàng)缺省,表示無(wú)條件執(zhí)行NEXT語(yǔ)句。EXIT語(yǔ)句的書(shū)寫(xiě)格式為:
EXIT[LOOP標(biāo)號(hào)][WHEN布爾表達(dá)式];與NEXT語(yǔ)句不同,在LOOP語(yǔ)句中執(zhí)行EXIT語(yǔ)句將結(jié)束當(dāng)前這一層的循環(huán)狀態(tài),從當(dāng)前這一層的LOOP語(yǔ)句中跳出。如果EXIT后有標(biāo)號(hào),則表示將跳到標(biāo)號(hào)處繼續(xù)執(zhí)行;如果標(biāo)號(hào)缺省,下一條要執(zhí)行的語(yǔ)句就是繼本層LOOP語(yǔ)句之后的下一條語(yǔ)句?!癢HEN布爾表達(dá)式”的作用與NEXT語(yǔ)句中的相同。
2.并發(fā)描述語(yǔ)句
在VHDL的結(jié)構(gòu)體中沒(méi)有規(guī)定語(yǔ)句的執(zhí)行次序,所有的語(yǔ)句都可以同時(shí)執(zhí)行。在任何一個(gè)時(shí)刻,每個(gè)語(yǔ)句是否執(zhí)行僅取決于該語(yǔ)句中的敏感信號(hào)是否發(fā)生了新的變化,敏感信號(hào)每發(fā)生一次變化,該語(yǔ)句就執(zhí)行一次。
VHDL結(jié)構(gòu)體中的并發(fā)語(yǔ)句包括:信號(hào)代入語(yǔ)句、塊(BLOCK)語(yǔ)句、進(jìn)程(PROCESS)語(yǔ)句、斷言(ASSERT)語(yǔ)句、過(guò)程調(diào)用語(yǔ)句、生成(GENERATE)語(yǔ)句和元件例化語(yǔ)句。1)進(jìn)程語(yǔ)句在VHDL中,一個(gè)功能相對(duì)獨(dú)立的電路模塊可以用一個(gè)PROCESS語(yǔ)句來(lái)描述。VHDL的結(jié)構(gòu)體中允許有多個(gè)進(jìn)程語(yǔ)句,各進(jìn)程語(yǔ)句之間是并行關(guān)系,而每個(gè)進(jìn)程內(nèi)部的各語(yǔ)句則是按照它們排列的順序執(zhí)行的。PROCESS語(yǔ)句的基本格式為:[進(jìn)程名:]PROCESS(敏感信號(hào)表)[IS] [進(jìn)程說(shuō)明區(qū)]
BEGIN
順序并發(fā)語(yǔ)句
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)程便被激活,從而開(kāi)始按順序執(zhí)行進(jìn)程中的語(yǔ)句,在執(zhí)行完進(jìn)程的最后一條語(yǔ)句后,進(jìn)程被掛起,等待再次被激活。反之,如果沒(méi)有這樣的信號(hào)發(fā)生變化,進(jìn)程中的語(yǔ)句就不會(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)代入語(yǔ)句信號(hào)代入語(yǔ)句也可以作為并行語(yǔ)句出現(xiàn)在結(jié)構(gòu)體中,共有三種形式:
(1)并發(fā)信號(hào)代入語(yǔ)句,其格式為:目的信號(hào)名<=表達(dá)式;(2)條件信號(hào)代入語(yǔ)句,其格式為:目的信號(hào)名<=表達(dá)式WHEN布爾表達(dá)式ELSE{表達(dá)式WHEN布爾表達(dá)式ELSE}
表達(dá)式;(3)選擇信號(hào)代入語(yǔ)句,其格式為:
WITH條件表達(dá)式SELECT
目的信號(hào)名<={表達(dá)式WHEN條件表達(dá)式的值,}
表達(dá)式WHEN條件表達(dá)式的值;
結(jié)構(gòu)體中的這三種信號(hào)代入語(yǔ)句實(shí)際上是進(jìn)程語(yǔ)句在特定情況下的縮寫(xiě)。在功能上和語(yǔ)法上,分別與順序語(yǔ)句中的信號(hào)代入語(yǔ)句、IF語(yǔ)句和CASE語(yǔ)句類似。需要強(qiáng)調(diào)的是,由于結(jié)構(gòu)體中的信號(hào)代入語(yǔ)句是并發(fā)執(zhí)行(并發(fā)處理、并發(fā)代入)的,所以不允許出現(xiàn)多個(gè)對(duì)同一個(gè)信號(hào)的代入語(yǔ)句;而這種情況對(duì)順序信號(hào)代入語(yǔ)句是允許的,因?yàn)榇胧前错樞虻?,所以信?hào)以最后代入的值作為最終值。3)元件例化語(yǔ)句元件例化是指在層次化設(shè)計(jì)中,將已經(jīng)編譯好的設(shè)計(jì)實(shí)體定義為元件并在當(dāng)前的設(shè)計(jì)中調(diào)用的過(guò)程。元件例化一般由元件定義語(yǔ)句、元件例化語(yǔ)句和元件配置語(yǔ)句三部分組成。(1)元件定義語(yǔ)句:用于將一個(gè)設(shè)計(jì)實(shí)體定義成一個(gè)元件,存在于結(jié)構(gòu)體說(shuō)明部分或程序包說(shuō)明部分,其書(shū)寫(xiě)格式為:
COMPONENT元件名IS
[類屬參數(shù)說(shuō)明]端口說(shuō)明
ENDCOMPONENT元件名;
元件名是用戶給例化元件起的名字,一般就是它所代表的實(shí)體的名字。元件定義中的類屬參數(shù)說(shuō)明和端口說(shuō)明與例化元件所代表的實(shí)體中的這兩項(xiàng)完全相同。(2)元件例化語(yǔ)句:用于調(diào)用例化元件,即把例化元件的端口與當(dāng)前設(shè)計(jì)中指定的信號(hào)相連接(端口
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度安全風(fēng)險(xiǎn)評(píng)估責(zé)任書(shū)協(xié)議預(yù)防事故發(fā)生3篇
- 2024紙箱購(gòu)銷合同書(shū)
- 2025年度電力工程車輛司機(jī)聘用協(xié)議書(shū)及安全要求3篇
- 2025年度餐飲服務(wù)業(yè)個(gè)人臨時(shí)雇傭合同范本4篇
- 2025年校企合作產(chǎn)學(xué)研合作創(chuàng)新基地建設(shè)合同3篇
- 2025年度個(gè)人合伙餐飲連鎖經(jīng)營(yíng)合作協(xié)議書(shū)4篇
- 2025個(gè)人工傷賠償協(xié)議書(shū)范本5篇
- 2025年江西贛州稀土集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 2025年蓄水池建筑工程施工質(zhì)量保修服務(wù)合同3篇
- 2025年遼寧朝陽(yáng)水務(wù)集團(tuán)有限公司招聘筆試參考題庫(kù)含答案解析
- 安徽省蕪湖市2023-2024學(xué)年高一上學(xué)期期末考試 英語(yǔ) 含答案
- 電力工程施工安全風(fēng)險(xiǎn)評(píng)估與防控
- 醫(yī)學(xué)教程 常見(jiàn)體表腫瘤與腫塊課件
- 內(nèi)分泌系統(tǒng)異常與虛勞病關(guān)系
- 智聯(lián)招聘在線測(cè)評(píng)題
- DB3418T 008-2019 宣紙潤(rùn)墨性感官評(píng)判方法
- 【魔鏡洞察】2024藥食同源保健品滋補(bǔ)品行業(yè)分析報(bào)告
- 生豬屠宰獸醫(yī)衛(wèi)生檢驗(yàn)人員理論考試題及答案
- 鋼筋桁架樓承板施工方案
- 2024年駐村第一書(shū)記工作總結(jié)干貨3篇
- 教室裝修施工計(jì)劃
評(píng)論
0/150
提交評(píng)論