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

下載本文檔

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

文檔簡介

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

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

第一章:

1.概念一一問答題,如:VHDL與軟件語言特點、設(shè)計流程等

2.習(xí)題部分

第三章:

1.程序語法,名稱、功能、作用

1.順序語句:IF;CASE——寫在Process中;理解上的“順序性

2.VHDL常見語法要素

2.并行語句:whenelse;withselect

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

4.改錯題:修改語法錯誤

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

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

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

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

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

設(shè)計,以及對自動設(shè)計與自動實現(xiàn)最典型的詮釋。

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

編程ASIC。FPGA實現(xiàn)ASiC設(shè)計的現(xiàn)場可編程器件。

1-2與軟件描述語言相比,VHDL有什么特點?P4~6

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

步求精的過程。

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

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

保證。

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

(P12~14)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

第三章資料

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

例3-1

libraryieee;

useieee.std_logic_1164.all;

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

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.條件語句

名稱:IF_THEN_ELSE

功能作用:屬于順序語句。

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

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

ifathen

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

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

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

2.數(shù)據(jù)類型

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

等。

功能作用:詳見p59

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

名稱:process

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

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

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

4.端口語句和端口信號名

名稱:port

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

加分號

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è)計者程序中自定義。

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

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;---并行語句沒有先后順序

CO<=AandB;---并行語句沒有寫在process中

endarchitecturefhl;

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

3.3四選一多路選擇器

4選1多路選擇器及case語句表述方式

例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是信號名,說明語句部分:定義當(dāng)

前語句中間的信號量

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語句一定是順序語句。

1.CASE語句

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

表述如下:

case〈表達(dá)式》is

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

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

whenothers=><順序語句);

endcase;

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

選擇值[|選擇值]

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

單個普通值,如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庫預(yù)定義標(biāo)準(zhǔn)邏輯位與矢量(P69)

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

3.3.5信號定義和數(shù)據(jù)對象(P71)

3.3.6并置操作符&

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

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

語句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;

順序語句并行語句并行語句

條件信號賦值選擇信號賦值

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

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

IF_THEN_ELSE_ELSE_ENDIF

1.WHEN_ELSE條件信號賦值語句

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

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

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

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

表達(dá)式;

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

z<-awhenpl='1'else

bwhenp2=T'else

c;

注意只有最后一個"表達(dá)式"后有個分號。

2.選擇信號賦值語句

with選擇表達(dá)式select

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

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

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

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

的功能相似。

選擇信號賦值語句在條件句中未能覆蓋所有條件選擇時,要求在末尾加上與NULL類似含義

的關(guān)鍵詞UNAFFECTEDo

UNAFFECTEDWHENOTHERS;

3.4全加器

3.4.1全加器設(shè)計

例3-9

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

useieee.std_logic_1164.all;

entityfadderis

port(ain,bin,cin:instd_logic;

cout,sum:outstdlogic

);

endentityf_adder;

architecturefdloff_adderis

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

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

endcomponent;

componentor2a---調(diào)用或門元件聲明語句,or2a是實體名不是文件名

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

endcomponent;

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

begin

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

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

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è)計的半加器文件、或門文件和全加器頂層設(shè)計文件存放于同一文件夾

3.4.2VHDL例化語句

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

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

component元件名is

port(端口名表);

endcomponent文件名;

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

程序的實體描述直接復(fù)制過來即可,即只需將entity改寫為component?

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

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

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

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

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

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

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

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

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

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

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

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

libraryieee;

useieee.std_logic_1164.all;

useieee.stdlogicunsigned.all;-unsigned無符號數(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)計位矢中含'1'個數(shù)的電路模塊設(shè)計

例3-12所描述的電路是一個統(tǒng)計輸入的8位位矢中含'1,個數(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;

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

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

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

但變量的賦值符號與信號的賦值符號不同,信號的賦值符號是“〈=”,而變量的賦值符號是

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

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

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

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

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

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

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

(1)單個loop語句

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

順序語句

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

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

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

L2:loop

a:=a+1;

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

endloopL2;

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

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

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

順序語句

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

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

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

語句范圍內(nèi)不要再使用其他與此循環(huán)變量同名的標(biāo)識符,如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ù)類型且等于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;一類型轉(zhuǎn)換函數(shù)

process

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

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ù)定義語句

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

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

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

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

參數(shù)傳遞說明語句的一般書寫方式如下:

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

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

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

將GENERIC語句放在實體定義語句中間,且放在端口說明語句前面。

3.5.5整數(shù)數(shù)據(jù)類型

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

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

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

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

如以下定義表述:

signakQ:integerrange15downto0;

定義Q的數(shù)據(jù)對象是信號,數(shù)據(jù)類型是整數(shù),并限定Q的取值范圍是0T5,共16個值,可

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

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

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

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

10E3一一十進(jìn)制整數(shù),等于十進(jìn)制整數(shù)1000,E為科學(xué)計數(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

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

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

3.5.6省略賦值操作符

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

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

signaldl:std_logic_vector(4downto0);

variableal:std_logic_vector(15downto0);

dl<=(others=>'T);

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

最下的語句等同于: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個位的值都用e(l)取代。也可改

寫為如下:

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

3.5.7移位操作符

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

移位操作符格式如下:

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

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

SRL的功能恰好與SLL相反;

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

方式;

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

例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ù)類型為位矢量

);

endentitydecoder3to8;

architecturebehaveofdecoder3to8is

begin

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

endarchitecturebehave;

3.5.8各類運算操作對數(shù)據(jù)類型的要求(程序例子p86)

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

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

+加整數(shù)

—減整數(shù)

&并置一維數(shù)組

*乘整數(shù)和實數(shù)(包括浮點數(shù))

/除整數(shù)和實數(shù)(包括浮點數(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取絕對值整數(shù)

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

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

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

關(guān)系操作符

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

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

>-大于等于枚舉與整數(shù)類型,及對應(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ù)

符號操作符

—負(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;—兩個操作符OR相同,不需括號

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

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

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

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

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

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

運算符優(yōu)先級

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

*,/,MOD,REM

+(正號),一(負(fù)號)

+?->&

SLL,SLA,SRL,SRA,ROL,ROR

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

AND,OR,NAND,NOR,XOR,XNOR最低尤先級

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

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

函數(shù)名功能

所在程序包:STD_LOGIC_1164

to_stdlogicvector(A)由bit_vector類型轉(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類型轉(zhuǎn)換成bit類型

所在程序包:STD_LOGIC_ARITH

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

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

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

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

所在程序包:STD_LOGIC_UNSIGNED

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

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

數(shù),它們在程序包中定義的函數(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是個利用轉(zhuǎn)換函數(shù)conv_integer(),以及在進(jìn)程中對同一信號先后賦值不同數(shù)據(jù)

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

【例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是幾個預(yù)定義轉(zhuǎn)換函數(shù)的函數(shù)首表達(dá)式,從中可以了解類型轉(zhuǎn)換函數(shù)的來源。

【例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是表述縮略語句之關(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ù)傳遞映射的語句

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實體中關(guān)于參數(shù)"端口"定義的語句

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(類屬表)

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

3-2畫出與以下實體描述對應(yīng)的原理圖符號元件:

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

PORT(input:INSTD_LOGIC;一輸入端

enable:INSTD_LOGIC;一使能端

output:OUTSTD_LOGIC);一輸出端

ENDbuf3s;

buf3s

input

output

ENTITYmux21IS--實體2:2選1多路選擇器

PORT(inO,ini,sei:INSTD_LOGIC;

output:OUTSTD_LOGIC);

mux21

-----inO

output------

------ini

sei

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

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

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

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

一解(1.1):實現(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):采用例化實現(xiàn)圖4-20的1位全減器

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

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)用半減器聲明語句

PORT(x,y:INSTD_LOGIC;

diff,s_out:OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALa,b,c:STD_LOGIC;-定義1個信號作為內(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位減法器,要求用例化語句來完成此項設(shè)

計(減法運算是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位全減器為基本硬件?;實現(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)用全減器聲明語句

PORT(xin,yin,sub_in:INSTD_LOGIC;

sub_ou

溫馨提示

  • 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

提交評論