EDA期中考試復(fù)習(xí)_第1頁(yè)
EDA期中考試復(fù)習(xí)_第2頁(yè)
EDA期中考試復(fù)習(xí)_第3頁(yè)
EDA期中考試復(fù)習(xí)_第4頁(yè)
EDA期中考試復(fù)習(xí)_第5頁(yè)
已閱讀5頁(yè),還剩18頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

EDA期中考試復(fù)習(xí)

復(fù)習(xí)綱要:

第一章:

1.概念一一問(wèn)答題,如:VHDL與軟件語(yǔ)言特點(diǎn)、設(shè)計(jì)流程等

2.習(xí)題部分

第三章:

1.程序語(yǔ)法,名稱、功能、作用

1.順序語(yǔ)句:IF;CASE——寫(xiě)在Process中;理解上的“順序性

2.VHDL常見(jiàn)語(yǔ)法要素

2.并行語(yǔ)句:whenelse;withselect

3.編程題:參考習(xí)題

4.改錯(cuò)題:修改語(yǔ)法錯(cuò)誤

第一章資料(重點(diǎn)加粗、下劃線)

1-1EDA技術(shù)與ASIC設(shè)計(jì)和FPGA開(kāi)發(fā)有什么關(guān)系?FPGA在ASIC設(shè)計(jì)中有什么用途?P3~4

EDA技術(shù)與ASIC設(shè)計(jì)和FPGA開(kāi)發(fā)有什么關(guān)系?答:利用EDA技術(shù)進(jìn)行電子系統(tǒng)設(shè)計(jì)的

最后目標(biāo)是完成專用集成電路ASIC的設(shè)計(jì)和實(shí)現(xiàn);FPGA和CPLD是實(shí)現(xiàn)這一途徑的主流器

件。FPGA和CPLD的應(yīng)用是EDA技術(shù)有機(jī)融合軟硬件電子設(shè)計(jì)技術(shù)、SoC(片上系統(tǒng))和ASIC

設(shè)計(jì),以及對(duì)自動(dòng)設(shè)計(jì)與自動(dòng)實(shí)現(xiàn)最典型的詮釋。

FPGA在ASIC設(shè)計(jì)中有什么用途?答:FPGA和CPLD通常也被稱為可編程專用IC,或可

編程ASIC。FPGA實(shí)現(xiàn)ASiC設(shè)計(jì)的現(xiàn)場(chǎng)可編程器件。

1-2與軟件描述語(yǔ)言相比,VHDL有什么特點(diǎn)?P4~6

答:編譯器將軟件程序翻譯成基于某種特定CPU的機(jī)器代碼,這種代碼僅限于這種CPU

而不能移植,并且機(jī)器代碼不代表硬件結(jié)構(gòu),更不能改變CPU的硬件結(jié)構(gòu),只能被動(dòng)地為

其特定的硬件電路結(jié)構(gòu)所利用。

綜合器將VHDL程序轉(zhuǎn)化的目標(biāo)是底層的電路結(jié)構(gòu)網(wǎng)表文件,這種滿足VHDL設(shè)計(jì)

程序功能描述的電路結(jié)構(gòu),不依賴于任何特定硬件環(huán)境;具有相對(duì)獨(dú)立性。綜合器在將

VHDL(硬件描述語(yǔ)言)表達(dá)的電路功能轉(zhuǎn)化成具體的電路結(jié)構(gòu)網(wǎng)表過(guò)程中,具有明顯的能動(dòng)

性和創(chuàng)造性,它不是機(jī)械的一一對(duì)應(yīng)式的“翻譯”,而是根據(jù)設(shè)計(jì)庫(kù)、工藝庫(kù)以及預(yù)先設(shè)置

的各類(lèi)約束條件,選擇最優(yōu)的方式完成電路結(jié)構(gòu)的設(shè)計(jì)。

1-3什么是綜合?有哪些類(lèi)型?綜合在電子設(shè)計(jì)自動(dòng)化中的地位是什么?P6

什么是綜合?答:在電子設(shè)計(jì)領(lǐng)域中綜合的概念可以表示為:將用行為和功能層次表達(dá)

的電子系統(tǒng)轉(zhuǎn)換為低層次的便于具體實(shí)現(xiàn)的模塊組合裝配的過(guò)程。

有哪些類(lèi)型?答:(1)從自然語(yǔ)言轉(zhuǎn)換到VHDL語(yǔ)言算法表示,即自然語(yǔ)言綜合。(2)從

算法表示轉(zhuǎn)換到寄存器傳輸級(jí)(RegisterTransportLevel,RTL),即從行為域到結(jié)構(gòu)域的綜

合,即行為綜合。(3)從RTL級(jí)表示轉(zhuǎn)換到邏輯門(mén)(包括觸發(fā)器)的表示,即邏輯綜合。(4)

從邏輯門(mén)表示轉(zhuǎn)換到版圖表示(ASIC設(shè)計(jì)),或轉(zhuǎn)換到FPGA的配置網(wǎng)表文件,可稱為版圖綜

合或結(jié)構(gòu)綜合。

綜合在電子設(shè)計(jì)自動(dòng)化中的地位是什么?答:是核心地位(見(jiàn)圖卜3)。綜合器具有更

復(fù)雜的工作環(huán)境,綜合器在接受VHDL程序并準(zhǔn)備對(duì)其綜合前,必須獲得與最終實(shí)現(xiàn)設(shè)計(jì)電

路硬件特征相關(guān)的工藝庫(kù)信息,以及獲得優(yōu)化綜合的諸多約束條件信息;根據(jù)工藝庫(kù)和約束

條件信息,將VHDL程序轉(zhuǎn)化成電路實(shí)現(xiàn)的相關(guān)信息。

1-4在EDA技術(shù)中,自頂向下的設(shè)計(jì)方法的重要意義是什么?P8~10

答:在EDA技術(shù)應(yīng)用中,自頂向下的設(shè)計(jì)方法,就是在整個(gè)設(shè)計(jì)流程中各設(shè)計(jì)環(huán)節(jié)逐

步求精的過(guò)程。

1-5IP在EDA技術(shù)的應(yīng)用和發(fā)展中的意義是什么?P23-25

答:IP核具有規(guī)范的接口協(xié)議,良好的可移植與可測(cè)試性,為系統(tǒng)開(kāi)發(fā)提供了可靠的

保證。

2-6敘述EDA的FPGA/CPLD設(shè)計(jì)流程,以及涉及的EDA工具及其在整個(gè)流程中的作用。

(P12~14)

答:L設(shè)計(jì)輸入(原理圖/HDL文本編輯)(EDA設(shè)計(jì)輸入器將電路系統(tǒng)以一定的表達(dá)方式

輸入計(jì)算機(jī));2.綜合(EDA綜合器就是將電路的高級(jí)語(yǔ)言(如行為描述)轉(zhuǎn)換成低級(jí)的,可

與FPGA/CPLD的基本結(jié)構(gòu)相映射的網(wǎng)表文件或程序。);3適配(EDA適配器的功能是將由

綜合器產(chǎn)生的網(wǎng)表文件配置于指定的目標(biāo)器件中,使之產(chǎn)生最終的下載文件,如JEDEC、JAM

格式的文件。);4.時(shí)序仿真(EDA時(shí)序仿真器就是接近真實(shí)器件運(yùn)行特性的仿真,仿真文件

中已包含了器件硬件特性參數(shù),因而,仿真精度高。)與功能仿真(EDA功能仿真器直接對(duì)

VHDL原理圖描述或其他描述形式的邏輯功能進(jìn)行測(cè)試模擬,以了解其實(shí)現(xiàn)的功能是否滿

足原設(shè)計(jì)的要求,仿真過(guò)程不涉及任何具體器件的硬件特性。);5.編程下載(EDA編程下

載把適配后生成的下載或配置文件,通過(guò)編程器或編程電纜向FPGA或CPLD下載,以便進(jìn)

行硬件調(diào)試和驗(yàn)證(HardwareDebugging)。);6.硬件測(cè)試(最后是將含有載入了設(shè)計(jì)的FPGA

或CPLD的硬件系統(tǒng)進(jìn)行統(tǒng)一測(cè)試,以便最終驗(yàn)證設(shè)計(jì)項(xiàng)目在目標(biāo)系統(tǒng)上的實(shí)際工作情況,

以排除錯(cuò)誤,改進(jìn)設(shè)計(jì)。其中EDA的嵌入式邏輯分析儀是將含有載入了設(shè)計(jì)的FPGA的硬件

系統(tǒng)進(jìn)行統(tǒng)一測(cè)試,并將測(cè)試波形在PC機(jī)上顯示、觀察和分析。)。

圖14自頂向下的設(shè)計(jì)流程

第三章資料

基礎(chǔ)部分(可不看)

例3-1

libraryieee;

useieee.std_logic_1164.all;

entitymux21ais---關(guān)鍵詞entity后為實(shí)體名

port(a,b,s:inbit;

y:outbit);

endentitymux21a;

architecturebhvofmux21ais---關(guān)鍵詞architecture后為結(jié)構(gòu)體名

begin

process(a,b,s)

begin

if(s='1')theny<=a;

elsey<=b;

endif;

endprocess;

endarchitecturebhv;

1.條件語(yǔ)句

名稱:IF_THEN_ELSE

功能作用:屬于順序語(yǔ)句。

用于條件語(yǔ)句的判斷表達(dá)式可以是一個(gè)值,也可以是更復(fù)雜的邏輯或運(yùn)算表達(dá)式,

如例3-1中的(s='1')或以下IF語(yǔ)句表述

ifathen

if(sl=,0')and(s2=*T)or(c<b+l)then...

中的a或(sl='0')and(s2=T)or(c<b+l)?其表達(dá)形式不同,但本質(zhì)上都輸出一個(gè)用于

作邏輯判斷的布爾值:“真”或“偽”。其中的and和or是邏輯與和邏輯或的邏輯操作符。

2.數(shù)據(jù)類(lèi)型

名稱:包括位矢量bit、整數(shù)類(lèi)型integer、布爾類(lèi)型boolean和標(biāo)準(zhǔn)邏輯類(lèi)型stdjogic

等。

功能作用:詳見(jiàn)p59

3.進(jìn)程語(yǔ)句和順序語(yǔ)句

名稱:process

功能作用:所有順序描述語(yǔ)句都必須放在進(jìn)程語(yǔ)句中(也包括放在過(guò)程語(yǔ)句中)。

在一個(gè)結(jié)構(gòu)體中可以包含任意個(gè)進(jìn)程語(yǔ)句結(jié)構(gòu),所有的進(jìn)程語(yǔ)句本身都是并行語(yǔ)

句,而由任一進(jìn)程process引導(dǎo)的語(yǔ)句(包含在其中的語(yǔ)句)屬于順序語(yǔ)句。

4.端口語(yǔ)句和端口信號(hào)名

名稱:port

功能作用:描述電路的端口及端口信號(hào)必須用端口語(yǔ)句port()來(lái)引導(dǎo),并在語(yǔ)句結(jié)尾處

加分號(hào)

5.端口模式

名稱:in,out,inout,buffer

功能作用:in:輸入端口。

out:輸出端口。

inout:雙向端口。

buffer:緩沖端口。

6.關(guān)鍵字

名稱:entity,erchitecture,end,if,else,else,out,in,and,or等

7.標(biāo)識(shí)符

設(shè)計(jì)者程序中自定義。

考試范圍(主要是程序結(jié)構(gòu)和語(yǔ)句)

3.2半加器

例3-2

libraryieee;

useieee.std_logic_1164.all;

entityh_adderis

port(

A:instd_logic;

B:instdlogic;

SO:outstd_logic;

CO:outstdlogic

);

endentityhadder;

architecturefhlofh_adderis

begin

SO<=AxorB;---并行語(yǔ)句沒(méi)有先后順序

CO<=AandB;---并行語(yǔ)句沒(méi)有寫(xiě)在process中

endarchitecturefhl;

串行語(yǔ)句:寫(xiě)在進(jìn)程的內(nèi)部

3.3四選一多路選擇器

4選1多路選擇器及case語(yǔ)句表述方式

例3-3

libraryieee;

useieee.stdlogic1164.all;

entitymux41ais

port(a,b,c,d,sO,si:instdlogic;

y:outstd_logic

);

endentitymux41a;

architecturebhvofmux41ais

signals:std_logic_vector(1downto0);—s是信號(hào)名,說(shuō)明語(yǔ)句部分:定義當(dāng)

前語(yǔ)句中間的信號(hào)量

begin

s<=si&s0;--&并量連接符&,0'=>'10'

process(si,s0)

begin

case(s)is

when"00'=>y<=a;

when〃01〃=>y<=b;

when〃10〃=>y<=c;

when=>y<=d;

whenothers=>null;

endcase;

endprocess;

endbhv;

在此進(jìn)程中的的case語(yǔ)句一定是順序語(yǔ)句。

1.CASE語(yǔ)句

case語(yǔ)句屬于順序語(yǔ)句,必須放在進(jìn)程語(yǔ)句process中使用。

表述如下:

case〈表達(dá)式》is

when<選擇符或標(biāo)識(shí)符>=><順序語(yǔ)句);...;<順序語(yǔ)句》;

when〈選擇符或標(biāo)識(shí)符)=><順序語(yǔ)句);...;〈順序語(yǔ)句》;

whenothers=><順序語(yǔ)句);

endcase;

2.case語(yǔ)句多條件選擇值的一般表達(dá)式如下:

選擇值[|選擇值]

選擇值可以有四種不同的表達(dá)方式:

單個(gè)普通值,如6。

數(shù)值選擇范圍,如(2to4),表示2、3或4.

并列數(shù)值,如3|5,表示取值3或5。

混合方式,以上三種方式混合。

如例3-4

sel:inintegerrange0to15;

caseselis

when0=>zl<=〃010〃;

when1|3=>z2<=〃110〃;

when4to7|2=>z3<="Oil";

whenothers=>z4<=〃111〃;

endcase;

3.3.3IEEE庫(kù)預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量(P69)

3.3.4預(yù)定義標(biāo)準(zhǔn)數(shù)據(jù)類(lèi)型(P70)

3.3.5信號(hào)定義和數(shù)據(jù)對(duì)象(P71)

3.3.6并置操作符&

操作符&表示信號(hào)或是數(shù)組合并起來(lái)形成新的數(shù)組矢量。例如:"VH"&"DL"的結(jié)果是〃VHDL”;

'0'&'[&'[的結(jié)果為"011"。

語(yǔ)句S<=sl&sO的作用是令:S(l)<=si;S(0)<=sOo

3.3.74選1多路選擇器的VHDL不同描述方式

【例3-6]【例3-7】【例3-8]

S<=sl&s0;S<=sl&s0;

PROCESS(si,SO)BEGINS<=slsO;WITHSSELECT

IF(S=,,0011)THENy<=a;y<=aWHENS=,10011ELSEy<=aWHEN"00”,

ELSIF(S=n01n)THENy<=b;bWHENS="01”ELSEbWHEN"01”,

ELSIE(S=”10”)THENy<=c;CWHENS=n10,1ELSECWHEN"10”,

ELSEy<=d;ENDIF;d;dWHEN“11”;

ENDPROCESS;ENDBHVENDBHV;

ENDBHV;

順序語(yǔ)句并行語(yǔ)句并行語(yǔ)句

條件信號(hào)賦值選擇信號(hào)賦值

例3-6的語(yǔ)句表述結(jié)構(gòu)與例3-1相似,只是if語(yǔ)句的條件判斷式的變量變成了兩位二進(jìn)制

數(shù),所以就有了四種可能的選擇。IF語(yǔ)句形式如下:

IF_THEN_ELSE_ELSE_ENDIF

1.WHEN_ELSE條件信號(hào)賦值語(yǔ)句

該語(yǔ)句屬于并行語(yǔ)句,不需要進(jìn)程語(yǔ)句process引導(dǎo)。也稱并行賦值語(yǔ)句(相對(duì)于進(jìn)程中

的賦值語(yǔ)句),一般表達(dá)式如下:

賦值目標(biāo)<=表達(dá)式WHEN賦值條件ELSE

表達(dá)式WHEN賦值條件ELSE

表達(dá)式;

需要注意由于條件測(cè)試的順序性,條件信號(hào)賦值語(yǔ)句中的第一子句具有最高賦值優(yōu)先級(jí)。

z<-awhenpl='1'else

bwhenp2=T'else

c;

注意只有最后一個(gè)"表達(dá)式"后有個(gè)分號(hào)。

2.選擇信號(hào)賦值語(yǔ)句

with選擇表達(dá)式select

賦值目標(biāo)信號(hào)<=表達(dá)式when選擇值,

表達(dá)式when選擇值,

表達(dá)式when選擇值;

由于屬于并行語(yǔ)句,選擇信號(hào)賦值語(yǔ)句不在進(jìn)程中應(yīng)用,但其功能卻與進(jìn)程中的case語(yǔ)句

的功能相似。

選擇信號(hào)賦值語(yǔ)句在條件句中未能覆蓋所有條件選擇時(shí),要求在末尾加上與NULL類(lèi)似含義

的關(guān)鍵詞UNAFFECTEDo

UNAFFECTEDWHENOTHERS;

3.4全加器

3.4.1全加器設(shè)計(jì)

例3-9

libraryieee;—全加器頂層設(shè)計(jì)描述

useieee.std_logic_1164.all;

entityfadderis

port(ain,bin,cin:instd_logic;

cout,sum:outstdlogic

);

endentityf_adder;

architecturefdloff_adderis

componenthadder---調(diào)用半加器聲明語(yǔ)句

port(A,B:instd_logic;CO,SO:outstd_logic);

endcomponent;

componentor2a---調(diào)用或門(mén)元件聲明語(yǔ)句,or2a是實(shí)體名不是文件名

port(a,b:instd_logic;c:outstd_logic);

endcomponent;

signalnetl,net2,net3:stdlogic;--定義3個(gè)信號(hào)作為內(nèi)部的連接線,信號(hào)量的導(dǎo)線

begin

ul:h_adderportmap(A=>ain,B=>bin,CO=>net2,SO=>netl);

u2:h_adderportmap(netl,cin,net3,sum);--例化語(yǔ)句,u2模塊的編號(hào)

u3:or2aportmap(a=>net2,b=>net3,c=>cout);

endarchitecturefdl;

例3-10

libraryieee;

useieee.std_logic_1164.all;

entityor2ais

port(a,b:instd_logic;c:outstd_logic);

endentity;

architectureoneofor2ais

begin

c<=aorb;

endarchitectureone;

注意:這里假設(shè)參與設(shè)計(jì)的半加器文件、或門(mén)文件和全加器頂層設(shè)計(jì)文件存放于同一文件夾

3.4.2VHDL例化語(yǔ)句

例化語(yǔ)句分兩個(gè)部分組成,第一部分是將一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體定義為一個(gè)元件,語(yǔ)句的功能

是對(duì)待調(diào)用的這個(gè)元件做H1調(diào)用聲明,最簡(jiǎn)表達(dá)式如下:

component元件名is

port(端口名表);

endcomponent文件名;

命名方式與實(shí)體中port()語(yǔ)句一致,即對(duì)于需要調(diào)用的元件,只需要將該元件對(duì)應(yīng)的VHDL

程序的實(shí)體描述直接復(fù)制過(guò)來(lái)即可,即只需將entity改寫(xiě)為component?

元件定義語(yǔ)句必須放在結(jié)構(gòu)體的architecture和begin之間。(調(diào)用聲明的端口說(shuō)明中的

端口符號(hào)可與原文件不同但排列方式、端口模式、數(shù)據(jù)類(lèi)型、功能定義等必須相同)。

元件例化語(yǔ)句的第二部分則是此元件與當(dāng)前設(shè)計(jì)實(shí)體(頂層文件)中元件間及端口的連接說(shuō)

明。此語(yǔ)句所謂的“端口名關(guān)聯(lián)法”有如F表達(dá)式:

例化名:元件名portmap([端口名=>]連接端口名,一.);

其中的例化名是必須存在的。

對(duì)應(yīng)于例3-9中的元件名有hadder,or2a,其例化名分別為ul,u2,u3.

portmap是端口映射,或端口連接的意思...P76-77

位置關(guān)聯(lián)法(位置映射法),關(guān)聯(lián)表述的信號(hào)位置十分重要,不能放錯(cuò);而且,一旦關(guān)聯(lián)例

化語(yǔ)句確定后,被連接的元件的源文件中的端口表內(nèi)的信號(hào)排列位置就不能再變動(dòng)了。

3.4.38位加法器設(shè)計(jì)及算術(shù)操作符應(yīng)用(加法器應(yīng)用題P77)

例3-11是直接利用加法算術(shù)操作符“+”完成的8位加法器的VHDL程序

libraryieee;

useieee.std_logic_1164.all;

useieee.stdlogicunsigned.all;-unsigned無(wú)符號(hào)數(shù),此程序包中包含算術(shù)操作符的重載函數(shù)

entityadder8bis

port(A,B:instd_logic_vector(7downto0);—vector位矢量

cin:instd_logic;

cout:outstd_logic;

dout:outstd_logic_vector(7downto0)

);

endentityadder8b;

architecturebhvofadder8bis

signaldata:std_logic_vector(8downto0);

begin

data<=('O'&A)+('O'&B)+(〃00000000〃&cin);一&并置連接符

cout<=data(8);

dout<=data(7downto0);

endarchitecturebhv;

3.5乘法器

3.5.1統(tǒng)計(jì)位矢中含'1'個(gè)數(shù)的電路模塊設(shè)計(jì)

例3-12所描述的電路是一個(gè)統(tǒng)計(jì)輸入的8位位矢中含'1,個(gè)數(shù)的程序。

libraryieee;

useieee.stdlogic1164.all;

useieee.std_logic_unsigned.all;

entitycntcis

port(din:instd_logic_vector(7downto0);

cnth:outstdlogic_vector(3downto0));

endentitycntc;

architecturebhvofcntcis

begin

process(din)

variableQ:std_logic_vector(3downto0);

begin

Q:=〃0000〃;

fornin0to7loop―n是loop的循環(huán)變量

if(din(n)='1')thenQ:=Q+l;

endif;

endloop;

cnth<=Q;

endprocess;

endbhv;

改程序有三個(gè)需要注意的語(yǔ)句結(jié)構(gòu):

(1)變量關(guān)鍵詞variable的用法。

變量variable與信號(hào)signal一樣,都屬于數(shù)據(jù)對(duì)象,在此程序在的功能與信號(hào)相似,

但變量的賦值符號(hào)與信號(hào)的賦值符號(hào)不同,信號(hào)的賦值符號(hào)是“〈=”,而變量的賦值符號(hào)是

“:=”。與信號(hào)不同,變量的功能主要用于數(shù)據(jù)的暫存,而且只能在進(jìn)程中定義變量,所

以,變量無(wú)法將數(shù)據(jù)傳遞出進(jìn)程。

(2)程序中的if語(yǔ)句沒(méi)有關(guān)鍵詞else。這種用法是一種條件響應(yīng)不完整的現(xiàn)象,即沒(méi)有

表達(dá)當(dāng)條件(din(n)='0')時(shí)作何處理。

(3)程序使用了循環(huán)語(yǔ)句即loop語(yǔ)句的一種類(lèi)型。

3.5.2FOR_LOOP循環(huán)語(yǔ)句用法

loop語(yǔ)句的常用表達(dá)方式有如下兩種:

(1)單個(gè)loop語(yǔ)句

[loop標(biāo)號(hào):]loop

順序語(yǔ)句

endloop[loop標(biāo)號(hào)];

這種循環(huán)方式是一種最簡(jiǎn)答的語(yǔ)句形式,它的循環(huán)方式需引入其他控制語(yǔ)句(如exit語(yǔ)句)

后才能確定:"loop標(biāo)號(hào)”可任選。用法如下:

L2:loop

a:=a+1;

exitL2whena>10;一當(dāng)a大于10跳出循環(huán)

endloopL2;

此程序的循環(huán)方式由exit語(yǔ)句確定,即當(dāng)a>10時(shí)結(jié)束執(zhí)行a:=a+l的循環(huán)。

(2)FORLOOP語(yǔ)句,語(yǔ)法格式如下:

[loop標(biāo)號(hào):]for循環(huán)變量,in循環(huán)次數(shù)范圍loop

順序語(yǔ)句

endloop[loop標(biāo)號(hào)];

FOR后血的“循環(huán)變量”是一個(gè)臨時(shí)變量,如n,屬于loop語(yǔ)句的局部變量,不必事先定義。

這個(gè)變量只能作為賦值源,不能被賦值,它由loop語(yǔ)句自動(dòng)定義。使用時(shí)應(yīng)當(dāng)注意,在loop

語(yǔ)句范圍內(nèi)不要再使用其他與此循環(huán)變量同名的標(biāo)識(shí)符,如n。

3.5.3移位相加型乘法器

例3-13是基于移位相加原理的4x4位乘法器的VHDL程序。

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

useieee.std_logic_arith.all;

entitymult4bis

generic(S:integer:=4);一定義參數(shù)S為整數(shù)類(lèi)型且等于4便于修改電路規(guī)模

port(R:outstd_logic_vector(2*Sdownto1);

A,B:instd_logic_vector(Sdownto1)

);

endentitymuIt4b;

architectureoneofmult4bis

signalAO:Std_logic_vector(2*Sdownto1);-2*S為8表示8位(S為4位“0000”)

begin

A0<=convstdlogicvector(0,S)&A;一類(lèi)型轉(zhuǎn)換函數(shù)

process

variableRI:stdlogicvector(2*Sdownto1);一定義變量數(shù)據(jù)類(lèi)型

begin

RI:=(others=>'O');--變量賦值,若S=4,則此句等效于RI:="00000000”

foriin1toSloop

if(B(l)=’1')then

RI:=RI+to_stdlogicvector(to_bitvector(A0)SLL(i-l)

endif;

endloop;

R<=RI;

endprocess;

endarchitectureone;

3.5.4GENERIC參數(shù)定義語(yǔ)句

GENERIC語(yǔ)句也像端口定義語(yǔ)句那樣常常與port語(yǔ)句并行出現(xiàn)。

一般地,參數(shù)傳遞說(shuō)明語(yǔ)句(GENERIC語(yǔ)句)是種常數(shù)參數(shù)的端口界面,常以?種說(shuō)明的

形式放在實(shí)體或塊結(jié)構(gòu)體前的說(shuō)明部分。十分方便地改變一個(gè)設(shè)計(jì)實(shí)體或一個(gè)元件的內(nèi)部電

路結(jié)構(gòu)和規(guī)模。

參數(shù)傳遞說(shuō)明語(yǔ)句的一般書(shū)寫(xiě)方式如下:

GENERIC(常數(shù)名:數(shù)據(jù)類(lèi)型[:設(shè)定值]

{:常數(shù)名:數(shù)據(jù)類(lèi)型[:設(shè)定值]});

GENERIC語(yǔ)句能(在編譯過(guò)程中)從外部動(dòng)態(tài)地接受賦值,以此類(lèi)似于端口port。

將GENERIC語(yǔ)句放在實(shí)體定義語(yǔ)句中間,且放在端口說(shuō)明語(yǔ)句前面。

3.5.5整數(shù)數(shù)據(jù)類(lèi)型

在例3-13中的GENERIC語(yǔ)句中,定義參數(shù)S的數(shù)據(jù)類(lèi)型是整數(shù)類(lèi)型INTEGER。整數(shù)數(shù)據(jù)類(lèi)

型INTEGER的元素包含正整數(shù)、負(fù)整數(shù)和零。作無(wú)符號(hào)數(shù)處理。

在定義整數(shù)類(lèi)型時(shí),VHDL綜合器通常要求使用關(guān)鍵詞range構(gòu)成的子句來(lái)為所定義的數(shù)限

定范圍,然后根據(jù)所限定的范圍來(lái)決定表示此信號(hào)或變量的二進(jìn)制數(shù)位數(shù)。

如以下定義表述:

signakQ:integerrange15downto0;

定義Q的數(shù)據(jù)對(duì)象是信號(hào),數(shù)據(jù)類(lèi)型是整數(shù),并限定Q的取值范圍是0T5,共16個(gè)值,可

用二進(jìn)制數(shù)表示。因此,VHDL綜合器自動(dòng)將Q綜合成由四條信號(hào)線構(gòu)成的總線方式信號(hào):Q

(3),Q(2),Q⑴和Q(l)。

整數(shù)常量的書(shū)寫(xiě)方式如下:

1,35-----H進(jìn)制整數(shù)1和35

10E3一一十進(jìn)制整數(shù),等于十進(jìn)制整數(shù)1000,E為科學(xué)計(jì)數(shù)法

16#D9#——K六進(jìn)制整數(shù),等于十六進(jìn)制數(shù)據(jù)D9H

8#720#—―八進(jìn)制整數(shù),等于八進(jìn)制數(shù)7200

2#11010010?——二進(jìn)制整數(shù),等于二進(jìn)制數(shù)11010010B

注意在語(yǔ)句中,整數(shù)的表達(dá)不加引號(hào),如1、0、25等

自然數(shù)類(lèi)型NATURAL是整數(shù)類(lèi)型的一個(gè)子類(lèi)型,它包含0和所有正整數(shù)。

3.5.6省略賦值操作符

一般地,為了簡(jiǎn)化表達(dá)和位數(shù)不定情況下的賦值,可以使用短語(yǔ)“(others=>x)”,這是一

個(gè)省略賦值操作符,它可以在較多位的位矢量賦值中省略化賦值,如有

signaldl:std_logic_vector(4downto0);

variableal:std_logic_vector(15downto0);

dl<=(others=>'T);

al:=(others=>'0');

最下的語(yǔ)句等同于:dl="11111";al:="0000000000000000".

利用“(others=>x)”還可以給位矢量的某一部分位賦值之后再使用others給其余的位賦值

如下:dl<=(l=>e(3),3=>e(5),others=>e(1));

上式的1和3分別表示dl的第1位dl(1)和dl的第三位dl(3)o此式的含義是用e(3)的值

取代dl(l)的值,用e(5)的值取代dl(3)的值,dl余下的3個(gè)位的值都用e(l)取代。也可改

寫(xiě)為如下:

dl〈=e(l)&e(5)&e(l)&e(3)&e(l);

3.5.7移位操作符

六種移位操作符SLL、SRL、SLA,SRA、ROL和ROR

移位操作符格式如下:

標(biāo)識(shí)符移位操作符移位位數(shù);一如“10110001”SRL3,結(jié)果是“00010110”

SLL是將位矢向左移,右邊跟進(jìn)的位補(bǔ)零;

SRL的功能恰好與SLL相反;

ROL的位移方式稍有不同,它們移出的位將用于依次填補(bǔ)位移空的位,執(zhí)行是的循環(huán)式位移

方式;

SLA和SRA是算術(shù)位移操作符,其移空位用最初的首位來(lái)填補(bǔ)。

例3-14

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydecoder3to8is

port(din:instd_logic_vector(2downto0);一3位二進(jìn)制

dout:outbit_vector(7downto0)—數(shù)據(jù)類(lèi)型為位矢量

);

endentitydecoder3to8;

architecturebehaveofdecoder3to8is

begin

dout〈二〃00000001〃SLLconv_integer(din);--被移位部分是常數(shù)

endarchitecturebehave;

3.5.8各類(lèi)運(yùn)算操作對(duì)數(shù)據(jù)類(lèi)型的要求(程序例子p86)

淡3-2VHDL操作符列表給出了不同數(shù)據(jù)類(lèi)型定義和用法

類(lèi)型操作符功能操作數(shù)數(shù)據(jù)類(lèi)型

+加整數(shù)

—減整數(shù)

&并置一維數(shù)組

*乘整數(shù)和實(shí)數(shù)(包括浮點(diǎn)數(shù))

/除整數(shù)和實(shí)數(shù)(包括浮點(diǎn)數(shù))

MOD取模整數(shù)

REM取余整數(shù)

算術(shù)操作符SLL邏輯左移BIT、BITJ7ECTOR或布爾型一維數(shù)組

SRL邏輯右移BIT、BIT_VECTOR或布爾型一維數(shù)組

SLA算術(shù)左移BIT、BIT_VECTOR或布爾型一維數(shù)組

SRA算術(shù)右移BIT、BIT_VECTOR或布爾型一維數(shù)組

ROL邏輯循環(huán)左移BIT、BIT_UECTOR或布爾型一維數(shù)組

ROR邏輯循環(huán)右移BIT、BIT_VECTOR或布爾型一維數(shù)組

**乘方整數(shù)

ABS取絕對(duì)值整數(shù)

=等干任何敷據(jù)類(lèi)型

/=不等于任何數(shù)據(jù)類(lèi)型

<小于枚舉與整數(shù)類(lèi)型,及對(duì)應(yīng)的一維數(shù)組

關(guān)系操作符

>大于枚舉與整數(shù)類(lèi)型,及對(duì)應(yīng)的一維數(shù)組

<-小于等于枚舉與整數(shù)類(lèi)型,及對(duì)應(yīng)的一維數(shù)組

>-大于等于枚舉與整數(shù)類(lèi)型,及對(duì)應(yīng)的一維數(shù)組

AND與BIT,BOOLEAN,STD.LOGIC

OR或BIT.BOOLEAN,STD.LOGIC

NAND與非BIT,BOOLEAN,STD>OGIC

送輯操作符NOR卻BIT,BOOLEAN,STD>OGIC

XOR異或BIT,BOOLEAN,STD.LOGIC

XNOR異或3EBIT,BOOLEAN,STD_LOGIC

NOT非BIT,BOOLEAN,STD_LOGIC

+正整數(shù)

符號(hào)操作符

—負(fù)整期

【例3-19]

SIGNALa,b,c:STD_LOGIC_VECTOR(3DOWNTO0);

SIGNALd,e,f,g:STD_LOGIC_VECTOR(1DOWNTO0);

SIGNALh,工,j,k:STD_LOGIC;

SIGNAL1,m,n,。,p:BOOLEAN;

d<=eORfORg;—兩個(gè)操作符OR相同,不需括號(hào)

1<=(mXORn)AND(oXORp);—操作符不同,必須加括號(hào)

h<=iANDjORk;--兩個(gè)操作符不同,未加括號(hào),表達(dá)錯(cuò)誤

a<=bANDe;—操作數(shù)b與e的位矢長(zhǎng)度不一致,表達(dá)錯(cuò)誤

h<=iOR1;-i的數(shù)據(jù)類(lèi)型是STD_LOGIC,而1的數(shù)據(jù)類(lèi)型是

...—布爾量,因而不能相互作用,表達(dá)錯(cuò)誤

表3-3VHDL操作符優(yōu)先級(jí)

運(yùn)算符優(yōu)先級(jí)

NOT,ABS,**最高優(yōu)先級(jí)

*,/,MOD,REM

+(正號(hào)),一(負(fù)號(hào))

+?->&

SLL,SLA,SRL,SRA,ROL,ROR

=>/=><?<=,>,>=

AND,OR,NAND,NOR,XOR,XNOR最低尤先級(jí)

3.5.9數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)(不重要)

表3/IEEE庫(kù)數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù)表

函數(shù)名功能

所在程序包:STD_LOGIC_1164

to_stdlogicvector(A)由bit_vector類(lèi)型轉(zhuǎn)換為std_logic_vector

to__bitvector(A)由std_logic_vector轉(zhuǎn)換為bit_vector

to_stdlogic(A)由bit轉(zhuǎn)換成stdjogic

to_bit(A)由stdjogic類(lèi)型轉(zhuǎn)換成bit類(lèi)型

所在程序包:STD_LOGIC_ARITH

conv_std_logic_vector(A,位長(zhǎng))將integer轉(zhuǎn)換成std_logic_vector類(lèi)型,A是整數(shù)

conv_integEA)將std_logic_vector轉(zhuǎn)換成integer

conv__unsigned(A,位長(zhǎng))將unsigned,signed,integer類(lèi)型轉(zhuǎn)換為指定位長(zhǎng)的unsigned類(lèi)型

conv_signed(A,位長(zhǎng))將unsigned,signed,integer類(lèi)型轉(zhuǎn)換為指定位長(zhǎng)的signed類(lèi)型

所在程序包:STD_LOGIC_UNSIGNED

conv_integer(A)由std_logic_vector轉(zhuǎn)換成integer

例3-20中各例句都調(diào)用了數(shù)據(jù)類(lèi)型轉(zhuǎn)換函數(shù),在程序包ieee.std_logic_1164中的轉(zhuǎn)換函

數(shù),它們?cè)诔绦虬卸x的函數(shù)首如下:

FUNCTIONTO_STDLOGICVECTOR(S:BIT_VECTOR)

RETURNSTD_LOGIC_VECTOR;

【例3-20]

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYampIS

PORT(al,a2:INBIT_VECTOR(3DOWNTO0);

cl,c2,c3:INSTD_LOGIC_VECTOR(3DOWNTO0);

bl,b2,b3:INTEGERRANGE0TO15;

dl,d2,d3,d4:OUTSTD_LOGIC_VECTOR(3DOWNTO0));

ENDamp;

dl<=TO_STDLOGICVECTOR(alANDa2);--(1)

d2<=CObA/_STD_LOGIC_VECTOR(bl,4)WHENCONV_INTEGER(b2)=9

elseCONV_STD_LOGIC__VECTOR(b3,4);—(2)

d3<=ClWHENCONV_INTEGER(c2)=8ELSEc3;—(3)

d4<=clWHENc2=8elsec3;—(4)

例3-21是個(gè)利用轉(zhuǎn)換函數(shù)conv_integer(),以及在進(jìn)程中對(duì)同一信號(hào)先后賦值不同數(shù)據(jù)

類(lèi)型的特性,完成了3-8譯碼器的設(shè)計(jì)程序。

【例3-21]

LIBRARYIEEE;

USEIEEE.STD__LOGIC__1164.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYdecoder3s8IS

PORT(input:INSTD_LOG工C_VECTOR(2DOWNTO0);

output:OUTSTD_LOGIC_VECTOR(7DOWNTO0));

ENDdecoder3to8;

ARCHITECTUREbehaveOFdecoder3to8IS

BEGIN

PROCESS(input)BEGIN

output<=(OTHERS=>T0f);output(CONV_INTEGER(input))<=T1T;

ENDPROCESS;

ENDbehave;

例3-22是幾個(gè)預(yù)定義轉(zhuǎn)換函數(shù)的函數(shù)首表達(dá)式,從中可以了解類(lèi)型轉(zhuǎn)換函數(shù)的來(lái)源。

【例3-22]

FUNCTIONTo-bit(s:std_ulogic;xmap:BIT:=T0T)RETURNBIT;

FUNCTIONTo_bitvector(s:std_logic_vector;

xmap:BIT:=T0T)RETURNBIT_VECTOR;

FUNCTIONTo_bitvector(s:std_ulogic_vector;

xmap:BIT:=T0T)RETURNBIT_VECTOR;

下面是To_bitvector的函數(shù)體,其中的ALIAS是表述縮略語(yǔ)句之關(guān)鍵詞。

FUNCTIONTobitvector(s:stdlogicvector;

xmap:BIT:=T0T)

RETURNBITVECTORIS

ALIASsv:stdlogicvector(sTLENGTH-1DOWNTO0)ISs;

VARIABLEresult:BITVECTOR(STLENGTH-1DOWNTO0);

BEGIN

FORiINresultTRANGELOOP

CASESV(i)IS

WHENT0T|TLT=>result(i):=T0T;

WHENT1T|THT=>result(i):=T1T;

WHENOTHERS=>result(i):=xmap;

ENDCASE;

ENDLOOP;

RETURNresult;

END;

3.5.10GENERIC參數(shù)傳遞映射的語(yǔ)句

GENERIC的完整用法,如下8x8位乘法器

【例3-23]

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYMULT8BIS

PORT(DI,D2:INSTD_LOGIC_VECTOR(7DOWNTO0);

Q:OUTSTD_LOGIC_VECTOR(15DOWNTO0));

END;

ARCHITECTUREBHVOFMULT8BIS

COMPONENTMULT4B--MULT4B模塊的調(diào)用聲明

GENERIC(S:integer);--照抄MULT4B實(shí)體中關(guān)于參數(shù)"端口"定義的語(yǔ)句

PORT(R:OUTstd_logic_vector?(2*3DOWNTO1);

AfB:INstd__logic_vector(SDOWNTO1));

ENDCOMPONENT;

BEGIN

Ul:MULT4BGENERICMAP(S=>8)

PORTMAP(R=>Q,A=>D1,B=>D2);

END;

例化名:元件名GENERICMAP(類(lèi)屬表)

部分習(xí)題(課后作業(yè)僅供參考)

3-2畫(huà)出與以下實(shí)體描述對(duì)應(yīng)的原理圖符號(hào)元件:

ENTITYbuf3sIS-實(shí)體1:三態(tài)緩沖器

PORT(input:INSTD_LOGIC;一輸入端

enable:INSTD_LOGIC;一使能端

output:OUTSTD_LOGIC);一輸出端

ENDbuf3s;

buf3s

input

output

ENTITYmux21IS--實(shí)體2:2選1多路選擇器

PORT(inO,ini,sei:INSTD_LOGIC;

output:OUTSTD_LOGIC);

mux21

-----inO

output------

------ini

sei

3-4給出1位全減器的VHDL描述;最終實(shí)現(xiàn)8位全減器。要求:

1)首先設(shè)計(jì)1位半減器,然后用例化語(yǔ)句將它們連接起來(lái),圖4-20中h_suber是半減器,diff是

輸出差(diff=x-y),s_out是借位輸出(s_out=l,x<y),sub_in是借位輸入。

圖3-18全減器結(jié)構(gòu)圖

一解(1.1):實(shí)現(xiàn)1位半減器h_suber(diff=x-y;s_out=l,x<y)

LIBRARYIEEE;-半減器描述⑴:布爾方程描述方法

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYh_suberIS

PORT(x,y:INSTD_LOGIC;

diff,s_out:OUTSTD_LOGIC);

ENDENTITYh_suber;

ARCHITECTUREhslOFh_suberIS

BEGIN

Diff<=xXOR(NOTy);

s_out<=(NOTx)ANDy;

ENDARCHITECTUREhsl;

--解(1.2):采用例化實(shí)現(xiàn)圖4-20的1位全減器

LIBRARYIEEE;位二進(jìn)制全減器順層設(shè)計(jì)描述

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYf_suberIS

PORT(xin,yin,subJn:INSTD_LOGIC;

sub_out,diff_out:OUTSTD_LOGIC);

ENDENTITYf_suber;

ARCHITECTUREfslOFf_suberIS

COMPONENTh_suber--調(diào)用半減器聲明語(yǔ)句

PORT(x,y:INSTD_LOGIC;

diff,s_out:OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALa,b,c:STD_LOGIC;-定義1個(gè)信號(hào)作為內(nèi)部的連接線。

BEGIN

=〉

ul:h__suberPORTMAP(x=>xin/y=>yin/diffa,s_out=>b);

u2:h_suberPORTMAP(x=>azy=>sub_in,diff=>diff_out,s_out=>c);

sub_out<=cORb;

ENDARCHITECTUREfsl;

⑵以1位全減器為基本硬件,構(gòu)成串行借位的8位減法器,要求用例化語(yǔ)句來(lái)完成此項(xiàng)設(shè)

計(jì)(減法運(yùn)算是x-y-sun_in=difft)o

x7---------xinsub_out---------sout

y7---------yinu7

I--------subjndiff_out---------diff7

..................al

xl---------xinsub_out

yl--------yinul

--------subjndiff_out---------diffl

a0

xO---------xinsub_out---------

yO--------yinuO

sin---------subjndiff_out---------diffO

串行借位的8位減法器

-解(2):采用例化方法,以1位全減器為基本硬件?;實(shí)現(xiàn)串行借位的8位減法器(上圖所示)。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

ENTITYsuber_8IS

RORT(xOzxl,x2zx3zx4zx5zx6,x7:INSTD_L0GIC;

yO,yl,y2,y3,y4,y5,y6,y7,sin:INSTD_L0GIC;

diffOzdiffl,diff2,diff3:OUTSTD_LOGIC;

diff4,diff5zdiff6,diff7,sout:OUTSTD_LOGIC);

ENDENTITYsuber_8;

ARCHITECTUREs8OFsuber_8IS

COMPONENTf_suber--調(diào)用全減器聲明語(yǔ)句

PORT(xin,yin,sub_in:INSTD_LOGIC;

sub_ou

溫馨提示

  • 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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論