《VHDL描述语句》PPT课件.ppt

上传人:小飞机 文档编号:5454312 上传时间:2023-07-08 格式:PPT 页数:116 大小:1,003KB
返回 下载 相关 举报
《VHDL描述语句》PPT课件.ppt_第1页
第1页 / 共116页
《VHDL描述语句》PPT课件.ppt_第2页
第2页 / 共116页
《VHDL描述语句》PPT课件.ppt_第3页
第3页 / 共116页
《VHDL描述语句》PPT课件.ppt_第4页
第4页 / 共116页
《VHDL描述语句》PPT课件.ppt_第5页
第5页 / 共116页
点击查看更多>>
资源描述

《《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,

26、nq:INOUT STD_LOGIC)IS BEGIN IF(s=0 AND r=0)THEN REPORT Forbidden state:s and r are equal to 0;RETURN;ELSE q=NOT(s AND nq)AFTER 5 ns;nq=NOT(r AND q)AFTER 5 ns;END IF;END PROCEDURE rs;,RETURN 在函数中的使用,【例】FUNCTION opt(a,b,opr:STD_LOGIC)RETURN STD_LOGIC IS BEGIN IF(opr=1)THEN RETURN(a AND b);ELSE RETURN(

27、a OR b);END IF;END FUNCTION opt;,9、断言语句 在进程和子程序中的断言语句被称为顺序断言语句。断言语句的一般格式为:ASSERT 布尔表达式 REPORT 信息 SEVERITY 错误级别;要注意的是,当布尔表达式的值为True时,ASSERT语句不执行任何动作;只有当布尔表达式的值为False时,才报告信息和错误级别。,预定义错误等级,【例】P1:PROCESS(S,R)VARIABLE D:std_logic;BEGINASSERT not(R=1and S=1)REPORT both R and S equal to 1 SEVERITY Error;IF

28、 R=1 and S=0 THEN D:=0;ELSIF R=0 and S=1 THEN D:=1;END IF;Q=D;QF=NOT D;END PROCESS;,VHDL93提供了一种简短格式的顺序断言语句REPORT。其一般格式为:REPORT 信息;,【例】PROCEDURE rs(SIGNAL s,r:IN STD_LOGIC;SIGNAL q,nq:INOUT STD_LOGIC)IS BEGIN IF(s=0 AND r=0)THENREPORT“Forbidden state:s and r are quual to 0”;RETURN;ELSE q=NOT(s AND nq

29、)AFTER 5 ns;nq=NOT(r AND q)AFTER 5 ns;END IF;END PROCEDURE rs;,顺序语句小结,1.WAIT语句 2.变量赋值语句 3.信号赋值语句 4.IF语句 5.CASE语句 6.NULL语句 7.LOOP语句 8.NEXT语句 9.EXIT语句 10.过程调用语句 11.RETURN语句 12.断言语句 13.REPORT语句,1.用于仿真和调试的语句(被综合器忽略):WAIT语句、NULL语句、断言语句和REPORT语句2.流程控制语句(影响电路的产生和结构,但语句本身不产生电路模块的语句):IF语句、CASE语句、LOOP语句、NEXT语

30、句、EXIT语句、RETURN语句3.影响电路参数的语句(不产生电路模块):变量赋值语句4.产生电路模块的语句(对综合器敏感):信号赋值语句、过程调用语句,注意:不完整的条件语句的出现,都会引入锁存器,例:ENTITY COMP_BAD IS PORT(a1,b1:IN BIT;q1:OUT BIT);END;ARCHITECTURE ONE OF COMP_BAD IS BEGIN PROCESS(a1,b1)BEGIN-未提及当a1=b1时,q1做何操作 IF a1b1 THEN q1=1;ELSIF a1b1 THEN q1=0;ENDIF;END PROCESS;END;,上例的改正:

31、不产生锁存器,IF a1b1 THEN q1=1;ELSE q1=0;ENDIF;,6.2 并行描述语句,结构体中的语句都是并行语句,并行语句主要有以下几种:1.进程语句 2.块语句 3.并行信号赋值语句 4.并行过程调用语句 5.并行断言语句 6.元件例化语句 7.生成语句,6.2.1 块语句,块语句的格式如下:块标号:BLOCK(保护表达式)类属子句 端口子句 块说明语句 BEGIN 并行语句 END BLOCK 块标号;,说明部分的适用范围仅限于当前块,但对于嵌套更内层的块是透明的,信息可以向内部传递。本身是并行语句,内部语句也是并行语句。,块语句是体现划分机制的语句,它只体现在结构体的

32、划分形式上,块语句不会改变结构体的功能,所以块语句的作用主要是提高并行描述的可读性,以便于仿真、纠错、程序移植和技术交流等。,BLOCK应用举例1,【例1】.b1:BLOCK SIGNAL s1:BIT;BEGIN S1=a AND b;b2:BLOCK SIGNAL s2:BIT;BEGIN s2=c AND d;b3:BLOCK BEGIN Z=s2;END BLOCK b3;END BLOCK b2;y=s1;END BLOCK b1;.,【例2】LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY f_adder IS PORT(ain,bin

33、,cin:IN std_logic;sum,cout:OUT std_logic);END f_adder;ARCHITECTURE e_ad OF f_adder IS SIGNAL so1,co1,co2,so2:std_logic;BEGIN,BLOCK应用举例2,h_adder1:BLOCK-半加器u1 BEGIN PROCESS(ain,bin)BEGIN so1=ain xor bin;co1=ain AND bin;END PROCESS;END BLOCK h_adder1;h_adder2:BLOCK-半加器u2 BEGIN so2=so1 XOR cin;co2=so1 a

34、nd cin;sum=so2;END BLOCK h_adder2;or2:BLOCK-或门u3 BEGIN PROCESS(co2,co1)BEGIN cout=co2 OR co1;END PROCESS;END BLOCK or2;END e_ad;,例2的RTL电路图,6.2.2 并行信号赋值语句信号赋值语句:基本信号、条件赋值语句、选择信号赋值语句,1、基本信号赋值语句,赋值目标=表达式,ARCHITECTURE curt OF bc1 ISSIGNAL s1,e,f,g,h:STD_LOGIC;BEGIN output1=a AND b;output2=c+d;g=e OR f;h

35、=e XOR f;s1=g;END ARCHITECTURE curt;,这里:h=e XOR f是一个并发语句,这里e,f都是信号量,而不是变量。一个并发语句可以写成一个进程。如:PROCESS(e,f)BEGIN h=e XOR f;END PROCESS;,实质是在进程外部实现IF 语句的功能,解决了在构造体中不能直接使用IF语句的问题,因为IF语句是顺序语句,而条件赋值语句是并发语句。,2、条件赋值语句,赋值目标=表达式1 WHEN 赋值条件1 ELSE 表达式2 WHEN 赋值条件2 ELSE 表达式n;,注意:此语句是有优先级,另外ELSE后面没有“;”,ENTITY mux IS

36、 PORT(a,b,c:IN BIT;p1,p2:IN BIT;z:OUT BIT);END;ARCHITECTURE behv OF mux IS BEGIN z=a WHEN p1=1 ELSE b WHEN p2=1 ELSE c;END;,3、选择信号赋值语句,实质是在进程外部实现CASE语句的功能。,WITH 选择表达式 SELECT赋值目标=表达式1 WHEN 选择值1,表达式n WHEN 选择值n;,注意:此 每一子句结尾是逗号,最后一句是分号。不允许有条件重叠现象,也不允许存在条件涵盖不全的情况。,Example:WITH instruction SELECT data=dat

37、a1 AND data2 WHEN“000”,data1 OR data2 WHEN“001”,Z WHEN OTHERS;END behav;,例 4选1多路选择器ENTITY mux4 IS PORT(in0,in1,in2,in3:IN Bit;sel:IN Bit_Vector(0 TO 1);q:OUT Bit);END mux4;,ARCHITECTURE behav1 OF mux4 ISBEGIN mux4_p1:PROCESS(in0,in1,in2,in3,sel)BEGIN IF sel=“00”THEN q=in0;ELSIF sel=“01”THEN q=in1;EL

38、SIF sel=“10”THEN q=in2;ELSE q=in3;END IF;END PROCESS mux4_p1;END behav1;ARCHITECTURE behav2 OF mux4 ISBEGIN q=in0 WHEN sel=“00”ELSE in1 WHEN sel=“01”ELSE in2 WHEN sel=“10”ELSE in3;END behav2;,等价,ARCHITECTURE behav3 OF mux4 ISBEGIN mux4_p2:PROCESS(in0,in1,in2,in3,sel)BEGIN CASE sel IS WHEN“00”=q q q

39、q=in3;END CASE;END PROCESS mux4_p2;END behav3;ARCHITECTURE behav4 OF mux4 ISBEGIN WITH sel SELECT q=in0 WHEN“00”,in1 WHEN“01”,in2 WHEN“10”,in3 WHEN“11”;END behav4;,等价,6.2.3 并行过程调用语句 并行过程调用语句的一般格式为:POSTPONED 过程名(实参表);它可以作为并行语句用于进程之外,等价于一个只有一个顺序过程调用语句的进程。一个延缓的并行过程调用语句,被映射为一个等价的延缓进程。,例如:exmaple(sig1,si

40、g2);-并行过程调用语句,等价于下面的进程PROCESS(sig1,sig2)BEGIN exmaple(sig1,sig2);-顺序过程调用语句END PROCESS;,6.4 并行断言语句 并行断言语句的一般格式为:POSTPONED ASSERT 布尔表达式 REPORT 信息 SEVERITY 错误级别;-它可以作为并行语句用于进程之外,等价于一个只有一个顺序断言语句的进程。,PROCESS(敏感信号表)BEGIN POSTPONED ASSERT 布尔表达式 REPORT 信息 SEVERITY 错误级别;-顺序过程调用语句END PROCESS;,6.2.4 元件例化语句 VHD

41、L中的元件例化语句,提供了一种可以重复利用设计库中已有设计的机制,它常用在设计实体的顶层描述中。,元件例化语句包含两部分,1:元件描述语句(可放在结构体或程序包说明语句)把现成的设计实体定义为一个元件。格式:COMPONENT 模板元件名 PORT(端口子句);END COMPONENT;例:COMPONENT yumen PORT(a,b:IN BIT;c:OUT BIT);END COMPONENT;,元件例化语句包含两部分,2:元件映射语句格式:标号名:元件名 PORT MAP(端口名=连接实体端口名);例:u0:yumen PORT MAP(x1,x2,L1);,说明:元件映射的方法有

42、两种:(1)顺序映射 u0:yumen PORT MAP(x1,x2,L1);(2)名称映射 u2:yumen PORT MAP(a=x1;b=x2;c=L1)名称映射时顺序可以颠倒。,建议采用名称映射法,VHDL对元件例化语句的实参与形参之间的关联,有以下限制:(1)数据类型必须一致。(2)信号模式必须一致。,注意:当例化元件的某个端口不存在时,相应的实际参数缺如,则要使用关键字OPEN,使得模板元件被例化时该端口处于未连接状态。,图1是一个8位移位寄存器的逻辑电路图。,图1 8位移位寄存器,每一个元件例化语句,都会产生一个电路模块(即一个元件)。它将产生8个D触发器dffU1U8:,例 8

43、位移位寄存器ENTITY dff_1 ISPORT(ck,d:IN Bit;q,q_n:OUT Bit);END dff_1;-实体声明ARCHITECTURE bhv1 OF dff_1 ISSIGNAL q_tmp:bit;begin process(ck)Begin if ckevent and ck=1 THEN q_tmp=d;ELSE null;end if;end process;q=q_tmp;q_n=NOT q_tmp;END bhv1;-结构体说明,ENTITY shift IS PORT(sin,clk:IN Bit;sout:OUT Bit);END shift;-顶层

44、设计实体ARCHITECTURE ungen_shift OF shift IS-结构体 SIGNAL s:Bit_Vector(1 TO 7);-内部信号 COMPONENT dff_1 PORT(d,ck:IN Bit;q,q_n:OUT Bit);-元件例化语句 END COMPONENT;BEGIN U1:dff_1 PORT MAP(sin,clk,s(1),open);U2:dff_1 PORT MAP(s(1),clk,s(2),open);U3:dff_1 PORT MAP(s(2),clk,s(3),open);U4:dff_1 PORT MAP(s(3),clk,s(4),

45、open);U5:dff_1 PORT MAP(s(4),clk,s(5),open);U6:dff_1 PORT MAP(s(5),clk,s(6),open);U7:dff_1 PORT MAP(s(6),clk,s(7),open);U8:dff_1 PORT MAP(s(7),clk,sout,open);END ungen_shift;,【例6.20】在半加器设计基础上,用例化元件语句设计一个1位二进制全加器。全加器原理电路图如图6-1所示。它由两个半加器和一个“或”门组成。设计思路是:首先用VHDL语句设计一个1位二进制半加器,然后通过元件例化语句再设计1位二进制全加器。,图6-1

46、 全加器原理电路图,半加器VHDL描述:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY h_adder IS-半加器的描述 PORT(a,b:IN STD_LOGIC;co,so:OUT STD_LOGIC);END h_adder;,ARCHITECTURE fh1 OF h_adder IS BEGIN so=a XOR b;co=a AND b;END fh1;,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY or2a IS-或门的描述 PORT(a,b:IN STD_LOGIC;c:OUT

47、STD_LOGIC);END or2a;ARCHITECTURE rtl OF or2a IS BEGIN c=a OR b;END rtl;,1位二进制全加器顶层设计描述:LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY f_adder IS PORT(ain,bin,cin:IN STD_LOGIC;cout,sum:OUT STD_LOGIC);END f_adder;,ARCHITECTURE fd1 OF f_adder IS COMPONENT h_adder-半加器元件例化 PORT(a,b:IN STD_LOGIC;co,so:OU

48、T STD_LOGIC);END COMPONENT;COMPONENT or2a-或门元件例化 PORT(a,b:IN STD_LOGIC;c:OUT STD_LOGIC);END COMPONENT;,SIGNAL d,e,f:STD_LOGIC;BEGIN u1:h_adder PORT MAP(a=ain,b=bin,co=d,so=e);-名称映射 u2:h_adder PORT MAP(e,cin,f,sum);-位置映射 u3:or2a PORT MAP(a=d,b=f,c=cout);-混合映射END fd1;,使用元件例化语句完成一位全加器的设计,6.2.5 生成语句 生成语

49、句为设计者提供了描述重复结构(或称规则结构)及其例外情况的机制。它可以对设计中规则的重复结构,以循环的形式进行描述;也可以对重复结构的不规则边界,以选择的形式进行描述。生成语句的一般格式为:生成标号:生成模式 GENERATE 并行语句 END GENERATE 生成标号;,生成模式有两种,第一种:标号:FOR 循环变量 IN 取值范围 GENEATE 说明部分;BEGIN 并行语句;END GENERATE标号;第二种:标号:IF 条件 GENERATE 说明部分;BEGIN 并行语句;END GENERATE标号;,生成语句是一种具有复制作用的语句,由两种格式FORGENERATE和IFG

50、ENERATE,注意:与顺序循环语句LOOP相似处:在FOR模式的生成语句中,循环变量无须说明,在生成语句外部循环变量不可见,在生成语句内部,只能对循环变量进行读访问,而不能对其赋值。与顺序循环语句不同的是:在FOR模式的生成语句中,没有与NEXT语句和EXIT语句相类似的并行语句;在IF模式的生成语句中,也没有ELSIF和ELSE分支。,例:使用生成语句描述8位移位寄存器ENTITY dff_1 ISPORT(ck,d:IN Bit;q,q_n:OUT Bit);END dff_2;ARCHITECTURE bhv1 OF dff_1 ISSIGNAL q_tmp:bit;begin pro

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号