EDA第五章 VHDL设计进阶2节-顺序语句-定稿_第1页
EDA第五章 VHDL设计进阶2节-顺序语句-定稿_第2页
EDA第五章 VHDL设计进阶2节-顺序语句-定稿_第3页
EDA第五章 VHDL设计进阶2节-顺序语句-定稿_第4页
EDA第五章 VHDL设计进阶2节-顺序语句-定稿_第5页
已阅读5页,还剩24页未读 继续免费阅读

下载本文档

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

文档简介

1、黑龙江大学电子工程学院第五章 VHDL设计进阶本章对VHDL的语言规则和语句类型做系统的论述。一、 VHDL语言要素 二、VHDL顺序语句三、VHDL并行语句四、子程序五、库、程序包及其配置六、VHDL描述风格七、常用元件设计举例八、VHDL与原理图混合设计方式黑龙江大学电子工程学院一、 VHDL顺序语句VHDL中有两类基本的描述语句顺序语句和并行语句。顺序语句具有:执行顺序与书写顺序一致,顺序语句只能出现在进程和子程序中,子程序又分为函数和过程。进程是由顺序语句构成的,但是进程本身属于并行语句。同一时间每个进程只能执行一条顺序语句;子程序本身没有顺序和并行之分。VHDL有如下六类基本的顺序语

2、句:赋值语句、转向控制语句、等待语句、子程序调用语句,返回语句和空操作语句1、赋值语句 2、转向控制语句 3、WAIT语句 4、子程序调用语句5、返回语句6、Null语句和其他语句 黑龙江大学电子工程学院1、 赋值语句赋值语句功能是将一个值或者表达式的运算结果传递给某一个数据对象,如信号或者变量,或者数组。(1)、信号或者变量的赋值语法: 变量赋值目标:= 赋值源;-立即执行无延时信号赋值目标 = 赋值源;-有延时,或者进程结束时赋值目标和赋值源之间的数据类型必须一致。信号和变量赋值有区别:SIGNAL s1,s2:STD_LOGIC;SIGNAL svec:STD_LOGIC_VECTOR(

3、0 TO 3);PROCESS(S1,S2)VARIABLE v1,v2:STD_LOGIC;BEGINv1 :=1; -变量赋值 s1 =1;-信号赋值svec(0) =v1;v1:=0;-本进程中变量v1两次赋值都会发生变化s1 =0;本进程中信号s1两次赋值,最后一次有效END PROCESS;-进程中的信号赋值都是在进程结束之后生效的黑龙江大学电子工程学院1、 赋值语句从例子中可以看出, 赋值语句可以放到进程中,也可以放到结构体中,因此赋值语句即可以做顺序语句也可以作为并行语句使用。变量赋值立即生效,信号赋值生效是有延时的,在进程中的信号赋值是在进程结束时候一起生效的。进程内部信号可以

4、多驱动源,但是最后一次生效,进程中信号赋值是在进程结束时候进行的,但是还是有先后顺序的,比如y的赋值过程,当从y 和y1来看多信号赋值又无先后顺序。黑龙江大学电子工程学院1、 赋值语句(2)、赋值目标I、标识符赋值目标和数组单元素赋值目标标识符赋值目标可以理解为单独的信号或者变量作为赋值目标的情况,数组单元素赋值目标是以通过数组下标名称选择数组的某一元素作为赋值目标。赋值形式为: 数组类信号或者变量名(下标名),要求下标是一个具体的数值或者一个可计算的表达式。x:=3;a(3) := 12; a(x+2) :=3;II、段下标元素赋值目标及集合块赋值目标是以下标连续的多个元素作为赋值目标的情况

5、。a(1 TO 2) =“10”; a(3 DOWNTO 0) = “1011”;集合块赋值目标,是以一个集合的方式来赋值的有位置关联和名字关联。s = “1011”(a,b,c,d)= s; - a=1;b=0;c=1;de,3=f,1=g(0),0=g(1):=s); - e=s(2);f=s(3);g(0)=s(1); g(1)=s(0); 名字关联,可理解为下标名称关联方式黑龙江大学电子工程学院分为有IF语句、CASE语句、LOOP语句、NEXT语句和EXIT语句。 (1)、IF语句I、IF 条件 THEN 语句; END IF;II、IF 条件 THEN 语句1; ELSE 语句2;

6、 END IF;III、IF 条件1 THEN -有优先级 语句1; ELSIF 条件2 THEN 语句2; ELSE 语句3; END IF;2、 转向控制语句黑龙江大学电子工程学院例5-7 4位等值比较器描述方式1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY eqcomp4 IS PORT(a,b: IN STD_LOGIC_VECTOR(3 DOWNTO 0); equals: OUT STD_LOGIC ); END eqcomp4;ARCHITECTURE behave OF eqcomp4 ISBEGIN comp:PROCESS(

7、a,b) BEGIN equals = 0; IF a=b THEN -常称为门闩控制语句 equals = 1; END IF; END PROCESS comp -进程结束后信号equals赋值才生效END behave;黑龙江大学电子工程学院例5-8 4位等值比较器描述方式2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY eqcomp4 IS PORT(a,b: IN STD_LOGIC_VECTOR(3 DOWNTO 0); equals: OUT STD_LOGIC ); END eqcomp4;ARCHITECTURE behave

8、OF eqcomp4 ISBEGIN comp:PROCESS(a,b) BEGINIF a=b THEN equals = 1;ELSE equals = 0; END IF; END PROCESS comp;END behave;黑龙江大学电子工程学院例5-9 4路多选一多路选择器描述方式1LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(a,b,c,d: IN STD_LOGIC_VECTOR(3 DOWNTO 0);s: IN STD_LOGIC_VECTOR(1 DOWNTO 0); x: OUT STD_LO

9、GIC_VECTOR(3 DOWNTO 0) ); END mux4;ARCHITECTURE behave OF mux4 ISBEGIN mux4:PROCESS(a,b,c,d) BEGINIF s=“00” THEN x = a;ELSIF s=“01” THEN x = b;ELSIF s=“10” THEN x = c;ELSE -s=“11”或者其它值,STD_LOGIC还有其他逻辑值 x 语句A; WHEN 值2 = 语句B; : WHEN OTHERS = 语句C;END CASE;注意: =类似IF语句中的 THEN 如果分支包含了所有的情况,那么OTHERS可以省略。 每

10、个选择值只能出现一次,不允许有相同选择值的条件出现 CASE语句必须选中,且只能选中所列条件中的一条。 执行语句中不可以出现时钟边沿判断语句 2、 转向控制语句黑龙江大学电子工程学院例5-10 4路多选一多路选择器描述方式2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY test_case IS PORT(s1,s2: IN STD_LOGIC;a,b,c,d: IN STD_LOGIC;z: OUT STD_LOGIC;) END test_case;ARCHITECTURE behave OF test_case ISSIGNAL s:STD

11、_LOGIC_VECTOR(1 DOWNTO 0);BEGINs z z z z z=x; -由于STD_LOGIC类型中还有其他的逻辑值 END CASE; END PROCESS;END behave; 数据选择器a s(2)zbcd s(1)黑龙江大学电子工程学院(3)、LOOP 语句LOOP语句就是循环语句,分为FOR循环和WHILE循环。LOOP是一个循环语句,就是每次执行到END LOOP时候会自动的跳转到LOOP 处,如果FOR 语句或者WHILE的条件满足,那么就执行循环体,否则跳出循环。没有FOR 和WHILE语句时候,就称为死循环。I、FOR 循环 循环标号: FOR 循环

12、变量 IN 循环次数范围 LOOP 顺序处理语句; END LOOP循环标号;FOR 循环语句中的循环变量每次循环中都会发生变化,而IN 后面的循环次数范围则表示循环变量在循环过程中依次取值的范围。循环变量必须取整数。例如:FOR n IN 0 TO 7 LOOP tmp:= tmp XORa(n);END LOOP;2、 转向控制语句黑龙江大学电子工程学院例5-11 8位奇偶校验电路LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check IS PORT(a: IN STD_LOGIC_VECTOR(7 DOWNTO 0);y: OUT

13、STD_LOGIC); END p_check;ARCHITECTURE behave OF p_check ISBEGINPROCESS(a) VARIABLE tmp:STD_LOGIC; BEGINtmp:=0;FOR n IN 0 TO 7 LOOP -8次循环 tmp:= tmp XOR a(n);END LOOP; y= tmp; END PROCESS;END behave; 8位位奇奇偶偶校校验验器器A(0)yA(1)A(2)A(3)A(4)A(5)A(6)A(7)黑龙江大学电子工程学院II、WHILE 循环 循环标号: WHILE 条件 LOOP 顺序处理语句; END LO

14、OP循环标号;执行循环,直到条件为假退出循环。例如:WHILE i8 LOOP tmp := tmp XOR a(i); i :=i+1;END LOOP;2、 转向控制语句黑龙江大学电子工程学院例5-12 8位奇偶校验电路2LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check2 IS PORT(a: IN STD_LOGIC_VECTOR(7 DOWNTO 0);y: OUT STD_LOGIC); END p_check2;ARCHITECTURE behave OF p_check2 ISBEGINPROCESS(a) VARIA

15、BLE i: INTEGER := 0; VARIABLE tmp:STD_LOGIC; BEGINtmp:=0;WHILE i8 LOOP tmp := tmp XOR a(i); i :=i+1;END LOOP; y= tmp; END PROCESS;END behave; 8位位奇奇偶偶校校验验器器A(0)yA(1)A(2)A(3)A(4)A(5)A(6)A(7)黑龙江大学电子工程学院(4)、NEXT 语句NEXT和EXIT是专用退出循环的两种语句,NEXT相当高级语言中的跳转语句,共有三种形式:I、NEXT; -跳转到本循环的LOOP处;II、NEXT LOOP标号;-跳转到指定的

16、LOOP标语句开头,继续执行循环;III、NEXT LOOP标号 WHEN 条件表达式; -条件表达式为真时跳转例5-13 两个矢量按位清零程序,目的就是熟悉NEXT的用法L1: FOR cnt _value IN 1 TO 8 LOOPS1: a(cnt_value) := 0; IF (c(cnt_value)=a(cnt_value) THEN NEXT; END IF;S2: c(cnt_value) := 0;END LOOP L1;2、 转向控制语句黑龙江大学电子工程学院(5)、EXIT 语句EXIT也是专用的循环退出语句,共有三种形式:I、EXIT; -跳到END LOOP处;I

17、I、EXIT LOOP标号;-跳到LOOP标号的循环结束END LOOP位置;III、EXIT LOOP标号 WHEN 条件表达式; EXIT 用于跳转到循环的结束处;例5-15 比较两个矢量大小FOR i IN 1 DOWNTO 0 LOOPIF( a(i)=1 AND b(i)=0) THEN a_less_then_b =FALSE; EXIT; -比较结束,跳出循环 ELSIF ( a(i)=0 AND b(i)=1) THEN a_less_then_b =TRUE;EXIT; -比较结束,跳出循环 ELSE NULL; -如果相等就执行此空操作 END IF; END LOOP;2

18、、 转向控制语句黑龙江大学电子工程学院在进程(或过程)中,当程序执行到WAIT语句时候,程序会挂起,直到条件满足时候,才重新开始执行进程或者过程中的程序。注意:列出敏感变量的进程不能使用WAIT语句;I、WAIT;-没有设置停止挂起的条件,表示永远挂起;II、WAIT ON 信号表;-等待列出的敏感信号变化,才能结束挂起; III、WAIT UNTIL 条件表达式; -当表达式为真时候才结束挂起;IV、WAIT FOR 时间表达式;-直到指定时间时才结束挂起;V、WAIT ON 信号表 UNTIL 条件表达式 FOR 时间表达式; -多条件的WAIT语句,只要有一个条件满足,就结束程序挂起;只

19、有WAIT UNITIL 可以综合,其它都只在仿真时使用。例如:WAIT ON a,b; -等待直到a或者b有变化WAIT UNTIL (x*10)100); -等待到条件满足时候退出WAIT FOR 20nS; -等待20nS 3、WAIT语句-略讲黑龙江大学电子工程学院例5-16 WAIT 应用举例,下面两个进程等效 PROCESS(a,b) 进程1有敏感信号列表 BEGIN Y =a AND b; END PROCESS;PROCESS 进程2没有敏感信号列表 BEGIN Y = a AND b; WAIT ON a,b; -等待a或b发生变化,才执行本进程中信号Y的赋值 END PRO

20、CESS; 注意:列出敏感变量的进程中 不能使用WAIT语句黑龙江大学电子工程学院例5-17 WAIT 应用举例2 PROCESS 有WAIT语句的进程不能有敏感信号列表 BEGIN rst_loop: LOOP -死循环 WAIT UNTIL clock=1 AND clockEVENT; NEXT rst_loop WHEN( rst=1); x = a; WAIT UNTIL clock=1 AND clockEVENT; NEXT rst_loop WHEN (rst=1); y = b; END LOOP rst_loop; -死循环 END PROCESS;程序功能是,每次时钟上升

21、沿时候如果复位信号rst不等于1,则交替执行x = a; 和 y = b; 如果rst 等于1时候,就返回到程序开始,当rst不等于1时候,下次时钟上升沿时候,一定执行x 实参表达式 形参名 = 实参表达式 );形参是被调用过程中已说明的参数名;实参当前调用程序中过程形参的接受体;形参和实参的对应可以采用位置关联法和名字关联法。过程调用分为3个步骤:(1) 将IN和INOUT模式的实参赋给相应的形参(2) 执行这个过程(3) 将过程中OUT和INOUT模式的形参值返回给对应的实参。II、函数调用 函数调用和过程调用相似,只是函数调用有返回值。过程调用结束后把形参值再传给实参。4、子程序调用语句

22、黑龙江大学电子工程学院例5-18 过程的调用举例PACKAGE data_types IS 定义程序包SUBTYPE data_element IS INTEGER RANGE 0 TO 3;-定义数据类型TYPE data_array IS ARRAY(1 TO 3) OF data_element;END data_types; 在程序包中定义了一个新数据类型的数组-以上为程序包的内容,下面为程序USE WORK.data_types.ALL; -打开当前工作库的程序包 data_typesENTITY sort IS PORT(in_array: IN data_array; out_a

23、rray:OUT data_array);END sort;ARCITECTURE behave OF sort ISBEGIN PROCESS(in_array) 进程开始 PROCEDURE swap(data: INOUT data_array; -形参新类型 low,high:IN INTEGER) IS 定义过程 参数为默认是常量类型的,可省略不写,其它对象类型需要声明黑龙江大学电子工程学院 PROCESS(in_array) 进程开始 PROCEDURE swap(VARIABLE data: INOUT data_array; -形参 low,high:IN INTEGER) I

24、S 定义过程 VARIABLE temp:data_element; BEGIN IF(data(low)data(high) THEN 两整数从小到大排序 temp := data(low); data(low) :=data(high); data(high):=temp; END IF; END swap; VIRIABLE my_array:data_array; -定义进程中使用的变量 BEGIN my_array :=in_array; -读入变量 swap(my_array,1,2); -位置关联调用, swap(my_array,2,3); - 起泡排序法 swap(my_ar

25、ray,1,2); out_array = my_array; END PROCESS;END behave黑龙江大学电子工程学院返回语句只能用于子程序中,并用来结束当前子程序的执行。格式有两种:(1) RETURN; 过程返回(2) RETURN 表达式;函数返回表达式的值;函数必须有返回,可以有多个返回,但是只能有一个有返回值。例5-19 过程返回 RS触发器 在RS输入都是1时候,执行了返回操作;PROCEDURE rsff(SIGNAL s,r: IN STD_LOGIC; SIGNAL q,nq:INOUT STD_LOGIC) ISBEGIN IF (s=1 AND r = 1)

26、THEN-要有一端输出变成0才能稳定 REPORT “Forbidden state: s and r equal to 1; RETURN;-输入0,0为不允许状态,因为同时变0会出不定态 ELSE S R Q NQ q = s NAND nq AFTER 5 ns; 0 1 0 1 nq b) THEN temp :=a; ELSE temp :=b; END IF; RETURN(temp); -返回最大值 END max; BEGIN q = max(a,b); END PROCESS;END behave; 黑龙江大学电子工程学院顺序语句中的空操作语句,让程序顺序向后执行;常用在case语句中。 另如果将NULL赋给一个信号或者变量,该信号或者变量的值不变。比如: temptmp :=rega AND regb; WHEN “101” =tmp :=rega OR regb; WHEN “110” =tmp := NOT rega; WHEN OTHERS = NULL; END CASE;6、NULL 语句黑龙江大学电子工程学院I、属性描述与定义语句功能:用于检出时钟边沿、完成定时检查、获得未约束的数据类型的范围等。格式:属性测试项目名属性标识符;-如CLKEVENT预定义属性函数标识符及功能(1) 、信号类属性 ,

温馨提示

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

评论

0/150

提交评论