第4章VHDL設(shè)計初步1020_第1頁
第4章VHDL設(shè)計初步1020_第2頁
第4章VHDL設(shè)計初步1020_第3頁
第4章VHDL設(shè)計初步1020_第4頁
第4章VHDL設(shè)計初步1020_第5頁
已閱讀5頁,還剩108頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1VHDL語言的成就有兩個方面:描述復(fù)雜的電路系統(tǒng);2.成為硬件描述語言的標準。什么是VHDL:VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage2

?

ABEL

?

AHDL

?

VerilogHDL

?

VHDLIEEE標準與其硬件相對應(yīng)的硬件描述語言,受各自硬件設(shè)計環(huán)境的束縛,設(shè)計不便于交流和移植。(VeryHighSpeedIntegratedCircuitHDL)標準:IEEESTD1076_1987;IEEESTD1076_1993特點:與硬件和設(shè)計平臺無關(guān)強大的對電路系統(tǒng)及其行為的建模、描述能力易讀性層次化與結(jié)構(gòu)化設(shè)計性能一、硬件描述語言HDL(HardwareDescriptionLanguage)3ENTITYmux21aISPORT(a,b:INBIT;

s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy<=aWHENs='0'ELSEb;ENDARCHITECTUREone;實體結(jié)構(gòu)體圖1mux21a實體圖2mux21a結(jié)構(gòu)體例2選1多路選擇器的VHDL描述42選1多路選擇器的VHDL描述【例2】

ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd<=aAND(NOTS);e<=bANDs;y<=dORe;ENDARCHITECTUREone;【例3】...

ARCHITECTUREoneOFmux21aISBEGINy<=(aAND(NOTs))OR(bANDs);

ENDARCHITECTUREone;52選1多路選擇器的VHDL描述【例4】

ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy<=a;ELSEy<=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;62選1多路選擇器的VHDL描述圖mux21a功能時序波形7-原理圖繪制繁瑣,且繪制完成后不易修改。在繪制過程中必須給出完整的、具體的電路結(jié)構(gòu)圖,不能進行抽象描述。與具體的實現(xiàn)工藝有關(guān)。-VHDL語言用語言寫成什么功能,就能夠完成相應(yīng)的原理圖設(shè)計,功能更強大。具有較強的抽象描述能力,描述更簡潔,效率更高。設(shè)計者不能夠控制電路是如何執(zhí)行的※

原理圖輸入與

VHDL文本輸入設(shè)計的區(qū)別8※為什么用VHDL語言替代原理圖設(shè)計方法?容易修改功能比原理圖更強大VHDL語言中每個設(shè)備是獨立的,而且同樣的代碼可用于不同的設(shè)計中9※

VHDL的功能和標準

VHDL描述輸入端口輸出端口電路的行為和功能VHDL有過兩個標準:IEEEStd1076-1987(calledVHDL1987)IEEEStd1076-1993(calledVHDL1993)10

VHDL語言的主要優(yōu)點是一種多層次的硬件描述語言,覆蓋面廣,描述能力強VHDL有良好的可讀性。VHDL本身的生命期長。

支持大規(guī)模設(shè)計的分解和已有設(shè)計的再利用。具有豐富的仿真語句和庫函數(shù),可對VHDL源代碼進行早期仿真,有利于大系統(tǒng)的設(shè)計與驗證VHDL與硬件電路關(guān)系不大VHDL設(shè)計不依賴于器件,與工藝無關(guān)移植性好VHDL體系符合TOP-DOWN和并行工程的設(shè)計思想易于ASIC實現(xiàn)11STEP1:建立工作庫文件夾STEP2:輸入設(shè)計項目原理圖/VHDL文本代碼STEP3:存盤,注意原理圖/文本取名STEP4:將設(shè)計項目設(shè)置成ProjectSTEP5:選擇目標器件

STEP11:

硬件測試STEP9:引腳鎖定并編譯STEP8:仿真測試和波形分析STEP7:建立仿真波形文件STEP6:啟動編譯STEP10:編程下載/配置二、VHDL文本輸入設(shè)計流程

12VHDL主要用于描述數(shù)字系統(tǒng)的結(jié)構(gòu)、行為、功能和接口。VHDL將一個設(shè)計(元件、電路、系統(tǒng))分為:外部(可視部分、端口)內(nèi)部(不可視部分、內(nèi)部功能、算法)

三、VHDL的基本組成13LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy<=aWHENs='0'ELSEb;ENDARCHITECTUREone;VHDL的基本組成結(jié)構(gòu)體(ARCHITECTURE)進程或其它并行結(jié)構(gòu)實體(ENTITY)配置(CONFIGURATION)庫、程序包設(shè)計實體14VHDL語言由保留關(guān)鍵字組成;一般,VHDL語言對字母大小寫不敏感;例外:‘’、“”所括起來的字符、字符串每條VHDL語句由一個分號(;)結(jié)束VHDL語言對空格不敏感,增加可讀性;在“--”之后的是VHDL的注釋語句;VHDL有以下描述風格: 行為描述 數(shù)據(jù)流(寄存器傳輸RTL)描述 結(jié)構(gòu)化描述VHDL語言的基本特點15VHDL相關(guān)語句說明實體表達定義系統(tǒng)的輸入輸出端口ENTITY<entity-name>ISGenericDeclarationsPortDeclarationsEND<entity-name>;(1076-1987version)ENDENTITY<entity-name>;(1076-1993version)【例】ENTITYe_nameISPORT(p_name:port_mdata_type;...p_namei:port_midata_type);ENDe_name;ENDENTITYe_name;16VHDL相關(guān)語句說明(1)類屬說明確定實體或組件多用于不同層次模塊之間信息的傳遞。中定義的局部常數(shù)。模塊化設(shè)計時可從外部改變內(nèi)部電路結(jié)構(gòu)和規(guī)模。必須放在端口說明之前。Generic(常數(shù)名稱:類型[:=缺省值] {常數(shù)名稱:類型[:=缺省值]}

);17VHDL相關(guān)語句說明類屬說明常用于定義:實體端口的大小 設(shè)計實體的物理特性 總線寬度 元件例化的數(shù)量等EntitymckisGeneric(width:integer:=16);Port(add_bus:outstd_logic_vector(width-1downto0));…18VHDL相關(guān)語句說明例:2輸入與門的實體描述Entityand2isGeneric(risewidth:time:=1ns

fallwidth:time:=1ns);Port(a1:instd_logic; a0:instd_logic; z0:outstd_logic);Endand2;注意:數(shù)據(jù)類型time用于仿真模塊的設(shè)計。綜合器僅支持數(shù)據(jù)類型為整數(shù)的類屬值。19(2)端口說明端口聲明:確定輸入輸出端口的數(shù)目和類型。Port(

端口名稱{,端口名稱}:端口模式數(shù)據(jù)類型;

……端口名稱{,端口名稱}:端口模式數(shù)據(jù)類型);20設(shè)計實體——提供設(shè)計模塊的公共信息,是VHDL設(shè)計電路的最基本部分。一個模塊中僅有一個設(shè)計實體ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;…實體名端口名端口模式端口數(shù)據(jù)類型21VHDL相關(guān)語句說明2.實體名:不應(yīng)用數(shù)字或中文定義實體名,也不能用元件名命名,且不能用數(shù)字起頭.3.PORT語句和端口信號名:描述電路的端口及其端口信號.4.端口模式INOUTINOUTBUFFER5.數(shù)據(jù)類型BIT:規(guī)定的取值范圍是邏輯位’0’和’1’22VHDL相關(guān)語句說明6.結(jié)構(gòu)體表達【例】ARCHITECTUREarch_nameOFe_nameIS(說明語句)BEGIN(功能描述語句)ENDARCHITECTUREarch_name;或:【例】ARCHITECTUREarch_nameOFe_nameIS(說明語句)BEGIN(功能描述語句)ENDarch_name;7.信號傳輸(賦值)符號<=和數(shù)據(jù)比較符號=23VHDL相關(guān)語句說明8.邏輯操作符AND、OR、NOT,NAND(與非),NOR(或非),XOR(異或),XNOR(同或),NOT(取反):操作數(shù)數(shù)據(jù)類型是BIT,BOOLEAN,STD_LOGIC24最基本的VHDL設(shè)計文本模板LIBRARY<庫名>;USE<庫名>.<程序包名>.ALL;參數(shù)部分——程序包接口部分—實體描述部分—結(jié)構(gòu)體ARCHITECTURE<結(jié)構(gòu)體名>OF<實體名>IS

聲明區(qū)域

BEGIN

描述區(qū)域END[ARCHITECTURE]<結(jié)構(gòu)體名>;ENTITY<實體名>IS

端口定義END[ENTITY]<實體名>;25VHDL設(shè)計文本參數(shù)部分——程序包接口部分—實體描述部分—結(jié)構(gòu)體1)設(shè)計實體26設(shè)計實體——提供設(shè)計模塊的公共信息,是VHDL設(shè)計電路的最基本部分。一個模塊中僅有一個設(shè)計實體ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;…實體名端口名端口模式端口數(shù)據(jù)類型27標識符

命名規(guī)則:?有效的字符:包括26個大小寫英文字母,數(shù)字包括0~9以及下劃線“_”。?任何標識符必須以英文字母開頭。?必須是單一下劃線“_”,且其前后都必須有英文字母或數(shù)字。?標識符中的英語字母不分大小寫。?允許包含圖形符號(如回車符、換行符等),也允許包含空格符。文字規(guī)則28Adder_13FFTSig_#NS_SS0L-MuxRstr__1Entity√

××√

×××FFT3Sig_NL_MuxRstr_1Etity29端口模式:OUT、IN、INOUT、BUFFEROUT單向輸出通道IN單向只讀通道INOUT輸入輸出雙向通道BUFFER與INOUT類似,但輸入時只允許反饋30數(shù)據(jù)類型標量型(ScalarType)復(fù)合類型(CompositeType)存取類型(AccessType)文件類型(FilesType)包括實數(shù)類型、整數(shù)類型、枚舉類型和時間類型。包括數(shù)組型和記錄型。為給定的數(shù)據(jù)對象提供存取方式。提供多值存取類型。31

VHDL的預(yù)定義數(shù)據(jù)類型1.布爾(BOOLEAN)數(shù)據(jù)類型:FALSE和TRUE2.位(BIT)數(shù)據(jù)類型:包括‘0’和‘1’3.位矢量(BIT_VECTOR)數(shù)據(jù)類型:是用雙引號括起來的數(shù)字序列,如:“0011”,“00FD”等,在使用位矢量時,必須注明位寬,例如:SIGNAL:a:BIT_VECTOR(7DOWNTO0);SIGNAL:a:BIT_VECTOR(0TO7);4.字符(CHARACTER)數(shù)據(jù)類型:如’0’,’A’等數(shù)據(jù)類型:指端口上流動的數(shù)據(jù)的表達格式32

VHDL的預(yù)定義數(shù)據(jù)類型5.整數(shù)(INTEGER)數(shù)據(jù)類型:范圍-(231-1)--(231-1)6.實數(shù)(REAL)數(shù)據(jù)類型范圍:-1.0E+38—1.0E+388.字符串(STRING)數(shù)據(jù)類型:”S.boo”7.時間(TIME)數(shù)據(jù)類型 fs;--飛秒(10-15S)VHDL中的最小時間單位 ps=1000fs;--皮秒 ns=1000ps;--納秒 us=1000ns;--微秒 ms=1000us;--毫秒 sec=1000ms;--秒 min=60sec;--分 hr=60min;--時33IEEE預(yù)定義標準邏輯位與矢量標準邏輯位STD_LOGIC數(shù)據(jù)類型2.標準邏輯矢量(STD_LOGIC_VECTOR)數(shù)據(jù)類型STD_LOGIC所定義的9種數(shù)據(jù)的含義是:‘U’表示未初始化的;‘X’表示強未知的;‘0’表示強邏輯0;‘1’表示強邏輯1;‘Z’表示高阻態(tài);‘W’

表示弱未知的;‘L’表示弱邏輯0;‘H’表示弱邏輯1;‘-’表示忽略。34VHDL設(shè)計文本參數(shù)部分——程序包接口部分—實體描述部分—結(jié)構(gòu)體2)結(jié)構(gòu)體35結(jié)構(gòu)體——描述設(shè)計實體內(nèi)部結(jié)構(gòu)和端口之間的關(guān)系,包括硬件的互連關(guān)系、數(shù)據(jù)的傳輸和變換以及動態(tài)行為。?一個實體可以對應(yīng)多個結(jié)構(gòu)體,但綜合時只可選擇其中一個。?每個結(jié)構(gòu)體對應(yīng)著實體不同的結(jié)構(gòu)和算法實現(xiàn)方案,其地位是同等的,取名不可相重。ARCHITECTURE結(jié)構(gòu)體名OF實體名IS[說明語句]BEGIN[功能描述語句]ENDARCHITECTURE結(jié)構(gòu)體名;36…ARCHITECTUREoneOFmux21aISBEGIN

y<=aWHENs='0'ELSEb;ENDARCHITECTUREone;結(jié)構(gòu)體名實體名功能描述區(qū)域37…ARCHITECTUREbhvOFDFF1IS

SIGNALQ1:STD_LOGIC;

BEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;Q<=Q1;

ENDPROCESS;ENDbhv;聲明區(qū)域38功能描述區(qū)域進程語句信號賦值語句子程序調(diào)用語句元件例化語句結(jié)構(gòu)體聲明區(qū)域數(shù)據(jù)類型常量、信號子程序元件39實體與結(jié)構(gòu)體的關(guān)系:一個設(shè)計實體可有多個結(jié)構(gòu)體,代表實體的多種實現(xiàn)方式。各個結(jié)構(gòu)體的地位相同。設(shè)計實體結(jié)構(gòu)體1結(jié)構(gòu)體2結(jié)構(gòu)體n…40VHDL設(shè)計文本參數(shù)部分——程序包接口部分—實體描述部分—結(jié)構(gòu)體3)程序包41程序包VHDL預(yù)定義程序包設(shè)計者自身設(shè)計的程序包已定義的常數(shù)、數(shù)據(jù)類型、元件調(diào)用說明、子程序的一個集合使用庫和程序包的VHDL語言格式:

LIBRARY<庫名>;

USE<庫名>.<程序包名>.ALL;

或USE

<庫名>.<程序包名>.<項目名>;42LIBRARYIEEE

;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_1164.RISING_EDGE;…放在VHDL程序的最前面,表示以后在實體或結(jié)構(gòu)體中要用到數(shù)據(jù)類型包中的數(shù)據(jù)類型。43IEEE.STD_LOGIC_1164(std_logictypes&relatedfunctions)IEEE.STD_LOGIC_arith(arithmeticfunctions)IEEE.STD_LOGIC_signed(signedarithmetic functions)IEEE.STD_LOGIC_unsigned(unsignedarithmetic)庫的種類:(1)IEEE庫定義了4個常用的程序包:44庫的種類:(2)STD庫庫中程序包為:standard定義最基本的數(shù)據(jù)類型:

Bit,bit_vector,boolean,integer,real,time(3)面向ASIC的庫(4)WORK庫(5)用戶定義庫45LIBRARY<庫名>

;USE<庫名>.<程序包名>.ALL;ENTITY<實體名>

IS

端口定義END[ENTITY]

<實體名>;ARCHITECTURE<結(jié)構(gòu)體名>OF<實體名>

IS

聲明區(qū)域

BEGIN

描述區(qū)域END[ARCHITECTURE]

<結(jié)構(gòu)體名>;調(diào)用程序包語句標準程序包定義程序包實體及實體聲明語句結(jié)構(gòu)體1結(jié)構(gòu)體2結(jié)構(gòu)體n……46VHDL語法數(shù)據(jù)對象文字規(guī)則數(shù)據(jù)類型操作符關(guān)系…邏輯…算術(shù)…符號…基本語句并行…順序(進程,子程序)…其它(屬性描述與定義)…其它(子程序,函數(shù),過程,元件例化)…VHDL基本語法4.1多路選擇器的VHDL描述

4.1.12選1多路選擇器的VHDL描述

圖4-1mux21a實體

4.1多路選擇器的VHDL描述

4.1.12選1多路選擇器的VHDL描述

圖4-2mux21a結(jié)構(gòu)體

4.1多路選擇器的VHDL描述

4.1.12選1多路選擇器的VHDL描述

【例4-1】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINy<=aWHENs='0'ELSEb;ENDARCHITECTUREone;4.1多路選擇器的VHDL描述

4.1.12選1多路選擇器的VHDL描述

【例4-2】ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISSIGNALd,e:BIT;BEGINd<=aAND(NOTS);e<=bANDs;y<=dORe;

ENDARCHITECTUREone;

4.1多路選擇器的VHDL描述

4.1.12選1多路選擇器的VHDL描述

【例4-3】ENTITYmux21aISPORT(a,b,s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGINPROCESS(a,b,s)BEGINIFs='0'THENy<=a;ELSEy<=b;ENDIF;ENDPROCESS;ENDARCHITECTUREone;4.1多路選擇器的VHDL描述

4.1.12選1多路選擇器的VHDL描述

圖4-3mux21a功能時序波形

4.2寄存器描述及其VHDL語言現(xiàn)象

4.2.1D觸發(fā)器的VHDL描述

【例4-6】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF1ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF1ISSIGNALQ1:STD_LOGIC;--類似于在芯片內(nèi)部定義一個數(shù)據(jù)的暫存節(jié)點

BEGIN

圖4-4D觸發(fā)器圖4-4D觸發(fā)器4.2寄存器描述及其VHDL語言現(xiàn)象

4.2.1D觸發(fā)器的VHDL描述

【例4-6】PROCESS(CLK,Q1)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=D;ENDIF;ENDPROCESS;Q<=Q1;--將內(nèi)部的暫存數(shù)據(jù)向端口輸出(雙橫線

--是注釋符號)

ENDbhv;

圖4-4D觸發(fā)器圖4-4D觸發(fā)器55D觸發(fā)器VHDL描述的語言現(xiàn)象說明1.標準邏輯位數(shù)據(jù)類型STD_LOGICBIT數(shù)據(jù)類型定義:

TYPEBITIS('0','1');STD_LOGIC數(shù)據(jù)類型定義:TYPESTD_LOGICIS('U','X','0','1','Z','W','L','H','-');STD_LOGIC所定義的9種數(shù)據(jù)的含義是:‘U’表示未初始化的;‘X’表示強未知的;‘0’表示強邏輯0;‘1’表示強邏輯1;‘Z’表示高阻態(tài);‘W’

表示弱未知的;‘L’表示弱邏輯0;‘H’表示弱邏輯1;‘-’表示忽略。56D觸發(fā)器VHDL描述的語言現(xiàn)象說明2.設(shè)計庫和標準程序包3.SIGNAL信號定義和數(shù)據(jù)對象【例】ARCHITECTUREbhvOFDFF1ISBEGINPROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ<=D;ENDIF;ENDPROCESS;END;使用庫和程序包的一般定義表式是:

LIBRARY<設(shè)計庫名>;

USE<設(shè)計庫名>.<程序包名>.ALL;57信號定義和數(shù)據(jù)對象SIGNALQ1:STD_LOGIC在VHDL中,數(shù)據(jù)對象類似于一種容器,它接受不同數(shù)據(jù)類型的賦值,數(shù)據(jù)對象有3類:信號(signal)、變量(variable)和常量(constant)。被定義的標識符必須確定為某類數(shù)據(jù)對象,同時還必須定義為某種數(shù)據(jù)類型。數(shù)據(jù)對象規(guī)定了Q1的行為方式和功能特點,數(shù)據(jù)類型限定了q1的取值范圍。數(shù)據(jù)對象數(shù)據(jù)類型58D觸發(fā)器VHDL描述的語言現(xiàn)象說明4.上升沿檢測表式和信號屬性函數(shù)EVENT關(guān)鍵詞EVENT是信號屬性,VHDL通過以下表式來測定某信號的跳變邊沿:

<信號名>'EVENT是對clock標識符的信號在當前一個極小的時間段δ內(nèi)發(fā)生時間的情況進行檢測.所謂發(fā)生事件,就是clock在其數(shù)據(jù)類型的取值范圍內(nèi)發(fā)生變化,從一種取值轉(zhuǎn)變到另一種取值(或電平方式)如果clock數(shù)據(jù)類型定義為STD_LOGIC,則在δ時間內(nèi),clock從其數(shù)據(jù)類型允許的9個值中任意一個值向另一個值跳變,如由’0’變成’1’,由’Z’變成’0’等,都認為發(fā)生了事件.59D觸發(fā)器VHDL描述的語言現(xiàn)象說明4.上升沿檢測表式和信號屬性函數(shù)EVENT如果以上短語是clock’EVENTANDclock=‘1’,則表示一旦clock’EVENT在δ時間內(nèi)測得clock有一個跳變,而此小時間段δ之后又測得clock為高電平’1’,即滿足此語句右側(cè)的clock=‘1’的條件,于是兩者相與”AND”后返回值為”true”,由此便可以從當前的clock=‘1’推斷在此前的δ時間段內(nèi),clock必為’0’(設(shè)clock的數(shù)據(jù)類型為BIT).因此,以上的表達式就可以用來對信號clock的上升沿進行檢測,clock’EVENTANDclock=‘1’就成了邊沿測試語句60D觸發(fā)器VHDL描述的語言現(xiàn)象說明4.上升沿檢測表式和信號屬性函數(shù)EVENT如果CLK的數(shù)據(jù)類型是STD_LOGIC,則它的可能的取值有9種,而CLK’EVENT為真的條件是CLK在九種數(shù)據(jù)中的任何兩種間的跳變,因而當CLK’EVENTANDCLK=‘1’為真時,并不能推定CLK在δ時刻前是’0’(例如,它可以從’Z’變到’1’).為確保CLK發(fā)生的是一次上升沿的跳變,可采用如下語句:CLK’EVENTAND(CLK=‘1’)AND(CLK’LAST_VALUE=‘0’)61最常用的信號屬性:EVENT(Boolean)

對該屬性所附著的信號在當前的一個極小時間段δ內(nèi)發(fā)生事件的情況進行檢測。如果有事件發(fā)生在該信號上(即信號有變化),則EVENT取值True;否則取值False。信號屬性函數(shù)EVENT屬性:關(guān)于信號、常量、變量、實體、結(jié)構(gòu)體、類型等的一些特征。信號類,數(shù)據(jù)區(qū)間類,數(shù)值類,數(shù)組類,用戶定義類。62上升沿檢測表達式

可以利用信號屬性函數(shù)EVENT,通過以下表式來測定某時鐘信號的跳變邊沿:

<信號名>’EVENT如:CLK'EVENTANDCLK='1'或:CLK='1'ANDCLK'EVENT表示時鐘的上升沿而:CLK'EVENTANDCLK=‘0'或:CLK=‘0'ANDCLK'EVENT表示時鐘的下降沿rising_edge(clk)表示時鐘的上升沿falling_edge(clk)表示時鐘的下降沿其他表示時鐘邊沿的表示:635.不完整條件語句與時序電路【例】ENTITYCOMP_BADISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_BADISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSIFa1<b1THENq1<='0';--未提及當a1=b1時,q1作何操作ENDIF;ENDPROCESS;END;D觸發(fā)器VHDL描述的語言現(xiàn)象說明645.不完整條件語句與時序電路【例】ENTITYCOMP_GOODISPORT(a1:INBIT;b1:INBIT;q1:OUTBIT);END;ARCHITECTUREoneOFCOMP_GOODISBEGINPROCESS(a1,b1)BEGINIFa1>b1THENq1<='1';ELSEq1<='0';ENDIF;ENDPROCESS;END圖電路圖654.2.3實現(xiàn)時序電路的VHDL不同表達方式【例4-9】...PROCESS(CLK)BEGINIFCLK'EVENTAND(CLK='1')AND(CLK'LAST_VALUE='0')THENQ<=D;--確保CLK的變化是一次上升沿的跳變

ENDIF;ENDPROCESS;【例4-10】...PROCESS(CLK)BEGINIFCLK='1'ANDCLK'LAST_VALUE='0'--同例4-13

THENQ<=D;ENDIF;ENDPROCESS;664.2.3實現(xiàn)時序電路的VHDL不同表達方式【例4-11】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITYDFF3ISPORT(CLK:INSTD_LOGIC;D:INSTD_LOGIC;Q:OUTSTD_LOGIC);END;ARCHITECTUREbhvOFDFF3ISSIGNALQ1:STD_LOGIC;BEGINPROCESS(CLK)BEGINIFrising_edge(CLK)--CLK的數(shù)據(jù)類型必須是STD_LOGICTHENQ1<=D;ENDIF;Q<=Q1;ENDPROCESS;END;67

4.2.3實現(xiàn)時序電路的VHDL不同表達方式【例4-12】...

PROCESSBEGINwaituntilCLK='1';--利用wait語句

Q<=D;ENDPROCESS;【例4-13】...

PROCESS(CLK)BEGINIFCLK='1'THENQ<=D;--利用進程的啟動特性產(chǎn)生對CLK的邊沿檢測

ENDIF;ENDPROCESS;【例4-14】...

PROCESS(CLK,D)BEGINIFCLK='1'--電平觸發(fā)型寄存器

THENQ<=D;ENDIF;ENDPROCESS;68實現(xiàn)時序電路的VHDL不同表達方式例4-13邊沿型觸發(fā)器時序波形例4-14電平觸發(fā)型寄存器的時序波形69比較用5種不同語句的D觸發(fā)器VHDL程序Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)beginif

clk='1'ANDclk’last_value='0'

thenq1<=d;endif;q<=q1;endprocess;endtest1_body;LIBRARYIEEE;USEIEEE.std_logic_1164.all;Entitytest1isport(clk,d:inbit;q:outbit);endtest1;architecturebodyoftest1isbeginprocess(clk,d)begin

ifrising_edge(clk)then

q<=d;endif;endprocess;endtest1_body;TheyareallthesameDFFEntitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk,d)begin

if(clk=‘1’)then

q1<=d;endif;q<=q1;endprocess;endbody;Entitytest1isport(clk:inbit;d:inbit;q:outbit);endtest1;architecturebodyoftest1issignalq1:bit;beginprocess(clk)begin

if(clk=‘1’)then

q1<=d;endif;q<=q1;endprocess;endbody;704.2.4異步時序電路設(shè)計【例4-15】...

ARCHITECTUREbhvOFMULTI_DFFISSIGNALQ1,Q2:STD_LOGIC;BEGINPRO1:PROCESS(CLK)BEGINIFCLK'EVENTANDCLK='1'THENQ1<=NOT(Q2ORA);ENDIF;ENDPROCESS;PRO2:PROCESS(Q1)BEGINIFQ1'EVENTANDQ1='1'THENQ2<=D;ENDIF;QQ<=Q2;ENDPROCESS;KX康芯科技圖4-10半加器h_adder電路圖及其真值表

4.3.1半加器描述

4.31位二進制全加器的VHDL描述

KX康芯科技圖4-11全加器f_adder電路圖及其實體模塊

4.3.1半加器描述

4.31位二進制全加器的VHDL描述

4.3.1半加器描述

【例4-16】LIBRARYIEEE;--半加器描述(1):布爾方程描述方法USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisBEGINso<=NOT(aXOR(NOTb));co<=aANDb;ENDARCHITECTUREfh1;【例4-17】LIBRARYIEEE;--半加器描述(2):真值表描述方法USEIEEE.STD_LOGIC_1164.ALL;ENTITYh_adderISPORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDENTITYh_adder;ARCHITECTUREfh1OFh_adderisSIGNALabc:STD_LOGIC_VECTOR(1DOWNTO0);--定義標準邏輯位矢量數(shù)據(jù)類型BEGINabc<=a&b;--a相并b,即a與b并置操作KX康芯科技PROCESS(abc)BEGINCASEabcIS--類似于真值表的CASE語句

WHEN"00"=>so<='0';co<='0';WHEN"01"=>so<='1';co<='0';WHEN"10"=>so<='1';co<='0';WHEN"11"=>so<='0';co<='1';WHENOTHERS=>NULL;ENDCASE;ENDPROCESS;ENDARCHITECTUREfh1;76CASE語句屬于順序語句,因此必須放在進程語句中使用CASE語句的一般表述如下:CASE<表達式>ISWHEN<選擇值或標識符>=><順序語句>;…;<順序語句>;WHEN<選擇值或標識符>=><順序語句>;…;<順序語句>;……WHENOTHERS=><順序語句>;ENDCASE;CASE語句77=>不是操作符,它的含義相當于THEN注意:WHEN條件句中的選擇值或標識符所代表的值必須在表達式的取值范圍內(nèi)除非所有條件句中的選擇值能夠完全覆蓋CASE語句中表達式的取值,否則最末一句必須加上”WHENOTHERS=><順序語句”,使用這一句的目的是為了涵蓋所有的可能取值,避免綜合器加入不必要的鎖存器.CASE語句中的選擇值只能出現(xiàn)一次,不允許有相同選擇值的條件語句出現(xiàn).CASE語句執(zhí)行中必須選中,且只能選中所列條件語句中的一條CASE語句4.3.2CASE語句

2.標準邏輯矢量數(shù)據(jù)類型STD_LOGIC_VECTOR

STD_LOGIC

在使用STD_LOGIC_VECTOR中,必須注明其數(shù)組寬度,即位寬,如:

B:OUTSTD_LOGIC_VECTOR(7DOWNTO0);

SIGNALA:STD_LOGIC_VECTOR(1TO4)

B<="01100010";--B(7)為

'0'B(4DOWNTO1)<="1101";--B(4)為

'1'B(7DOWNTO4)<=A;--B(6)等于

A(2)

4.3.2CASE語句

3.并置操作符

SIGNALa:STD_LOGIC_VECTOR(3DOWNTO0);SIGNALd:STD_LOGIC_VECTOR(1DOWNTO0);...a<='1'

'0'

d(1)

'1';--元素與元素并置,并置后的數(shù)組長度為4...IFa

d="101011"THEN...--在IF條件句中可以使用并置符

【例4-18】或門邏輯描述LIBRARYIEEE;--或門邏輯描述

USEIEEE.STD_LOGIC_1164.ALL;ENTITYor2aISPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDENTITYor2a;

ARCHITECTUREoneOFor2aISBEGINc<=aORb;

ENDARCHITECTUREone;【例4-19】采用例化語句描述的全加器LIBRARYIEEE;--1位二進制全加器頂層設(shè)計描述

USEIEEE.STD_LOGIC_1164.ALL;ENTITYf_adderISPORT(ain,bin,cin:INSTD_LOGIC;cout,sum:OUTSTD_LOGIC);ENDENTITYf_adder;ARCHITECTUREfd1OFf_adderISCOMPONENTh_adder--調(diào)用半加器聲明語句

PORT(a,b:INSTD_LOGIC;co,so:OUTSTD_LOGIC);ENDCOMPONENT;COMPONENTor2aPORT(a,b:INSTD_LOGIC;c:OUTSTD_LOGIC);ENDCOMPONENT;SIGNALd,e,f:STD_LOGIC;--定義3個信號作為內(nèi)部的連接線。

BEGINu1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);--例化語句u2:h_adderPORTMAP(a=>e,

b=>cin,

co=>f,so=>sum);u3:or2aPORTMAP(a=>d,

b=>f,

c=>cout);

ENDARCHITECTUREfd1;831位二進制全加器內(nèi)部端口外部端口端口連線84或門庫文件實體元件定義元件例化連接說明85全加器描述和例化語句為了達到連接底層元件形成更高層次的電路設(shè)計結(jié)構(gòu),文件中使用了例化語句.文件在實體中首先定義了全加器頂層設(shè)計元件的端口信號,然后在ARCHITECTURE和BEGIN之間利用COMPONENT語句對準備調(diào)用的元件(或門和半加器)做了聲明,并定義了d/e/f三個信號作為器件內(nèi)部的連接線,最后利用端口映射語句PORTMAP()將兩個半加器和一個或門連接起來構(gòu)成一個完整的全加器.86全加器描述和例化語句元件例化就是引入一種連接關(guān)系,將預(yù)先設(shè)計好的設(shè)計實體定義為一個元件,然后利用特定的語句將此元件與當前的設(shè)計實體中的指定端口相連接,從而為當前設(shè)計實體引進一個新的低一級的設(shè)計層次.

在這里,當前設(shè)計實體(全加器)相當于一個較大的電路系統(tǒng),所定義的例化元件相當于一個要插在這個電路系統(tǒng)上的芯片,而當前設(shè)計實體中指定的端口則相當于電路板上準備接受此芯片的一個插座.87全加器描述和例化語句元件例化語句由兩部分組成,第一部分是將一個現(xiàn)成的設(shè)計實體定義為一個元件,語句的功能是對待調(diào)用的元件做出調(diào)用聲明,它的最簡表達式如下:COMPONENT元件名ISPORT(端口名表);ENDCOMPONETN;這一部分相當于元件定義語句,相當于對一個現(xiàn)成的設(shè)計實體進行封裝,使其只留出對外的接口界面.例如:COMPONENTh_adderPORT(c,d:INSTD_LOGIC;e,f:OUTSTD_LOGIC);88全加器描述和例化語句元件例化語句的

第二部分是此元件與當前設(shè)計實體(頂層文件)中元件間及端口的連接說明.語句的表達式如下:例化名:元件名PORTMAP([端口名=>]連接端口名,……);例如:U1:h_adderPORTMAP(a=>ain,b=>bin,co=>d,so=>e);其中,例化名是必須存在的,相當于一個插座名,“元件名”則是準備在此插座上插入的、已定義好的元件名,即調(diào)用的低一級的實體名。PORTMAP表示端口映射的意思.a=>ain表示元件h_adder的內(nèi)部端口信號a(端口名)與系統(tǒng)的外部端口名ain相連.=>符號左面放置內(nèi)部元件的端口名,右面放置內(nèi)部元件以外需要連接的端口名或信號名.89種類:常量(CONSTANT)

變量(VARIABLE)

信號(SIGNAL)?常量(CONSTANT)

在數(shù)據(jù)類型定義和賦初值定義完成之后,常量在程序中保持恒定不變。

提高程序的易讀性和易修改性。

常量具有可視性。定義范圍:實體、結(jié)構(gòu)體、程序包、進程、子程序。?變量(VARIABLE)可賦予一系列的值,初值可有可無。用于數(shù)據(jù)的臨時局部存儲。定義和使用范圍:進程、子程序。賦予變量的數(shù)值,變量立即接受。常量和變量的賦值符號均為“:=”。數(shù)據(jù)對象90?信號(SIGNAL)可賦予一系列的值,初值可有可無。定義初值的符號為“:=”;賦值符號為“<=”。賦予信號的數(shù)值要到未來的某個時刻,信號才接受??稍O(shè)置延時量;未設(shè)置延時量時,賦值經(jīng)歷δ延時。信號具有可視性。定義范圍:實體、結(jié)構(gòu)體、程序包。

端口(Port)與信號

概念一致。

端口的定義:隱式的信號定義,附加數(shù)據(jù)流動方向的限制。

輸出端口:可對其賦值,不可從中讀取數(shù)據(jù);

輸入端口:可從中讀取數(shù)據(jù),不可對其賦值。

實體中定義的端口,在結(jié)構(gòu)體中可直接作為信號使用,不需另作定義。91定義常數(shù)的一般表述:

CONSTANT常數(shù)名:數(shù)據(jù)類型:=表達式;定義變量的一般表述:

VARIABLE變量名:數(shù)據(jù)類型:=初始值;

定義信號的一般表述:

SIGNAL

信號名:

數(shù)據(jù)類型:=初始值;CONSTANTintLength:INTEGER:=8;VARIABLEX_1:INTEGER:=16;VARIABLEX_2:INTEGER;…X_2:=4;X_1:=X_2+2;SIGNAL

Sig_1:INTEGER:=2;SIGNAL

a:INTEGER;…Sig_1<=a;92示例及其語言現(xiàn)象詳解2選1多路選擇器的VHDL描述ENTITYmux21aISPORT(a,b:INBIT;s:INBIT;y:OUTBIT);ENDENTITYmux21a;ARCHITECTUREoneOFmux21aISBEGIN

y<=aWHENs='0'ELSEb;ENDARCHITECTUREone;WHEN_ELSE條件信號賦值語句(并行)賦值目標<=

表達式WHEN賦值條件ELSE

表達式WHEN賦值條件ELSE...

表達式;934.4設(shè)計4位計數(shù)器AB01010101取整數(shù)數(shù)據(jù)類型,為什么?整數(shù)取值范圍端口信號模式取BUFFER,為什么?注意整數(shù)和位的不同表達方式!4.4.14位二進制加法計數(shù)器設(shè)計

表式Q<=Q+1的右項與左項并非處于相同的時刻內(nèi),對于時序電路,除了傳輸延時外,前者的結(jié)果出現(xiàn)于當前時鐘周期;后者,即左項要獲得當前的Q+1,需等待下一個時鐘周期。表面上,BUFFER具有雙向端口INOUT的功能,但實際上其輸入功能是不完整的,它只能將自己輸出的信號再反饋回來,并不含有IN的功能。注意4.4計數(shù)器設(shè)計

4.4.2整數(shù)類型

Q:BUFFERINTEGERRANGE15DOWNTO0;1 十進制整數(shù)0 十進制整數(shù)35十進制整數(shù)10E3 十進制整數(shù),等于十進制整數(shù)100016#D9# 十六進制整數(shù),等于十六進制整數(shù)D9H8#720# 八進制整數(shù),等于八進制整數(shù)720O2#11010010# 二進制整數(shù),等于二進制整數(shù)11010010B整數(shù)常量的書寫方式示例Q:BUFFERNATURALRANGE15DOWNTO0;

964.4.3計數(shù)器的其他表示方法運算符加載注意,信號端口模式和數(shù)據(jù)類型的改變!注意,引進內(nèi)部信號矢量!4.4計數(shù)器設(shè)計

4.4.3計數(shù)器設(shè)計的其他表述方法

圖4-124位加法計數(shù)器RTL電路(Synplify綜合)

4.4計數(shù)器設(shè)計

4.4.3計數(shù)器設(shè)計的其他表述方法

圖4-134位加法計數(shù)器工作時序

4.5一般加法計數(shù)器設(shè)計

【例4-22】LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCNT10ISPORT(CLK,RST,EN:INSTD_LOGIC;CQ:OUTSTD_LOGIC_VECTOR(3DOWNTO0);COUT:OUTSTD_LOGIC);ENDCNT10;ARCHITECTUREbehavOFCNT10ISBEGIN4.5一般加法計數(shù)器設(shè)計

PROCESS(CLK,RST,EN)VARIABLECQI:STD_LOGIC_VECTOR(3DOWNTO0);BEGINIFRST=‘1’THENCQI:=(OTHERS=>‘0’);--計數(shù)器異步復(fù)位

ELSIFCLK‘EVENTANDCLK=’1‘THEN--檢測時鐘上升沿IFEN='1'THEN-檢測是否允許計數(shù)(同步使能)IFCQI<9THENCQI:=CQI+1;--允許計數(shù),檢測是否小于9ELSECQI:=(OTHERS=>‘0’);--大于9,計數(shù)值清零ENDIF;ENDIF;ENDIF;

4.5一般加

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 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

提交評論