版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度教育裝備采購會參展商合作框架合同3篇
- 個人理財協(xié)議書
- 全面創(chuàng)新科技布局
- 墻體保溫板采購合同(2篇)
- 2024招投標(biāo)與合同管理法律顧問服務(wù)合同2篇
- 2024森林質(zhì)量精準(zhǔn)提升
- 2024年高速路改造工程:貴黃高速房屋拆遷補償合同
- 車輛定點維修合同書協(xié)議范本模板
- 純?nèi)斯趧?wù)分包合同
- 19只有一個地球說課稿-2024-2025學(xué)年六年級上冊語文統(tǒng)編版
- 2024年公安機關(guān)理論考試題庫附參考答案(基礎(chǔ)題)
- 2024年安全生產(chǎn)法律、法規(guī)、標(biāo)準(zhǔn)及其他要求清單
- 2023年高考文言文閱讀設(shè)題特點及備考策略
- 暖通工程合同
- 生產(chǎn)型企業(yè)規(guī)章管理制度(3篇)
- 鋼結(jié)構(gòu)之樓承板施工方案流程
- 2024年營銷部工作人員安全生產(chǎn)責(zé)任制(2篇)
- ISO 56001-2024《創(chuàng)新管理體系-要求》專業(yè)解讀與應(yīng)用實踐指導(dǎo)材料之3:4組織環(huán)境-4.1理解組織及其環(huán)境(雷澤佳編制-2025B0)
- 2024-2030年中國管道檢測工程行業(yè)前景分析發(fā)展規(guī)劃研究報告
- 抗心律失常藥物臨床應(yīng)用中國專家共識
- 考級代理合同范文大全
評論
0/150
提交評論