《EDA技术实践教程》课件3.3VHDL顺序语句_第1页
《EDA技术实践教程》课件3.3VHDL顺序语句_第2页
《EDA技术实践教程》课件3.3VHDL顺序语句_第3页
《EDA技术实践教程》课件3.3VHDL顺序语句_第4页
《EDA技术实践教程》课件3.3VHDL顺序语句_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

3.3

VHDL顺序语句

顺序语句只能出现在进程(PROCESS)、过程(PROCEDURE)和函数(FUNCTION)中,其特点与传统的计算机编程语句类似,是按程序书写的顺序自上而下、一条一条地执行。利用顺序语句可以描述数字逻辑系统中的组合逻辑电路和时序逻辑电路。VHDL的顺序语句有赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句等六类。

3.3.1

VHDL赋值语句顺序语句——在进程(PROCESS)或子程序(PROCEDURE)、函数(FUNCTION)中使用,按程序书写的顺序自上而下、一个一个语句地执行;并行语句——出现在结构体中,各语句并行(同步)执行,与书写的顺序无关。

一、变量赋值语句格式:目标变量名:=赋值源(表达式);例如:x:=5.0;二、

信号赋值语句格式:目标信号名<=赋值源;例如:y<=‘1’;说明:该语句若出现在进程或子程序中则是顺序语句,若出现在结构体中则是并行语句。三、数组元素赋值例如:SIGNALa,b:STD

LOGIC

VECTOR(1TO4);

a<=“1101”;

a(1TO2)<=“10” a(1TO2)<=b(2TO3);

3.3.2

流程控制语句

一、IF语句格式1:IF条件句Then

顺序语句; ENDIF;格式2:IF条件句Then

顺序语句; ELSE

顺序语句; ENDIF;格式3:IF条件句Then

顺序语句; ELSIF条件句Then

顺序语句;

… ELSE

顺序语句; ENDIF;例1:用VHDL语言描述下图硬件电路cabyLIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALLENTITYcontrol

stmtsISPORT(a,b,c:INBOOLEAN;

y:OUTBOOLEAN);ENDcontrol

stmts;ARCHITECTUREexample1OFcontrol

stmtsISBEGIN PROCESS(a,b,c)

VARIABLEn:BOOLEAN;

BEGIN IFaTHENn:=b;

ELSE n:=c;

ENDIF; y<=n;

ENDPROCESS;ENDexample1;

例2,8线-3线优先编码器的设计

(真值表)输入

输出a0a1a2a3a4a5a6a7y0y1y2xxxxxxx0111xxxxxx01011xxxxx011101xxxx0111001xxx01111110xx011111010x011111110001111111000LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALLENTITYcoderISPORT(a:INSTD

LOGIC

VECTOR(0TO7);

y:OUTSTD

LOGIC

VECTOR(0TO2));ENDcoder;ARCHITECTUREexample2OFcoderISBEGINPROCESS(a)

BEGIN IF(a(7)=‘0’)THENy<=”111”;

ELSIF(a(6)=’0’) THENy<=”011”; ELSIF(a(5)=’0’) THENy<=”101”; ELSIF(a(4)=’0’) THENy<=”001”; ELSIF(a(3)=’0’) THENy<=”110”; ELSIF(a(2)=’0’) THENy<=”010”; ELSIF(a(1)=’0’) THENy<=”100”; ELSEy<=”000”; ENDIF; ENDPROCESS;ENDexample2;

二、CASE语句格式:CASE表达式IS When选择值=>顺序语句; When选择值=>顺序语句;

… WhenOTHERS=>顺序语句;

ENDCASE;说明:“=>”不是运算符,相当“THEN”例3,用CASE语句描述4选1数据选择器数据选择器as2zbcds1LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALLENTITYmux41ISPORT(s1,s2:INSTD

LOGIC;

a,b,c,d:INSTD

LOGIC;

z:OUTSTD

LOGIC);ENDmux41;ARCHITECTUREexample3OFmux41ISSIGNALs:STD

LOGIC

VECTOR(1DOWNTO0)BEGIN s<=s1&s2 PROCESS(s1,s2,a,b,c,d)

BEGIN CASEsIS WHEN“00”=>z<=a;

WHEN“01”=>z<=b;

WHEN“10”=>z<=c;

WHEN“11”=>z<=d;

WHENOTHERS=>z<=‘X’;

ENDCASE;

ENDPROCESS;ENDexample3;

三、FORLOOP语句格式1:[标号:]FOR循环变量IN初值TO终值LOOP

顺序语句; ENDLOOP[标号];例4,8位奇偶校验器的描述8位奇偶校验器a(0)za(1)a(2)a(3)a(4)a(5)a(6)a(7)8位奇偶校验器za(7..0)LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALLENTITYp

checkISPORT(a:INSTD_LOGIC_VECTOR(7DOWNTO0);

y:OUTSTD

LOGIC);ENDp

check;ARCHITECTUREexample4OFp

checkISBEGINPROCESS(a)VARIABLEtemp:STD_LOGIC; BEGIN temp:='0'; FORnIN7DOWNTO0LOOP temp:=tempXORa(n); ENDLOOP; y<=temp; ENDPROCESS; ENDexample4;

四、NEXT语句格式:NEXT[标号][WHEN条件];功能:(1)NEXT——无条件结束本次循环(2)NEXT标号——结束本次循环,从“标号”规定的位置继续循环;(3)NEXTWHEN条件——当“条件”满足时结束本次循环,否则继续循环。五、EXIT语句格式:EXIT[标号][WHEN条件];功能:(1)EXIT——无条件跳出循环(2)EXIT标号——跳出循环,从“标号”规定的位置开始循环;(3)EXITWHEN条件——当“条件”满足时跳出循环,否则继续循环。

3.3.3

WAIT语句

一、格式1:WAITON敏感信号表;功能:将运行的程序挂起直至敏感信号表中的任一信号发生变化时结束挂起,重新执行程序。例如:SIGNALs1,s2:STD

LOGIC;

PROCESS … WAITONs1,s2;

ENDPROCESS;注意:含WAIT语句的进程PROCESS的括弧中后不能加敏感信号,否则是非法的,例如

PROCESS(s1,s2)二、格式2:WAITUNTIL条件表达式;功能:将运行的程序挂起直至表达式中的敏感信号发生变化,而且满足表达式设置的条件时结束挂起,重新执行程序。例如:WAITUNTILenable=‘1’;3.3.4

断言(ASSERT)语句格式:ASSERT条件表达式[ REPORT字符串][ SEVERITY错误等级]功能:当条件为“真”时,向下执行另一个语句,为“假”时,则输出“字符串”信息并指出“错误等级”。用途:用于仿真、调试程序时的人机对话。例如ASSERT(S=‘1’ANDR=‘1’)REPORT“BothvaluesofSandRareequal‘1’”SEVERITYERROR;错误等级:NOTE(注意),WARNING(警告),ERROR(出错),FAILURE(失败)3.3.5

属性(ATTRIBUTE)描述与定义语句

功能:用于检出时钟边沿、完成定时检查、获得未约束的数据类型的范围等。格式:属性测试项目名‘属性标识符;--S‘属性标识符预定义属性函数标识符及功能:例如:TYPEnumberISINTEGERRANGE9DOWNTO0;

I:=number‘LEFT;--I=9 I:=number‘RIGTH;--I=0 I:=number‘HIGH;--I=9 I:=number‘LOW;--I=0EVENT——表示对当前的一个极小的时间段内发生事件的情况进行检测(如时钟的边沿)。例如:clock‘EVENT --检测以clock为属性测试项目的事件

clock‘EVENTANDclock=‘1’; --检测clock的上升沿

clock‘EVENTANDclock=‘0’; --检测clock的下降沿LAST_EVENT——从信号最近一次的发生至今所经历的时间,常用于检查定时时间、建立时间、保持时间和脉冲宽度等。例如:检查D触发器的D输入端的建立时间是否达到要求。LIBRARYIEEE;USEIEEE.STD

LOGIC

1164.ALLENTITYdffISGENERIC(setup_time,hold_time:TIME); PORT(d,clk:INSTD

LOGIC;

q:OUTSTD

LOGIC);BEGINSetup_checkPROCESS(clk)

BEGIN IF(clk=’1’)AND(clk’EVENT)THEN ASSERT(d’LAST_EVENT>=setup_time) REPORT“SETUPVIOLATION” SEVERITYERROR; ENDIF;ENDPROCESS;ENDdff;ARCHITECTUREdff_behavOFdffISBEGINDff_PROCESS:PROCESS(clk) BEGIN IF( clk=’1’)AND(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论