VHDL语言的主要描述语句讲课讲稿.docx
- 文档编号:23235157
- 上传时间:2023-05-15
- 格式:DOCX
- 页数:23
- 大小:75.53KB
VHDL语言的主要描述语句讲课讲稿.docx
《VHDL语言的主要描述语句讲课讲稿.docx》由会员分享,可在线阅读,更多相关《VHDL语言的主要描述语句讲课讲稿.docx(23页珍藏版)》请在冰豆网上搜索。
VHDL语言的主要描述语句讲课讲稿
VHDL语言的主要描述语句
VHDL语言的主要描述语句
按照语句的执行顺序对VHDL语言进行分类,包含两类语句:
●并行描述语句该语句的执行与书写顺序无关,总是同时被执行
●顺序描述语句从仿真的角度,该语句是顺序执行的
进程语句(PROCESS)是最典型的并行语句,一个构造体内可以有几个进程语句同时存在,而且并发执行。
但是进程内部的所有语句都是顺序语句。
一、顺序描述语句
顺序描述语句只能用在进程和子程序中,它和其他高级语言一样,其语句是按照语句的出现的顺序加以执行的。
如下分别介绍有关的顺序描述语句.
1.WAIT语句
进程在执行过程中总是处于两种状态:
执行或挂起,进程的状态变化受等待语句的控制,当进程执行到等待语句,就被挂起,并等待再次执行进程.
等待语句的格式:
*WAIT无限等待
*WAITON敏感信号变化
*WAITUNTIL条件满足
*WAITFOR时间到
(1)WAITON
格式:
WAITON信号[,信号]
例5-1
PROCESS(a,b)
BEGIN
y<=aANDb;
ENDPROCESS;
该例中的进程与下例中进程相同:
例5-1
PROCESS
BEGIN
y<=aANDb;
WAITONa,b;
ENDPROCESS;
例5-2
PROCESS(a,b)
BEGIN
y<=aANDb;
WAITONa,b;
ENDPROCESS;
(2)WAITUNTIL直到条件满足
格式:
WAITUNTIL布尔表达式
当进程执行到该语句时,被挂起;若布尔表达式为真时,进程将被启动.
例:
WAITUNTIL((x*10)<100)
(3)WAITFOR 等到时间到
格式:
WAITFOR时间表达式
当进程执行到该语句时,被挂起;等待一定的时间后,进程将被启动.
例:
WAITFOR20ns;
WAITFOR(a*(b+c);
(4)多条件WAIT语句
例:
WAITONnmi,interruptUNTIL((nmi=TRUE)OR(interrupt=TRUE))FOR5us
该等待有三个条件:
第一,信号nmi和interrupt任何一个有一次刷新动作
第二,信号nmi和interrupt任何一个为真
第三,已等待5us
只要一个以上的条件被满足,进程就被启动.
*注意:
多条件等待时,表达式的值至少应包含一个信号量的值。
(5)超时等待
例5-3
例5-4
2.断言语句(ASSERT)
(主要用于仿真、调试)
格式:
ASSERT条件[REPORT输出信息][SEVERITY级别]
执行到断言语句时,判断条件,若条件满足就继续执行,否则输出文字串和错误级别信息.
例:
ASSERT(tiaojian=’1’)
REPORT“somethingwrong”
SEVERITYERROR;
3.信号代入语句
格式:
目的信号量<=信号量表达式
例:
a<=b;(注意区别小于等于)
4.变量赋值语句
格式:
目的变量:
=表达式
例:
c:
=a+d
5.IF语句
三种书写格式:
1)IF的门闩控制
格式:
IF条件THEN
顺序执行语句;
ENDIF;
例5-5
IF(a=’1’)THEN
c<=b;
ENDIF;
例5-6
2)IF语句的二选择控制
格式:
IF条件THEN
顺序执行语句;
ELSE
顺序执行语句;
ENDIF;
例5-7
ARCHITECTURErt1OFmux2IS
BEGIN
PROCESS(a,b,sel)
BEGIN
IF(sel=’1’)THEN
c<=a;
ELSE
c<=b;
ENDIF;
ENDPROCESS;
ENDrt1;
3)IF语句的多选择控制
格式:
IF条件THEN
顺序执行语句
ELSIF条件THEN
顺序执行语句
:
:
ELSIF条件THEN
顺序执行语句
ELSIF条件THEN
顺序执行语句
ENDIF;
例如:
5-8
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux4IS
PORT(input:
INSTD_LOGIC_VECTOR(3DOWNTO0);
sel:
INSTD_LOGIC_VECTOR(1DOWNTO0);
q:
OUTSTD_LOGIC);
ENDmux4;
ARCHITECTURErt1OFmux4IS
BEGIN
nn:
PROCESS(input,sel)
BEGIN
IF(sel='00')THEN
q<=input(0);
ELSIF(sel='01')THEN
q<=input
(1);
ELSIF(sel='10')THEN
q<=input
(2);
ELSE
q<=input(3);
ENDIF;
ENDPROCESSnn;
ENDrt1;
注意:
条件判断输出是布尔量。
6.CASE语句
常用来描述总线、编码和译码的行为。
格式:
CASE表达式IS
WHEN条件表达式=>顺序处理语句
END CASE;
其中WHEN的条件表达式可以有4种形式:
WHEN值=>顺序处理语句
WHEN值|值|值|…|值=>顺序处理语句
WHEN值TO值=>顺序处理语句
WHENOTHERS=>顺序处理语句
例:
5-9
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux43IS
PORT(a,b,i0,i1,i2,i3:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDmux43;
ARCHITECTUREmux4_behaveOFmux43IS
SIGNALsel:
INTEGERRANGE0TO3;
BEGIN
nn:
PROCESS(a,b,i0,i1,i2,i3)
BEGIN
sel<=0;
IF(a='1')THEN
sel<=sel+1;
ENDIF;
IF(b='1')THEN
sel<=sel+2;
ENDIF;
CASEselIS
WHEN0=>q<=i0;
WHEN1=>q<=i1;
WHEN2=>q<=i2;
WHEN3=>q<=i3;
ENDCASE;
ENDPROCESSnn;
ENDmux4_behave;
例5-103-8译码器
LIBRARYieee;
USEieee.std_logic_1164.all;
entitydecoder38is
port(a,b,c,g1,g2a,g2b:
instd_logic;
y:
outstd_logic_vector(7downto0));
enddecoder38;
architecturebehave38OFdecoder38is
signalindata:
std_logic_vector(2downto0);
begin
indata<=c&b&a;
process(indata,g1,g2a,g2b)
begin
if(g1='1'andg2a='0'andg2b='0')then
caseindatais
when"000"=>y<="11111110";
when"001"=>y<="11111101";
when"010"=>y<="11111011";
when"011"=>y<="11110111";
when"100"=>y<="11101111";
when"101"=>y<="11011111";
when"110"=>y<="10111111";
when"111"=>y<="01111111";
whenothers=>y<="XXXXXXXX";
endcase;
else
y<="11111111";
endif;
endprocess;
endbehave38;
例5-11
LIBRARYieee;
USEieee.std_logic_1164.all;
entityencoderis
port(input:
instd_logic_vector(7downto0);
y:
outstd_logic_vector(2downto0));
endencoder;
architecturebehaveOFencoderis
begin
process(input)
begin
caseinputis
when”01111111”=>y<=“111”;
when”10111111”=>y<=“110”;
when”11011111”=>y<=“101”;
when”11101111”=>y<=“100”;
when”11110111”=>y<=“011”;
when”11111011”=>y<=“010”;
when”11111101”=>y<=“001”;
when”11111110”=>y<=“000”;
whenothers=>y<=“xxx”;
endcase;
endprocess;
endbehave;
表5-1优先级编码器的真值表
输入
输出
input(7)
input(6)
input(5)
input(4)
input(3)
input
(2)
input
(1)
input(0)
Y2
Y1
Y0
X
X
x
X
X
x
X
0
1
1
1
X
X
X
X
X
X
0
1
1
1
0
X
X
X
X
x
0
1
1
1
0
1
X
X
X
X
0
1
1
1
1
0
0
X
x
X
0
1
1
1
1
0
1
1
x
X
0
1
1
1
1
1
0
1
0
X
0
1
1
1
1
1
1
0
0
1
X
1
1
1
1
1
1
1
0
0
0
例5-12
LIBRARYieee;
USEieee.std_logic_1164.all;
entityprioris
port(input:
instd_logic_vector(7downto0);
y:
outstd_logic_vector(2downto0));
endprior;
architecturebe_priorOFprioris
begin
process(input)
begin
if(input(0)='0')then
y<="111";
elsif(input
(1)='0')then
y<="110";
elsif(input
(2)='0')then
y<="101";
elsif(input(3)='0')then
y<="100";
elsif(input(4)='0')then
y<="011";
elsif(input(5)='0')then
y<="010";
elsif(input(6)='0')then
y<="001";
else
y<="000";
endif;
endprocess;
endbe_prior;
7.LOOP语句
格式一:
[标号]:
FOR循环变量IN 离散范围 LOOP
顺序处理语句;
ENDLOOP[标号];
例:
ASUM:
FORiIN1TO9LOOP
sum=1+sum;
ENDLOOPASUM;
例5-13:
8位奇偶校验电路
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYpcIS
PORT(a:
INSTD_LOGIC_VECTOR(7DOWNTO0);
y:
OUTSTD_LOGIC);
ENDpc;
ARCHITECTUREbehaveOFpcIS
BEGIN
cbc:
PROCESS(a)
VARIABLEtmp:
STD_LOGIC;
BEGIN
tmp:
='0';
FORiIN0TO7LOOP
tmp:
=tmpXORa(i);
ENDLOOP;
y<=tmp;
ENDPROCESScbc;
ENDbehave;
格式二:
[标号]:
WHILE条件LOOP
顺序处理语句;
ENDLOOP[标号];
在该语句中,如果条件为真,则进行循环,否则结束循环.
例:
I:
=1;
sum:
=0
abcd:
WHILE(I<10)LOOP
sum:
=I+sum;
I:
=I+1;
ENDLOOPabcd;
例5-14:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYpcIS
PORT(a:
INSTD_LOGIC_VECTOR(7DOWNTO0);
y:
OUTSTD_LOGIC);
ENDpc;
ARCHITECTUREbehaveOFpcIS
BEGIN
cbc:
PROCESS(a)
VARIABLEtmp:
STD_LOGIC;
BEGIN
tmp:
='0';
i:
=0;
WHILE(i<8)LOOP
tmp:
=tmpXORa(i);
i=i+1;
ENDLOOP;
y<=tmp;
ENDPROCESScbc;
ENDbehave;
8.NEXT语句
在LOOP语句中用NEXT语句跳出循环.
格式:
NEXT[标号][WHEN条件];
NEXT语句用于控制内循环的结束.
例5-15:
PROCESS(a,b)
CONSTANTmax_limit:
INTEGER:
=255
BEGIN
FORIIN0TOmax_limitLOOP
IF(done(I)=TRUE)THEN
NEXT;
ELSEdone(I):
=TRUE;
ENDIF;
q(I)<=a(I)ANDb(I);
ENDLOOP;
ENDPROCESS;
9.EXIT语句
EXIT语句用于结束LOOP循环状态.
格式:
EXIT[标号][WHEN条件]
例5-16:
PROCESS(a)
VARIABLEint_a:
INTEGER;
BEGIN
int_a:
=a
FORI=0IN0TOmax_limitLOOP
IF(int_a<=0)THEN
EXIT;
ELSE
int_a:
=int_a-1;
q(I)<=3.1416/REAL(a*I);
ENDIF
ENDLOOP;
y<=q;
ENDPROCESS;
二、并发描述语句
1.进程语句
在一个构造体中多个PROCESS语句可以同时并行的执行,该语句有如下特点:
1)可以和其它进程语句同时执行,并可以存取构造体和实体中所定义的信号
2)进程中的所有语句都按照顺序执行
3)为启动进程,在进程中必须包含一个敏感信号表或WAIT语句
4)进程之间的通信是通过信号量来实现的
2.并发信号代入
代入语句在进程中使用是顺序语句,但是在进程外即在构造体中使用就是并发语句,相当于一个进程.
例:
ARCHITECTUREbehaveOFa_varIS
BEGIN
Output<=a(I);
ENDbehave;
可以等效于:
ARCHITECTUREbehaveOFa_varIS
BEGIN
ssPROCESS(a,I)
BEGIN
Output<=a(I);
ENDPROCESSss;
ENDbehave;
信号代入语句的右边可以是算数表达式,也可以是逻辑表达式,还可以是关系表达式,所以可以仿真加法器、乘法器、除法器、比较器和各种逻辑电路。
3.条件信号代入
条件代入语句也是并发语句,它可以将符合条件的表达式代入信号量。
格式:
目的信号量<=表达式1WHEN条件1
ELSE表达式2WHEN条件2
ELSE表达式3WHEN条件3
:
ELSE表达式n;
例5-17:
四选一电路
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux44IS
PORT(i0,i1,i2,i3,a,b:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDmux44;
ARCHITECTUREaaOFmux44IS
SIGNALsel:
STD_LOGIC_VECTOR(1DOWNTO0);
BEGIN
sel<=b&a;
q<=i0WHENsel="00"ELSE
i1WHENsel="01"ELSE
i2WHENsel="10"ELSE
i3WHENsel="11";
ENDaa;
4.选择信号代入
格式:
WITH表达式样SELECT
目的信号量<=表达式1WHEN条件1
表达式2WHEN条件2
:
表达式nWHEN条件n;
该语句很象CASE语句.
例5-18:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYmux45IS
PORT(i0,i1,i2,i3,a,b:
INSTD_LOGIC;
q:
OUTSTD_LOGIC);
ENDmux45;
ARCHITECTUREbbOFmux45IS
SIGNALsel:
INTEGERrange0to3;
BEGIN
WITHselSELECT
q<=i0WHEN0,
i1WHEN1,
i2WHEN2,
i3WHEN3;
sel<=0WHENa='0'ANDb='0'ELSE
1WHENa='1'ANDb='0'ELSE
2WHENa='0'ANDb='1'ELSE
3WHENa='1'ANDb='1';
ENDbb;
5.并发过程调用语句
过程调用语句可以并发执行,但要注意如下问题:
●并发过程调用是一个完整的语句,在它之前可以加标号
●并发过程调用语句应带有IN,OUT或INOUT的参数,他们应该列在过程名后的括号内
●并发过程调用可以有多个返回值
例:
ARCHITECTURE….
BEGIN
vector_to_int(z,x_flag,q);
:
END;
等同于:
ARCHITECTURE….
BEGIN
PROCESS(z,q)
BEGIN
vector_to_int(z,x_flag,q);
:
ENDPROCESS;
END;
6.Block语句
7.通用模块调用语句Component
COMPONENT元件名
PORT说明;
ENDCOMPONENT;
8.端口映射语句
格式:
标号名:
元件名PORTMAP(信号,…);
9.参数传递语句
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYand2IS
GENERIC(rise,fall:
TIME);
PORT(a,b:
instd_logic;
c:
outstd_logic);
ENDand2;
ARCHITECTURErt1OFand2IS
SIGNALinternal:
std_logic;
BEGIN
internal<=aANDb;
c<=internalAFTER(rise)WHENinternal
ELSEinternalAFTER(fall);
ENDrt1;
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
ENTITYsampleIS
GENERIC(rise,fall:
TIME);
PORT(ina,inb,inc,ind:
instd_logic;
q:
outstd_logic);
ENDsample;
ARCHITECTUREbehavOFsampleIS
COMPONENTand2;
GENERIC(rise,fall:
TIME);
PORT(a,b:
instd_logic;
c:
outstd_logic);
ENDCOMPONENT;
SIGNALU0-C,U1-C:
std_logic;
BEGIN
U0:
and2GENERICMAP(5ns,5ns)
PORTMAP(ina,inb,U0-C);
U1:
and2GENERICMAP(8ns,10ns)
PORTMAP(inc,ind,U1-C);
U0:
and2GENERICMAP(9ns,11ns)
PORTMAP(U0-c,U1-c,q);
ENDbehav;
另外三种顺序语句
1.RETURN
1.REPORT
3.NULL
FUNCTIONis_x(s:
STD_LOGIC_VECTOR)
RETURNBooleanIS
BEGIN
FORiINS’RANGELOOP
CASES(i)IS
WHEN‘U’|’X’|’Z’|’W’|’-‘=>RETURNTURE;
WHENOTHERS=>NULL;
ENDCASE;
RETURNFALSE;
END;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL 语言 主要 描述 语句 讲课 讲稿
![提示](https://static.bdocx.com/images/bang_tan.gif)