




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第五章VHDL主要描述語句第五章VHDL主要描述語句主要內容概
述行為描述語句結構描述語句主要內容概述5.1
概
述VHDL中的描述語句了分為順序語句(SequentialStatements)和并行語句
(ConcurrentStatements)兩大基本系列。5.1概述VHDL中的描述語句了分為順序語句(Sequ5.2
行為描述語句5.2.1賦值語句
賦值語句有兩種,即信號賦值語句和變量賦值語句。每一種賦值語句都有三個基本組成部分,即賦值目標、賦值符號和賦值源。信號賦值語句和變量賦值語句的語法格式如下:
信號賦值目標
<=賦值源;
變量賦值目標:=賦值源;標識符、數組元素目標的賦值語句示例如下:SIGNALs1,s2:STD_LOGIC;SIGNALarray
1:STD_LOGIC_VECTOR(0TO3);PROCESS(s1)VARIABLEv1,v2:STD_LOGIC;BEGIN V1:=‘0’; V2:=‘1’; S1<=s1ANDs2; S2<=s1ORs2; array
1(0)<=V1; array
1(1)<=V2; array
1(2)<=S1; array
1(3)<=S2;
ENDPROCESS;5.2行為描述語句5.2.1賦值語句標識符、數組元素5.2.2
并行信號賦值語句1.一般信號賦值語句
信號賦值目標
<=延遲選項表達式延遲表達式;例5.1四位并行加法器的數據流描述。LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USE
IEEE.STD_LOGIC_UNSIGNED.ALL
ENTITYADD4IS
PORT(
A:IN
STD_LOGIC_VECTOR(3DOWNTO0);
B:IN
STD_LOGIC_VECTOR(3DOWNTO0);
CIN:IN
STD_LOGIC;
SUM:OUT
STD_LOGIC_VECTOR(
3DOWNTO0);
COUT:OUT
STD_LOGIC );ENDADD4;ARCHITECTUREADD4_concurntOFADD4IS--定義包含有進位的SUM信號SIGNALSUMINT:STD_LOGIC_VECTOR(
4DOWNTO0);BEGIN SUMINT<=('0'&A)+('0'&B)+("0000"&CIN)AFTER10ns; COUT<=SUMINT(4)AFTER15ns; SUM<=SUMINT(3DOWNTO0)AFTER15ns;ENDADD4_concurnt;5.2.2并行信號賦值語句1.一般信號賦值語句例5.1四5.2.2
并行信號賦值語句(續1)2.條件信號賦值語句
賦值目標
<=表達式WHEN
賦值條件ELSE
表達式WHEN
賦值條件ELSE
…
表達式;例5.23選1多路選擇器的行為描述。5.2.2并行信號賦值語句(續1)2.條件信號賦值語句5.2.2
并行信號賦值語句(續2)2.條件信號賦值語句
例5.23選1多路選擇器的行為描述。LIBRARY
IEEE;USEIEEE.STD_LOGIC
1164.ALL;
ENTITYmux31IS PORT(a,b,c:INSTD_LOGIC;
en1,en2:INSTD_LOGIC;
z:OUT
STD_LOGIC);ENDmux31;
ARCHITECTUREbehavioralOFmux31ISBEGIN Z<=aWHENen2='1'ELSE
bWHENen1='1'ELSE
c;ENDbehavioral;5.2.2并行信號賦值語句(續2)2.條件信號賦值語句5.2.2
并行信號賦值語句(續3)3.選擇信號賦值語句
WITH
選擇表達式SELECT
賦值目標信號<=表達式WHEN
選擇值,
表達式WHEN
選擇值,
…
表達式WHEN
選擇值,
表達式WHEN
選擇值;
例5.3簡易的指令譯碼器設計。5.2.2并行信號賦值語句(續3)3.選擇信號賦值語句例5.2.2
并行信號賦值語句(續4)3.選擇信號賦值語句
例5.3簡易的指令譯碼器設計。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDECODERIS PORT(A,B,C
:INSTD_LOGIC;
data1,data2:INSTD_LOGIC;
data_out
:OUTSTD_LOGIC);ENDDECODER;
ARCHITECTUREbehavioralOFDECODERIS SIGNALinstruction:STD_LOGIC_VECTOR(0TO2); BEGIN Instruction<=A&B&C;
WITHinstructionSELECT data_out<=NOTdata1
WHEN"000",
data1ANDdata2
WHEN"001",
data1ORdata2
WHEN"010",
data1NANDdata2
WHEN"011",
data1NORdata2
WHEN"100",
data1XORdata2
WHEN"101",
data1XNORdata2
WHEN"110",
‘Z’
WHEN
OTHERS;ENDbehavioral;5.2.2并行信號賦值語句(續4)3.選擇信號賦值語句5.2.3順序控制語句1.IF語句第一種形式:IF
條件THEN --順序語句;
ELSE --順序語句;ENDIF;第二種形式:IF
條件THEN
--順序語句;
ENDIF;第三種形式:IF
條件THEN --順序語句;
ELSIF條件THEN --順序語句;
… ELSE --順序語句;ENDIF;第四種形式:IF
條件THEN --順序語句;
ELSIF條件THEN --順序語句;
…ENDIF;5.2.3順序控制語句1.IF語句第一種形式:第二種形1.IF語句(續1)例5.4采用兩種不同IF語句結構實現同一結構和功能的數據選擇器。ENTITYif_statementISPORT(A,B,C,X:IN
BIT_VECTOR(3DOWNTO0);Z:OUTBIT_VECTOR(3DOWNTO0));ENDif_statement;ARCHITECTUREexample1OFif_statementISBEGIN PROCESS(A,B,C,X) BEGIN Z<=A;
IF(X="1111")THEN
Z<=B;
ELSIF(X>"1000")THEN
Z<=C;
ENDIF; ENDPROCESS;
ENDexample1;1.IF語句(續1)例5.4采用兩種不同IF語句結構實現1.IF語句(續2)例5.4采用兩種不同IF語句結構實現同一結構和功能的數據選擇器。ARCHITECTUREexample2OFif_statementISBEGINPROCESS(A,B,C,X)
BEGIN
IF(X="1111")THEN
Z<=B;
ELSIF(X>"1000")THEN
Z<=C;
ELSE
Z<=A;
ENDIF;ENDPROCESS;ENDexample2;1.IF語句(續2)例5.4采用兩種不同IF語句結構實現1.IF語句(續3)例5.5利用IF語句的多分支嵌套實現四選一多路選擇器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYMUX_41IS
PORT(S1,S0,A,B,C,D:INSTD_LOGIC;
Z:OUTSTD_LOGIC);ENDMUX_41;ARCHITECTUREBEHAV_MUX41OFMUX_41ISBEGINP1:PROCESS(S1,S0,A,B,C,D)
BEGIN
IFS1='0'ANDS0='0'THEN Z<=A;
ELSIFS1='0'ANDS0='1'THEN Z<=B;
ELSIFS1='1'ANDS0='0'THEN Z<=C;
ELSE Z<=D;
ENDIF;
ENDPROCESSP1;ENDBEHAV_MUX41;1.IF語句(續3)例5.5利用IF語句的多分支嵌套實現1.IF語句(續4)例5.6利用IF語句的多分支嵌套實現四選一多路選擇器的錯誤示例。P1:PROCESS(S1,S0,A,B,C,D)
BEGIN
IFS1='0'ANDS0='0'THEN Z<=A;
ELSIFS1='0'ANDS0='1'THEN Z<=B;
ELSIFS1='1'ANDS0='0'THEN Z<=C;
ELSIFS1='1'ANDS0='1'THEN Z<=D;
ENDIF;
ENDPROCESSP1;1.IF語句(續4)例5.6利用IF語句的多分支嵌套實現5.2.3
順序控制語句2.CASE語句CASE
表達式
ISWHEN
選擇值_1=>順序語句;WHEN
選擇值_2|選擇值_3=>順序語句;WHEN
選擇值_4TO選擇值_N=>順序語句;WHEN
OTHERS=>順序語句;ENDCASE;選擇值可以有四種不同的表達方式:單個普通數值,如選擇值_1;并列數值,如選擇值_2|選擇值_3,表示取值為選擇值_2或者選擇值_3;數值選擇范圍,如選擇值_4TO選擇值_N,表示取值可以是該范圍中的任意一個;混合方式,以上三種方式的混合。5.2.3順序控制語句2.CASE語句CASE表達2.CASE
語句(續1)例5.7CASE語句描述的8線-3線編碼器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITY
encoder_83ISPORT(s:IN
STD_LOGIC_VECTOR(7DOWNTO0);z:OUT
STD_LOGIC_VECTOR(2DOWNTO0));ENDencoder_83;
ARCHITECTUREbehavioralOFencoder_83ISBEGIN PROCESS(s)
BEGIN CASEsIS
WHEN"11111110"=>z<="000"; WHEN"11111101"=>z<="001"; WHEN"11111011"=>z<="010"; WHEN"11110111"=>z<="011"; WHEN"11101111"=>z<="100"; WHEN"11011111"=>z<="101"; WHEN"10111111"=>z<="110"; WHEN"01111111"=>z<="111"; WHENOTHERS=>z<="XXX"; ENDCASE; ENDPROCESS;ENDbehavioral;2.CASE語句(續1)例5.7CASE語句描述的82.CASE
語句(續2)例5.8整型數據類型的范圍。ENTITYrange_1IS
PORT(A,B,C,X:ININTEGERRANGE0TO15;
Z:OUTINTEGERRANGE0TO15);ENDrange_1;
ARCHITECTUREexampleOFrange_1ISBEGIN
PROCESS(A,B,C,X) BEGIN CASEXIS WHEN0=>Z<=A; WHEN7|9=>Z<=B; WHEN1TO5=>Z<=C; WHENOTHERS=>Z<=0; ENDCASE; ENDPROCESS;ENDexample;2.CASE語句(續2)例5.8整型數據類型的范圍。E2.CASE
語句(續3)例5.9數組數據類型范圍的錯誤用法。ENTITYrange_2ISPORT(A,B,C,X:IN
BIT_VECTOR(3DOWNTO0);
Z:OUT
BIT_VECTOR(3DOWNTO0));ENDrange_2;
ARCHITECTUREexampleOFrange_2ISBEGIN
PROCESS(A,B,C,X)
BEGIN CASEXIS
WHEN"0000"=>Z<=A;
WHEN"0111"|"1001"=>Z<=B;
--錯誤用法,數組元素沒有大小關系
WHEN"0001"TO"0101"=>Z<=C;
WHENOTHERS=>Z<=0;
ENDCASE;
ENDPROCESS;ENDexample;2.CASE語句(續3)例5.9數組數據類型范圍的錯誤5.2.3
順序控制語句3.
LOOP語句FORLOOP的語句格式如下:LOOP標號:FOR循環變量IN循環次數范圍LOOP順序語句END
LOOPLOOP標號;WHILELOOP的語句格式如下:LOOP標號:WHILE循環控制條件LOOP順序語句ENDLOOPLOOP標號;5.2.3順序控制語句3.LOOP語句FORLOO3.
LOOP
語句(續1)例5.10FORLOOP語句使用示例。ENTITYfor_loopIS PORT(A:IN
INTEGERRANGE0TO3;
Z:OUTBIT_VECTOR(3DOWNTO0));ENDfor_loop;
ARCHITECTUREexampleOFfor_loopISBEGIN PROCESS(A) BEGIN Z<="0000"; FORiIN0TO3LOOP
IF(A=i)THEN
Z(i)<='1';
ENDIF; ENDLOOP; ENDPROCESS;ENDexample;3.LOOP語句(續1)例5.10FORLOOP語句3.
LOOP
語句(續2)例5.11利用LOOP語句將向量轉化為整數輸出。ENTITYconv_intISPORT(vect:IN
BIT_VECTOR(7DOWNTO0);
result:OUT
INTEGER);ENDconv_int;
ARCHITECTUREAOFconv_intISBEGIN
PROCESS(vect)
VARIABLEtmp:INTEGER;
BEGIN tmp:=0; FORiIN7DOWNTO0LOOP IF(vect(i)='1')THEN tmp:=tmp+2**i; ENDIF; ENDLOOP; result<=tmp;
ENDPROCESS;ENDA;ARCHITECTUREBOFconv_intISBEGIN
PROCESS(vect)
VARIABLEtmp:INTEGER;
VARIABLEi:INTEGER;
BEGIN tmp:=0; i:=vect'high WHILE(i>=vect'low)LOOP IF(vect(i)='1')THEN
tmp:=tmp+2**i; ENDIF; i:=i-1;--修改循環變量 ENDLOOP; result<=tmp;
ENDPROCESS;ENDB;3.LOOP語句(續2)例5.11利用LOOP語句將向5.2.3
順序控制語句4.NEXT語句和EXIT語句NEXT的語句四種形式:NEXT;NEXTLOOP標號;NEXT
WHEN
條件表達式;NEXTLOOP標號WHEN
條件表達式;EXIT語句四種形式:EXIT;EXITLOOP標號;EXITWHEN
條件表達式;EXITLOOP標號WHEN
條件表達式;5.2.3順序控制語句4.NEXT語句和EXIT語句N5.2.4NULL語句空語句不會執行任何操作,其語句格式為:NULL;例5.12NULL語句的應用示例。ENTITYEX_WAITIS
PORT(CNTL:IN
INTEGER
RANGE0TO31;
A,B:IN
STD_LOGIC_VECTOR(7DOWNTO0); Z:OUTSTD_LOGIC_VECTOR(7DOWNTO0));ENDEX_WAIT;
ARCHITECTUREarch_waitOFEX_WAITISBEGIN P_WAIT:PROCESS(CNTL)
BEGIN
Z<=A;
CASECNTLIS WHEN3|15=>Z<=AXORB;
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESSP_WAIT;ENDarch_wait;5.2.4NULL語句空語句不會執行任何操作,其語句格式5.2.5WAIT語句WAIT語句的語句格式有如下四種形式:WAITUNTIL
條件表達式;WAITFOR
時間表達式;WAITON
信號列表;WAIT;例5.13利用WAIT語句描述的D觸發器模塊。ENTITYFFIS
PORT(D,CLK:INBIT;
Q:OUTBIT);
ENDFF;ARCHITECTUREBEH_1OFFFIS
BEGIN
PROCESS
BEGIN
WAITUNTILCLK='1';
Q<=D;
ENDPROCESS;
ENDBEH_1;5.2.5WAIT語句WAIT語句的語句格式有如下四種形5.2.6
進程語句1.進程語句的格式進程標號:PROCESS(敏感信號參數列表
)
進程說明部分
BEGIN
順序描述語句
ENDPROCESS
進程標號;2.進程設計要點同一結構體中的多個進程之間是并行運行的,但每一進程中的邏輯描述語句是順序運行的。進程只能存在于結構體內。一個進程的執行是事件觸發的,或者將可能的事件源列在敏感信號參數表中,或者直接使用WAIT語句來控制進程的執行。同一設計中的所有進程都是并行運行的,各進程彼此之間的通信是通過列于敏感信號參數表中的信號進行的。如果使用了標號,那末在進程結束語句中必須重復標號。5.2.6進程語句1.進程語句的格式5.2.6
進程語句(續1)3.進程語句設計實例例5.14進程中敏感信號參數表和IF語句的使用。LIBRARY
IEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYcomp_listIS
PORT(A,B,SEL:INSTD_LOGIC;
Z:OUTSTD_LOGIC);
ENDcomp_list;
ARCHITECTURERTLOFcomp_listIS
BEGIN
PROCESS(A,B,SEL)
BEGIN
IFSEL='1'THEN
Z<=A; ELSEZ<=B;
ENDIF;
ENDPROCESS;ENDRTL;5.2.6進程語句(續1)3.進程語句設計實例例5.13.進程語句設計實例(續2)例5.15無復位十進制加法計數器的描述。LIBRARYIEEE;
USE
IEEE.STD_LOGIC_1164.ALL;
ENTITYcounterIS
PORT(CLK:IN
STD_LOGIC;
Q:OUTINTEGERRANGE0TO15);
ENDcounter;
ARCHITECTUREAOFcounterIS
SIGNALcount:
INTEGERRANGE0TO15;
BEGIN
PROCESS(CLK)
BEGIN
IFCLK‘EVENTANDCLK=’1‘THEN
IF(count>=9)THEN
count<=0;
ELSE
count<=count+1;
ENDIF;
ENDIF;
ENDPROCESS;
Q<=count;
ENDA;3.進程語句設計實例(續2)例5.15無復位十進制加法計3.進程語句設計實例(續3)例5.16帶異步復位、置位端的D觸發器描述。LIBRARY
IEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYASYNC_FFIS
PORT(D,CLK,SET,RST:IN
STD_LOGIC;
Q:OUTSTD_LOGIC);
ENDASYNC_FF;
ARCHITECTUREAOFASYNC_FFIS
BEGIN
PROCESS(CLK,RST,SET)
BEGIN
IF(RST=‘1’)THEN
Q<=‘0’;
ELSIFSET=‘1’THEN
Q<=‘1’;
ELSIF(CLK‘EVENTANDCLK=’1‘)THEN
Q<=D;
ENDIF;
ENDPROCESS;
ENDA;ENDcounter;3.進程語句設計實例(續3)例5.16帶異步復位、置位端3.進程語句設計實例(續4)例5.17移位寄存器的描述。--基本移位寄存器的描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYbasic_shift_registerIS
GENERIC ( num_stages:NATURAL:=16 );
PORT ( clk :INSTD_LOGIC; enable :INSTD_LOGIC; sr_in :INSTD_LOGIC; sr_out :OUTSTD_LOGIC );ENDENTITY;3.進程語句設計實例(續4)例5.17移位寄存器的描述。3.進程語句設計實例(續5)例5.17移位寄存器的描述。ARCHITECTURErtlOFbasic_shift_registerIS--為基本移位寄存器構造一個數組類型TYPEsr_lengthISARRAY((num_stages-1)DOWNTO0)OFSTD_LOGIC; --聲明移位寄存器內部信號
SIGNALsr:sr_length;BEGIN
PROCESS(clk)
BEGIN
IF(clk'EVENTandclk='1')THEN
IF(enable='1')THEN
--左移一位,且最高位數據丟失
sr((num_stages-1)DOWNTO1)<=sr((num_stages-2)DOWNTO0);
sr(0)<=sr_in;--裝載最低位的新數據
ENDIF;
ENDIF;
ENDPROCESS; --在最高位數據丟失前將其輸出
sr_out<=sr(num_stages-1);ENDrtl;3.進程語句設計實例(續5)例5.17移位寄存器的描述。3.進程語句設計實例(續6)例5.17移位寄存器的描述。類屬說明語句的一般書寫格式如下:
GENERIC(
常數名:數據類型:設定值;
…
常數名:數據類型:設定值
);圖5.8例5.17的時序仿真圖3.進程語句設計實例(續6)例5.17移位寄存器的描述。3.進程語句設計實例(續7)例5.18二進制加法/減法計數器的描述。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.NUMERIC_STD.ALL;
ENTITYbinary_up_down_counterIS
GENERIC(min_count:NATURAL:=0;
max_count:NATURAL:=255);
PORT(clk :INSTD_LOGIC; reset :INSTD_LOGIC; enable :INSTD_LOGIC; updown :INSTD_LOGIC; q :OUTINTEGERRANGEmin_countTOmax_count);
ENDENTITY;3.進程語句設計實例(續7)例5.18二進制加法/減法計3.進程語句設計實例(續8)例5.18二進制加法/減法計數器的描述。ARCHITECTURErtlOFbinary_up_down_counterIS
SIGNALdirection:INTEGER;--定義計數方向信號BEGIN
Proc1: PROCESS(updown)
BEGIN
IF(updown=‘1’)THEN
direction<=1;
ELSE direction<=-1;
ENDIF;
ENDPROCESSProc1;Proc2: PROCESS(clk)
VARIABLEcnt:INTEGERRANGEmin_countTOmax_count;
BEGIN
IF(clk'EVENTandclk='1')THEN
IFreset='1'THEN cnt:=0;--計數器復位
ELSIFenable=‘1’THEN
cnt:=cnt+direction;--加法/減法計數
ENDIF;
ENDIF; q<=cnt;--輸出當前計數值
ENDPROCESSProc2;ENDrtl;3.進程語句設計實例(續8)例5.18二進制加法/減法計3.進程語句設計實例(續9)例5.18二進制加法/減法計數器的描述。例5.18的時序仿真圖3.進程語句設計實例(續9)例5.18二進制加法/減法計5.3結構描述語句5.3.1元件例化語句
1.元件聲明(ComponentDeclaration)
所有準備使用的元件都需要通過元件聲明語句聲明,并必須放置在當前設計結構體中關鍵字BEGIN之前。
COMPONENT例化元件名IS GENERIC(類屬表
); PORT(例化元件端口名表
); ENDCOMPONENT;2.元件例化(ComponentInstantiation)
元件例化語句必須放置在當前設計結構體中關鍵字BIGIN之后的說明部分。
例化元件標號:例化元件名PORTMAP(端口映射表);5.3結構描述語句5.3.1元件例化語句5.3.1
元件例化語句(續1)例5.2216進制加法計數器的描述LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.NUMERIC_STD.ALL;
ENTITYcounter_16IS PORT(
Clk
:INSTD_LOGIC;
reset
:INSTD_LOGIC;
enable:INSTD_LOGIC;
out_q:OUTINTEGERRANGE0TO16 );ENDENTITY;5.3.1元件例化語句(續1)例5.2216進制加5.3.1
元件例化語句(續2)例5.2216進制加法計數器的描述ARCHITECTUREinstOFcounter_16IS
COMPONENTbinary_up_down_counterIS GENERIC(
min_count:NATURAL:=0;
max_count:NATURAL:=16--更改了最大計數值);
PORT(
clk
:INSTD_LOGIC;
reset
:INSTD_LOGIC;
enable
:INSTD_LOGIC;
updown
:INSTD_LOGIC:='1';--只保留加法計數
q
:OUTINTEGERRANGEmin_countTOmax_count );
ENDCOMPONENTbinary_up_down_counter;BEGINu1:binary_up_down_counterPORTMAP(
clk=>clk,reset=>reset,enable=>enable,q=>out_q);ENDinst;5.3.1元件例化語句(續2)例5.2216進制加5.3.1
元件例化語句(續3)例5.2216進制加法計數器的描述例5.22的時序仿真圖5.3.1元件例化語句(續3)例5.2216進制加5.3.2
配置語句 CONFIGURATION
配置名OF
實體名IS FOR選配結構體名
配置說明
ENDFOR; END
配置名;例5.23一位全加器中配置語句的使用。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYfulladder_cfgIS
PORT(a,b,ci:INSTD_LOGIC;S,co:OUTSTD_LOGIC);ENDfulladder_cfg;5.3.2配置語句 CONFIGURATION配置名O5.3.2
配置語句(續1)例5.23一位全加器中配置語句的使用。ARCHITECTUREbehavioralOFfulladder_cfgIS
--以下是一位全加器結構體行為描述BEGINS<='1'WHEN(a='0'ANDb='1'ANDci='0')ELSE'1'WHEN(a='1'ANDb='0'ANDci='0')ELSE'1'WHEN(a='0'ANDb='0'ANDci='1')ELSE'1'WHEN(a='1'ANDb='1'ANDci='1')ELSE'0';co<='1'WHEN(a='1'ANDb='1'ANDci='0')ELSE'1'WHEN(a='0'ANDb='1'ANDci='1')ELSE'1'WHEN(a='1'ANDb='0'ANDci='1')ELSE'1'WHEN(a='1'ANDb='1'ANDci='1')ELSE'0';ENDbehavioral;ARCHITECTUREDataflowOFfulladder_cfgIS
--以下是一位全加器結構體數據流描述BEGIN S<=aXORbXORci; co<=(aANDb)OR(bANDci)OR(aANDci);ENDDataflow;--以下是結構體的配置CONFIGURATIONfirstOFfulladder_cfgIS
FORbehavioral
ENDFOR;ENDfirst;ENDfulladder_cfg;5.3.2配置語句(續1)例5.23一位全加器中配置語5.3.2
配置語句(續2)例5.24四位串行加法器的結構描述。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--以下是四位串行加法器的實體描述ENTITYfulladder_4IS
PORT(ain,bin:INSTD_LOGIC_VECTOR(3DOWNTO0); Cin:INSTD_LOGIC;Sum:OUTSTD_LOGIC_VECTOR(3DOWNTO0); Count:OUTSTD_LOGIC);ENDfulladder_4;--以下是四位全加器結構體描述ARCHITECTUREinstOFfulladder_4IS
--
假定fulladder_cfg已在work目錄中,且結構體沒有配置
COMPONENTfulladder_cfgIS
PORT(a,b,ci:INSTD_LOGIC;
s,co:OUTSTD_LOGIC);
ENDCOMPONENT;SIGNALcarry:STD_LOGIC_VECTOR(3DOWNTO1);
--定義內部進位信號BEGIN u1:fulladder_cfgPORTMAP(a=>ain(0),b=>bin(0),ci=>cin,s=>sum(0),co=>carry(1));u2:fulladder_cfgPORTMAP(a=>ain(1),b=>bin(1),ci=>carry(1),s=>sum(1),co=>carry(2));u3:fulladder_cfgPORTMAP(a=>ain(2),b=>bin(2),ci=>carry(2),s=>sum(2),co=>carry(3));u4:fulladder_cfgPORTMAP(a=>ain(3),b=>bin(3),ci=>carry(3),s=>sum(3),co=>count);ENDinst;5.3.2配置語句(續2)例5.24四位串行加法器的結5.3.2
配置語句(續3)例5.24四位串行加法器的結構描述。--以下是一位全加器的結構體配置CONFIGURATIONselOFfulladder_4IS
FORinst
FORu1,u2:fulladder_cfg
USEENTITY
WORK.fulladder_cfg(behavioral);
ENDFOR;
FOROTHERS:fulladder_cfg--本例中為u3、u4
USEENTITYWORK.fulladder_cfg(Dataflow);
ENDFOR;
ENDFOR;ENDsel;5.3.2配置語句(續3)例5.24四位串行加法器的結5.3.3
生成語句生成語句的語句格式有如下兩種形式:標號:FOR
循環變量取值范圍GENERATE
說明語句
BEGIN
并行語句
END
GENERATE
標號;
標號:IF
條件GENERATE
說明語句
BEGIN
并行語句
ENDGENERATE
標號;5.3.3生成語句生成語句的語句格式有如下兩種形式:5.3.3
生成語句(續1)例5.25帶異步復位、置位端的4位D觸發器的描述。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;--4位D觸發器的實體描述ENTITYASYNC_FF_4IS
PORT(D,SET
:INSTD_LOGIC_VECTOR(3DOWNTO0);
CLK,RST:INSTD_LOGIC;
Q:OUTSTD_LOGIC_VECTOR(3DOWNTO0));ENDASYNC_FF_4;--4位D觸發器的結構體描述ARCHITECTUREGENEROFASYNC_FF_4IS
COMPONENTASYNC_FF--需要確定ASYNC_FF已在work庫中
PORT(D,CLK,SET,RST:INSTD_LOGIC;
Q:OUTSTD_LOGIC);
ENDCOMPONENT;5.3.3生成語句(續1)例5.25帶異步復位、置位端5.3.3
生成語句(續2)例5.25帶異步復位、置位端的4位D觸發器的描述。BEGINlable:FORiIN3DOWNTO0
GENERATE
BEGIN
U1:ASYNC_FFPORTMAP(
D=>D(i),CLK=>CLK,
SET=>SET(i),RST=>RST,
Q=>Q(i));ENDGENERATElable;ENDGENER;5.3.3生成語句(續2)例5.25帶異步復位、置位端5.3.4
塊語句
塊語句應用只是一種將結構體中的并行描述語句進行組合的方法,它的主要目的是改善并行語句及其結構的可讀性。
塊標號:BLOCK
接口說明
類屬說明 BEGIN
并行語句 ENDBLOCK塊標號;5.3.4塊語句塊語句應用只是一種將結構體5.3.4
塊語句(續)例5.27塊語句應用示例1。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYblock_testIS
PORT(a,b:INSTD_LOGIC; s,c:OUTSTD_LOGIC);END;
ARCHITECTUREexampleOFblock_testISBEGINrr1:BLOCK--塊定義 PORT(a1,b1:INSTD_LOGIC;--塊中的端口定義
s1:OUTSTD_LOGIC;
c1:OUTSTD_LOGIC); PORTMAP(a1=>a,b1=>b,s1=>s,c1=>c);--端口映射說明 BEGIN
p1:PROCESS(a1,b1)--使用的是塊定義的局部變量 BEGIN
s1<=a1XORb1; ENDPROCESSp1;
p2:PROCESS(a1,b1) BEGIN
c1<=a1ANDb1; ENDPROCESSp2;ENDBLOCKrr1;ENDARCHITECTUREexample;5.3.4塊語句(續)例5.27塊語句應用示例1。本章小結結構體描述語句分為順序語句和并行語句兩大基本系列,其中順序語句是按照代碼的書寫順序一條一條順序執行的,描述的是硬件電路中各支路信號傳輸的特性;而并行語句具有多進程并發性,各并行語句是同時執行的,與其書寫順序無關,很好地描述了硬件電路中各分支電路同時并行工作的特性。結構體的描述有行為描述、數據流描述和結構描述三種方式。行為描述語句包括賦值語句、并行信號賦值語句、順序控制語句、NULL語句、WAIT語句和進程語句。結構描述語句包括元件例化語句、配置語句、生成語句和塊語句。本章小結結構體描述語句分為順序語句和并行語句兩大基本系列,其第五章VHDL主要描述語句第五章VHDL主要描述語句主要內容概
述行為描述語句結構描述語句主要內容概述5.1
概
述VHDL中的描述語句了分為順序語句(SequentialStatements)和并行語句
(ConcurrentStatements)兩大基本系列。5.1概述VHDL中的描述語句了分為順序語句(Sequ5.2
行為描述語句5.2.1賦值語句
賦值語句有兩種,即信號賦值語句和變量賦值語句。每一種賦值語句都有三個基本組成部分,即賦值目標、賦值符號和賦值源。信號賦值語句和變量賦值語句的語法格式如下:
信號賦值目標
<=賦值源;
變量賦值目標:=賦值源;標識符、數組元素目標的賦值語句示例如下:SIGNALs1,s2:STD_LOGIC;SIGNALarray
1:STD_LOGIC_VECTOR(0TO3);PROCESS(s1)VARIABLEv1,v2:STD_LOGIC;BEGIN V1:=‘0’; V2:=‘1’; S1<=s1ANDs2; S2<=s1ORs2; array
1(0)<=V1; array
1(1)<=V2; array
1(2)<=S1; array
1(3)<=S2;
ENDPROCESS;5.2行為描述語句5.2.1賦值語句標識符、數組元素5.2.2
并行信號賦值語句1.一般信號賦值語句
信號賦值目標
<=延遲選項表達式延遲表達式;例5.1四位并行加法器的數據流描述。LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USE
IEEE.STD_LOGIC_UNSIGNED.ALL
ENTITYADD4IS
PORT(
A:IN
STD_LOGIC_VECTOR(3DOWNTO0);
B:IN
STD_LOGIC_VECTOR(3DOWNTO0);
CIN:IN
STD_LOGIC;
SUM:OUT
STD_LOGIC_VECTOR(
3DOWNTO0);
COUT:OUT
STD_LOGIC );ENDADD4;ARCHITECTUREADD4_concurntOFADD4IS--定義包含有進位的SUM信號SIGNALSUMINT:STD_LOGIC_VECTOR(
4DOWNTO0);BEGIN SUMINT<=('0'&A)+('0'&B)+("0000"&CIN)AFTER10ns; COUT<=SUMINT(4)AFTER15ns; SUM<=SUMINT(3DOWNTO0)AFTER15ns;ENDADD4_concurnt;5.2.2并行信號賦值語句1.一般信號賦值語句例5.1四5.2.2
并行信號賦值語句(續1)2.條件信號賦值語句
賦值目標
<=表達式WHEN
賦值條件ELSE
表達式WHEN
賦值條件ELSE
…
表達式;例5.23選1多路選擇器的行為描述。5.2.2并行信號賦值語句(續1)2.條件信號賦值語句5.2.2
并行信號賦值語句(續2)2.條件信號賦值語句
例5.23選1多路選擇器的行為描述。LIBRARY
IEEE;USEIEEE.STD_LOGIC
1164.ALL;
ENTITYmux31IS PORT(a,b,c:INSTD_LOGIC;
en1,en2:INSTD_LOGIC;
z:OUT
STD_LOGIC);ENDmux31;
ARCHITECTUREbehavioralOFmux31ISBEGIN Z<=aWHENen2='1'ELSE
bWHENen1='1'ELSE
c;ENDbehavioral;5.2.2并行信號賦值語句(續2)2.條件信號賦值語句5.2.2
并行信號賦值語句(續3)3.選擇信號賦值語句
WITH
選擇表達式SELECT
賦值目標信號<=表達式WHEN
選擇值,
表達式WHEN
選擇值,
…
表達式WHEN
選擇值,
表達式WHEN
選擇值;
例5.3簡易的指令譯碼器設計。5.2.2并行信號賦值語句(續3)3.選擇信號賦值語句例5.2.2
并行信號賦值語句(續4)3.選擇信號賦值語句
例5.3簡易的指令譯碼器設計。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYDECODERIS PORT(A,B,C
:INSTD_LOGIC;
data1,data2:INSTD_LOGIC;
data_out
:OUTSTD_LOGIC);ENDDECODER;
ARCHITECTUREbehavioralOFDECODERIS SIGNALinstruction:STD_LOGIC_VECTOR(0TO2); BEGIN Instruction<=A&B&C;
WITHinstructionSELECT data_out<=NOTdata1
WHEN"000",
data1ANDdata2
WHEN"001",
data1ORdata2
WHEN"010",
data1NANDdata2
WHEN"011",
data1NORdata2
WHEN"100",
data1XORdata2
WHEN"101",
data1XNORdata2
WHEN"110",
‘Z’
WHEN
OTHERS;ENDbehavioral;5.2.2并行信號賦值語句(續4)3.選擇信號賦值語句5.2.3順序控制語句1.IF語句第一種形式:IF
條件THEN --順序語句;
ELSE --順序語句;ENDIF;第二種形式:IF
條件THEN
--順序語句;
ENDIF;第三種形式:IF
條件THEN --順序語句;
ELSIF條件THEN --順序語句;
… ELSE --順序語句;ENDIF;第四種形式:IF
條件THEN --順序語句;
ELSIF條件THEN --順序語句;
…ENDIF;5.2.3順序控制語句1.IF語句第一種形式:第二種形1.IF語句(續1)例5.4采用兩種不同IF語句結構實現同一結構和功能的數據選擇器。ENTITYif_statementISPORT(A,B,C,X:IN
BIT_VECTOR(3DOWNTO0);Z:OUTBIT_VECTOR(3DOWNTO0));ENDif_statement;ARCHITECTUREexample1OFif_statementISBEGIN PROCESS(A,B,C,X) BEGIN Z<=A;
IF(X="1111")THEN
Z<=B;
ELSIF(X>"1000")THEN
Z<=C;
ENDIF; ENDPROCESS;
ENDexample1;1.IF語句(續1)例5.4采用兩種不同IF語句結構實現1.IF語句(續2)例5.4采用兩種不同IF語句結構實現同一結構和功能的數據選擇器。ARCHITECTUREexample2OFif_statementISBEGINPROCESS(A,B,C,X)
BEGIN
IF(X="1111")THEN
Z<=B;
ELSIF(X>"1000")THEN
Z<=C;
ELSE
Z<=A;
ENDIF;ENDPROCESS;ENDexample2;1.IF語句(續2)例5.4采用兩種不同IF語句結構實現1.IF語句(續3)例5.5利用IF語句的多分支嵌套實現四選一多路選擇器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITYMUX_41IS
PORT(S1,S0,A,B,C,D:INSTD_LOGIC;
Z:OUTSTD_LOGIC);ENDMUX_41;ARCHITECTUREBEHAV_MUX41OFMUX_41ISBEGINP1:PROCESS(S1,S0,A,B,C,D)
BEGIN
IFS1='0'ANDS0='0'THEN Z<=A;
ELSIFS1='0'ANDS0='1'THEN Z<=B;
ELSIFS1='1'ANDS0='0'THEN Z<=C;
ELSE Z<=D;
ENDIF;
ENDPROCESSP1;ENDBEHAV_MUX41;1.IF語句(續3)例5.5利用IF語句的多分支嵌套實現1.IF語句(續4)例5.6利用IF語句的多分支嵌套實現四選一多路選擇器的錯誤示例。P1:PROCESS(S1,S0,A,B,C,D)
BEGIN
IFS1='0'ANDS0='0'THEN Z<=A;
ELSIFS1='0'ANDS0='1'THEN Z<=B;
ELSIFS1='1'ANDS0='0'THEN Z<=C;
ELSIFS1='1'ANDS0='1'THEN Z<=D;
ENDIF;
ENDPROCESSP1;1.IF語句(續4)例5.6利用IF語句的多分支嵌套實現5.2.3
順序控制語句2.CASE語句CASE
表達式
ISWHEN
選擇值_1=>順序語句;WHEN
選擇值_2|選擇值_3=>順序語句;WHEN
選擇值_4TO選擇值_N=>順序語句;WHEN
OTHERS=>順序語句;ENDCASE;選擇值可以有四種不同的表達方式:單個普通數值,如選擇值_1;并列數值,如選擇值_2|選擇值_3,表示取值為選擇值_2或者選擇值_3;數值選擇范圍,如選擇值_4TO選擇值_N,表示取值可以是該范圍中的任意一個;混合方式,以上三種方式的混合。5.2.3順序控制語句2.CASE語句CASE表達2.CASE
語句(續1)例5.7CASE語句描述的8線-3線編碼器。LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;
ENTITY
encoder_83ISPORT(s:IN
STD_LOGIC_VECTOR(7DOWNTO0);z:OUT
STD_LOGIC_VECTOR(2DOWNTO0));ENDencoder_83;
ARCHITECTUREbehavioralOFencoder_83ISBEGIN PROCESS(s)
BEGIN CASEsIS
WHEN"11111110"=>z<="000"; WHEN"11111101"=>z<="001"; WHEN"11111011"=>z<="010"; WHEN"11110111"=>z<="011"; WHEN"11101111"=>z<="100"; WHEN"11011111"=>z<="101"; WHEN"10111111"=>z<="110"; WHEN"01111111"=>z<="111"; WHENOTHERS=>z<="XXX"; ENDCASE; ENDPROCESS;ENDbehavioral;2.CASE語句(續1)例5.7CASE語句描述的82.CASE
語句
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024年利用溫度變化加工機械項目資金需求報告代可行性研究報告
- 2025軟件授權使用合同范本
- 2025年電梯安裝安全合同范本
- 2025年海南省新合同范本
- 竹材采運合同法律風險與規避考核試卷
- 報紙新聞的公共衛生新聞深度考核試卷
- 2025標準版房屋買賣合同范本
- 2025企業短期用工合同協議
- 2025精簡版技術合同
- 2025《設備租賃合同范本》
- 綠色建筑驗收自評報告全
- GB/T 42288-2022電化學儲能電站安全規程
- 第十二講 建設社會主義生態文明PPT習概論2023優化版教學課件
- 工商管理實習周記十篇
- 幼兒園體育游戲活動評價表
- 醫療衛生系統招聘《醫學基礎知識》備考題庫資料寶典(核心題版)
- 使用說明書儀表8530d技術手冊
- 星球版七年級地理上冊《海陸變遷》《火山噴發》實驗說課 課件
- 五金工具零售規章制度
- GB/T 8312-2013茶咖啡堿測定
- GA/T 1217-2015光纖振動入侵探測器技術要求
評論
0/150
提交評論