下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
&&≥1&abcyinzindouteoutfoutVHDL语言的描述语句分为两种:顺序处理语句和并发处理语句。Ut
Eq
jIXd
Ut
Eq
jIXd4.1顺序处理语句4.2并发处理语句4.3其他语句和说明顺序处理语句描述系统的顺序行为,只能用在进程和子程序中,按照语句出现的顺序加以执行。可以实现算术运算、逻辑运算、信号和变量的赋值、子程序调用等。顺序处理语句的种类(10种):Wait
语句断言语句信号赋值语句变量赋值语句If语句Case语句Loop
语句Next语句Exit语句过程调用语句NULL语句常用顺序处理语句:信号赋值语句变量赋值语句If语句Case语句重点掌握其功能是将进程挂起或激活。Wait语句有5种形式:4种基本形式,1种多条件组合形式。4种基本形式:Wait
无限等待并行分布处理Wait
on
信号名;信号发生变化结束等待Wait
untill
布尔表达式;直到布尔表达式为真时结束等待。Wait
for
时间表达式;当时间表达式的时间到时结束等待例如:wait
on
A,
B;--敏感信号A
或B
变化时,结束等待,进程激活wait
until
Enable=‘1’;
--满足条件时,结束等待,进程激活wait
for
5
ns;--过5
ns后,结束等待,进程激活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变化,或到达5
nswait
until
En=‘1’for
5ns;--En=‘1’时,或到达5
nswait
on
nmi,
interrupt
until
(nmi
=ture)or(interrupt=true)
for
5
ns;该等待有三个条件:第一,信号nmi和interrupt
任何一个有变化第二,信号nmi和interrupt
任何一个为真(ture)第三,等待5
ns规则:(‘on’
且
‘until’
)
或
‘for’,多个条件至少包含一个信号量的值,否则为无限等待语句(
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;不能启动,为防止进若在程序中所设置的等待条件 不会满足,则进程就入无限等待情况,应做一些处理.加入超时等待项。例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;断言语超时等待项[v,v2
,v
3
,v4,v5
]。对电路本身的功能并信息,实现仿真和调试中的人机没有任何影响。不能实现逻辑综合。例如:Assert
(sendb=‘1’)Report
“sendb
timed
out
at
‘1’”Severity
error;type
Severity
_Level
is
(Note,
Warning,
Error,
Failure);当不满足条件时,输出文字串和错误级别信息。断言语句的执行,不会引起任何事件的发生,只是报告错误ASSERT
条件[REPORT
输出信息][SEVERITY
级别];格式:书写格式:目的信号量<=表达式;1)将右边表达式的值赋予左边的目的信号量注意:a)右边的表达式可以是变量、信号或者字符;可以是常数、算术运算表达式、逻辑运算表达式或者关系运算表达式;b)代入符号两边的量、类型和位长应该是一致的。2)信号赋值可以带延时条件,VHDL有2种延迟模式:
transport:传输延迟inertial:
惯性延迟(默认)惯性延时:用于器件延时行为的建模。如果不特别指明延时类型,那就默认采用了惯性延时。它可以防止信号的干扰。只在仿真时有意义,逻辑综合时被忽略,必须将惯性延时去掉,才可实现逻辑综合传输延时:用于对引线的延时的建模。表示连线的延时,必须在VHDL中指定。不管多么小的脉冲都按指定的延时值传给输出。常用于总线延时、连线延时和ASIC的通道延时建模。用于仿真。惯性延时b<=
a
AFTER
20
ns;传输延时b<=
TRANSPORT
a
AFTER
20
ns;aa0
10
20
30
40bba0
10
20
30
40b信号只能在进程外部定义,不能在进程或子程序实体中定义。端口信号。预定义属性:P90表4-2常用的属性:事件发生属性(
Event)格式:
目的变量:=表达式右边的表达式可以是变量、信号或者字符;可以是常数、算术运算表达式、逻辑运算表达式或者关系运算表达式;无延迟特性,直接赋值变量为局部变量不能在实体和结构体
中定义只能在进程
或子程序中定义有三种书写形式:1)单条件控制:If
条件then顺序处理语句;End
if;2)两条件控制:If
条件then顺序处理语句;Else顺序处理语句;End
if;3)多条件控制:If
条件then顺序处理语句;Elsif
条件then顺序处理语句;∶Elsif
条件then顺序处理语句;Else顺序处理语句;End
if;典型应用:选择器、比较器及译设计等凡是可以进行逻辑控制的电路。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语句中,有几个if就对应几个end
if;位及位失量的算术运算Case语句一般用于描述总线、编码和译码的行为。Case语句和if语句功能类似,case语句的可读性强一些,if语句的可逻辑综合性比case语句好。书写格式:CASE
表达式ISWHEN
条件表达式1=>顺序处理语句;WH
EN
条件表达式2=>顺序处理语句;∶END
CASE;WHEN
值=>顺序处理语句;WHEN
值1|值2|值3|…|值n=>顺序处理语句;WHEN值1
TO
值n=>顺序处理语句;
WHEN
OTHERS=>顺序处理语句;End
case;值1、值2…值n是或的关系值1到值n中的任何一个所有其它可能的取值注意:1、所有when条件表达式各条件没有优先级,OTHERS必须放在最后一个分支上;2、必须将表达式的所有取值都用条件表达式列出,覆盖全集;3、条件表达式的值只能出现一次,否则也是语法错误;4、条件表达式中不能出现多个状态值混合。When
“
01”
--不允许Case语句中条件表达式有四种表示形式: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;二进制码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语句中多条件是顺序执行的,顺序颠倒可能使逻辑综合功能变化。case语句中多条件是并列处理的,前后位置颠倒没关系。2、if语句的条件个数随需要而定。case语句中条件必须包含条件表达式的所有
取值。end
loop;顺序处理语句;循环变量的取值范围,循环变量有几个取值,顺续处理语句就重复执行几次。每循环一次则改变一次循环变量:局部的、临时的,不需要事先定义,不能作为被赋值对象;每一次的改变都是自动完成。Loop语句是循环语句,它和其他高级语言中的循环语句一样。使一组顺序描述语句被循环执行。Loop语句有两种方式:for-------loop方式、while-------loop方式。注意:for---loop语句可以实现逻辑综合,while—loop语句 不能实现逻辑综合;一般编程用for---loop语句。Loop语句可以互相嵌套。1、for-------loop方式:书写格式:[标号:]for
循环变量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);实现当输入8位数据有偶数个‘0’和‘1’时y<=‘0’,否则y<=‘1’不能定义成信号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
不能定义成信号t+’1’;END
LOOP;q<=cnt;ENDPROCESS;END
behave;位及位失量的算术运算书写格式:[标号]:WHILE
条件LOOP顺序处理语句;END
LOOP[标号];执行过程:如果条件为真,则执行循环语句中的顺序执行语句;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时要注意:循环变量必须定义。要在循环体外对循环变量i赋初值;在循环体内实现循环控制变量的递增;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语句一起使用,实现循环的 控制。有条件地或无条件地终止本次循环并开始下一次循环。next[标号][when
条件];1、nextwhen条件;--则当when条件为真,执行到该条语句处则跳出本次循环,从loop语句的起始位置重新开始下一次的循环。2、next;--则执行到该条语句就立即跳出本次循环。3、next
标号;
--则执行到该条语句就立即跳出本次循环跳转到标号指定的循环语句执行。4、next
标号when
条件;当when条件为真,执行到该条语句处则跳出本次循环,到标号指定的循环语句执行。当条件满足时,跳出循环到标号指定的loop语句执行跳出循环的条件语法: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[标号][WHEN条件];1、exit;--执行该语句,程序从当前所属的loop语句中退出。2、exit
标号;--执行该语句,程序退出标号标注的loop语句。3、EXIT
WHEN条件;--当条件为真时执行该语句,程序退出当前的loop语句,执行loop语句下面的语句。4、EXIT标号WHEN条件;--当条件为真时执行该语句,程序退出标号标注的语句的loop语句。区别:
NEXT语句是跳向LOOP
语句的起始点;EXIT语句则是跳向LOOP语句的终点。格式: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;过程调用过程名(参数关联表);空语句──null
语句(无任何动作)case
x
iswhen
1
|
0=>
null;when
others
=>
x
:=
x
mod
2;end
case;Ut
Eq
jIXd
Ut
Eq
jIXd并发处理语句用在
architecture和block中,不能用在进程、子程序中。所有并发处理语句都可以加标号。每一个简单并发处理语句等价于一个进程。并发处理语句:行为语句或结构语句行为语句进程语句process简单并行语句结构语句块语句block元件例化语句生成语句generate进程语句(process)块语句(block)并发信号赋值语句条件信号赋值语句选择信号赋值语句并发过程赋值语句元件例化语句生成语句第三部分构造体子结构描述中涉及用于构造体的描述方法第三种结构描述中如果用于process语句和子程序描述语句中为顺序描述语句,否则为并发处理语句在子程序结构过程语句的描述与调用中讲为的最基它是一种并发描述语句,描述硬件系统并本语句。说明部分;begin语句格式:[进程名]:process
(敏感信号表)process语句使用的类型、、、属性常量、变量、子程序子程序体、属性指定等注意:不能有信号顺序处理语句;顺序描述语句;end
process
[进程名];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;敏感信号变量说明语句顺序处理语句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;敏感信号顺序执行语句Process语句的敏感表中敏感信号与process语句描述硬件电路的输入信号一一对应。任何一个敏感信号发生变化都将启动process语句,从上到下顺序执行。当process语句执行完了,回到process语句的开头,等待下一次的变化。Process语句可以不带敏感表,但是要在end
process;前加入wait
on
信号1,信号2,…;process
(A,
B)beginOutput
<=
A
or
B;
=end
process;processbeginOutput
<=
A
or
B;wait
on
A,
B;end
process;注意:process语句敏感表和wait语句只能有一个。一个构造体内如果有多个process语句存在,它们并行同步执行,同时还可以进行通信。多个process语句通信是通过在构造体中定义的信号来实现。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目的信号量<=表达式1
WHEN条件1
ELSE表达式2 WHEN
条件2
ELSE∶表达式n-1
WHEN
条件n-1
ELSE表达式n;注意:1、只有最后一个表达式后边才有“;”。2、最后一个表达式可以无条件或用when
others,表示其它列举出的条件都不满足时,将该表达式的值给目的信号量。3、条件有优先权之分,由条件1
顺序往下执行。4、与if语句类似,只是if语句只能用于process或子程序描述中。目的信号量<=表达式1 WHEN
条件1
ELSE表达式2 WHEN
条件2
ELSE∶表达式n-1 WHEN
条件n-1
ELSE表达式n;process(敏感信号表)beginif
条件1
then信号<=表达式1;:elsif条件n-1 then信号
<=表达式n-1
;else信号<=表达式n;end
if;end
process;注意:IF语句替换条件信号赋值语句时必须用在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
条件表达式SELECT目的信号量<=表达式1
WHEN
条件1,表达式2
WHEN
条件2,∶表达式n
WHEN
条件n;注意:1、条件无优先权之分;2、最后一个表达式必须有条件;3、最后一个条件后加“;”,其它条件后加“,”;4、与顺序语句中的CASE语句类似;5、必须把条件表达式的所有取值都列出来。格式:process(敏感信号表)begincase
表达式iswhen
分支1=>信号
<=
选择项
波形
1;::when
分支n=>信号
<=
选择项
波形
n;end
case;end
process;WITH
条件表达式SELECT目的信号量<=表达式1
WHEN
条件1,表达式2
WHEN
条件2,∶表达式n
WHEN
条件n;注意:case语句替换条件信号赋值语句时必须用在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;选择信号
i3
WHEN3,赋值语句条件信号赋值语句注意:两条信号赋值语句执行无先后形式与顺序调用语句相同可加标号。等价于一个进程,敏感信号为输入参数的信号。输入输出参数中不能有变量。元件例化语句与元件(定义)说明语句一起使用称为元件例化,用于实现构造体说明的结构描述。次的设计模块调用低层次结构描述:多层次的设计中,的设计模块。元件例化由两部分组成:元件定义(说明)语句:将一个现成的设计实体定义为一个元件的语句元件例化语句:是此元件与当前设计实体中的连接说明功能:指定构造体中从库中调用的是哪一个编译过的逻辑描述模块(设计实体),或基本门电路。语法:component
元件名generic(说明);port(说明);endcomponent;该元件类属参数的说明元件端口说明在调用该元件的设计实体中构造体的说明(定义)语句部分说明。同该元件设计实体的实体说明部分功能:将调用元件(模块)的端口和类属参数它的设计实体的相关参数和信号。成调用标号:元件名
generic
map(类属参数值
)port
map
(端口信号
);方式有两种:位置
和名称只列出当前系统中的连接实体端口名或定义的信号名,Port
map()中指定的实际信号的书写顺序与元件端口说明中的信号书写顺序一一对应。语法:元件端口名和连接符号“=>”必须存在的。在PORTMAP句中的位置可以是任意的。1.位置 :port
map
(X,
Y,Out1,
Out2)其中X,Y,Out1,
Out2分别为调用元件设计实体中定义的端口或信号。2.名称
:port
map
(a=>X, c=>
Out1,
b=>Y,
d=>Out2)其中=>前面为component(元件说明语句)中指定的端口信号,=>后面为调用元件设计实体中定义的端口或信号。元件and2的实体说明如下: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对应a,d1对应b,ab对应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个D触发器串联相接组成。用结构描述方式完成该寄存器的描述,就要把D触发器作为元件来调用,且要调用4次。首先要完成D触发器的VHDL描述。单个D触发器的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该计数器有两个计数器串接组成,其中一个是十进制计数器,一个是六进制计数器;这两个计数器功能一样,只是最大计数值不同;可以设计一个最大计数值可变的计数器----通用计数器所谓通用就是该计数器作为元件被调用时,其最大计数值可修改。定义通用计数器时将最大计数值定义为类属参数即可。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类属参数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要求:最大计时11点59分59秒用于产生多个相同的结构,主要用在生成 器阵列和寄存器阵列。for……generate语句:[标号:]for
变量in
离散范围generate并发处理语句;end
generate[标号];if……generate语句:[标号:]if
条件
generate并发处理语句;end
generate[标号];书写格式:两种方式: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等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度钢材行业投资分析与风险评估合同
- 2025版学校体育器材租赁与维护服务协议3篇
- 教育科技在心理健康领域的创新应用
- 二零二五年度打字员与出版社合同:图书编辑与排版服务协议2篇
- 社交媒体在小学数学教学中的作用与影响
- 教育信息化背景下的探究式学习法研究
- 2025年度能源管理创业合伙人共同投资协议4篇
- 二零二五年度成都离婚协议公证办理材料审核及处理合同4篇
- 企业可持续发展与创新型组织架构的关系
- 小学阶段数学与信息技术课程的资源整合
- 小学生作文方格纸A4纸直接打印版
- 幼儿阿拉伯数字描红(0-100)打印版
- 社会组织等级评估报告模板
- GB/T 12173-2008矿用一般型电气设备
- 2023年1月浙江高考英语听力试题及答案(含MP3+录音原文)
- 房产抵押注销申请表
- 【课件】第三课 蒙娜丽莎 课件高中美术湘美版美术鉴赏
- 新媒体研究方法教学ppt课件(完整版)
- 东芝空调维修故障代码汇总
- 工艺管道仪表流程图(共68页).ppt
- 五项管理行动日志excel表格
评论
0/150
提交评论