電子設(shè)計自動化EDA_第1頁
電子設(shè)計自動化EDA_第2頁
電子設(shè)計自動化EDA_第3頁
電子設(shè)計自動化EDA_第4頁
電子設(shè)計自動化EDA_第5頁
已閱讀5頁,還剩410頁未讀 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1電子設(shè)計自動化

(EDA)ElectronicDesignAutomation主講:王成義辦公室:文理大樓411Email:CYWANG@SDAU.EDU.CN電子與通信工程系2第0章引論第1章可編程邏輯器件(PLD)的原理與應(yīng)用第2章VHDL程序編程基礎(chǔ)第5章電路仿真工具Multisim及其應(yīng)用第3章VHDL程序設(shè)計進階第4章印制電路板(PCB)設(shè)計及其工具3第0章引論

0.1、電子設(shè)計自動化概述

0.2、電子系統(tǒng)的仿真、綜合與實現(xiàn)40.1、電子設(shè)計自動化概述

電子設(shè)計的歷史:

追溯至19世紀20世紀50年代:手工,設(shè)計效率、設(shè)計水平低20世紀60年代:IC出現(xiàn),計算機的應(yīng)用,大規(guī)模集成電路設(shè)計、復雜電子系統(tǒng)設(shè)計20世紀70年代:CAD工具、邏輯綜合與優(yōu)化、

SPLD(Simple)

Computer

Aided

Design,

Programable

Logic

Device

1958年9月12日

,杰克·基爾比發(fā)明集成電路

(鍺)1959年7月

,羅伯特·諾伊斯也發(fā)明了集成電路

(硅)520世紀80年代:印制電路板PCB(Printed

Circuit

Board)自動布局布線工具、HDL

(Hardware

Description

Language)

(VHDL、

Verilog

HDL)及其仿真工

具、CPLD(ComplexPLD)20世紀90年代:PAC(ProgramableAnalogCircuit)標準HDL的綜合工具以上設(shè)計技術(shù)統(tǒng)稱:電子設(shè)計自動化(ElectronicDesignAutomation)21世紀:SoPC

(可編程片上系統(tǒng))

SystemonProgrammableChip

6電子設(shè)計的層次:(由上至下)集成電路技術(shù)、計算機技術(shù)與EDA的關(guān)系系統(tǒng)級、功能級、邏輯級、電路級、物理級集成電路技術(shù)和計算機技術(shù)是EDA技術(shù)發(fā)展的基礎(chǔ)。反過來,EDA技術(shù)為電子設(shè)計提供了強有力的支持,不僅使電子系統(tǒng)的規(guī)模日益復雜,而且使電子產(chǎn)品的周期不斷縮短,從而又推到了集成電路和計算機技術(shù)以更快的速度發(fā)展。70.2、電子系統(tǒng)的仿真、綜合與實現(xiàn)

★仿真(又稱模擬)(Simulation):

用計算機模仿電子系統(tǒng)的實際工作情況。

一般來說,仿真有問題,設(shè)計一定有問題;仿真沒有問題,設(shè)計不一定沒有問題?!锞C合(Synthesis):將高層次的設(shè)計描述轉(zhuǎn)換成由低層次便于實現(xiàn)的模塊所裝配成的統(tǒng)一實體。分為:自然語言綜合

、高層(行為)綜合、邏輯綜合、版圖綜合。8★實現(xiàn)(Implementation):電子系統(tǒng)的最終載體。實現(xiàn)方式:通用IC、PLD、定制IC。★PCB制作:9第1章PLD的原理與應(yīng)用1.1、SPLD的原理與組成1.2、CPLD的結(jié)構(gòu)與工作原理1.3、FPGA的結(jié)構(gòu)與工作原理1.4、CPLD/FPGA生產(chǎn)商1.5、CPLD與FPGA的編程與配置1.6、CPLD/FPGA的開發(fā)工具1.7、FPGA/CPLD設(shè)計流程1.8、ALTERA開發(fā)工具QUARTUSII10數(shù)字集成電路:通用集成電路、專用集成電路(ASIC)Application-SpecificIntegratedCircuit通用集成電路:74/54、C4000專用集成電路:為特定用途而設(shè)計和制造的器件,是用戶定制的IC。分為:全定制、

半定制11半定制電路門陣列(GA)可編程邏輯器件(PLD)門海(SoG)SPLDHDPLDPROMPLAPALGALCPLDFPGAPLD特點:高密度、高速度、高開發(fā)效率121.1、SPLD的原理與組成

PLD的核心結(jié)構(gòu)1.1.1PLD的基本結(jié)構(gòu)數(shù)據(jù)輸入輸入電路與門陣列或門陣列輸出電路數(shù)據(jù)輸出}互補輸入與項與或式}……緩沖互補緩沖提供不同輸出結(jié)構(gòu)(課本P27)131.1.2PLD內(nèi)部電路的表示方法常用邏輯門符號與現(xiàn)有國標符號的對照14PLD的互補緩沖器PLD的互補輸入PLD中與陣列表示PLD中或陣列的表示陣列線連接表示

PLD中的邏輯符號表示方法15PLD中的邏輯符號表示方法16PROM基本結(jié)構(gòu):地址譯碼器輸出邏輯函數(shù)是:1.1.3PROM17存儲單元邏輯函數(shù)表示:18PROM的邏輯陣列結(jié)構(gòu):19PROM表達的PLD陣列圖用PROM完成半加器邏輯陣列20PLA邏輯陣列示意圖1.1.4PLA21PLA與PROM的比較22PAL結(jié)構(gòu):PAL的常用表示形式:1.1.5PAL23一種PAL16V8的部分結(jié)構(gòu)圖241.1.6GAL24GAL16V8的結(jié)構(gòu)圖輸入口可編程與陣列24時鐘信號輸入輸入/輸出口輸出邏輯宏單元三態(tài)控制固定或陣列25OLMC的內(nèi)部結(jié)構(gòu)圖262728293031321.2、CPLD的結(jié)構(gòu)與工作原理SPLD器件基本上已被淘汰,只有GAL還在應(yīng)用。原因:1.陣列規(guī)模小,資源不夠用于設(shè)計數(shù)字系統(tǒng)。2.片內(nèi)寄存器資源不足,難以構(gòu)成豐富的時序電路。3.I/O不夠靈活,限制了片內(nèi)資源的利用率。4.編程不便,需用專用的編程工具。所以:GALCPLD典型CPLD:ALTERAMAX7000系列33MAX7000包含32到256個宏單元,每16個宏單元組成一個邏輯陣列塊(LogicArrayBlock,LAB)。MAX7000結(jié)構(gòu)中包含5部分:1.邏輯陣列塊2.宏單元3.擴展乘積項(共享和并聯(lián))4.可編程連線陣列5.I/O控制塊34(1)邏輯陣列塊(LAB)EPM7256S的LAB結(jié)構(gòu)35MAX7000系列的單個宏單元結(jié)構(gòu)PRNCLRNENA邏輯陣列全局清零共享邏輯擴展項清零時鐘清零選擇寄存器旁路并行擴展項通往I/O模塊通往PIA乘積項選擇矩陣來自I/O引腳全局時鐘QDEN來自PIA的36個信號快速輸入選擇2(2)宏單元VCC3637(3)擴展乘積項共享擴展乘積項結(jié)構(gòu)3839并聯(lián)擴展項饋送方式4041(4)可編程連線陣列

不同的LAB通過在可編程連線陣列(PIA)上布線,以相互連接構(gòu)成所需的邏輯。PIA信號布線到LAB的方式42(4)可編程連線陣列

不同的LAB通過在可編程連線陣列(PIA)上布線,以相互連接構(gòu)成所需的邏輯。PIA信號布線到LAB的方式43(5)I/O控制塊EPM7128S器件的I/O控制塊44(5)I/O控制塊EPM7128S器件的I/O控制塊451.3.1查找表1.3、FPGA的結(jié)構(gòu)與工作原理FPGA:現(xiàn)場可編程門陣列(FieldProgrammableGateArray)

查找表(Look-Up-Table)簡稱為LUT,LUT本質(zhì)上就是一個RAM。目前FPGA中多使用4輸入的LUT,所以每一個LUT可以看成一個有4位地址線的16x1的RAM。46FPGA查找表單元內(nèi)部結(jié)構(gòu)MUXF471.3.2Cyclone/CycloneII系列器件的結(jié)構(gòu)與原理Cyclone/CycloneⅡ系列器件是Altera公司的一款低成本的、高性價比的FPGA,它的結(jié)構(gòu)和工作原理在FPGA中具有典型性。

Cyclone與CycloneⅡ系列器件的基本結(jié)構(gòu)、原理類似。Cyclone系列器件主要有以下部分組成:

邏輯陣列塊LAB、嵌入式存儲器塊、I/O單元、嵌入式硬件乘法器、鎖相環(huán)PLL等。48CycloneLE結(jié)構(gòu)圖4950CycloneLE普通模式

5152CycloneLE動態(tài)算術(shù)模式

5354CycloneLAB結(jié)構(gòu)

5556LAB陣列

5758LAB控制信號生成

5960快速進位選擇鏈

6162LUT鏈和寄存器鏈的使用

63LVDS連接

Low-VoltageDifferentialSignaling低壓差分信號641.4、CPLD/FPGA生產(chǎn)商ALTERACPLD:MAX7000/S/A/B系列:EPM7128SMAX9000/A系列MAX3000系列:MAXII系列:EPM240(570,1270,2210)/GMAXIII系列:EPM240(570,1270,2210)/GFPGA:FLEX系列:10K、10A、10KE,EPF10K30EAPEX系列:20K、20KEEP20K200EACEX系列:1K系列EP1K30、EP1K100STRATIX系列:EP1S10(20,25,30,40,50,60,80,120)CYCLONE系列:EP1C3(4,6,12,20)StratixGX系列CYCLONEII系列:EP2C5(8,20,35,50,70)STRATIXII系列:EP2S15(30,60,90,130,180)CYCLONEIII系列:EP3C5(10,16,25,40,55,80,120)STRATIXIII系列:EP3SL15(50,70,110,150,200,340)65XILINXCPLD:FPGA:XC9500系列:XC95108、XC95256XC3000系列,XC4000系列,XC5000系列Virtex系列,VirtexII系列SPARTAN系列:XCS10、XCS20、XCS30SPARTANII系列LATTICECPLD:FPGA:ispMACH4000V/B/C/Z系列MachX0系列ispLSI系列LatticeEC/ECP系列LatticeXP系列66其他PLD公司:ACTEL公司:ACT1/2/3、40MXATMEL公司:ATF1500AS系列、40MXCYPRESS公司QUIKLOGIC公司SOMUCHIC!FPGACPLD671.5、CPLD與FPGA的編程與配置ALTERAByteBlaster(MV)下載接口此接口既可作編程下載口,也可作JTAG接口JTAG:JointTestActionGroup68此接口既可作編程下載口,也可作JTAG接口ALTERAUSBBlaster下載接口691.6、CPLD/FPGA的開發(fā)工具集成的FPGA/CPLD開發(fā)環(huán)境:MAXPLUSII10.23QUARTUS

II10.0ALTERA:XILINX:FOUNDATION3.1ISE10.1iISEDesignSuite12.1LATTICE:ispEXPERT7.01ispLEVER7.2PACDesigner

ispLEVERClassic1.4

由PLD/FPGA芯片廠家提供,基本都可以完成所有的設(shè)計輸入(原理圖或HDL),仿真,綜合,布線,下載等工作。70HDL邏輯綜合軟件:

這類軟件將把HDL語言翻譯成最基本的與或非門的連接關(guān)系(網(wǎng)表),輸出edif(ElectronicDesignInterchangeFormat)文件,導給PLD/FPGA廠家的軟件進行適配和布線。為了優(yōu)化結(jié)果,在進行復雜HDL設(shè)計時,基本上都會使用這些專業(yè)的邏輯綜合軟件,而不使用PLD/FPGA廠家的集成開發(fā)軟件中自帶的邏輯綜合功能。Synplify/SynplifyProLeonardoSpectrumSynplicity:Mentor:FPGAComplierIISynopsys:71ModelTech:ModelsimAldec:ActiveHDLCadence:NC-Verlog/NC-VHDL/NC-SIMHDL仿真軟件

對設(shè)計進行校驗仿真,包括布線以前的功能仿真(前仿真)和布線以后包含延時的時序仿真(后仿真),對于一些復雜的HDL設(shè)計可能需要這些軟件專業(yè)的仿真功能。721.7、FPGA/CPLD設(shè)計流程應(yīng)用FPGA/CPLD的EDA開發(fā)流程:原理圖/VHDL文本編輯綜合FPGA/CPLD適配FPGA/CPLD編程下載FPGA/CPLD器件和電路系統(tǒng)時序與功能門級仿真1、功能仿真2、時序仿真邏輯綜合器結(jié)構(gòu)綜合器1、isp方式下載2、JTAG方式下載3、針對SRAM結(jié)構(gòu)的配置4、OTP器件編程

功能仿真(課本P13)731.7.1設(shè)計輸入(原理圖/HDL文本編輯)1.圖形輸入

圖形輸入

原理圖輸入

狀態(tài)圖輸入

波形圖輸入742.HDL文本輸入

這種方式與傳統(tǒng)的計算機軟件語言編輯輸入基本一致。就是將使用了某種硬件描述語言(HDL)的電路設(shè)計文本,如VHDL或VerilogHDL的源程序,進行編輯輸入。

可以說,應(yīng)用HDL的文本輸入方法克服了上述原理圖輸入法存在的所有弊端,為EDA技術(shù)的應(yīng)用和發(fā)展打開了一個廣闊的天地。75

整個綜合過程就是將設(shè)計者在EDA平臺上編輯輸入的HDL文本、原理圖或狀態(tài)圖形描述,依據(jù)給定的硬件結(jié)構(gòu)組件和約束控制條件進行編譯、優(yōu)化、轉(zhuǎn)換和綜合,最終獲得門級電路甚至更底層的電路描述網(wǎng)表文件。由此可見,綜合器工作前,必須給定最后實現(xiàn)的硬件結(jié)構(gòu)參數(shù),它的功能就是將軟件描述與給定的硬件結(jié)構(gòu)用某種網(wǎng)表文件的方式對應(yīng)起來,成為相互的映射關(guān)系。1.7.2綜合76

適配器也稱結(jié)構(gòu)綜合器,它的功能是將由綜合器產(chǎn)生的網(wǎng)表文件配置于指定的目標器件中,使之產(chǎn)生最終的下載文件,如JEDEC、Jam格式的文件。適配所選定的目標器件(FPGA/CPLD芯片)必須屬于原綜合器指定的目標器件系列。

邏輯綜合通過后必須利用適配器將綜合后網(wǎng)表文件針對某一具體的目標器件進行邏輯映射操作,其中包括底層器件配置、邏輯分割、邏輯優(yōu)化、邏輯布局布線操作。適配完成后可以利用適配所產(chǎn)生的仿真文件作精確的時序仿真,同時產(chǎn)生可用于編程的文件。1.7.3適配77時序仿真功能仿真

是直接對VHDL、原理圖描述或其他描述形式的邏輯功能進行測試模擬,以了解其實現(xiàn)的功能是否滿足原設(shè)計的要求的過程,仿真過程不涉及任何具體器件的硬件特性。1.7.4時序仿真與功能仿真

就是接近真實器件運行特性的仿真,仿真文件中己包含了器件硬件特性參數(shù),因而,仿真精度高。78

通常,將對CPLD的下載稱為編程(Program),對FPGA中的SRAM進行直接下載的方式稱為配置(Configure),但對于OTPFPGA的下載和對FPGA的專用配置ROM的下載仍稱為編程。

FPGA與CPLD的辨別和分類主要是根據(jù)其結(jié)構(gòu)特點和工作原理。通常的分類方法是:將以乘積項結(jié)構(gòu)方式構(gòu)成邏輯行為的器件稱為CPLD,如Lattice的ispLSI系列、Xilinx的XC9500系列、Altera的MAX7000S系列和Lattice(原Vantis)的Mach系列等。將以查表法結(jié)構(gòu)方式構(gòu)成邏輯行為的器件稱為FPGA,如Xilinx的SPARTAN系列、Altera的FLEX10K或ACEX1K系列等。1.7.5編程下載79

最后是將含有載入了設(shè)計的FPGA或CPLD的硬件系統(tǒng)進行統(tǒng)一測試,以便最終驗證設(shè)計項目在目標系統(tǒng)上的實際工作情況,以排除錯誤,改進設(shè)計。1.7.6硬件測試801.8、ALTERA開發(fā)工具QuartusII1位全加器設(shè)計向?qū)г韴D輸入設(shè)計方法基本設(shè)計流程為本項工程設(shè)計建立文件夾(必須有)注意:文件夾名不能用中文,且不可帶空格。(課本P955.1,5.2)(課本P1165.4)81CLICKCLICK82CLICKCLICK83CLICKCLICK84CLICK8586CLICK8788CLICKLibrariesprimitiveslogic89DOUBLECLICK90CLICKCLICKCLICK9192CLICK9394CLICKCLICK95CLICKCLICK9697CLICK98MouseRightClick99CLICK100CLICKCLICKCLICK101CLICK102CLICK103CLICK在此區(qū)域連續(xù)單擊鼠標右鍵104CLICK105CLICKCLICK106保存107108第2章VHDL程序編程基礎(chǔ)2.1、簡介--背景2.2、VHDL語言程序的基本結(jié)構(gòu)2.3、VHDL語言的數(shù)據(jù)類型及運算操作符

2.4、VHDL語法基礎(chǔ)

2.5、屬性的描述與定義109傳統(tǒng)數(shù)字電路設(shè)計方法不適合設(shè)計大規(guī)模的系統(tǒng)。工程師不容易理解原理圖設(shè)計的功能。眾多軟件公司開發(fā)研制了具有自己特色的電路硬件描述語言HDL(HardwareDescriptionLanguage),這些語言之間存在著很大的差異,工程師一旦選用某種硬件描述語言作為輸入工具,就被束縛在這個硬件設(shè)計環(huán)境之中。因此,硬件設(shè)計工程師需要一種強大的、標準化的硬件描述語言,作為可相互交流的設(shè)計環(huán)境。2.1、簡介--背景110描述復雜的數(shù)字電路系統(tǒng)成為國際的硬件描述語言標準美國國防部在80年代初提出了VHSIC(VeryHighSpeedIntegratedCircuit)計劃,其目標之一是為下一代集成電路的生產(chǎn),實現(xiàn)階段性的工藝極限以及完成10萬門級以上的設(shè)計,建立一項新的描述方法。1981年提出了一種新的HDL,稱之為VHSICHardwareDescriptionLanguage,簡稱為VHDL,這種語言的成就有兩個方面:InstituteofElectricalandElectronicsEngineers1987,“IEEE標準1076”,最新,IEEE1076-2008111VHDL的優(yōu)點:用于設(shè)計復雜的、多層次的設(shè)計。支持設(shè)計庫和設(shè)計的重復使用與硬件獨立,一個設(shè)計可用于不同的硬件結(jié)構(gòu),而且設(shè)計時不必了解過多的硬件細節(jié)。有豐富的軟件支持VHDL的綜合和仿真,從而能在設(shè)計階段就能發(fā)現(xiàn)設(shè)計中的Bug,縮短設(shè)計時間,降低成本。更方便地向ASIC過渡。VHDL有良好的可讀性,容易理解。112VHDL與計算機語言的區(qū)別★運行的基礎(chǔ)

▼計算機語言是在CPU+RAM構(gòu)建的平臺上運行

▼VHDL設(shè)計的結(jié)果是由具體的邏輯、觸發(fā)器組成的數(shù)字電路★執(zhí)行方式

▼計算機語言基本上以串行的方式執(zhí)行

▼VHDL在總體上是以并行方式工作★驗證方式

▼計算機語言主要關(guān)注于變量值的變化

VHDL要實現(xiàn)嚴格的時序邏輯關(guān)系113--eqcomp4isafourbitequalitycomparatorLibraryIEEE;useIEEE.std_logic_1164.all;entity

eqcomp4

isport(a,b:instd_logic_vector(3downto0);equal:outstd_logic);endeqcomp4;architecturedataflowofeqcomp4isbegin

equal<=‘1’whena=belse‘0’;Enddataflow;VHDL大小寫不敏感eqcomp4.vhd包實體結(jié)構(gòu)體文件名和實體名一致每行;結(jié)尾關(guān)鍵字begin關(guān)鍵字end后跟實體名關(guān)鍵字end后跟結(jié)構(gòu)體名庫類型設(shè)計實體1142.2、VHDL語言程序的基本結(jié)構(gòu)一個完整的VHDL語言程序通常包含五個部分:實體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)包集合(Package)庫(Library)(課本P225)115前面的例子

設(shè)計實體是VHDL語言設(shè)計的基本單元,是最重要的系統(tǒng)抽象。設(shè)計實體由實體說明和結(jié)構(gòu)體兩部分組成定義了設(shè)計單元的具體構(gòu)造和操作

規(guī)定了設(shè)計單元的輸入輸出接口信號或引腳EntityDeclarationArchitectureBody2.2.1設(shè)計實體(designentity)

116實體說明的一般格式如下:文件名和實體名一致!ENTITY實體名

IS[GENERIC(類屬參數(shù)說明);][PORT(端口說明);]

實體說明部分;[BEGIN

實體語句部分;]END[ENTITY][實體名];2.2.2實體說明

117ENTITY實體名IS[GENERIC(類屬參數(shù)說明);]PORT(端口說明);END[實體名];實體說明的常用格式如下:<EntityDeclaration>::=ENTITYIdentifierIS <EntityHeader> <EntityDeclarativePart> [BEGIN <EntityStatementPart>] END[ENTITY][<EntitySimpleName>];1181.類屬參數(shù)說明

類屬參數(shù)說明用于說明設(shè)計實體和其外部環(huán)境通信的對象、通信的格式約定和通信通道的大小。

GENERIC([CONSTANT]名字表:[IN]子類型標識[:=靜態(tài)表達式],…);

GENERIC(名字表:子類型標識[:=靜態(tài)表達式],…);例如:GENERIC(m:TIME:=3ns)

一般書寫格式為:常用書寫格式為:GENERIC(m:TIME:=5ns,n:INTEGER:=75)GENERIC(n:INTEGER:=15)1192.端口說明

端口為設(shè)計實體和其外部環(huán)境的動態(tài)通信提供通道,是對基本設(shè)計實體與外部接口的描述。PORT([SIGNAL]端口名:[模式]子類型標識[BUS][:=靜態(tài)表達式],…);PORT(端口名:模式子類型標識[BUS],…);(1)端口名端口名是賦予每個外部引腳的名稱一般書寫格式為:常用書寫格式為:120(2)端口模式

端口模式用來說明數(shù)據(jù)、信號通過該端口的方向。LINKAGE(不指定方向,無論哪個方向都可連接)。

VHDL語言提供了下述端口模式:IN

(流入實體),OUT

(流出實體),INOUT

(雙向端口:既可流入,又可流出),BUFFER

(信號輸出到外部,但同時也可在實體內(nèi)部反饋),121(3)數(shù)據(jù)類型

VHDL語言中有10種數(shù)據(jù)類型,IEEE1076/93標準規(guī)定,EDA綜合工具提供的數(shù)據(jù)類型為布爾型(Boolean)、位型(Bit)、位矢量型(Bit_vector)和整數(shù)型(Integer)。

但在實際中,常用的數(shù)據(jù)類型為:

STD_LOGICSTD_LOGIC_VECTOR

要使用這2種類型,須在程序開始加入以下兩語句:

LIBRARY

IEEE;USEIEEE.STD_LOGIC_1164.ALL;例如:‘U’Uninitialized‘X’ForcingUnknown‘0’Forcing0‘1’Forcing1‘Z’HighImpedance‘W’WeakUnknown‘L’Weak0‘H’Weak1‘-’Don’tcareTRI_STATE122LIBRARY

IEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYdecoIS

PORT(clock:IN

STD_LOGIC;

q:OUT

STD_LOGIC_VECTOR(7

DOWNTO0)

);ENDdeco;前面的例子無;123結(jié)構(gòu)體描述一個設(shè)計的結(jié)構(gòu)或行為

用VHDL語言描述結(jié)構(gòu)體功能有3種方法:(1)行為描述法(behavioral):(2)數(shù)據(jù)流描述法(RTLordataflow):(3)結(jié)構(gòu)描述法(structural):2.2.3結(jié)構(gòu)體

124例如:architectureoneofmux21isbeginy<=awhens=‘0’elseb;end

architectureone;結(jié)構(gòu)體的常用書寫格式為:ARCHITECTURE結(jié)構(gòu)體名OF實體名IS--定義語句BEGIN--并行處理語句END[ARCHITECTURE][結(jié)構(gòu)體名];125ARCHITECTUREoneOFdecoISBEGINWITHnumSELECT q<="00111111"WHEN"0000", "00000110"WHEN"0001", "01011011"WHEN"0010", "01001111"WHEN"0011", "01100110"WHEN"0100", "01101101"WHEN"0101", "01111101"WHEN"0110", "00100111"WHEN"0111", "01111111"WHEN"1000", "01101111"WHEN"1001", "00000000"WHENOTHERS;ENDone;1261.結(jié)構(gòu)體名稱的命名

結(jié)構(gòu)體的名稱可自由命名,但通常命名為

behavioraldataflowstructuralARCHITECTUREbehavioralOFmuxIS用結(jié)構(gòu)體行為命名ARCHITECTUREdataflowOFmuxIS用結(jié)構(gòu)體的數(shù)據(jù)流命名ARCHITECTUREstructuralOFmuxIS用結(jié)構(gòu)體的組織結(jié)構(gòu)命名2.定義語句

用于對結(jié)構(gòu)體內(nèi)部所使用的信號、常數(shù)、數(shù)據(jù)類型和函數(shù)進行定義。127例:計數(shù)器的VHDL描述。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;ENTITYcnt10ISPORT(clock:INSTD_LOGIC;q:OUTSTD_LOGIC_VECTOR(3DOWNTO0);ca:OUTSTD_LOGIC);ENDcnt10;128ARCHITECTURErtlOFcnt10IS

SIGNALqs:STD_LOGIC_VECTOR(3DOWNTO0);BEGINPROCESS(clock)VARIABLEq10:INTEGER

range0to15:=0;

BEGINIF(clock'EVENTANDclock='1')THEN IF(q10=9)THEN q10:=0;ca<='1'; ELSEq10:=q10+1;ca<='0';ENDIF;ENDIF;

qs<=CONV_STD_LOGIC_VECTOR(q10,4);

q<=qs;ENDPROCESS;ENDrtl;返回類型轉(zhuǎn)換返回整數(shù)1295LEsSKIP13073LEs1312.3、VHDL語言的數(shù)據(jù)類型及運算操作符

VHDL語言的標識符是遵守以下規(guī)則的字符序列:(1)有效字符:(A~Z,a~z)、(0~9)和(_)。(2)必須以英文字母打頭。(3)下劃線前后必須都有英文字母或數(shù)字。(4)標識符不區(qū)分大小寫。下面是合法的標識符:pulse_100msPulse_100msPULSE_100MS下面是不合法的標識符:pulse-100ms2pulse_100ms_pulse_100mspulse_100ms_2.3.1標識符

(課本P127)132

在VHDL語言中對象包括以下3種:信號(Signal)、變量(Variable)和常數(shù)(Constant)。

(課本P127)1.常數(shù)(Constant)CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達式;例如:CONSTANTDELAY:time:=100ns;常數(shù)說明的一般格式如下:常數(shù)是一個全局量。2.3.2VHDL語言的對象及其分類

SYNconstantwriteDDRAM:std_logic_vector(4downto0):="10001";1332.變量(Variable)VARIABLE變量名:數(shù)據(jù)類型約束條件:=表達式;例如:VARIABLEx,y,z:INTEGER;變量說明語句的一般格式為:

變量只能在進程語句、函數(shù)語句和過程語句結(jié)構(gòu)中使用,是一個局部量。變量在賦值時不能產(chǎn)生附加延時。通常暫存一些信號。variablecount:integerrange0to255:=10;SYN1343.信號(Signal)

SIGNAL信號名:數(shù)據(jù)類型約束條件:=表達式;例如:SIGNALground:std_logic:=‘0’;信號說明語句的一般格式為:用于VHDL中元件之間的通訊通常對應(yīng)實際系統(tǒng)中的連線信號賦值需要延時周期后才生效信號不能在process內(nèi)聲明信號是一個全局量SYN135變量和信號的區(qū)別:signald:std_logic_vector(3downto0);process(a,b,c,d)begind<=a;x<=b+d;d<=c;y<=b+d;endprocess;process(a,b,c)variabled:std_logic_vector(3downto0);begind:=a;x<=b+d;d:=c;y<=b+d;endprocess;x<=b+c;y<=b+c;x<=b+a;y<=b+c;1361372.3.3VHDL語言的數(shù)據(jù)類型

VHDL語言標準定義了10種標準的數(shù)據(jù)類型還可以由用戶自定義數(shù)據(jù)類型

VHDL語言的數(shù)據(jù)類型的定義相當嚴格,不同類型之間的數(shù)據(jù)不能直接代入,數(shù)據(jù)類型相同,而位長不同時也不能直接代入。1.VHDL語言標準所定義的標準數(shù)據(jù)類型

.整數(shù)(Integer).實數(shù)(Real).位(Bit).位矢量(Bit_Vector).布爾量(Boolean)(課本P249)138.字符(Character).字符串(String).時間(Time).錯誤等級(SeverityLevel).自然數(shù)(Natural)、正整數(shù)(Positive)(1)整數(shù)(Integer)整數(shù)的表示范圍從-(231-1)到(231-1)VARIABLEA:INTEGER

RANGE–127TO127;(2)實數(shù)(Real)定義值范圍為-1.0E+38到+1.0E+38例如:+2.0,-2.5,+1.0E38SYN例子139(3)位(Bit)

位值的表示方法是,用字符'0'或者'1'(將值放在單引號中)表示(4)位矢量(Bit_Vector)

位矢量是用雙引號括起來的一組位數(shù)據(jù)。

例如:"001010"(5)布爾量(Boolean)

它能進行關(guān)系運算。一個布爾量常用來表示信號的狀態(tài)或者總線上的情況。

一般這一類型的數(shù)據(jù)的初始值總為FALSE。SYNSYNSYN140(6)字符(Character)

字符量通常用單引號括起來,如'T','I'。(7)字符串(String)

字符串是由雙引號括起來的一個字符序列,也稱字符矢量或字符串數(shù)組

例如:“STRING”,“INTEGERRANGE”(8)時間(Time)

時間是一個物理量數(shù)據(jù)。時間類型一般用于仿真,而不用于邏輯綜合。

例如:55sec,2minSYNSYN141

錯誤等級類型數(shù)據(jù)用來表示系統(tǒng)的狀態(tài)。它分為四種:NOTE(注意)、WARNING(警告)、ERROR(出錯)、FAILURE(失?。T诜抡孢^程中可以用這四種狀態(tài)來提示系統(tǒng)當前的工作情況。(9)錯誤等級(SeverityLevel)(10)自然數(shù)(Natural)、正整數(shù)(Positive)

自然數(shù)和正整數(shù)是整數(shù)的子類,Natural類數(shù)據(jù)只能取值0和0以上的正整數(shù),Positive只能為正整數(shù)。SYN1422.用戶定義的數(shù)據(jù)類型

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

可由用戶定義的數(shù)據(jù)類型有:.枚舉(Enumerated)類型.整數(shù)(Integer)類型.實數(shù)(Real)、浮點數(shù)(Floating)類型.數(shù)組(Array)類型.存取(Access)類型.文件(File)類型.記錄(Record)類型.時間(Time)類型(物理類型)書寫格式為:143(1)枚舉(Enumerated)類型

格式:TYPE數(shù)據(jù)類型名IS(元素,元素,…);例如:TYPEBooleanIS(false,true);SYN(2)整數(shù)(Integer)類型格式:TYPE數(shù)據(jù)類型名IS數(shù)據(jù)類型定義約束范圍;例如:TYPEdigitISINTEGERrange0TO9;SYN(3)數(shù)組(Array)類型格式:TYPE數(shù)據(jù)類型名ISARRAY范圍OF原數(shù)據(jù)類型名;

例如:TYPEwordISARRAY(1TO16)OFSTD_LOGIC;SYN(一維)144(4)實數(shù)(Real)、浮點數(shù)(Floating)類型(5)存?。ˋccess)類型(6)文件(File)類型

(7)記錄(Record)類型

記錄是將不同類型的數(shù)據(jù)和數(shù)據(jù)名組織在一起而形成數(shù)據(jù)類型。TYPE數(shù)據(jù)類型名ISRECORD

元素名:數(shù)據(jù)類型名;元素名:數(shù)據(jù)類型名;┆

ENDRECORD;格式:SYN145TYPEPCI_BUSISRECORDADDR:STD_LOGIC_VECTOR(31DOWNTO0);

DATA:STD_LOGIC_VECTOR(31DOWNTO0);┆

ENDRECORD;

SIGNALDECODE1:PCI_BUS;

SIGNALDECODE2:PCI_BUS;

PCI_DEVICE1<=DECODE1.ADDR;

PCI_DEVICE1RAM<=DECODE1.DATA;(8)時間(Time)類型(物理類型)在從記錄數(shù)據(jù)類型中提取元素數(shù)據(jù)類型時應(yīng)使用“.”。例如:146

在VHDL語言中,不同類型的數(shù)據(jù)是不能進行運算和代入的。為了實現(xiàn)正確的代入操作,必須要將代入的數(shù)據(jù)進行類型轉(zhuǎn)換。一般是用函數(shù)轉(zhuǎn)換法實現(xiàn)類型轉(zhuǎn)換。例如:2.3.4類型轉(zhuǎn)換

STD_LOGIC_VECTOR與INTEGER相互轉(zhuǎn)換的函數(shù),其對應(yīng)的轉(zhuǎn)換函數(shù)在程序包IEEE.STD_LOGIC_UNSIGNED和IEEE.STD_LOGIC_ARITH中定義。functionconv_integer(arg:std_logic_vector)returninteger;functionconv_std_logic_vector(arg:integer;size:integer)returnstd_logic_vector;例子(課本P254,例9-18,例9-19)1472.3.5詞法1.程序注釋

注釋從“--”符號開始,到該行末尾結(jié)束。2.數(shù)字

VHDL語言數(shù)字表示法有十進制表示法、二進制表示法和八進制表示法。(課本P247)148整數(shù)舉例:010,1,345_67,3e8浮點數(shù)舉例:10.0,3.1415,1.2E-3,2.1e+5其中:整數(shù)::=

數(shù)字或下劃線連接的數(shù)字指數(shù)::=E[+]整數(shù)或E[-]整數(shù)(1)十進制數(shù)表示法書寫格式為:十進制文字::=

整數(shù).[整數(shù)][指數(shù)](2)基表示二、八、十六進制數(shù)的方法用“基”表示數(shù)的書寫格式為:149舉例:

2#10110101#--二進制表示法

8#267#--八進制表示法

16#8F#--十六進制表示法

30=3E1=16#1E#=2#11_11#E130.0=300.0e-1=16#1E.0#=2#11.11#E+3上式中:基::=

整數(shù)基于基的整數(shù)::=

擴展數(shù)字{[下劃線]擴展數(shù)字}

擴展數(shù)字::=

數(shù)字/字母以基表示的數(shù)::=

基#基于基的整數(shù).[基于基的整數(shù)]#指數(shù)1503.字符

VHDL中的字符為被單引號括起來的ASCII字符。其書寫格式為:字符文字::=‘圖形字符’例如:‘A’‘’‘*’1514.字符串

VHDL中的字符串為被雙引號括起來的圖形字符序列,可以為空。其書寫格式為:字符串::=“圖形字符”例如:“A”“”“string”152

位串是被雙引號括起來的擴展數(shù)字序列,在數(shù)字序列前冠以基數(shù)說明符。其書寫格式為:

位串文字::=基數(shù)說明符“位值”B為二進制基說明符,O為八進制基說明符,X為十六進制基說明符例如:B“1111_1101”X“DFC”O(jiān)“257”5.位串

位串的長度等價于二進制數(shù)的長度。位值::=擴展數(shù)字{或下劃線擴展數(shù)字}1532.3.6運算操作符

VHDL語言的操作符有5種:★邏輯運算符(LOGICAL)★關(guān)系運算符(RELATIONAL)★算術(shù)運算符(ARITHMETIC)★并置運算符(CONCATENATION)1.邏輯運算符

在VHDL語言中,邏輯運算符有7種:(課本P256)★移位運算符(SHIFT)SYN154◆NOT——取反◆AND——與◆

OR——或◆

NAND——與非◆

NOR——或非◆

XOR——異或◆

XNOR——同或

在一個VHDL語句中存在兩個邏輯表達式時,左右沒有優(yōu)先級差別(不包括NOT)。一個邏輯式中,先做括號里的運算,再做括號外運算。邏輯運算符的書寫格式為:(1)a<=bANDcANDdANDe;(2)a<=bORcORdORe;(3)a<=(bANDc)OR(dANDe);1552.算術(shù)運算符

VHDL語言有10種算術(shù)運算符:●+——加運算●

-——減運算●

*

——乘運算●

/——除運算●

REM——取余運算●MOD——求模運算●

+——正●

-——負●

**

——指數(shù)運算●

ABS——取絕對值SYN156算術(shù)運算符的使用規(guī)則如下:◆一元運算的操作數(shù)(正、負)可以是任何數(shù)值類型(整數(shù)、實數(shù)、物理量)。◆加減運算的操作數(shù)可以是整數(shù)、實數(shù)。對于加、減運算的兩個操作數(shù)必須類型相同。◆乘除的操作數(shù)可以同為整數(shù)和實數(shù),物理量乘或除以整數(shù)仍為物理量,物理量除以同一類型的物理量即可得到一個整數(shù)量?!羟竽:腿∮嗟牟僮鲾?shù)必須是同一整數(shù)類型數(shù)據(jù)?!粢粋€指數(shù)的運算符的左操作數(shù)可以是任意整數(shù)或?qū)崝?shù),而右操作數(shù)應(yīng)為一整數(shù)。1573.關(guān)系運算符

VHDL語言中6種關(guān)系運算:(1)=

——等于(2)/=

——不等于(3)<

——小于(4)<=

——小于等于(5)>

——大于(6)>=

——大于等于在VHDL程序設(shè)計中運算符有如下規(guī)則:SYN158▼等號“=”和不等號“/=”可以適用所有類型的數(shù)據(jù)。▼小于“<”、小于等于“<=”、大于“>”、大于等于“>=”適用于整數(shù)、實數(shù)、位矢量及數(shù)組類型的比較。▼兩個位矢量類型的對象比較時,自左至右,按位比較。▼小于等于“<=”和代入“<=”是相同的,在讀VHDL語言的語句時,要根據(jù)上下文關(guān)系來判斷。▼在進行關(guān)系運算時,左右兩邊的操作數(shù)的數(shù)據(jù)類型必須相同.1594.并置運算符

并置運算符“&”用于位的連接。并置運算符有如下使用規(guī)則:◆并置運算符可用于位的連接,形成位矢量.◆并置運算符可用于兩位矢量的連接構(gòu)成更大的位矢量.◆位的連接也可以用集合體的方法,即將并置符換成逗號.例如:DATA_C<=D0&D1&D2&D3;DATA_C<=(D0,D1,D2,D3);SYN1605.移位運算符

(1)SLL

——邏輯左移(2)SRL ——邏輯右移(3)SLA ——算術(shù)左移(4)SRA

——算術(shù)右移(5)ROL ——循環(huán)左移(6)ROR ——循環(huán)右移SYN數(shù)據(jù)類型為BIT,BIT_VECTOR,BOOLEAN條件:1616.操作符的運算優(yōu)先級

NOTABS***/MODREM+(positive)-(negative)+-&SLLSRLSLASRAROLROR=/=<<=>>=ANDORNANDNORXORXNOR高低1622.4、VHDL語法基礎(chǔ)

2.4.1并行語句

VHDL語言是并行處理語言,能夠進行并行處理的語句有:Process-進程語句ConcurrentSignalAssignment-并行信號賦值語句Block-塊語句ComponentInstantiation

-元件(例化)調(diào)用語句Generate-生成語句ConcurrentProcedureCall-并行過程調(diào)用語句ConcurrentStatements(課本P289)1631.進程語句(Process)

進程語句是并行處理語句,即各個進程是同時處理的,在一個結(jié)構(gòu)體中多個Process語句是同時并發(fā)運行的。Process語句具有如下特點:(1)進程結(jié)構(gòu)中的所有語句都是按順序執(zhí)行的。(2)多進程之間,是并行執(zhí)行的,并可存取結(jié)構(gòu)體或?qū)嶓w中所定義的信號。(3)為啟動進程,在進程結(jié)構(gòu)中必須包含一個顯式的敏感信號量表或者包含一個WAIT語句。(4)進程之間的通信是通過信號量傳遞來實現(xiàn)的。164Process語句的一般書寫結(jié)構(gòu)、組織形成為:[進程名:]PROCESS[敏感信號表]

變量說明語句:┆

BEGIN┆順序說明語句┆

ENDPROCESS[進程名];165[例:]由時鐘控制的進程語句設(shè)計。ENTITYsync_deviceISPORT(ina,inb,clk:INBit;Outb:OUTBit);ENDsync_device;ARCHITECTUREexampleOFsync_deviceISBEGIN

P1:PROCESS(clk)

BEGIN

Outb<=inaandinb;

ENDPROCESSP1;ENDexample;166

GENERIC語句用于不同層次設(shè)計模塊之間信息的傳遞和參數(shù)的傳遞,可用于位矢量的長度、數(shù)組的位長等參數(shù)的傳遞。這些參數(shù)都是整數(shù)類型,其他數(shù)據(jù)類型不能綜合。libraryieee;useieee.std_logic_1164.all;entitycntm16isgeneric(cntwidth:integer:=4);port(en:instd_logic;nreset:instd_logic;clk:instd_logic;co:outstd_logic;qcnt:buffer

std_logic_vector(cntwidth-1

downto0));endcntm16;167architecturebehaveofcntm16isbeginco<='1'when(qcnt="1111"anden='1')else'0';process(clk,nreset)beginif(nreset='0')thenqcnt<=(others=>'0');--qcnt<="0000";elsif(clk'eventandclk='1')thenif(en='1')thenqcnt<=qcnt+1;endif;endif;endprocess;endbehave;1681692.并行信號賦值語句(CONCURRENTSIGNALASSIGNMENT)并行信號賦值語句有三種形式:(1)簡單信號賦值語句(2)條件信號賦值語句(3)選擇信號賦值語句170(1)簡單信號賦值語句簡單信號賦值(信號代入)語句的格式如下:信號量<=敏感信號量表達式;

信號代入語句在進程內(nèi)部使用時,它作為順序語句的形式出現(xiàn);信號代入語句在結(jié)構(gòu)體的進程之外使用時,它作為并發(fā)語句的形式出現(xiàn)。一個并發(fā)信號代入語句是一個等效進程的簡略形式。例如:q<=c+d;process(c,d)beginq<=c+d;endprocess;171條件信號賦值語句的格式為:目標信號<=表達式1WHEN

條件1ELSE

表達式2WHEN

條件2ELSE

表達式3WHEN

條件3ELSE┆

表達式nWHEN

條件nELSE

表達式n+1;

(2)條件信號賦值語句172libraryieee;useieee.std_logic_1164.all;entitymux4isport(a0,a1,a2,a3:instd_logic;s:instd_logic_vector(1downto0);y:outstd_logic);endmux4;architecturedataflowofmux4isbeginy<=a0whens=“00”elsea1whens=“01”elsea2whens=“10”elsea3;enddataflow;173TechnologyMap174RTL175libraryieee;useieee.std_logic_1164.all;entityencoder_1isport(a,b,c,d,e,f,g,h:instd_logic;codeout:outstd_logic_vector(2downto0));endencoder_1;architecturebehavioralofencoder_1isbegincodeout<="111"whenh='1'else"110"wheng='1'else"101"whenf='1'else"100"whene='1'else"011"whend='1'else"010"whenc='1'else"001"whenb='1'else"000"whena='1'else"ZZZ";endbehavioral;IF語句176177選擇型信號賦值語句的格式為:WITH

表達式

SELECT目標信號<=表達式1WHEN

條件1,

表達式2WHEN

條件2,

表達式3WHEN

條件3,┆

表達式nWHEN

條件n;注意!(3)選擇信號賦值語句178libraryieee;useieee.std_logic_1164.all;entitymux4isport(a0,a1,a2,a3:instd_logic;s:instd_logic_vecter(1downto0);y:outstd_logic);endmux4;architecturedataflowofmux4isbegin

withs

select

y<=a0

when“00”,

a1

when

“01”,

a2

when

“10”,

a3

when

others;enddataflow;179TechnologyMap180RTL1813.塊語句

(Block)

塊(Block)是將結(jié)構(gòu)體中的并行語句組合在一起,其目的是改善并行語句及其結(jié)構(gòu)的可讀性,一般用于較復雜的VHDL程序中。但從綜合角度看,該語句沒有實用價值。標號:Block[(保護表達式)][塊說明部分]

BEGIN

并行語句A;

并行語句B;┆

ENDBlock[塊標號];標號必須有!182libraryieee;useieee.std_logic_1164.all;entitytest_blockisport(a,b:instd_logic;aequalb,agreatb,alessb:outstd_logic);endtest_block;architecturebehaveoftest_blockisbegin

comp:block

beginaequalb<='1'whena=belse'0';agreatb<='1'whena>belse'0';alessb<='1'whena<belse'0';

endblock;endbehave;

183TechnologyMap184RTL1854.元件例化語句(ComponentInstantiation)

一般把設(shè)計好的設(shè)計實體稱為一個元件或一個模塊。VHDL中基本的設(shè)計層次是元件,它可作為其它模塊或更高層次模塊引用的底層模塊。

元件聲明是對VHDL模塊(即底層設(shè)計,也是完整的VHDL設(shè)計)的說明,使之可在其他模塊中被調(diào)用。元件聲明可放在程序包中,也可放在某個設(shè)計的結(jié)構(gòu)體中進行。

元件例化是指元件的調(diào)用,是將現(xiàn)成元件的端口信號映射成高層次設(shè)計電路中的信號。元件聲明及元件例化的語法分別如下:186元件聲明語句

(元件定義語句):元件例化語句:COMPONENT

元件名[IS]

GENERIC(類屬表);

PORT(端口名表);ENDCOMPONENT

[元件名];例化名:元件名PORTMAP([端口名=>]連接端口名,...);位置關(guān)聯(lián)、名稱關(guān)聯(lián)1875.生成語句(GENERATE)GENERATE語句用來產(chǎn)生多個相同的結(jié)構(gòu)和描述規(guī)則結(jié)構(gòu),如塊陣列,元件例化或進程。GENERATE語句的兩種形式分別為:[標號:]FOR

循環(huán)變量IN

取值范圍GENERATE

說明

BEGIN

并行語句

ENDGENERATE[標號];[標號:]IF

條件

GENERATE

說明

Begin

并行語句

ENDGENERATE[標號];1886.并發(fā)過程調(diào)用語句(CONCURRENTPROCEDURECALL

溫馨提示

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

評論

0/150

提交評論