基于FPGA的自主可控SOC設(shè)計 課件 第二講 硬件描述語言VHDL設(shè)計_第1頁
基于FPGA的自主可控SOC設(shè)計 課件 第二講 硬件描述語言VHDL設(shè)計_第2頁
基于FPGA的自主可控SOC設(shè)計 課件 第二講 硬件描述語言VHDL設(shè)計_第3頁
基于FPGA的自主可控SOC設(shè)計 課件 第二講 硬件描述語言VHDL設(shè)計_第4頁
基于FPGA的自主可控SOC設(shè)計 課件 第二講 硬件描述語言VHDL設(shè)計_第5頁
已閱讀5頁,還剩364頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

硬件描述語言VHDL設(shè)計內(nèi)容綱要

VHDL語法結(jié)構(gòu)組合邏輯電路設(shè)計時序電路設(shè)計有限狀態(tài)機設(shè)計一、VHDL語法結(jié)構(gòu)1.1VHDL概述1.2VHDL程序結(jié)構(gòu)1.3VHDL語言元素1.4VHDL基本邏輯語句1.5VHDL描述方式41.1VHDL概述

常用硬件描述語言:1、ABEL-HDL2、AHDL3、VHDL4、VerilogHDL41.1VHDL概述

常用硬件描述語言:1、ABEL-HDL2、AHDL3、VHDL4、VerilogHDLIEEE標(biāo)準(zhǔn)VHDL:VHSIC(VeryHighSpeedIntegratedCircuit)HardwareDescriptionLanguage

1.1什么是VHDL(HDL)?

VHDL發(fā)展

nIEEE工業(yè)標(biāo)準(zhǔn)硬件描述語言

n

用于仿真及綜合的高級描述語言

VHDL發(fā)展

nIEEE工業(yè)標(biāo)準(zhǔn)硬件描述語言

n

用于仿真及綜合的高級描述語言

80年代初由美國國防部在實施超高速集成

電路(VHSIC)項目時開發(fā)的。

1987年IEEE協(xié)會批準(zhǔn)為IEEE工業(yè)標(biāo)準(zhǔn)

稱為IEEE1076-1987。

1993年更新為93標(biāo)準(zhǔn),IEEE1076.

93。

1996年IEEE1076.3成為綜合標(biāo)準(zhǔn)VHDL和VerilogHDLVerilogHDL由Verilog公司開發(fā),1995年成為IEEE標(biāo)準(zhǔn)。優(yōu)點:與C語言風(fēng)格類似,簡單易學(xué)缺點:數(shù)據(jù)類型定義模糊化VHDL優(yōu)點:功能強大、通用性強,語法嚴(yán)謹(jǐn)缺點:語法結(jié)構(gòu)復(fù)雜參考文獻(xiàn)

VHDL在線參考/vhdlref/index.htmlVerilog常見問答/verilogfaq/參考書籍1.成為IEEE標(biāo)準(zhǔn)的硬件描述語言是VHDLAHDLABEL-HDLVerilogABCD提交多選題1分此題未設(shè)置答案,請點擊右側(cè)設(shè)置按鈕VHDL在電子系統(tǒng)設(shè)計中的應(yīng)用電子系統(tǒng)的設(shè)計模塊VHDL在電子系統(tǒng)設(shè)計中的應(yīng)用電子系統(tǒng)設(shè)計的描述等級1、行為級2、RTL級(Registertransferlevel)3、邏輯門級4、版圖級用VHDL可以描述以上四個等級VHDL在電子系統(tǒng)設(shè)計中的應(yīng)用行為級VHDL在電子系統(tǒng)設(shè)計中的應(yīng)用寄存器傳輸級VHDL在電子系統(tǒng)設(shè)計中的應(yīng)用邏輯門級VHDL在電子系統(tǒng)設(shè)計中的應(yīng)用版圖級1.2VHDL程序結(jié)構(gòu)

實體(Entity)

結(jié)構(gòu)體(Architecture)

配置(Configuration)

庫(Library)、程序包(Package)VHDL設(shè)計文件的兩個基本組成部分實體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)包集合(Package)庫(Library)一個完整的VHDL程序VHDL程序基本結(jié)構(gòu)VHDL設(shè)計文件的兩個基本組成部分實體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)包集合(Package)庫(Library)一個完整的VHDL程序VHDL程序基本結(jié)構(gòu)實體部分描述設(shè)計系統(tǒng)的外部接口信號(即輸入/輸出信號)VHDL設(shè)計文件的兩個基本組成部分實體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)包集合(Package)庫(Library)一個完整的VHDL程序VHDL程序基本結(jié)構(gòu)實體部分描述設(shè)計系統(tǒng)的外部接口信號(即輸入/輸出信號)結(jié)構(gòu)體用于描述系統(tǒng)的內(nèi)部電路VHDL設(shè)計文件的兩個基本組成部分實體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)包集合(Package)庫(Library)一個完整的VHDL程序VHDL程序基本結(jié)構(gòu)實體部分描述設(shè)計系統(tǒng)的外部接口信號(即輸入/輸出信號)結(jié)構(gòu)體用于描述系統(tǒng)的內(nèi)部電路配置用于從庫中選取所需元件安裝到設(shè)計單元的實體中VHDL設(shè)計文件的兩個基本組成部分實體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)包集合(Package)庫(Library)一個完整的VHDL程序VHDL程序基本結(jié)構(gòu)實體部分描述設(shè)計系統(tǒng)的外部接口信號(即輸入/輸出信號)結(jié)構(gòu)體用于描述系統(tǒng)的內(nèi)部電路配置用于從庫中選取所需元件安裝到設(shè)計單元的實體中包集合存放各設(shè)計模塊能共享的數(shù)據(jù)類型、常數(shù)、子程序等VHDL設(shè)計文件的兩個基本組成部分實體(Entity)結(jié)構(gòu)體(Architecture)配置(Configuration)包集合(Package)庫(Library)一個完整的VHDL程序庫用于存放已編譯的實體、結(jié)構(gòu)體、包集合和配置VHDL程序基本結(jié)構(gòu)實體部分描述設(shè)計系統(tǒng)的外部接口信號(即輸入/輸出信號)結(jié)構(gòu)體用于描述系統(tǒng)的內(nèi)部電路配置用于從庫中選取所需元件安裝到設(shè)計單元的實體中包集合存放各設(shè)計模塊能共享的數(shù)據(jù)類型、常數(shù)、子程序等VHDL程序結(jié)構(gòu)例1一個2輸入的與門的邏輯描述LIBRARYieee; --庫說明語句USEieee.std_logic_1164.ALL;--程序包說明語句ENTITYand2IS PORT(a,b :INSTD_LOGIC; y:OUTSTD_LOGIC);ENDand2;ARCHITECTUREand2xOFand2ISBEGIN y<=aANDb;ENDand2x;實體部分結(jié)構(gòu)體部分19

庫、程序包

實體(Entity)

結(jié)構(gòu)體(Architecture)

進(jìn)程或其它并行結(jié)構(gòu)

配置(Configuration)結(jié)構(gòu)關(guān)系20器件或子系統(tǒng)

ARCHITECTUREProcessProcessENTITYSequentialProcessCombinationalProcessportsportscomponentportsports實體結(jié)構(gòu)VHDL結(jié)構(gòu)要點1、ENTITY(實體)格式:

ENTITY實體名IS[類屬參數(shù)說明][端口說明]EndENTITY實體名;其中端口說明格式為:

PORT(端口名1,端口名N:方向:類型)其中方向有:IN,OUT,INOUT,BUFFER,LINKAGE

22

1、ENTITY(實體)----類屬說明

類屬說明:確定實體或組件中定義的局部常數(shù)。模塊化設(shè)計時多用于不同層次模塊之間信息的傳遞。可從外部改變內(nèi)部電路結(jié)構(gòu)和規(guī)模。類屬說明必須放在端口說明之前。Generic(

常數(shù)名稱:類型[:=缺省值]{常數(shù)名稱:類型[:=缺省值]});23類屬常用于定義:實體端口的大小、設(shè)計實體的物理特性、總線寬度、元件例化的數(shù)量等。

entitymckisgeneric(width:integer:=16);port(add_bus:outstd_logic_vector(width-1downto0));

1、ENTITY(實體)----類屬說明24例:2輸入與門的實體描述

entityand2isgeneric(risewidth:time:=1ns;fallwidth:time:=1ns);port(a1:instd_logic;a0:instd_logic;z0:outstd_loigc);endentityand2;

注:數(shù)據(jù)類型time用于仿真模塊的設(shè)計。綜合器僅支持?jǐn)?shù)據(jù)類型為整數(shù)的類屬值。

1、ENTITY(實體)----類屬說明25端口模式:

in:輸入型,此端口為只讀型。

out:

輸出型,只能在實體內(nèi)部對其賦值。

inout:輸入輸出型,既可讀也可賦值。

buffer:緩沖型,與out相似,但可讀。Port(端口名稱{,端口名稱}:端口模式數(shù)據(jù)類型;

端口名稱{,端口名稱}:端口模式數(shù)據(jù)類型);端口聲明:確定輸入、輸出端口的數(shù)目和類型。

1、ENTITY(實體)----端口聲明26out和

buffer的區(qū)別:27

指端口上流動的數(shù)據(jù)的表達(dá)格式。為預(yù)先定義好的數(shù)據(jù)類型。

如:bit、bit_vector、integer、

std_logic、std_logic_vector等。

1、ENTITY(實體)----數(shù)據(jù)類型27

指端口上流動的數(shù)據(jù)的表達(dá)格式。為預(yù)先定義好的數(shù)據(jù)類型。

如:bit、bit_vector、integer、

std_logic、std_logic_vector等。例:entitynand2isentitym81isport(port(a,b:inbit;a:inbit_vector(7downto0);z:outbitsel:inbit_vector(2downto0););b:outbit);endentitynand2;endentitym81;

1、ENTITY(實體)----數(shù)據(jù)類型例子(HalfAdd)

其內(nèi)部結(jié)構(gòu)將由Architecture來描述

1、ENTITY(實體)----例程2.通過外部可以改變電路內(nèi)部結(jié)構(gòu)和規(guī)模的是PORTBUFFERGenericSignalABCD提交多選題1分此題未設(shè)置答案,請點擊右側(cè)設(shè)置按鈕格式:

Arcthitecture

構(gòu)造體名of

實體名is

[定義語句]內(nèi)部信號、常數(shù)、元件、數(shù)據(jù)類型、函數(shù)等的定義

begin[并行處理語句:block/process/function

/

procedure]

end構(gòu)造體名;注:同一實體的結(jié)構(gòu)體不能同名。定義語句中的常數(shù)、信號不能與實體中的端口同名。

2、ARCTHITECTURE(構(gòu)造體)30結(jié)構(gòu)體結(jié)構(gòu)體說明結(jié)構(gòu)體功能描述

常數(shù)說明

數(shù)據(jù)類型說明

信號說明

例化元件說明

子程序說明

塊語句

進(jìn)程語句

信號賦值語句子程序調(diào)用語句

元件例化語句例子(HalfAdd)

2、ARCTHITECTURE(構(gòu)造體)例子(FullAdd)(學(xué)習(xí)如何調(diào)用現(xiàn)有模塊)

2、ARCTHITECTURE(構(gòu)造體)實例(FullAdd)-entity

2、ARCTHITECTURE(構(gòu)造體)實例(FullAdd)-architecture

2、ARCTHITECTURE(構(gòu)造體)36實體與結(jié)構(gòu)體的關(guān)系設(shè)計實體結(jié)構(gòu)體1結(jié)構(gòu)體2結(jié)構(gòu)體3結(jié)構(gòu)體n。。。VHDL中的設(shè)計單元VHDL中的設(shè)計單元(可以獨立編譯)3、Library庫STD庫--VHDL的標(biāo)準(zhǔn)庫IEEE庫--VHDL的標(biāo)準(zhǔn)庫的擴展面向ASIC的庫--不同的工藝不同公司自定義的庫普通用戶自己的庫庫:數(shù)據(jù)的集合。內(nèi)含各類包定義、實體、構(gòu)造體等用戶自己的庫當(dāng)您的VHDL文件被編譯后,編譯的結(jié)果儲存在特定的目錄下,這個目錄的邏輯名稱即Library,此目錄下的內(nèi)容亦即是這個Library的內(nèi)容。3、Library庫40VHDL庫可分為5種:

1)IEEE庫定義了四個常用的程序包:

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

3、Library庫—庫的種類40VHDL庫可分為5種:

1)IEEE庫定義了四個常用的程序包:

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmetic

3、Library庫—庫的種類40VHDL庫可分為5種:

1)IEEE庫定義了四個常用的程序包:

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmeticfunctions)

3、Library庫—庫的種類40VHDL庫可分為5種:

1)IEEE庫定義了四個常用的程序包:

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmeticfunctions)

?

std_logic_unsigned(unsigned

3、Library庫—庫的種類40VHDL庫可分為5種:

1)IEEE庫定義了四個常用的程序包:

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmeticfunctions)

?

std_logic_unsigned(unsignedarithmeticfunctions)3、Library庫—庫的種類41TypeSTD_LOGIC:

9logicvaluesystem(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’)?‘W’,‘L’,‘H”weakvalues(NotsupportedbySynthesis)?‘X’-(not‘x’)usedforunknown?‘Z’-(not‘z’)usedfortri-state?‘-’Don’tCare

3、Library庫—庫的種類42

2)STD庫(默認(rèn)庫)庫中程序包為:standard,定義最基本的數(shù)據(jù)類型:

Bit,bit_vector,Boolean,

Integer,Real,andTime

注:TypeBit

2logicvaluesystem(‘0’,‘1’)

3、Library庫—庫的種類42

2)STD庫(默認(rèn)庫)庫中程序包為:standard,定義最基本的數(shù)據(jù)類型:

Bit,bit_vector,Boolean,

Integer,Real,andTime

注:TypeBit

2logicvaluesystem(‘0’,‘1’)

3)面向ASIC的庫

4)WORK庫(默認(rèn)庫)

5)用戶定義庫3、Library庫—庫的種類43程序包的使用有兩種常用格式:

例:

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.conv_integer;

library庫名;

use庫名.程序包名.項目名

use庫名.程序包名.All;3、Library庫—庫的使用442選1選擇器4、Package包46程序包:已定義的常數(shù)、數(shù)據(jù)類型、元件調(diào)用說明、子程序的一個集合。目的:方便公共信息、資源的訪問和共享。庫:多個程序包構(gòu)成庫。

程序包與庫關(guān)系47程序包說明的內(nèi)容常量說明;

VHDL數(shù)據(jù)類型說明;元件說明;子程序說明;程序包的結(jié)構(gòu)包括程序包說明(包首)程序包主體(包體)4、Package包--結(jié)構(gòu)48包聲明項可由以下語句組成:

use語句(用來包括其它程序包);類型說明;子類型說明;常量說明;信號說明;子程序說明;元件說明。

package程序包名is{包說明項}

end程序包名;1)程序包說明(包首)語法:4、Package包--結(jié)構(gòu)49例:程序包說明50包體說明項可含:

use語句;子程序說明;子程序主體;類型說明;子類型說明;常量說明。

packagebody程序包名is{包體說明項}

end程序包名;2)程序包包體程序包的內(nèi)容:子程序的實現(xiàn)算法。包體語法:4、Package包--結(jié)構(gòu)51packagesevenissubtypesegmentsisbit_vector(0to6);typebcdisrange0to9;endseven;librarywork;usework.seven.all;entitydecoderisport(input:inbcd;drive:outsegments);enddecoder;architectureartofdecoderisbegin52withinputselectdrive<=B“1111110”when0,B“0110000”when1,B“1101101”when2,B“1111001”when3,B“0110011”when4,B“1011011”when5,B“1011111”when6,B“1110000”when7,B“1111111”when8,B“1111011”when9,B“0000000”whenothers;endarchitectureart;abcdefg10mA38124567910edcdpbafg數(shù)碼管1234567891010mAedcdpbafg共陽極共陰極abcdefgdp156102347893.若7段數(shù)碼管的編碼順序為gfedcba,共陽極數(shù)碼管要顯示數(shù)字“3”的編碼是0101010011011001100001010101ABCD提交多選題1分此題未設(shè)置答案,請點擊右側(cè)設(shè)置按鈕535、Configuration配置設(shè)計實體結(jié)構(gòu)體1結(jié)構(gòu)體2結(jié)構(gòu)體3結(jié)構(gòu)體n。。。一個設(shè)計實體的多種實現(xiàn)方式配置:從某個實體的多種結(jié)構(gòu)體描述方式中選擇特定的一個。54configuration配置名of實體名isfor選配結(jié)構(gòu)體名

endfor;end配置名;5、Configuration配置55libraryieee;useieee.std_logic_1164.all;entitynandisport(a:instd_logic;b:instd_logic;c:outstd_logic);endentitynand;architectureart1ofnandisbeginc<=not(aandb);endarchitectureart1;例:一個與非門不同實現(xiàn)方式的配置如下:

56architectureart2ofnandisbeginc<=‘1’when(a=‘0’)and(b=‘0’)else‘1’when(a=‘0’)and(b=‘1’)else‘1’when(a=‘1’)and(b=‘0’)else‘0’when(a=‘1’)and(b=‘1’)else‘0’;endarchitectureart2;57configurationfirstofnandisforart1;endfor;endfirst;configurationsecondofnandisforart2endfor;endsecond;5、Configuration配置VHDL中的結(jié)構(gòu)關(guān)系1.3VHDL語言元素1、VHDL數(shù)據(jù)對象2、VHDL數(shù)據(jù)類型3、VHDL操作符1.3.1VHDL數(shù)據(jù)對象1、Constant(常量)在程序中不可以被賦值

2、Variable(變量)在程序中可以被賦值(用“:=”),賦值后立即變化為新值。3、Signal(信號)在程序中可以被賦值(用“<=”),但不立即更新,當(dāng)進(jìn)程掛起后,才開始更新。4、File(文件)在程序中實現(xiàn)對文件的寫入和讀出操作。

VHDL中的對象使用

variable

x,y:integer;--定義了整數(shù)型的變量對象x,y

constantVcc:real;--定義了實數(shù)型的常量對象Vcc

signalclk,reset:bit;--定義了位類型的信號對象clk,reset1.3.1VHDL數(shù)據(jù)對象變量與信號區(qū)別注意1、variable只能定義在process和subprogram(包括function和procedure)中,不可定以在其外部。

變量與信號區(qū)別注意1、variable只能定義在process和subprogram(包括function和procedure)中,不可定以在其外部。2、signal不能定義在process和subprogram(包括function和procedure)中,只可定以在其外部,即結(jié)構(gòu)體Architecture開始部分。①信號是全局量,可以進(jìn)行進(jìn)程之間的通信;而變量是局部量,只能用于進(jìn)程或子程序(即函數(shù)和過程)中;變量與信號區(qū)別①信號是全局量,可以進(jìn)行進(jìn)程之間的通信;而變量是局部量,只能用于進(jìn)程或子程序(即函數(shù)和過程)中;②對變量的賦值是立即發(fā)生的,對信號的賦值須經(jīng)一段時間延遲才會發(fā)生;變量與信號區(qū)別①信號是全局量,可以進(jìn)行進(jìn)程之間的通信;而變量是局部量,只能用于進(jìn)程或子程序(即函數(shù)和過程)中;②對變量的賦值是立即發(fā)生的,對信號的賦值須經(jīng)一段時間延遲才會發(fā)生;③對變量的賦值用“:=”,對信號的賦值用“<=”;④信號可以比擬為硬件端口之間的連接,而變量則與硬件之間沒有對應(yīng)關(guān)系;變量與信號區(qū)別Signal對象的常用屬性delayed[(時延值)]:使信號產(chǎn)生固定時間的延時并返回stable[(時延值)]:返回boolean,信號在規(guī)定時間內(nèi)沒有變化返回truetransaction:返回bit類型,信號每發(fā)生一次變化,返回值翻轉(zhuǎn)一次1.3.1VHDL數(shù)據(jù)對象Signal對象的常用屬性delayed[(時延值)]:使信號產(chǎn)生固定時間的延時并返回stable[(時延值)]:返回boolean,信號在規(guī)定時間內(nèi)沒有變化返回truetransaction:返回bit類型,信號每發(fā)生一次變化,返回值翻轉(zhuǎn)一次例子:A<=B’delayed(10ns);--B延時10ns后賦給A;

if(B’Stable(10ns));--判斷B在10ns中是否發(fā)生變化1.3.1VHDL數(shù)據(jù)對象信號的event和last_value屬性經(jīng)常用來確定信號的邊沿

屬性應(yīng)用1.3.1VHDL數(shù)據(jù)對象信號的event和last_value屬性經(jīng)常用來確定信號的邊沿

屬性應(yīng)用判斷clk的上升沿if((clk’event)and(clk=‘1’)and(clk’last_value=‘0’))then判斷clk的下降沿if((clk’event)and(clk=‘0’)and(clk’last_value=‘1’))then1.3.1VHDL數(shù)據(jù)對象初始化賦值SIGNALcontrol:BIT:=’0’;SIGNALcount:INTEGERRANGE0TO100;VARIABLEcontrol:BIT:=’0’;對信號、變量賦初值的操作是不可綜合的,僅能用在仿真中。1.3.1VHDL數(shù)據(jù)對象例子1

1.3.1VHDL數(shù)據(jù)對象例子21.3.1VHDL數(shù)據(jù)對象文件(File)通過規(guī)定的過程和函數(shù)可以實現(xiàn)對文件對象的讀出和寫入操作。文件聲明的格式如下:TYPE文件類型名ISFILEOF數(shù)據(jù)類型;TYPEfiletypeISFILEOFSTD_LOGIC_VECTOR;FILEexample:filetypeISIN“C:/T1.dat”;1.3.1VHDL數(shù)據(jù)對象文件(File)

定義文件輸入/輸出對象1.3.1VHDL數(shù)據(jù)對象文件(File)

文件操作按行進(jìn)行處理,需要定義行變量1.3.1VHDL數(shù)據(jù)對象文件(File)

VHDL不能直接處理行變量,需要定義位變量1.3.1VHDL數(shù)據(jù)對象文件(File)

讀寫操作需要將行變量轉(zhuǎn)為位變量1.3.1VHDL數(shù)據(jù)對象4.VHDL的數(shù)據(jù)對象包括信號常量變量文件ABCD提交多選題1分此題未設(shè)置答案,請點擊右側(cè)設(shè)置按鈕標(biāo)準(zhǔn)數(shù)據(jù)類型用戶自定義數(shù)據(jù)類型數(shù)據(jù)類型的轉(zhuǎn)換1.3.2VHDL數(shù)據(jù)類型1)標(biāo)準(zhǔn)數(shù)據(jù)類型STD_LOGIC類型的數(shù)據(jù)可以具有九種取值

‘U’:初始值

X’:不定態(tài)

‘0’:強制0

‘1’:

強制1

‘Z’:

高阻態(tài)

‘W’:弱信號不定態(tài)

‘L’:弱信號0

’H’:弱信號1

’_’:不可能情況(可忽略值)

其中,‘

X’方便了系統(tǒng)仿真,‘Z’方便了雙向總線的描述。

IEEE庫STD_LOGIC_1164STD_LOGIC_VECTOR類型定義如下:

TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;

IEEE庫STD_LOGIC_1164STD_LOGIC_VECTOR類型定義如下:

TYPESTD_LOGIC_VECTORISARRAY(NATURALRANGE<>)OFSTD_LOGIC;libraryieee;useieee.std_logic_1164.all;entitymux4isport(d:instd_logic_vector(1downto0);a0:instd_logic;y:outstd_logic);endmux4;

IEEE庫STD_LOGIC_1164例子3基本類型應(yīng)用基本類型應(yīng)用例子4要點:賦值語句中的方向應(yīng)和聲明中的方向一樣2)用戶自定義數(shù)據(jù)類型通用格式

TYPE

類型名IS數(shù)據(jù)類型定義用戶可以定義的數(shù)據(jù)類型枚舉類型enumberated、整數(shù)型integer、實數(shù)型real、數(shù)組類型array、紀(jì)錄類型record、時間類型time、文件類型file、存取類型access(1)整數(shù)類型(integer)、實數(shù)類型(real)

type<數(shù)據(jù)類型名>is<數(shù)據(jù)類型><約束范圍>;

typedigitisintegerrange0to9;

typemyrealisrealrange–1e3to1e3;

2)用戶自定義數(shù)據(jù)類型(2)枚舉類型(enumeration)

type<數(shù)據(jù)類型名>is(<元素1>,<元素2>,…);

typearith_opis(add,sub,mul,div);typecoloris(red,green,blue);2)用戶自定義數(shù)據(jù)類型(2)枚舉類型(enumeration)

type<數(shù)據(jù)類型名>is(<元素1>,<元素2>,…);

typearith_opis(add,sub,mul,div);typecoloris(red,green,blue);typebitis(‘0’,‘1’);typebooleanis(false,true);typestd_ulogicis(‘U’,‘X’,‘0’,‘1’,‘Z’,‘W’,‘L’,‘H’,‘-’);2)用戶自定義數(shù)據(jù)類型(3)數(shù)組類型(array)、記錄類型(record)

typebig_wordisarray(0to63)ofbit;--一維數(shù)組typematrix_1isarray(0to15,0to31)ofbit;--二維數(shù)組typeinstructionisrecordoperator:arith_op;op1:integer;op2:integer;endrecord;2)用戶自定義數(shù)據(jù)類型(4)子類型(subtype)

subtype<標(biāo)識符>is<基類型><范圍限制>;

subtypemy_intisintegerrange0to65535;subtypeiobusisstd_logic_vector(7downto0);2)用戶自定義數(shù)據(jù)類型格式

type

數(shù)據(jù)類型名is

范圍

units基本單位;

單位;

endunits2)用戶自定義數(shù)據(jù)類型(5)時間類型(time)

格式

type

數(shù)據(jù)類型名is

范圍

units基本單位;

單位;

endunits2)用戶自定義數(shù)據(jù)類型(5)時間類型(time)

typetimeisrange-1E18to1E18unitsus;

ms=1000us;sec=1000ms;min=60sec;endunits格式

type

數(shù)據(jù)類型名is

范圍

units基本單位;

單位;

endunits2)用戶自定義數(shù)據(jù)類型(5)時間類型(time)

typetimeisrange-1E18to1E18unitsus;

ms=1000us;sec=1000ms;min=60sec;endunits注意:引用時間時,有的編譯器要求量與單位之間應(yīng)有一個空格如:1ns;不能寫為1ns;(1)類型標(biāo)記法。用類型名稱來實現(xiàn)關(guān)系密切的標(biāo)量類型之間的轉(zhuǎn)換。例如: VARIABLEx:INTEGER;

VARIABLEy:REAL;

3)數(shù)據(jù)類型轉(zhuǎn)換(1)類型標(biāo)記法。用類型名稱來實現(xiàn)關(guān)系密切的標(biāo)量類型之間的轉(zhuǎn)換。例如: VARIABLEx:INTEGER;

VARIABLEy:REAL;使用類型標(biāo)記(即類型名)實現(xiàn)類型轉(zhuǎn)換時,可采用賦值語句:

x:=INTEGER(y);y:=REAL(x)。3)數(shù)據(jù)類型轉(zhuǎn)換★CONV_INTEGER():將STD_LOGIC_VECTOR類型轉(zhuǎn)換成

INTEGER類型?!顲ONV_STD_LOGIC_VECTOR():將INTEGER類型、UNSIGNED

類型或SIGNED類型轉(zhuǎn)換成STD_LOGIC_VECTOR類型。

3)數(shù)據(jù)類型轉(zhuǎn)換★CONV_INTEGER():將STD_LOGIC_VECTOR類型轉(zhuǎn)換成

INTEGER類型。★CONV_STD_LOGIC_VECTOR():將INTEGER類型、UNSIGNED

類型或SIGNED類型轉(zhuǎn)換成STD_LOGIC_VECTOR類型。★TO_BIT():將STD_LOGIC類型轉(zhuǎn)換成BIT類型?!颰O_BIT_VECTOR():將STD_LOGIC_VECTOR類型轉(zhuǎn)換

BIT_VECTOR類型。

3)數(shù)據(jù)類型轉(zhuǎn)換★CONV_INTEGER():將STD_LOGIC_VECTOR類型轉(zhuǎn)換成

INTEGER類型?!顲ONV_STD_LOGIC_VECTOR():將INTEGER類型、UNSIGNED

類型或SIGNED類型轉(zhuǎn)換成STD_LOGIC_VECTOR類型。★TO_BIT():將STD_LOGIC類型轉(zhuǎn)換成BIT類型?!颰O_BIT_VECTOR():將STD_LOGIC_VECTOR類型轉(zhuǎn)換

BIT_VECTOR類型?!颰O_STD_LOGIC():將BIT類型轉(zhuǎn)換成STD_LOGIC類型?!颰O_STD_LOGIC_VECTOR():

將BIT_VECTOR類型轉(zhuǎn)換成

STD_LOGIC_VECTOR類型。3)數(shù)據(jù)類型轉(zhuǎn)換★CONV_INTEGER():將STD_LOGIC_VECTOR類型轉(zhuǎn)換成

INTEGER類型?!顲ONV_STD_LOGIC_VECTOR():將INTEGER類型、UNSIGNED

類型或SIGNED類型轉(zhuǎn)換成STD_LOGIC_VECTOR類型?!颰O_BIT():將STD_LOGIC類型轉(zhuǎn)換成BIT類型?!颰O_BIT_VECTOR():將STD_LOGIC_VECTOR類型轉(zhuǎn)換

BIT_VECTOR類型?!颰O_STD_LOGIC():將BIT類型轉(zhuǎn)換成STD_LOGIC類型?!颰O_STD_LOGIC_VECTOR():

將BIT_VECTOR類型轉(zhuǎn)換成

STD_LOGIC_VECTOR類型。3)數(shù)據(jù)類型轉(zhuǎn)換該函數(shù)由STD_LOGIC_UNSIGNED程序包定義★CONV_INTEGER():將STD_LOGIC_VECTOR類型轉(zhuǎn)換成

INTEGER類型。★CONV_STD_LOGIC_VECTOR():將INTEGER類型、UNSIGNED

類型或SIGNED類型轉(zhuǎn)換成STD_LOGIC_VECTOR類型?!颰O_BIT():將STD_LOGIC類型轉(zhuǎn)換成BIT類型?!颰O_BIT_VECTOR():將STD_LOGIC_VECTOR類型轉(zhuǎn)換

BIT_VECTOR類型。★TO_STD_LOGIC():將BIT類型轉(zhuǎn)換成STD_LOGIC類型。★TO_STD_LOGIC_VECTOR():

將BIT_VECTOR類型轉(zhuǎn)換成

STD_LOGIC_VECTOR類型。3)數(shù)據(jù)類型轉(zhuǎn)換該函數(shù)由STD_LOGIC_UNSIGNED程序包定義該函數(shù)由STD_LOGIC_ARITH程序包定義★CONV_INTEGER():將STD_LOGIC_VECTOR類型轉(zhuǎn)換成

INTEGER類型?!顲ONV_STD_LOGIC_VECTOR():將INTEGER類型、UNSIGNED

類型或SIGNED類型轉(zhuǎn)換成STD_LOGIC_VECTOR類型。★TO_BIT():將STD_LOGIC類型轉(zhuǎn)換成BIT類型。★TO_BIT_VECTOR():將STD_LOGIC_VECTOR類型轉(zhuǎn)換

BIT_VECTOR類型?!颰O_STD_LOGIC():將BIT類型轉(zhuǎn)換成STD_LOGIC類型?!颰O_STD_LOGIC_VECTOR():

將BIT_VECTOR類型轉(zhuǎn)換成

STD_LOGIC_VECTOR類型。注意:引用時必須首先打開庫和相應(yīng)的程序包。3)數(shù)據(jù)類型轉(zhuǎn)換該函數(shù)由STD_LOGIC_UNSIGNED程序包定義該函數(shù)由STD_LOGIC_ARITH程序包定義以下函數(shù)由STD_LOGIC_1164程序包定義分類運算符功能二元算術(shù)運算符+加-減*乘/除mod求模rem求余**乘方一元算術(shù)運算符+正號-負(fù)號abs絕對值關(guān)系運算符=相等/=不相等<小于>大于<=小于等于>=大于等于1.3.3VHDL操作符分類運算符功能二元算術(shù)運算符+加-減*乘/除mod求模rem求余**乘方一元算術(shù)運算符+正號-負(fù)號abs絕對值關(guān)系運算符=相等/=不相等<小于>大于<=小于等于>=大于等于分類運算符功能二元邏輯運算符and與Or或Nand與非Nor或非xor異或一元邏輯運算符not求反并置運算符&連接賦值運算符<=信號賦值:=變量賦值=>結(jié)合1.3.3VHDL操作符運算符優(yōu)先級NOT、ABS、**;REM、MOD、/、*;—(負(fù))、+(正);&、—(減)、+(加);>=、<=、>、<、/=、=;XOR、NOR、NAND、OR、AND。注意:在編寫VHDL程序時,必須保證操作數(shù)的數(shù)據(jù)類型與運算符所要求的數(shù)據(jù)類型一致。1.3.3VHDL操作符5.信號的賦值的符號是<=>=:=::ABCD提交多選題1分此題未設(shè)置答案,請點擊右側(cè)設(shè)置按鈕“<=”賦值符:用于將數(shù)據(jù)傳給信號。“:=”賦值符:用于將數(shù)據(jù)傳給變量。

該賦值符也用于為信號、變量、常量等指定初值。

“=>”符號:在WHEN語句中出現(xiàn),其含義是“THEN(則)”。1.3.3VHDL操作符連接操作符---使用&1.3.3VHDL操作符集合操作---使用()1.3.3VHDL操作符集合操作---采用序號1.3.3VHDL操作符集合操作--采用others1.3.3VHDL操作符邏輯操作符1.3.3VHDL操作符數(shù)學(xué)運算符注意:上述運算符應(yīng)用于integer,real,time類型,不能用于vector(如果希望用于vector,可以使用庫IEEE的std_logic_unsigned包,它對算術(shù)運算符進(jìn)行了擴展)1.3.3VHDL操作符6.連接操作符是|and&&&ABCD提交多選題1分此題未設(shè)置答案,請點擊右側(cè)設(shè)置按鈕1.4VHDL基本邏輯語句1、并行處理(concurrent)語句的執(zhí)行與書寫順序無關(guān),并行塊內(nèi)的語句時同時執(zhí)行。2、順序處理(sequential)語句的執(zhí)行按書寫的先后次序,從前到后順序執(zhí)行。Architecture中的語句及子模塊之間是并行處理的子模塊block中的語句是并行處理的子模塊process中的語句是順序處理的子模塊subprogram中的function和procedure是順序處理的1.4VHDL基本邏輯語句Arcthitecture(構(gòu)造體)格式:(前面已講)

Arcthitecture

構(gòu)造體名of

實體名is

[定義語句]內(nèi)部信號、常數(shù)、元件、數(shù)據(jù)類型、函數(shù)等的定義

begin[并行處理語句和block、process、function、procedure]

end構(gòu)造體名;

1.4VHDL基本邏輯語句1)Block普通Block格式

塊名:

BLOCK[定義語句]

begin[并行處理語句concurrentstatement]

endblock

塊名Architecture中的Block條件Block格式

塊名:

BLOCK

[(布爾表達(dá)式)]

[定義語句]

begin[并行處理語句concurrentstatement[信號]<=

guarded[信號,延時];

endblock

塊名1)BlockBlock例子

myblock1:

block(clk=‘1’)

signal:qin:bit:=‘0’;

beginqout<=guardedqin;

endblockmyblock1

1)BlockBlock例子

myblock1:

block(clk=‘1’)

signal:qin:bit:=‘0’;

beginqout<=guardedqin;

endblockmyblock1

myblock2:

block

beginqout<=qin;

endblock

myblock2用BLOCK語句描述2選1電路的程序。

ENTITYmux2_1IS

PORT(d0,d1,sel :IN STD_LOGIC; q :OUT STD_LOGIC);ENDmux2_1;ARCHITECTUREamuxOFmux2_1IS

SIGNALtmp1,tmp2,tmp3:STD_LOGIC;BEGINcale:BLOCK

BEGIN tmp1<=d0ANDsel; tmp2<=d1AND(notsel); tmp3<=tmp1ORtmp2; q<=tmp3;

ENDBLOCKcale;ENDamux;

上述結(jié)構(gòu)體中只有一個BLOCK塊,若電路復(fù)雜時可由幾個BLOCK塊組成。用BLOCK語句描述2選1電路的程序。

ENTITYmux2_1IS

PORT(d0,d1,sel :IN STD_LOGIC; q :OUT STD_LOGIC);ENDmux2_1;ARCHITECTUREamuxOFmux2_1IS

SIGNALtmp1,tmp2,tmp3:STD_LOGIC;BEGINcale:BLOCK

BEGIN tmp1<=d0ANDsel; tmp2<=d1AND(notsel); tmp3<=tmp1ORtmp2; q<=tmp3;

ENDBLOCKcale;ENDamux;

上述結(jié)構(gòu)體中只有一個BLOCK塊,若電路復(fù)雜時可由幾個BLOCK塊組成。2選1數(shù)據(jù)選擇器d1d0qselu2u1u3tmp1tmp2tmp3用帶保護(hù)條件的BLOCK語句描述一個鎖存器的結(jié)構(gòu)。

ENTITYlatch

IS

PORT(d,clk :IN STD_LOGIC; q,qn :OUT STD_LOGIC);

ENDlatch;

ARCHITECTURElatch_aOFlatchIS

BEGIN g1:BLOCK(clk='1')

BEGIN q<=guardeddafter5ns; qn<=guardednot(d)after7ns;

ENDBLOCKg1;

ENDlatch_a;用帶保護(hù)條件的BLOCK語句描述一個鎖存器的結(jié)構(gòu)。

ENTITYlatch

IS

PORT(d,clk :IN STD_LOGIC; q,qn :OUT STD_LOGIC);

ENDlatch;

ARCHITECTURElatch_aOFlatchIS

BEGIN g1:BLOCK(clk='1')

BEGIN q<=guardeddafter5ns; qn<=guardednot(d)after7ns;

ENDBLOCKg1;

ENDlatch_a;qnqQDCdclk

在BLOCK塊中的兩個信號傳送語句都寫有前衛(wèi)關(guān)鍵詞guarded,表明只有clk=’1’為真時,這兩個語句才能執(zhí)行。

(注意:這里的綜合工具不支持guardedblock

語句和after短語。)2)process格式[進(jìn)程名:]

process[(觸發(fā)信號列表)][定義語句;]

begin[串行處理語句sequentialstatement;]

endprocess2)process格式[進(jìn)程名:]

process[(觸發(fā)信號列表)][定義語句;]

begin[串行

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論