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

下載本文檔

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

文檔簡介

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

VHDL語法結(jié)構(gòu)組合邏輯電路設(shè)計(jì)時(shí)序電路設(shè)計(jì)有限狀態(tài)機(jī)設(shè)計(jì)一、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

用于仿真及綜合的高級(jí)描述語言

VHDL發(fā)展

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

n

用于仿真及綜合的高級(jí)描述語言

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

電路(VHSIC)項(xiàng)目時(shí)開發(fā)的。

1987年IEEE協(xié)會(huì)批準(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)點(diǎn):與C語言風(fēng)格類似,簡單易學(xué)缺點(diǎn):數(shù)據(jù)類型定義模糊化VHDL優(yōu)點(diǎn):功能強(qiáng)大、通用性強(qiáng),語法嚴(yán)謹(jǐn)缺點(diǎn):語法結(jié)構(gòu)復(fù)雜參考文獻(xiàn)

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

實(shí)體(Entity)

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

配置(Configuration)

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

庫、程序包

實(shí)體(Entity)

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

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

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

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

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

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

22

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

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

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

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

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

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

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

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

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

out:

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

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

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

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

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

buffer的區(qū)別:27

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

如:bit、bit_vector、integer、

std_logic、std_logic_vector等。

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

指端口上流動(dòng)的數(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í)體)----數(shù)據(jù)類型例子(HalfAdd)

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

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

Arcthitecture

構(gòu)造體名of

實(shí)體名is

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

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

/

procedure]

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

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

常數(shù)說明

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

信號(hào)說明

例化元件說明

子程序說明

塊語句

進(jìn)程語句

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

元件例化語句例子(HalfAdd)

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

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

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

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

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

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

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

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

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmetic

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

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

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmeticfunctions)

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

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

?

std_logic_1164(std_logictypes&relatedfunctions)

?

std_logic_arith(arithmeticfunctions)

?

std_logic_signed(signedarithmeticfunctions)

?

std_logic_unsigned(unsigned

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

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

?

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庫名.程序包名.項(xiàng)目名

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

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

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

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

package程序包名is{包說明項(xiàng)}

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

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

packagebody程序包名is{包體說明項(xiàng)}

end程序包名;2)程序包包體程序包的內(nèi)容:子程序的實(shí)現(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ù)碼管的編碼順序?yàn)間fedcba,共陽極數(shù)碼管要顯示數(shù)字“3”的編碼是0101010011011001100001010101ABCD提交多選題1分此題未設(shè)置答案,請(qǐng)點(diǎn)擊右側(cè)設(shè)置按鈕535、Configuration配置設(shè)計(jì)實(shí)體結(jié)構(gòu)體1結(jié)構(gòu)體2結(jié)構(gòu)體3結(jié)構(gòu)體n。。。一個(gè)設(shè)計(jì)實(shí)體的多種實(shí)現(xiàn)方式配置:從某個(gè)實(shí)體的多種結(jié)構(gòu)體描述方式中選擇特定的一個(gè)。54configuration配置名of實(shí)體名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;例:一個(gè)與非門不同實(shí)現(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ù)對(duì)象2、VHDL數(shù)據(jù)類型3、VHDL操作符1.3.1VHDL數(shù)據(jù)對(duì)象1、Constant(常量)在程序中不可以被賦值

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

VHDL中的對(duì)象使用

variable

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

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

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

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

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

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

屬性應(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ù)對(duì)象初始化賦值SIGNALcontrol:BIT:=’0’;SIGNALcount:INTEGERRANGE0TO100;VARIABLEcontrol:BIT:=’0’;對(duì)信號(hào)、變量賦初值的操作是不可綜合的,僅能用在仿真中。1.3.1VHDL數(shù)據(jù)對(duì)象例子1

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

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

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

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

讀寫操作需要將行變量轉(zhuǎn)為位變量1.3.1VHDL數(shù)據(jù)對(duì)象4.VHDL的數(shù)據(jù)對(duì)象包括信號(hào)常量變量文件ABCD提交多選題1分此題未設(shè)置答案,請(qǐng)點(diǎn)擊右側(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’:強(qiáng)制0

‘1’:

強(qiáng)制1

‘Z’:

高阻態(tài)

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

‘L’:弱信號(hào)0

’H’:弱信號(hào)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要點(diǎn):賦值語句中的方向應(yīng)和聲明中的方向一樣2)用戶自定義數(shù)據(jù)類型通用格式

TYPE

類型名IS數(shù)據(jù)類型定義用戶可以定義的數(shù)據(jù)類型枚舉類型enumberated、整數(shù)型integer、實(shí)數(shù)型real、數(shù)組類型array、紀(jì)錄類型record、時(shí)間類型time、文件類型file、存取類型access(1)整數(shù)類型(integer)、實(shí)數(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)識(shí)符>is<基類型><范圍限制>;

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

type

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

范圍

units基本單位;

單位;

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

格式

type

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

范圍

units基本單位;

單位;

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

typetimeisrange-1E18to1E18unitsus;

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

type

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

范圍

units基本單位;

單位;

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

typetimeisrange-1E18to1E18unitsus;

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

VARIABLEy:REAL;

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

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

x:=INTEGER(y);y:=REAL(x)。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類型。

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

該賦值符也用于為信號(hào)、變量、常量等指定初值。

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

Arcthitecture

構(gòu)造體名of

實(shí)體名is

[定義語句]內(nèi)部信號(hào)、常數(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[信號(hào)]<=

guarded[信號(hào),延時(shí)];

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)體中只有一個(gè)BLOCK塊,若電路復(fù)雜時(shí)可由幾個(gè)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)體中只有一個(gè)BLOCK塊,若電路復(fù)雜時(shí)可由幾個(gè)BLOCK塊組成。2選1數(shù)據(jù)選擇器d1d0qselu2u1u3tmp1tmp2tmp3用帶保護(hù)條件的BLOCK語句描述一個(gè)鎖存器的結(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語句描述一個(gè)鎖存器的結(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塊中的兩個(gè)信號(hào)傳送語句都寫有前衛(wèi)關(guān)鍵詞guarded,表明只有clk=’1’為真時(shí),這兩個(gè)語句才能執(zhí)行。

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

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

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

begin[串行處理語句sequentialstatement;]

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

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

begin[串行

溫馨提示

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

評(píng)論

0/150

提交評(píng)論