版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
&&≥1&abcyinzindouteoutfoutVHDL語言的描述語句分為兩種:順序處理語句和并發(fā)處理語句。Ut
Eq
jIXd
Ut
Eq
jIXd4.1順序處理語句4.2并發(fā)處理語句4.3其他語句和說明順序處理語句描述系統(tǒng)的順序行為,只能用在進(jìn)程和子程序中,按照語句出現(xiàn)的順序加以執(zhí)行??梢詫?shí)現(xiàn)算術(shù)運(yùn)算、邏輯運(yùn)算、信號(hào)和變量的賦值、子程序調(diào)用等。順序處理語句的種類(10種):Wait
語句斷言語句信號(hào)賦值語句變量賦值語句If語句Case語句Loop
語句Next語句Exit語句過程調(diào)用語句NULL語句常用順序處理語句:信號(hào)賦值語句變量賦值語句If語句Case語句重點(diǎn)掌握其功能是將進(jìn)程掛起或激活。Wait語句有5種形式:4種基本形式,1種多條件組合形式。4種基本形式:Wait
無限等待并行分布處理Wait
on
信號(hào)名;信號(hào)發(fā)生變化結(jié)束等待Wait
untill
布爾表達(dá)式;直到布爾表達(dá)式為真時(shí)結(jié)束等待。Wait
for
時(shí)間表達(dá)式;當(dāng)時(shí)間表達(dá)式的時(shí)間到時(shí)結(jié)束等待例如:wait
on
A,
B;--敏感信號(hào)A
或B
變化時(shí),結(jié)束等待,進(jìn)程激活wait
until
Enable=‘1’;
--滿足條件時(shí),結(jié)束等待,進(jìn)程激活wait
for
5
ns;--過5
ns后,結(jié)束等待,進(jìn)程激活Ut
Eq
jIXd
Ut
Eq
jIXd多條件wait語句wait
on
A,B
until
En=‘1’;--A或B變化,且En=‘1’wait
on
A,B
for
5ns;
--A或B變化,或到達(dá)5
nswait
until
En=‘1’for
5ns;--En=‘1’時(shí),或到達(dá)5
nswait
on
nmi,
interrupt
until
(nmi
=ture)or(interrupt=true)
for
5
ns;該等待有三個(gè)條件:第一,信號(hào)nmi和interrupt
任何一個(gè)有變化第二,信號(hào)nmi和interrupt
任何一個(gè)為真(ture)第三,等待5
ns規(guī)則:(‘on’
且
‘until’
)
或
‘for’,多個(gè)條件至少包含一個(gè)信號(hào)量的值,否則為無限等待語句(
wait
)。LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
CLOCK
ISPORT(D,CLK:IN
STD_LOGIC;Q:OUT
STD_LOGIC);END
CLOCK;ARCHITECTURE
STL
OF
CLOCK
ISBEGINPROCESSBEGINWAIT
on CLK
until
CLK='1';(WAIT
until
CLK‘event
and
CLK='1';)Q<=D;END
PROCESS;END
STL;B:processBeginWait
until
senda=‘1’;Sendb<=‘1’
after
10
ns;Wait
until
senda=‘0’;Sendb<=‘0’
after
10
ns;End
process
B;End
example;不能啟動(dòng),為防止進(jìn)若在程序中所設(shè)置的等待條件 不會(huì)滿足,則進(jìn)程就入無限等待情況,應(yīng)做一些處理.加入超時(shí)等待項(xiàng)。例4-3:4-4:Architecture
example
of
wait_example
isSignal
sendb,senda:std_logic;Beginsenda<=‘0’;A:processBeginAssert(sendb=‘1’)Report
“sendb
timed
out
at
‘1’”Severity
error;for
1
nsWaituntil
sendb=‘1’;Senda<=‘1’
after
10
ns;Waituntil
sendb=‘0’;Senda<=‘0’
after
10
ns;End
process
A;斷言語超時(shí)等待項(xiàng)[v,v2
,v
3
,v4,v5
]。對(duì)電路本身的功能并信息,實(shí)現(xiàn)仿真和調(diào)試中的人機(jī)沒有任何影響。不能實(shí)現(xiàn)邏輯綜合。例如:Assert
(sendb=‘1’)Report
“sendb
timed
out
at
‘1’”Severity
error;type
Severity
_Level
is
(Note,
Warning,
Error,
Failure);當(dāng)不滿足條件時(shí),輸出文字串和錯(cuò)誤級(jí)別信息。斷言語句的執(zhí)行,不會(huì)引起任何事件的發(fā)生,只是報(bào)告錯(cuò)誤ASSERT
條件[REPORT
輸出信息][SEVERITY
級(jí)別];格式:書寫格式:目的信號(hào)量<=表達(dá)式;1)將右邊表達(dá)式的值賦予左邊的目的信號(hào)量注意:a)右邊的表達(dá)式可以是變量、信號(hào)或者字符;可以是常數(shù)、算術(shù)運(yùn)算表達(dá)式、邏輯運(yùn)算表達(dá)式或者關(guān)系運(yùn)算表達(dá)式;b)代入符號(hào)兩邊的量、類型和位長(zhǎng)應(yīng)該是一致的。2)信號(hào)賦值可以帶延時(shí)條件,VHDL有2種延遲模式:
transport:傳輸延遲inertial:
慣性延遲(默認(rèn))慣性延時(shí):用于器件延時(shí)行為的建模。如果不特別指明延時(shí)類型,那就默認(rèn)采用了慣性延時(shí)。它可以防止信號(hào)的干擾。只在仿真時(shí)有意義,邏輯綜合時(shí)被忽略,必須將慣性延時(shí)去掉,才可實(shí)現(xiàn)邏輯綜合傳輸延時(shí):用于對(duì)引線的延時(shí)的建模。表示連線的延時(shí),必須在VHDL中指定。不管多么小的脈沖都按指定的延時(shí)值傳給輸出。常用于總線延時(shí)、連線延時(shí)和ASIC的通道延時(shí)建模。用于仿真。慣性延時(shí)b<=
a
AFTER
20
ns;傳輸延時(shí)b<=
TRANSPORT
a
AFTER
20
ns;aa0
10
20
30
40bba0
10
20
30
40b信號(hào)只能在進(jìn)程外部定義,不能在進(jìn)程或子程序?qū)嶓w中定義。端口信號(hào)。預(yù)定義屬性:P90表4-2常用的屬性:事件發(fā)生屬性(
Event)格式:
目的變量:=表達(dá)式右邊的表達(dá)式可以是變量、信號(hào)或者字符;可以是常數(shù)、算術(shù)運(yùn)算表達(dá)式、邏輯運(yùn)算表達(dá)式或者關(guān)系運(yùn)算表達(dá)式;無延遲特性,直接賦值變量為局部變量不能在實(shí)體和結(jié)構(gòu)體
中定義只能在進(jìn)程
或子程序中定義有三種書寫形式:1)單條件控制:If
條件then順序處理語句;End
if;2)兩條件控制:If
條件then順序處理語句;Else順序處理語句;End
if;3)多條件控制:If
條件then順序處理語句;Elsif
條件then順序處理語句;∶Elsif
條件then順序處理語句;Else順序處理語句;End
if;典型應(yīng)用:選擇器、比較器及譯設(shè)計(jì)等凡是可以進(jìn)行邏輯控制的電路。LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
dff1
ISENDdff1;ARCHITECTURE
rtl
OF
dff1
ISBEGINEnd
rtl;PORT(d,clk:IN
STD_LOGIC;q:OUT
STD_LOGIC);;Process(clk)Beginif(clk’event
and
clk=‘1’)
thenq<=d;End
if;Endprocess;單條件控制if語句門閂控制LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;END
mux2;ARCHITECTURE
behav
OF
mux2
ISBEGINEnd
rtl;PORT(a,b,sel:IN
STD_LOGIC;c:OUT
STD_LOGIC);Process(a,b,sel)Beginif(sel=‘1’)
thenc<=a;elsec<=b;End
if;End
process;兩條件控制if語句二選擇控制LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
mux4
ISEND
mux4;ARCHITECTURE
behav
OF
mux4
ISBEGINEndrtl;多條件控制if語句多選擇控制PORT(input:IN
STD_LOGIC_VECTOR(3
DOWNTO
0);sel:IN
STD_LOGIC_VECTOR(1
DOWNTO0);y:OUT
STD_LOGIC);Process(input,sel)Beginif
(sel=“00”)
then
y<=input(0);elsif(sel=“01”)
then
y<=input(1);elsif(sel=“10”)
then
y<=input(2);y<=input(3);elseend
if;End
process;LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;BEGINY<=cnt;End
rtl;USE
IEEE.STD_LOGIC_unsigned.ALL;ENTITY
counter
ISPORT(clk:IN
STD_LOGIC;y:IN
STD_LOGIC_VECTOR(3
DOWNTO
0));END
counter;ARCHITECTURE
behav
OF
counter
ISSignal
cnt:std_logic_vector(3
doento
0);Process(clk)Beginif(clk’event
and
clk=‘1’)
thenif(cnt=“1111”)then
cnt<=“0000”;elsecnt<=cnt+’1’;Endif;End
if;End
process;注意:嵌套的if語句中,有幾個(gè)if就對(duì)應(yīng)幾個(gè)end
if;位及位失量的算術(shù)運(yùn)算Case語句一般用于描述總線、編碼和譯碼的行為。Case語句和if語句功能類似,case語句的可讀性強(qiáng)一些,if語句的可邏輯綜合性比case語句好。書寫格式:CASE
表達(dá)式ISWHEN
條件表達(dá)式1=>順序處理語句;WH
EN
條件表達(dá)式2=>順序處理語句;∶END
CASE;WHEN
值=>順序處理語句;WHEN
值1|值2|值3|…|值n=>順序處理語句;WHEN值1
TO
值n=>順序處理語句;
WHEN
OTHERS=>順序處理語句;End
case;值1、值2…值n是或的關(guān)系值1到值n中的任何一個(gè)所有其它可能的取值注意:1、所有when條件表達(dá)式各條件沒有優(yōu)先級(jí),OTHERS必須放在最后一個(gè)分支上;2、必須將表達(dá)式的所有取值都用條件表達(dá)式列出,覆蓋全集;3、條件表達(dá)式的值只能出現(xiàn)一次,否則也是語法錯(cuò)誤;4、條件表達(dá)式中不能出現(xiàn)多個(gè)狀態(tài)值混合。When
“
01”
--不允許Case語句中條件表達(dá)式有四種表示形式:signal
C:
Integer
range
1
to
20;signal
Out1:
integer
range
0
to
3;process
(
C
)case
Ciswhen
1
=>when
2
|
4
|
8=>Out1
<=
0;Out1
<=1;when
3
|
5
to
7|
10
to
15
=>
Out1
<=
2;when
others
=> Out1<=3;--9,
16
to20end
case;endprocessEnd
mux4_behav;LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
mux4
ISEND
mux4;ARCHITECTURE
mux4_behav
OF
mux4
ISBEGINPORT(a,b,i0,i1,i2,i3:IN
STD_LOGIC;q:OUT
STD_LOGIC);B:Process(a,b,i0,i1,i2,i3)Varible sel
:integer
range
0
to
3;Beginsel:=0;if(a=‘1’)
thensel:=sel+1;End
if;if(b=‘1’)
thensel:=sel+2;End
if;Case
sel
isWhen0=>q<=i0;When
1=>q<=i1;When
2=>q<=i2;When
3=>q<=i3;End
case;End
process;i0qa
bi1i2i3MUX4ARCHITECTURE
ART
OF MUX4
ISSIGNAL S
:STD_LOGIC_VECTOR(1
DOWNTO
0);BEGINS<=b&
a;PROCESS(a,b,i0,i1,i2,i3)BEGINCASE
S
ISWHEN
"00"=>q<=i0;WHEN
"01"=>q<=i1;WHEN
"10"=>q<=i2;WHEN
"11"=>q<=i3;WHEN
OTHERS
=>q<='X';END
CASE;ENDPROCESS;END
ART;LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
decode 3to8
ISEND
rtl;PORT(a,b,c,G1,G2A,G2B,SEL:IN
STD_LOGIC;q:OUT
STD_LOGIC_VECTOR(7
DOWNTO
0));indata<=a&b&c;Process(indata,G1,G2A,G2B)BeginIf(G1=‘1’and
G2A=‘1’and
Case
indata
isWhen”000”=>y<=“11111110”;When”001”=>y<=“11111101”;∶END
decode_3to8;ARCHITECTURE
rtl
OF
decode_3to8
ISSignal
indata:
STD_LOGIC_VECTOR(2
DOWNTO
0);BEGINWhen”111”=>y<=“01111111”;When
others=>
y<=“
XX”;End
case;Else
y<=“11111111”;Endif;End
process;LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
encode
ISEND
encode;ARCHITECTURE
encode8_3
OF
encode
ISBEGINENDrtl;PORT(input:IN
STD_LOGIC_VECTOR(7
DOWNTO
0);y:OUT
STD_LOGIC_VECTOR(2
DOWNTO
0));process(input)begincase
input
isWhen”01111111”=>y<=“111”;When”10111111”=>y<=“110”;∶when”11111110”=>y<=“000”;”;when
others=>y<=“End
case;End
process;WITH
input
SELECTy<=“111”WHEN
“01111111”,”110”WHEN
“10111111”,∶
,“000”WHEN
“11111110”,“
”when
others;輸入輸出b7b6b5b4b3b2b1b0y2y1y0-------0111------01110-----011101----0111100---01111011--011111010-011111100101111111000必須用if語句描述用if語句描述還是用case語句描述?END
rtl;LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
prioprtyencode
ISPORT(input:IN
STD_LOGIC_VECTOR(7
DOWNTO
0);y:OUT
STD_LOGIC_VECTOR(2
DOWNTO
0));END
prioprtyencode;ARCHITECTURE
rtl
OF
prioprtyencode
ISBEGINprocess(input)beginif
(input(0)=‘0’)theny<=“111”;elsif(input(1)=‘0’)theny<=“110”;:elsif(input(6)=‘0’)theny<=“001”;ElseY<=“000”;End
if;End
process;二進(jìn)制碼BCD碼000000000000100001001000010001100011010000100010100101011000110011100111100001000100101001101010000101110001110010010110110011111010100111110101其他ZZZZZLIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
bin2bcd
ISEND
bin2bcd
;ARCHITECTURE
rtl
OF
bin2bcdISBEGINEND
rtl;PORT(din:IN
STD_LOGIC_VECTOR(3
DOWNTO
0);bcd:OUT
STD_LOGIC_VECTOR(4
DOWNTO
0));Process(din)BeginCase
din
isWhen”0000”=>bcd<=“00000”;When”0001”=>
bcd
<=“00001”;∶When”1001”=>
bcd
<=“01001”;When”1010”=>
bcd
<=“10000”;When”1011”=>
bcd
<=“10001”;When”1100”=>
bcd
<=“10010”;∶∶When”1111”=>y<=“10101”;When
others=>y<=“ZZZZZ”;End
case;End
process;1、if語句中多條件是順序執(zhí)行的,順序顛倒可能使邏輯綜合功能變化。case語句中多條件是并列處理的,前后位置顛倒沒關(guān)系。2、if語句的條件個(gè)數(shù)隨需要而定。case語句中條件必須包含條件表達(dá)式的所有
取值。end
loop;順序處理語句;循環(huán)變量的取值范圍,循環(huán)變量有幾個(gè)取值,順續(xù)處理語句就重復(fù)執(zhí)行幾次。每循環(huán)一次則改變一次循環(huán)變量:局部的、臨時(shí)的,不需要事先定義,不能作為被賦值對(duì)象;每一次的改變都是自動(dòng)完成。Loop語句是循環(huán)語句,它和其他高級(jí)語言中的循環(huán)語句一樣。使一組順序描述語句被循環(huán)執(zhí)行。Loop語句有兩種方式:for-------loop方式、while-------loop方式。注意:for---loop語句可以實(shí)現(xiàn)邏輯綜合,while—loop語句 不能實(shí)現(xiàn)邏輯綜合;一般編程用for---loop語句。Loop語句可以互相嵌套。1、for-------loop方式:書寫格式:[標(biāo)號(hào):]for
循環(huán)變量in
離散范圍loopLIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
parity_check
ISEND
parity_check
;ARCHITECTURE
behave
OF
parity_check
ISBEGINEND
behave;cbc:
PROCESS(a)VARIABLE
tmp:
STD_LOGIC;BEGINtmp:='0';FOR
i
IN
0
TO
7
LOOPtmp:=tmp
XOR
a(i);END
LOOP;y<=tmp;END
PROCESS
cbc;PORT(a
:
IN
STD_LOGIC_VECTOR(7
DOWNTO
0);y :
OUT
STD_LOGIC);實(shí)現(xiàn)當(dāng)輸入8位數(shù)據(jù)有偶數(shù)個(gè)‘0’和‘1’時(shí)y<=‘0’,否則y<=‘1’不能定義成信號(hào)LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;USE
IEEE.STD_LOGIC_unsigned.ALL;ENTITY
select
ISPORT(d:
IN
STD_LOGIC_VECTOR(2DOWNTO
0);q
:
out
STD_LOGIC_VECTOR(1
DOWNTO
0));END
select
;ARCHITECTURE
behave
OF
select
ISBEGINPROCESS(d)variable
cnt:
STD_LOGIC_VECTOR(1
DOWNTO
0);BEGINcnt:=“00";FOR
i
IN
d’range
LOOP1’then
不能定義成信號(hào)t+’1’;END
LOOP;q<=cnt;ENDPROCESS;END
behave;位及位失量的算術(shù)運(yùn)算書寫格式:[標(biāo)號(hào)]:WHILE
條件LOOP順序處理語句;END
LOOP[標(biāo)號(hào)];執(zhí)行過程:如果條件為真,則執(zhí)行循環(huán)語句中的順序執(zhí)行語句;ARCHITECTUREbehave
OF
select
ISBEGINcbc:
PROCESS(a)VARIABLE
tmp:
STD_LOGIC;BEGINtmp:='0';WHILE
i
<8
LOOPtmp:=tmp
XOR
a(i);END
LOOP;y<=tmp;END
PROCESS
cbc;END
behave;i:=0;i:=i+1;使用while---loop時(shí)要注意:循環(huán)變量必須定義。要在循環(huán)體外對(duì)循環(huán)變量i賦初值;在循環(huán)體內(nèi)實(shí)現(xiàn)循環(huán)控制變量的遞增;variable
i:integer
range
0
to
7;loop1
:
for
i
in
10
downto
1
looploop2
:for
jin
0
to
iloopmatrix(i,j)
:=i*j
+1;end
loop
loop2;end
loop
loop1;Next語句與loop語句一起使用,實(shí)現(xiàn)循環(huán)的 控制。有條件地或無條件地終止本次循環(huán)并開始下一次循環(huán)。next[標(biāo)號(hào)][when
條件];1、nextwhen條件;--則當(dāng)when條件為真,執(zhí)行到該條語句處則跳出本次循環(huán),從loop語句的起始位置重新開始下一次的循環(huán)。2、next;--則執(zhí)行到該條語句就立即跳出本次循環(huán)。3、next
標(biāo)號(hào);
--則執(zhí)行到該條語句就立即跳出本次循環(huán)跳轉(zhuǎn)到標(biāo)號(hào)指定的循環(huán)語句執(zhí)行。4、next
標(biāo)號(hào)when
條件;當(dāng)when條件為真,執(zhí)行到該條語句處則跳出本次循環(huán),到標(biāo)號(hào)指定的循環(huán)語句執(zhí)行。當(dāng)條件滿足時(shí),跳出循環(huán)到標(biāo)號(hào)指定的loop語句執(zhí)行跳出循環(huán)的條件語法:PROCESS
(a,b)CONSTANT
max_limit:INTEGER:=255;BEGINFOR
i
IN
0
TO
max_limit
LOOPIF
(done(i)=TRUE)
THENNEXT;ELSE
done(i)<=TRUE;END
IF;q(i)<=a(i)
AND
b(i);END
LOOP;END
PROCESS;L1:WHILE
i<10
LOOPL2:WHILE
j<20
LOOP∶NEXT
L1
WHEN
i=j;∶ENDLOOP
L2;END
LOOP
L1;EXIT[標(biāo)號(hào)][WHEN條件];1、exit;--執(zhí)行該語句,程序從當(dāng)前所屬的loop語句中退出。2、exit
標(biāo)號(hào);--執(zhí)行該語句,程序退出標(biāo)號(hào)標(biāo)注的loop語句。3、EXIT
WHEN條件;--當(dāng)條件為真時(shí)執(zhí)行該語句,程序退出當(dāng)前的loop語句,執(zhí)行l(wèi)oop語句下面的語句。4、EXIT標(biāo)號(hào)WHEN條件;--當(dāng)條件為真時(shí)執(zhí)行該語句,程序退出標(biāo)號(hào)標(biāo)注的語句的loop語句。區(qū)別:
NEXT語句是跳向LOOP
語句的起始點(diǎn);EXIT語句則是跳向LOOP語句的終點(diǎn)。格式:PROCESS(a)VARIABLE
int_a:INTEGER;BEGINint_a:=a;FOR
i
IN
0
TO
max_limit
LOOPIF
(int_a
<=0)
THENEXIT;ELSEint_a:=
int_a-1;q(i)<=3.1416/REAL’(a*i);END
IF;END
LOOP;y<=q;END
PROCESS;過程調(diào)用過程名(參數(shù)關(guān)聯(lián)表);空語句──null
語句(無任何動(dòng)作)case
x
iswhen
1
|
0=>
null;when
others
=>
x
:=
x
mod
2;end
case;Ut
Eq
jIXd
Ut
Eq
jIXd并發(fā)處理語句用在
architecture和block中,不能用在進(jìn)程、子程序中。所有并發(fā)處理語句都可以加標(biāo)號(hào)。每一個(gè)簡(jiǎn)單并發(fā)處理語句等價(jià)于一個(gè)進(jìn)程。并發(fā)處理語句:行為語句或結(jié)構(gòu)語句行為語句進(jìn)程語句process簡(jiǎn)單并行語句結(jié)構(gòu)語句塊語句block元件例化語句生成語句generate進(jìn)程語句(process)塊語句(block)并發(fā)信號(hào)賦值語句條件信號(hào)賦值語句選擇信號(hào)賦值語句并發(fā)過程賦值語句元件例化語句生成語句第三部分構(gòu)造體子結(jié)構(gòu)描述中涉及用于構(gòu)造體的描述方法第三種結(jié)構(gòu)描述中如果用于process語句和子程序描述語句中為順序描述語句,否則為并發(fā)處理語句在子程序結(jié)構(gòu)過程語句的描述與調(diào)用中講為的最基它是一種并發(fā)描述語句,描述硬件系統(tǒng)并本語句。說明部分;begin語句格式:[進(jìn)程名]:process
(敏感信號(hào)表)process語句使用的類型、、、屬性常量、變量、子程序子程序體、屬性指定等注意:不能有信號(hào)順序處理語句;順序描述語句;end
process
[進(jìn)程名];ENTITY
muxISPORT(d0,d1,sel:in
bit;q:out
bit);END
mux;Architecture
dataflow
of
muxisBeginprocess(d0,d1,sel)variable
tmp1,tmp2,tmp3:bit;begintmp1:=d0
and
sel;tmp2:=d1
and
(not
sel);tmp3:=tmp1
or
tmp2;q<=tmp3;end
process;End
dataflow;敏感信號(hào)變量說明語句順序處理語句ENTITY
dlock
ISPORT(d,clk:in
bit;q,nq:out
bit);END
mux;Architecture
dataflow
of
dlock
isBeginprocess(clk)beginif
clk=‘1’
thenq<=d;nq<=not
d;end
if;endprocess;Enddataflow;敏感信號(hào)順序執(zhí)行語句Process語句的敏感表中敏感信號(hào)與process語句描述硬件電路的輸入信號(hào)一一對(duì)應(yīng)。任何一個(gè)敏感信號(hào)發(fā)生變化都將啟動(dòng)process語句,從上到下順序執(zhí)行。當(dāng)process語句執(zhí)行完了,回到process語句的開頭,等待下一次的變化。Process語句可以不帶敏感表,但是要在end
process;前加入wait
on
信號(hào)1,信號(hào)2,…;process
(A,
B)beginOutput
<=
A
or
B;
=end
process;processbeginOutput
<=
A
or
B;wait
on
A,
B;end
process;注意:process語句敏感表和wait語句只能有一個(gè)。一個(gè)構(gòu)造體內(nèi)如果有多個(gè)process語句存在,它們并行同步執(zhí)行,同時(shí)還可以進(jìn)行通信。多個(gè)process語句通信是通過在構(gòu)造體中定義的信號(hào)來實(shí)現(xiàn)。Entity
isPort(event_a:in
bit);End
;isArchitecture
catch_ball
ofSignal
to_a,to_b:bit:=‘0’;beginA:process(event_a,to_a)beginIf(event_a’event
and
event_a=‘1’)
or(to_a’event
and
to_a=‘1’)thento_b<=‘1’
after
20
ns;‘0’
after
30
ns;End
if;End
process;B:process(to_b)beginIf((to_b’event
and
to_b=‘1’)thento_a<=‘1’
after
10
ns;‘0’
after
20
ns;End
if;End
process;End
catch_ball;10nsEvent_aTo_b 20nsTo_a目的信號(hào)量<=表達(dá)式1
WHEN條件1
ELSE表達(dá)式2 WHEN
條件2
ELSE∶表達(dá)式n-1
WHEN
條件n-1
ELSE表達(dá)式n;注意:1、只有最后一個(gè)表達(dá)式后邊才有“;”。2、最后一個(gè)表達(dá)式可以無條件或用when
others,表示其它列舉出的條件都不滿足時(shí),將該表達(dá)式的值給目的信號(hào)量。3、條件有優(yōu)先權(quán)之分,由條件1
順序往下執(zhí)行。4、與if語句類似,只是if語句只能用于process或子程序描述中。目的信號(hào)量<=表達(dá)式1 WHEN
條件1
ELSE表達(dá)式2 WHEN
條件2
ELSE∶表達(dá)式n-1 WHEN
條件n-1
ELSE表達(dá)式n;process(敏感信號(hào)表)beginif
條件1
then信號(hào)<=表達(dá)式1;:elsif條件n-1 then信號(hào)
<=表達(dá)式n-1
;else信號(hào)<=表達(dá)式n;end
if;end
process;注意:IF語句替換條件信號(hào)賦值語句時(shí)必須用在PROCESS語句中LIBRARY
IEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITY
mux4
ISPORT(i0,i1,i2,i3,a,b:IN
STD_LOGIC;q:OUT
STD_LOGIC);END
mux4;ARCHITECTURE
rtl
OF
mux4
ISSIGNAL
sel:
STD_LOGIC_VECTOR(1
DOWNTO
0);BEGINsel<=b
&
a;q<=
i0
WHENsel="00"
ELSEi1
WHEN
sel="01"
ELSEi2
WHEN
sel="10"
ELSEi3
WHEN
sel="11"
ELSE‘X’;END
rtl;LIBRARY
IEEE;USE
IEEE.STD_LOGIC_1164.ALL;ENTITY
decoder
ISPORT(SEL:IN
STD_LOGIC_VECTOR(2
DOWNTO
0);q:OUT
STD_LOGIC_VECTOR(7
DOWNTO
0));END
decoder;ARCHITECTURE
decoder3_8
OF
decoder
ISBEGINq<=“11111110”
WHEN
sel=“000"
ELSE“11111101”
WHENsel=“001"ELSE∶“01111111”
WHEN
sel=“111"
ELSE“11111111”
;ENDrtl;process(input)beginif
sel=”000”then
q<=“11111110”;elsif
sel=”001”thenq<=“11111101”;∶elsif
sel=”111”then
q<=“01111111”;else
q<=“11111111”;End
if;End
process;WITH
條件表達(dá)式SELECT目的信號(hào)量<=表達(dá)式1
WHEN
條件1,表達(dá)式2
WHEN
條件2,∶表達(dá)式n
WHEN
條件n;注意:1、條件無優(yōu)先權(quán)之分;2、最后一個(gè)表達(dá)式必須有條件;3、最后一個(gè)條件后加“;”,其它條件后加“,”;4、與順序語句中的CASE語句類似;5、必須把條件表達(dá)式的所有取值都列出來。格式:process(敏感信號(hào)表)begincase
表達(dá)式iswhen
分支1=>信號(hào)
<=
選擇項(xiàng)
波形
1;::when
分支n=>信號(hào)
<=
選擇項(xiàng)
波形
n;end
case;end
process;WITH
條件表達(dá)式SELECT目的信號(hào)量<=表達(dá)式1
WHEN
條件1,表達(dá)式2
WHEN
條件2,∶表達(dá)式n
WHEN
條件n;注意:case語句替換條件信號(hào)賦值語句時(shí)必須用在PROCESS語句中LIBRARY
IEEE;USEIEEE.STD_LOGIC_1164.ALL;ENTITY
mux4ISPORT(i0,i1,i2,i3,a,b:IN
STD_LOGIC;q:OUT
STD_LOGIC);END
mux4;ARCHITECTURE
behav
OF
mux4
ISSIGNAL
sel:
INTEGER
range
0
to
3;BEGINWITHsel
SELECTq<=i0
WHEN
0,i1
WHEN1,i2
WHEN
2,‘X’
when
others;sel<=0
WHEN
a='0'
AND
b='0'ELSEWHEN
a='1'
AND
b='0'
ELSEWHEN
a='0'
AND
b='1'
ELSEWHEN
a='1'
AND
b='1‘;END
behav;選擇信號(hào)
i3
WHEN3,賦值語句條件信號(hào)賦值語句注意:兩條信號(hào)賦值語句執(zhí)行無先后形式與順序調(diào)用語句相同可加標(biāo)號(hào)。等價(jià)于一個(gè)進(jìn)程,敏感信號(hào)為輸入?yún)?shù)的信號(hào)。輸入輸出參數(shù)中不能有變量。元件例化語句與元件(定義)說明語句一起使用稱為元件例化,用于實(shí)現(xiàn)構(gòu)造體說明的結(jié)構(gòu)描述。次的設(shè)計(jì)模塊調(diào)用低層次結(jié)構(gòu)描述:多層次的設(shè)計(jì)中,的設(shè)計(jì)模塊。元件例化由兩部分組成:元件定義(說明)語句:將一個(gè)現(xiàn)成的設(shè)計(jì)實(shí)體定義為一個(gè)元件的語句元件例化語句:是此元件與當(dāng)前設(shè)計(jì)實(shí)體中的連接說明功能:指定構(gòu)造體中從庫中調(diào)用的是哪一個(gè)編譯過的邏輯描述模塊(設(shè)計(jì)實(shí)體),或基本門電路。語法:component
元件名generic(說明);port(說明);endcomponent;該元件類屬參數(shù)的說明元件端口說明在調(diào)用該元件的設(shè)計(jì)實(shí)體中構(gòu)造體的說明(定義)語句部分說明。同該元件設(shè)計(jì)實(shí)體的實(shí)體說明部分功能:將調(diào)用元件(模塊)的端口和類屬參數(shù)它的設(shè)計(jì)實(shí)體的相關(guān)參數(shù)和信號(hào)。成調(diào)用標(biāo)號(hào):元件名
generic
map(類屬參數(shù)值
)port
map
(端口信號(hào)
);方式有兩種:位置
和名稱只列出當(dāng)前系統(tǒng)中的連接實(shí)體端口名或定義的信號(hào)名,Port
map()中指定的實(shí)際信號(hào)的書寫順序與元件端口說明中的信號(hào)書寫順序一一對(duì)應(yīng)。語法:元件端口名和連接符號(hào)“=>”必須存在的。在PORTMAP句中的位置可以是任意的。1.位置 :port
map
(X,
Y,Out1,
Out2)其中X,Y,Out1,
Out2分別為調(diào)用元件設(shè)計(jì)實(shí)體中定義的端口或信號(hào)。2.名稱
:port
map
(a=>X, c=>
Out1,
b=>Y,
d=>Out2)其中=>前面為component(元件說明語句)中指定的端口信號(hào),=>后面為調(diào)用元件設(shè)計(jì)實(shí)體中定義的端口或信號(hào)。元件and2的實(shí)體說明如下:ENTITY
AND2
ISPort(a,b:inbit;c:outbit);END
AND2;U2:and2
port
m
el,d1,ab);U2:and2
port
map(a=>nsel,b=>d1,c=>ab);U2的nsel對(duì)應(yīng)a,d1對(duì)應(yīng)b,ab對(duì)應(yīng)c位置方式名稱方式LIBRARY
ieee;use
ieee.std_logic_1164.all;entity
dff1
isport(d,clk:
instd_logic;q:
outstd_logic);end
dff1;architecture
dff1_behave
of
dff1
isbeginprocess(clk)beginif
(clk'event
and
clk='1')
thenq<=d;endif;endprocess;enddff1_behave;dqdqdqdqabclk
clk
clk
clkclk該寄存器由4個(gè)D觸發(fā)器串聯(lián)相接組成。用結(jié)構(gòu)描述方式完成該寄存器的描述,就要把D觸發(fā)器作為元件來調(diào)用,且要調(diào)用4次。首先要完成D觸發(fā)器的VHDL描述。單個(gè)D觸發(fā)器的VHDL語句描述如下:LIBRARY
ieee;use
ieee.std_logic_1164.all;entity
shift
isend
shift;architecture
struct
of
shift
isbeginComponent
dff1Port(d,clk:in
std_logic;q:
outstd_logic);End
component;Signal
z:std_logic_vector(0
to2);D1:dff1
port
map(a,clk,z(0));D2:dff1
port
map(z(0),clk,z(1));D3:dff1
port
map(z(1),clk,z(2));D4:dff1
port
map(z(2),clk,b);port(a,clk:
in
std_logic;b:
out
std_logic);endstruct;元件說明語句元件例化語句dqdclk
clkqdclkqdclkqaclkbZ(0)Z(1)Z(2)enclkcoclrcountslenclkcoclrshcountenableresetclk該計(jì)數(shù)器有兩個(gè)計(jì)數(shù)器串接組成,其中一個(gè)是十進(jìn)制計(jì)數(shù)器,一個(gè)是六進(jìn)制計(jì)數(shù)器;這兩個(gè)計(jì)數(shù)器功能一樣,只是最大計(jì)數(shù)值不同;可以設(shè)計(jì)一個(gè)最大計(jì)數(shù)值可變的計(jì)數(shù)器----通用計(jì)數(shù)器所謂通用就是該計(jì)數(shù)器作為元件被調(diào)用時(shí),其最大計(jì)數(shù)值可修改。定義通用計(jì)數(shù)器時(shí)將最大計(jì)數(shù)值定義為類屬參數(shù)即可。en
coclk
clrcountslresetenclkcoclrshcountenableclkLIBRARY
IEEE;USEIEEE.STD_LOGIC_1164.ALL;USE
IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY
counter
ISGENERIC(
count_value:INTEGER:=9);PORT
(clk,clr,en:
IN
STD_LOGIC;co:
OUT
STD_LOGIC;count:OUT
INTEGER
RANGE
0TO
count_value);END
counter;ARCHITECTURE
a
OF
counter
ISSIGNAL
cnt:
INTEGER
RANGE
0
TOcount_value;BEGINPROCESS
(clk,clr)BEGINIF
clr
=
'1'
THENcnt
<=0;ELSIF
(clk'EVENT
ANDclk
=
'1')THENIF
en
=
'1'
THENIF
cnt
=
count_value
THENcnt
<=
0;ELSEcnt
<=
cnt
+’
1’;END
IF;END
IF;END
IF;END
PROCESS;co<=’1’
WHEN
cnt=count_valueELSE
‘0’;count
<=
cnt;END
a;LIBRARY
IEEE;USE
IEEE.
STD_LOGIC_1164.ALL;USE
IEEE.
STD_LOGIC_UNSIGNED.ALL;ENTITY
timer
ISPORT(clk
,
reset
,
enable:
IN
STD_LOGIC;sh:
OUT
INTEGERRANGE
0
to5;sl:
OUT
INTEGER
RANGE
0
to
9;);ENDtimer;ARCHITECTURE
stru
OF
timer
ISSIGNAL
sh_en:
STD_LOGIC;COMPONENT
counter
ISGENERIC(
count_value:INTEGER:=9);PORT
(clk
,
clr
,
en:
IN
STD_LOGIC;co:
OUT
STD_LOGIC;count:
OUT
INTEGER
RANGE
0TO
count_value);ENDCOMPONENT;BEGIN類屬參數(shù)CNT1S:
counterGENERIC
MAP(
count_value
=>
9)PORT
MAP(clk=>clk,clr=>reset,en=>enable,co=>
sh_en,count=>sl);CNT10S:
counterGENERIC
MAP
(
count_value
=>
5)PORT
MAP
(clk=>clk,clr=>reset,en=>sh_en,
count=>sh);END
stru;enclkcoclrcountslenclkclrcoenableresetclkshSh_en
countLIBRARY
IEEE;USE
IEEE.
STD_LOGIC
_1164.ALL;USE
IEEE.
STD_LOGIC_UNSIGNED.ALL;ENTITY
timer
ISPORT(clk
,
reset
,
enable:
IN
STD_LOGIC;s:
OUT
INTEGER
RANGE
0to
59;min:
OUT
INTEGER
RANGE0
to
59;h
:
OUT
INTEGER
RANGE
0
to11);ENDtimer;ARCHITECTURE
stru
OF
timerISSIGNAL
a1,a2,a3:
STD_LOGIC;COMPONENT
counter
ISGENERIC(
count_value:INTEGER:=9);PORT
(clk
,
clr
,
en:
IN
STD_LOGIC;co:
OUT
STD_LOGIC;count:
OUT
INTEGERRANGE
0TO
count_value);ENDCOMPONENT;BEGINCNTS:
counterGENERIC
MAP(
count_value
=>59)PORT
MAP(clk=>clk,clr=>reset,en=>enable,co=>
a1,count=>s);CNTmin:
counterGENERIC
MAP
(
count_value
=>
59)PORT
MAP
(clk=>clk,clr=>reset,en=>a1,co=>a2,count=>min);CNTh:
counterGENERIC
MAP
(count_value
=>
11)PORT
MAP
(clk=>clk,clr=>reset,en=>a3,
count=>h);a3<=a1
and
a2;END
stru;hminsenclkcoclrcountresetenableclka3
countenclkcoclrcounta2a1&enclk
clr要求:最大計(jì)時(shí)11點(diǎn)59分59秒用于產(chǎn)生多個(gè)相同的結(jié)構(gòu),主要用在生成 器陣列和寄存器陣列。for……generate語句:[標(biāo)號(hào):]for
變量in
離散范圍generate并發(fā)處理語句;end
generate[標(biāo)號(hào)];if……generate語句:[標(biāo)號(hào):]if
條件
generate并發(fā)處理語句;end
generate[標(biāo)號(hào)];書寫格式:兩種方式:for……generate
和if……generate方式。LIBRARY
ieee;use
ieee.std_logic_1164.all;entity
shift
isport(a,clk:
in
std_logic;b:
out
std_logic);endshift;architecture
struct
of
shift
isComponent
dff1Port(d,clk:in
std_logic;q:
out
std_logic);End
component;Signal
z:std_logic_vector(0
to
4);beginz(0)<=a;For
i
in
0
to
3
generateDx:dff1
port
map(z(i),clk,z(i+1));End
generate;b<=z(4);end
struct;z(0)<=a;D1:dff1
port
map(z(0),clk,z(1));D2:dff1
port
map(z(1),clk,z(2));D3:dff1
port
map(z(2),clk,z(3));D4:dff1
port
map(z(3),clk,z(4));b<=z(4);qd
dclk
clkaclkq
q
bZ(0)
Z(1)d
q
dclk
clkZ(2)
Z(3)
Z(4)beginFor
i
in
0
to
3
generateIf
i=0
generateDx:dff1
port
map(a,clk,z(i+1));End
generate;If
(i=/0)and(i=/3)
generateDx:dff1
port
map(z(i),clk,z(i+1));End
generate;If
i=3
generateDx:dff1
port
map(z(i),clk,b);End
generate;end
struct;LIBRARY
ieee;use
ieee.std_logic_1164.all;entity
shift
isport(a,clk:
in
std_logic;b:
out
std_logic);end
shift;architecture
struct
o
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度煤炭運(yùn)輸項(xiàng)目融資合同4篇
- 二零二五年度二人合資開設(shè)兒童教育機(jī)構(gòu)合同3篇
- 2024銅門制安材料供應(yīng)合同
- 2025年度智慧城市道路建設(shè)一體化服務(wù)合同3篇
- 二零二五版城市綠化帶設(shè)計(jì)與施工合同4篇
- 2025年度科研機(jī)構(gòu)場(chǎng)地租賃與科研合作合同12篇
- 二零二五年文化娛樂股權(quán)三方轉(zhuǎn)讓及知識(shí)產(chǎn)權(quán)保護(hù)協(xié)議2篇
- 2025年度公共停車場(chǎng)場(chǎng)地?zé)o償使用授權(quán)合同4篇
- 二零二五年草種育種項(xiàng)目訂貨與技術(shù)支持合同3篇
- 二零二五年影視公司股份收購協(xié)議書范本3篇
- 215kWh工商業(yè)液冷儲(chǔ)能電池一體柜用戶手冊(cè)
- 場(chǎng)地平整施工組織設(shè)計(jì)-(3)模板
- 交通設(shè)施設(shè)備供貨及技術(shù)支持方案
- 美容美發(fā)店火災(zāi)應(yīng)急預(yù)案
- 餐車移動(dòng)食材配送方案
- 項(xiàng)目工程師年終總結(jié)課件
- 一年級(jí)口算練習(xí)題大全(可直接打印A4)
- 電動(dòng)車棚消防應(yīng)急預(yù)案
- 人力資源戰(zhàn)略規(guī)劃地圖
- 2023年河南公務(wù)員考試申論試題(縣級(jí)卷)
- DB35T 2198-2024 工業(yè)園區(qū)低零碳創(chuàng)建評(píng)估準(zhǔn)則 福建省市監(jiān)局
評(píng)論
0/150
提交評(píng)論