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

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

EDA期中考試復習

復習綱要:

第一章:

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

2.習題部分

第三章:

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

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

2.VHDL常見語法要素

2.并行語句:whenelse;withselect

3.編程題:參考習題

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

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

1-1EDA技術與ASIC設計和FPGA開發有什么關系?FPGA在ASIC設計中有什么用途?P3~4

EDA技術與ASIC設計和FPGA開發有什么關系?答:利用EDA技術進行電子系統設計的

最后目標是完成專用集成電路ASIC的設計和實現;FPGA和CPLD是實現這一途徑的主流器

件。FPGA和CPLD的應用是EDA技術有機融合軟硬件電子設計技術、SoC(片上系統)和ASIC

設計,以及對自動設計與自動實現最典型的詮釋。

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

編程ASIC。FPGA實現ASiC設計的現場可編程器件。

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

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

而不能移植,并且機器代碼不代表硬件結構,更不能改變CPU的硬件結構,只能被動地為

其特定的硬件電路結構所利用。

綜合器將VHDL程序轉化的目標是底層的電路結構網表文件,這種滿足VHDL設計

程序功能描述的電路結構,不依賴于任何特定硬件環境;具有相對獨立性。綜合器在將

VHDL(硬件描述語言)表達的電路功能轉化成具體的電路結構網表過程中,具有明顯的能動

性和創造性,它不是機械的一一對應式的“翻譯”,而是根據設計庫、工藝庫以及預先設置

的各類約束條件,選擇最優的方式完成電路結構的設計。

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

什么是綜合?答:在電子設計領域中綜合的概念可以表示為:將用行為和功能層次表達

的電子系統轉換為低層次的便于具體實現的模塊組合裝配的過程。

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

算法表示轉換到寄存器傳輸級(RegisterTransportLevel,RTL),即從行為域到結構域的綜

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

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

合或結構綜合。

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

復雜的工作環境,綜合器在接受VHDL程序并準備對其綜合前,必須獲得與最終實現設計電

路硬件特征相關的工藝庫信息,以及獲得優化綜合的諸多約束條件信息;根據工藝庫和約束

條件信息,將VHDL程序轉化成電路實現的相關信息。

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

答:在EDA技術應用中,自頂向下的設計方法,就是在整個設計流程中各設計環節逐

步求精的過程。

1-5IP在EDA技術的應用和發展中的意義是什么?P23-25

答:IP核具有規范的接口協議,良好的可移植與可測試性,為系統開發提供了可靠的

保證。

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

(P12~14)

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

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

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

綜合器產生的網表文件配置于指定的目標器件中,使之產生最終的下載文件,如JEDEC、JAM

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

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

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

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

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

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

或CPLD的硬件系統進行統一測試,以便最終驗證設計項目在目標系統上的實際工作情況,

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

系統進行統一測試,并將測試波形在PC機上顯示、觀察和分析。)。

圖14自頂向下的設計流程

第三章資料

基礎部分(可不看)

例3-1

libraryieee;

useieee.std_logic_1164.all;

entitymux21ais---關鍵詞entity后為實體名

port(a,b,s:inbit;

y:outbit);

endentitymux21a;

architecturebhvofmux21ais---關鍵詞architecture后為結構體名

begin

process(a,b,s)

begin

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

elsey<=b;

endif;

endprocess;

endarchitecturebhv;

1.條件語句

名稱:IF_THEN_ELSE

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

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

如例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)?其表達形式不同,但本質上都輸出一個用于

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

2.數據類型

名稱:包括位矢量bit、整數類型integer、布爾類型boolean和標準邏輯類型stdjogic

等。

功能作用:詳見p59

3.進程語句和順序語句

名稱:process

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

在一個結構體中可以包含任意個進程語句結構,所有的進程語句本身都是并行語

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

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

名稱:port

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

加分號

5.端口模式

名稱:in,out,inout,buffer

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

out:輸出端口。

inout:雙向端口。

buffer:緩沖端口。

6.關鍵字

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

7.標識符

設計者程序中自定義。

考試范圍(主要是程序結構和語句)

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;

串行語句:寫在進程的內部

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是信號名,說明語句部分:定義當

前語句中間的信號量

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;

在此進程中的的case語句一定是順序語句。

1.CASE語句

case語句屬于順序語句,必須放在進程語句process中使用。

表述如下:

case〈表達式》is

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

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

whenothers=><順序語句);

endcase;

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

選擇值[|選擇值]

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

單個普通值,如6。

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

并列數值,如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庫預定義標準邏輯位與矢量(P69)

3.3.4預定義標準數據類型(P70)

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

3.3.6并置操作符&

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

'0'&'[&'[的結果為"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的語句表述結構與例3-1相似,只是if語句的條件判斷式的變量變成了兩位二進制

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

IF_THEN_ELSE_ELSE_ENDIF

1.WHEN_ELSE條件信號賦值語句

該語句屬于并行語句,不需要進程語句process引導。也稱并行賦值語句(相對于進程中

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

賦值目標<=表達式WHEN賦值條件ELSE

表達式WHEN賦值條件ELSE

表達式;

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

z<-awhenpl='1'else

bwhenp2=T'else

c;

注意只有最后一個"表達式"后有個分號。

2.選擇信號賦值語句

with選擇表達式select

賦值目標信號<=表達式when選擇值,

表達式when選擇值,

表達式when選擇值;

由于屬于并行語句,選擇信號賦值語句不在進程中應用,但其功能卻與進程中的case語句

的功能相似。

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

的關鍵詞UNAFFECTEDo

UNAFFECTEDWHENOTHERS;

3.4全加器

3.4.1全加器設計

例3-9

libraryieee;—全加器頂層設計描述

useieee.std_logic_1164.all;

entityfadderis

port(ain,bin,cin:instd_logic;

cout,sum:outstdlogic

);

endentityf_adder;

architecturefdloff_adderis

componenthadder---調用半加器聲明語句

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

endcomponent;

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

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

endcomponent;

signalnetl,net2,net3:stdlogic;--定義3個信號作為內部的連接線,信號量的導線

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;

注意:這里假設參與設計的半加器文件、或門文件和全加器頂層設計文件存放于同一文件夾

3.4.2VHDL例化語句

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

是對待調用的這個元件做H1調用聲明,最簡表達式如下:

component元件名is

port(端口名表);

endcomponent文件名;

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

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

元件定義語句必須放在結構體的architecture和begin之間。(調用聲明的端口說明中的

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

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

明。此語句所謂的“端口名關聯法”有如F表達式:

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

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

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

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

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

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

3.4.38位加法器設計及算術操作符應用(加法器應用題P77)

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

libraryieee;

useieee.std_logic_1164.all;

useieee.stdlogicunsigned.all;-unsigned無符號數,此程序包中包含算術操作符的重載函數

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統計位矢中含'1'個數的電路模塊設計

例3-12所描述的電路是一個統計輸入的8位位矢中含'1,個數的程序。

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的循環變量

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

endif;

endloop;

cnth<=Q;

endprocess;

endbhv;

改程序有三個需要注意的語句結構:

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

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

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

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

以,變量無法將數據傳遞出進程。

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

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

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

3.5.2FOR_LOOP循環語句用法

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

(1)單個loop語句

[loop標號:]loop

順序語句

endloop[loop標號];

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

后才能確定:"loop標號”可任選。用法如下:

L2:loop

a:=a+1;

exitL2whena>10;一當a大于10跳出循環

endloopL2;

此程序的循環方式由exit語句確定,即當a>10時結束執行a:=a+l的循環。

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

[loop標號:]for循環變量,in循環次數范圍loop

順序語句

endloop[loop標號];

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

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

語句范圍內不要再使用其他與此循環變量同名的標識符,如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);一定義參數S為整數類型且等于4便于修改電路規模

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;一類型轉換函數

process

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

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參數定義語句

GENERIC語句也像端口定義語句那樣常常與port語句并行出現。

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

形式放在實體或塊結構體前的說明部分。十分方便地改變一個設計實體或一個元件的內部電

路結構和規模。

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

GENERIC(常數名:數據類型[:設定值]

{:常數名:數據類型[:設定值]});

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

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

3.5.5整數數據類型

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

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

在定義整數類型時,VHDL綜合器通常要求使用關鍵詞range構成的子句來為所定義的數限

定范圍,然后根據所限定的范圍來決定表示此信號或變量的二進制數位數。

如以下定義表述:

signakQ:integerrange15downto0;

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

用二進制數表示。因此,VHDL綜合器自動將Q綜合成由四條信號線構成的總線方式信號:Q

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

整數常量的書寫方式如下:

1,35-----H進制整數1和35

10E3一一十進制整數,等于十進制整數1000,E為科學計數法

16#D9#——K六進制整數,等于十六進制數據D9H

8#720#—―八進制整數,等于八進制數7200

2#11010010?——二進制整數,等于二進制數11010010B

注意在語句中,整數的表達不加引號,如1、0、25等

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

3.5.6省略賦值操作符

一般地,為了簡化表達和位數不定情況下的賦值,可以使用短語“(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

移位操作符格式如下:

標識符移位操作符移位位數;一如“10110001”SRL3,結果是“00010110”

SLL是將位矢向左移,右邊跟進的位補零;

SRL的功能恰好與SLL相反;

ROL的位移方式稍有不同,它們移出的位將用于依次填補位移空的位,執行是的循環式位移

方式;

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

例3-14

libraryieee;

useieee.std_logic_1164.all;

useieee.std_logic_unsigned.all;

entitydecoder3to8is

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

dout:outbit_vector(7downto0)—數據類型為位矢量

);

endentitydecoder3to8;

architecturebehaveofdecoder3to8is

begin

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

endarchitecturebehave;

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

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

類型操作符功能操作數數據類型

+加整數

—減整數

&并置一維數組

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

/除整數和實數(包括浮點數)

MOD取模整數

REM取余整數

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

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

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

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

ROL邏輯循環左移BIT、BIT_UECTOR或布爾型一維數組

ROR邏輯循環右移BIT、BIT_VECTOR或布爾型一維數組

**乘方整數

ABS取絕對值整數

=等干任何敷據類型

/=不等于任何數據類型

<小于枚舉與整數類型,及對應的一維數組

關系操作符

>大于枚舉與整數類型,及對應的一維數組

<-小于等于枚舉與整數類型,及對應的一維數組

>-大于等于枚舉與整數類型,及對應的一維數組

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

+正整數

符號操作符

—負整期

【例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;--兩個操作符不同,未加括號,表達錯誤

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

h<=iOR1;-i的數據類型是STD_LOGIC,而1的數據類型是

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

表3-3VHDL操作符優先級

運算符優先級

NOT,ABS,**最高優先級

*,/,MOD,REM

+(正號),一(負號)

+?->&

SLL,SLA,SRL,SRA,ROL,ROR

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

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

3.5.9數據類型轉換函數(不重要)

表3/IEEE庫數據類型轉換函數表

函數名功能

所在程序包:STD_LOGIC_1164

to_stdlogicvector(A)由bit_vector類型轉換為std_logic_vector

to__bitvector(A)由std_logic_vector轉換為bit_vector

to_stdlogic(A)由bit轉換成stdjogic

to_bit(A)由stdjogic類型轉換成bit類型

所在程序包:STD_LOGIC_ARITH

conv_std_logic_vector(A,位長)將integer轉換成std_logic_vector類型,A是整數

conv_integEA)將std_logic_vector轉換成integer

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

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

所在程序包:STD_LOGIC_UNSIGNED

conv_integer(A)由std_logic_vector轉換成integer

例3-20中各例句都調用了數據類型轉換函數,在程序包ieee.std_logic_1164中的轉換函

數,它們在程序包中定義的函數首如下:

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是個利用轉換函數conv_integer(),以及在進程中對同一信號先后賦值不同數據

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

【例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是幾個預定義轉換函數的函數首表達式,從中可以了解類型轉換函數的來源。

【例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的函數體,其中的ALIAS是表述縮略語句之關鍵詞。

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參數傳遞映射的語句

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模塊的調用聲明

GENERIC(S:integer);--照抄MULT4B實體中關于參數"端口"定義的語句

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

部分習題(課后作業僅供參考)

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

ENTITYbuf3sIS-實體1:三態緩沖器

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描述;最終實現8位全減器。要求:

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

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

圖3-18全減器結構圖

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

LIBRARYIEEE;位二進制全減器順層設計描述

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

PORT(x,y:INSTD_LOGIC;

diff,s_out:OUTSTD_LOGIC);

ENDCOMPONENT;

SIGNALa,b,c:STD_LOGIC;-定義1個信號作為內部的連接線。

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位全減器為基本硬件,構成串行借位的8位減法器,要求用例化語句來完成此項設

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

PORT(xin,yin,sub_in:INSTD_LOGIC;

sub_ou

溫馨提示

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

評論

0/150

提交評論