《VHDL描述语句》PPT课件.ppt
《《VHDL描述语句》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《VHDL描述语句》PPT课件.ppt(116页珍藏版)》请在三一办公上搜索。
1、第6章 VHDL描述语句,6.1 顺序描述语句 6.2 并行描述语句 6.3 属性描述与定义语句6.4 文本文件操作语句,6.1 顺序描述语句,所谓“顺序”,是指完全按照程序中语句出现的顺序去执行各条语句,而且在结构层次中前面语句的执行结果可能直接影响后面语句的结果。VHDL共有6类顺序语句:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句和空操作语句。,6.1 顺序描述语句 6.1.1 赋值语句赋值语句将一个值或表达式的运算结果传递给某一数据对象,如变量、信号或由此组成的数组。VHDL设计实体内的数据传递以及端口数据的读写都是通过赋值语句的运行实现的。,1变量赋值语句,例如:a:=
2、3;b:=c+d;,2信号赋值语句(信号代入),例如:y=a AND b;表示将信号量 a 和b相与的结果赋给目的信号量y。,从语句格式看,变量赋值语句用“:=”;信号赋值语句用“=”。,从有效的范围看,变量值是一个局部的、暂时性的数据对象;信号具有全局性特性,它不但可作为一个设计实体内部各单元之间数据传送的载体,而且可通过信号与其他实体进行通信。,从有效的时间看,变量赋值是立即发生的(假设进程已启动),即是一种时间延迟为0的赋值行为;信号赋值通常不是立即发生的,而是发生在一个进程结束时,赋值过程总是有某个延时的,它反映了硬件系统的重要性,综合后可以找到与信号对应的硬件结构(如一个I/O口、一
3、个D触发器等)。,6.1.2进程语句与WAIT语句,然而,顺序语句是不能出现在结构体中的,因此引入一种进程机制,用于顺序语句的仿真。,进程语句的一般格式为:进程标号:PROCESS(敏感信号表)IS 说明语句 BEGIN 顺序语句 END PROCESS 进程标号;,进程语句,例 D触发器ENTITY dff_2 ISPORT(clk,d:IN Bit;q:OUT Bit);END dff_2;ARCHITECTURE bhv1 OF dff_2 ISBEGINPROCESS(clk)BEGINIF clkEvent AND clk=1 THENq=d;END IF;END PROCESS;E
4、ND bhv1;,(1)一个进程描述一个数字电路的工作过程,可以抽象为一个数字元器件。(2)PROCESS的启动:当敏感信号表中任一信号发生变化时,将启动该PROCESS语句,由顺序语句描述的行为将从上到下执行一次。行为的结果可以赋给信号,并通过信号被其他的PROCESS或BLOCK读取或赋值。,进程语句的特点,(3)进程的设计要点:,同一构造体中的进程之间是并行运行的,同一进程中的逻辑描述语句则是顺序运行的;,进程既可以由敏感信号的变化来启动,也可以由满足条件的WAIT语句来激活,但它们不能同时存在于一个进程中;,构造体中多个进程之所以能并行同步运行,一个很重要的原因是进程之间的通信是通过传
5、递信号和共享变量值来实现的;进程是重要的建模工具,进程结构不但为综合器所支持,而且进程的建模方式将直接影响仿真和综合结果。,1、WAIT语句 WAIT语句的作用是将正在仿真的进程挂起,并在WAIT语句的条件为真时,再次激活该进程。因此WAIT语句的功能,是将进程在“挂起”和“激活”两种状态之间进行转换。WAIT语句的一般格式为:WAIT ON敏感信号表UNTIL 条件表达式FOR 时间表达式;,因此,当一个进程语句中没有敏感信号表,同时在该进程内部的顺序语句中也没有WAIT语句,则仿真器永远也不会跳出初始化阶段。所以,一个进程语句要么含有敏感信号表,要么在该进程的内部有WAIT语句,否则该进程
6、将陷入无限循环!,WAIT语句,WAIT;-无限等待WAIT ON 信号表;-等待敏感信号发生变化,就激活进程 WAIT UNTIL 条件表达式;-等待条件表达式中的敏感信号发-生变化且条件表达式为“true”,就执行后面的语句。WAIT FOR 时间表达式;-超时等待语句,等待时间超过时间表达式规定的时间后,就执行后面的语句。,下面是WAIT语句的常见例子:WAIT ON reset,clk;-等待信号reset或者clk的值变化WAIT UNTIL clkevent and clk=1;-等待信号clk变化,并且clk的值=1,描述一个附有清零功能的D触发器?进程如何描述?,p1:PROC
7、ESS(clear,clk)BEGIN IF clear=0 THEN q=“00000000”;ELSIF(clkEvent AND clk=1)THEN-clk的上升沿 q=d;END IF;END PROCESS p1;,p2:PROCESSBEGIN IF clear=0 THEN q 0);ELSIF(clkEvent AND clk=1)THEN q=d;END IF;WAIT ON clear,clk;END PROCESS p2;,6.1.3 IF语句,(1)IF语句的一般形式是以保留字“IF”开始,而以保留字“END IF”结尾。IF语句的保留字“IF”和保留字“END IF
8、”之间可以包含有多个ELSIF子句和一个ELSE子句,它们是可选项。(2)IF语句的条件是一个布尔表达式,返回值为布尔类型(“TRUE/FALSE”)。当条件满足时执行接下来的顺序语句;当条件不满足时执行下面的ELSIF子句或ELSE子句或结束该IF语句。,说明:,【例6.4】IF语句示例。LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux4 IS PORT(input:IN STD_LOGIC_VECTOR(3 DOWNTO 0);sel:IN STD_LOGIC_ VECTOR(1 DOWNTO 0);output:OUT STD_LOG
9、IC);END mux4;,ARCHITECTURE rtl OF mux4 IS BEGINPROCESS(input,sel)BEGIN IF(sel=“00”)THEN output=input(0);ELSIF(sel=“01”)THEN output=input(1);,ELSIF(sel=“10”)THEN output=input(2);ELSE output=input(3);END IF;END PROCESS;END rtl;,说明:(1)IF_ELSIF_ELSE语句经常用来描述具有多控制条件的硬件电路。(2)IF_ELSIF语句中顺序语句的执行条件具有向上相“与”的功能
10、。(3)IF语句不仅可用于选择器设计,而且用于比较器、译码器等也是相当方便的。,编码器使能端(级联输入端),为“0”时,处于编码状态,级联输出端,为“0”时,表示无编码输入,为“0”时,表示有编码输入,8线-3线优先编码器SN74148,例 8 to 3优先级编码器74LS148ENTITY prioty_encoder IS PORT(d:IN Bit_Vector(7 DOWNTO 0);a:OUT Bit_Vector(2 DOWNTO 0);ei_n:IN Bit;eo_n,gs_n:OUT Bit);END prioty_encoder;,ARCHITECTURE encoder O
11、F prioty_encoder ISBEGINPROCESS(ei_n,d)BEGIN IF(ei_n=1)THEN eo_n=1;gs_n=1;a=“111”;ELSIF(d=“11111111”)THEN eo_n=0;gs_n=1;a=“111”;,-不允许当前编码器编码,-当前编码器无码可编,ELSE eo_n=1;gs_n=0;IF(d(0)=0)THEN a=“111”;ELSIF(d(1)=0)THEN a=“110”;ELSIF(d(2)=0)THEN a=“101”;ELSIF(d(3)=0)THEN a=“100”;ELSIF(d(4)=0)THEN,-编码器处于编码状态
12、,a=“011”;ELSIF(d(5)=0)THEN a=“010”;ELSIF(d(6)=0)THEN a=“001”;ELSE a=“000”;END IF;END IF;END PROCESS;END encoder;,(1)IF_ELSIF_ELSE语句经常用来描述具有多控制条件的硬件电路。(2)IF_ELSIF语句中顺序语句的执行条件具有向上相“与”的功能。(3)IF语句不仅可用于选择器设计,而且用于比较器、译码器等也是相当方便的。,说明:,6.1.4 CASE语句CASE 语句格式如下:/-CASE 条件表达式 IS WHEN 选择值1=顺序处理语句1;WHEN 选择值2=顺序处理
13、语句2;WHEN OTHERS=顺序处理语句n;END CASE;-/,(1)CASE语句的一般形式是以保留字“CASE”后跟一个条件表达式和一个保留字“IS”开始,而以保留字“END CASE”结尾。CASE语句的保留字“CASE”和保留字“END CASE”之间可以包含有多个WHEN语句,它们是可选项。,(2)VHDL程序具体执行哪一个顺序处理语句,取决于条件表达式的值与哪一个 WHEN语句的选择值或OTHERS相匹配。如果条件表达式的值与某一个 WHEN语句的选择值或OTHERS相匹配,则执行它们后面所跟的顺序处理语句,执行完顺序处理语句后将结束该 CASE语句。,说明:,(3)WHEN
14、语句中的选择值必须在条件表达式的取值范围内。,(4)CASE语句中每一条件语句的选择只能出现一次,相选择值的条件语句不能重复出现。,(5)所有条件表达式的值都必须穷举,不能穷举的值用OTHERS表示(OTHERS代表已给的所有条件语句中未能列出的其他可能取值,这样可以避免综合器插入不必要的寄存器)。,(6)CASE语句执行时必须选中,且只能选中所列条件语句中的一条。,(7)CASE语句中,WHEN语句可以颠倒次序而不影响语句功能,IF语句却不能(IF隐含有优先级判别)。但是,同样的逻辑功能,CASE结构综合后比IF语句将消耗更多的芯片资源。,3、CASE语句 CASE语句的一般形式为:CASE
15、 表达式 IS WHEN 值域=顺序语句;WHEN OTHERS=顺序语句;END CASE;,在CASE语句中,注意:表达式必须是离散类型;不容许任意两个值域存在交集,并且值域之和必须覆盖表达式所能取值的整个集合。,值域的表达方式,单个普通数值,如6数值选择范围,如2 TO 4,表示取值为2,3,4并列数值,如2|4,表示取值为2或者4以上三种的混合方式例子:WHEN 4 TO 7|2=z3=1;-表示选项值为2,4,5,6,7时选中。,例如:用case语句来描述四选一多路选择器的进程语句PROCESS(sel,a,b,c,d)BEGIN CASE sel IS WHEN 00=outc o
16、utc outc outc=d;END CASE;END PROCESS;,练习1、将上述进程的结构体和实体补充完整,完成4选1数据 选择器的设计练习2、用if语句来描述四选一多路选择器的进程语句最后,比较if和case语句完成的系统的rtl电路图,哪一个更简单?哪一个速度快?,用if语句来描述四选一多路选择器的进程语句PROCESS(sel,a,b,c,d)BEGIN IF sel=00 THEN outi=a;ELSIF sel=01 THEN outi=b;ELSIF sel=10 THEN outi=c;ELSE outi=d;END IF;END PROCESS;,(1)在描述同样逻
17、辑功能的硬件电路时,由于CASE语句的条件与执行语句的对应关系十分明显,因此它的可读性要比IF语句强的多。,(2)CASE语句不存在优先级的问题。由于sel的输出值只有一种可能,因此CASE语句中WHEN引导的语句的排列顺序与程序运行先后没有任何关系,这点与IF_THEN语句有着明显的不同。,(3)CASE语句不仅可用于选择器设计,而且可用于总线、编码、译码等行为。,CASE和IF语句比较:,4、NULL语句 空操作语句 NULL;例如:CASE Opcode IS WHEN 001=tmp:=rega AND regb;WHEN 101=tmp:=rega OR regb;WHEN 110=
18、tmp:=NOT rega;WHEN OTHERS=NULL;END CASE;,5、LOOP语句 LOOP语句用于循环体中。LOOP语句的一般格式为:语句标号:重复模式 LOOP 顺序语句 END LOOP 语句标号;重复模式可以是“WHILE 布尔表达式”;也可以是“FOR 循环变量 IN 离散范围”;,例 奇校验电路ENTITY odd_check ISPORT(z:IN Bit_Vector(7 DOWNTO 0);odd:OUT Bit);END odd_check;ARCHITECTURE arch_while OF odd_check IS-“WHILE 布尔表达式”的结构体BE
19、GIN p1:PROCESS(z)VARIABLE tmp:Bit;VARIABLE i:Integer;BEGIN i:=0;tmp:=z(i);l1:WHILE i 7 LOOP i:=i+1;tmp:=tmp XOR z(i);END LOOP l1;odd=tmp;END PROCESS p1;END arch_while;,ARCHITECTURE arch_for OF odd_check IS-“FOR 循环变量 IN 离散范围”的结构体BEGINp3:PROCESS(z)VARIABLE tmp:Bit;BEGIN tmp:=z(0);l3:FOR i IN 1 TO 7 LO
20、OP tmp:=tmp XOR z(i);END LOOP l3;odd=tmp;END PROCESS p3;END arch_for;,为了提高仿真速度,尽可能在VHDL代码中使用数组运算来替代FOR循环。例如,欲将一个整型数组中的每一个元素都加上一个整型数,可以采用下面两种描述:例:TYPE number IS RANGE n DOWNTO 0;TYPE num_vector IS ARRAY(x DOWNTO y)OF number;FUNCTION my_add(a:num_vector;b:number)RETURN num_vector IS VARIABLE temp:num_
21、vector;BEGIN FOR i IN tempRANGE LOOP temp(i):=a(i)+b;END LOOP;RETURN temp;END;,例:TYPE number IS RANGE n DOWNTO 0;TYPE num_vector IS ARRAY(x DOWNTO y)OF number;FUNCTION my_add(a:num_vector;b:number)RETURN num_vector IS VARIABLE temp:num_vector;BEGIN temp:=(OTHERS=b);temp:=a+temp;RETURN temp;END;采用数组整
22、体相加的描述,要比每个元素分别相加的描述的仿真速度快,从而可以提高仿真性能。,6、NEXT语句 NEXT语句只能用在LOOP语句的循环体中,它用于终止当前的一次循环迭代,并且开始下一次循环。NEXT语句的一般格式为:NEXT LOOP 语句标号 WHEN 布尔表达式;,NEXT语句格式有以下三种,NEXT;-第一种语句格式:无条件终止当前的循环,跳回到本次循环LOOP语句处,开始下一次循环。NEXT LOOP 标号;-第二种语句格式:与第一种语句的功能基本相同,只是当有多重LOOP语句嵌套时,可以跳转到指定标号的LOOP语句处,重新开始执行循环操作。NEXT LOOP 标号 WHEN 条件表达
23、式;-第三种语句格式 如果条件表达式的值为TRUE时,则执行NEXT语句,进入跳转操作,否则继续向下执行。,NEXT语句例子,L1:FOR cnt_value IN 1 TO 8 LOOPs1:a(cnt_value):=0;NEXT WHEN(b=c);s2:a(cnt_value+8):=0;END LOOP L1;,7、EXIT语句 EXIT语句也只能用在LOOP语句的循环体中,它用于终止当前的一次循环迭代,并且结束当前的循环。EXIT语句的一般格式为:EXIT LOOP 语句标号 WHEN 布尔表达式;,EXIT语句格式有以下三种,EXIT;-第一种语句格式EXIT LOOP 标号;-
24、第二种语句格式EXIT LOOP 标号 WHEN 条件表达式;-第三种语句格式,EXIT语句,【例】SIGNAL a,b:STD_LOGIC_VECTOR(1 DOWNTO 0);SIGNAL a_less_then_b:Boolean;.a_less_then_b b EXIT;ELSIF(a(i)=0 AND b(i)=1)THEN a_less_then_b=TRUE;-a b EXIT;ELSE NULL;END IF;END LOOP;-当 i=1时返回LOOP语句继续比较,BEGIN i:=0;tmp:=z(i);l2:LOOP i:=i+1;tmp:=tmp XOR z(i);E
25、XIT l2 WHEN i6;END LOOP l2;odd=tmp;END PROCESS p2;END arch_loop;,NEXT 语句与EXIT语句区别,NEXT 语句是转向LOOP语句的起始处,而EXIT语句是转向LOOP语句的终点。,8、RETURN语句 RETURN 语句只能用于子程序中,它用来结束当前的过程或函数。RETURN语句的一般形式为:,返回语句RETURN有两种语句格式:RETURN;-第一种语句格式RETURN 表达式;-第二种语句格式,RETURN 在过程中的使用,【例】PROCEDURE rs(SIGNAL s,r:IN STD_LOGIC;SIGNAL q,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- VHDL描述语句 VHDL 描述 语句 PPT 课件

链接地址:https://www.31ppt.com/p-5454312.html