通信課程-eda課件第四部分_第1頁
通信課程-eda課件第四部分_第2頁
通信課程-eda課件第四部分_第3頁
通信課程-eda課件第四部分_第4頁
通信課程-eda課件第四部分_第5頁
已閱讀5頁,還剩72頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論