第10章VHDL基本语句.ppt

上传人:sccc 文档编号:6107784 上传时间:2023-09-25 格式:PPT 页数:80 大小:843.05KB
返回 下载 相关 举报
第10章VHDL基本语句.ppt_第1页
第1页 / 共80页
第10章VHDL基本语句.ppt_第2页
第2页 / 共80页
第10章VHDL基本语句.ppt_第3页
第3页 / 共80页
第10章VHDL基本语句.ppt_第4页
第4页 / 共80页
第10章VHDL基本语句.ppt_第5页
第5页 / 共80页
点击查看更多>>
资源描述

《第10章VHDL基本语句.ppt》由会员分享,可在线阅读,更多相关《第10章VHDL基本语句.ppt(80页珍藏版)》请在三一办公上搜索。

1、1,第 10 章 VHDL基本语句,2,10.1 顺序语句,10.1.1 赋值语句,信号赋值语句,变量赋值语句,10.1.2 IF语句,VHDL有6种基本顺序语句:赋值语句、流程控制语句、等待语句、子程序调用语句、返回语句、空操作语句.,多条件选择值表达式的4种形式,3,(1)IF 条件句 THEN 顺序语句 ELSIF 条件句 THEN 顺序语句 ELSE 顺序语句 END IF;(2)IF 条件句 THEN 顺序语句 ELSE 顺序语句 END IF;,2.IF 语句,完全IF语句,(3)IF 条件句 THEN 顺序语句 END IF;(4)IF 条件句 THEN 顺序语句 ELSIF 条

2、件句 THEN 顺序语句 END IF;,不完全IF语句,4,2.CASE 语句,CASE ISWhen=;When=;.When others=;END CASE;,选择值可以有四种不同的表达方式:单个普通数值:如6。数值选择范围:如(2 TO 4),表示取值为2、3或4。并列数值:如35,表示取值为3或者5。混合方式:以上三种方式的混合。,CASE语句的格式:,5,用CASE语句应该注意三个问题:,(1)关键字WHEN的数量不作限制,但不容许两个 语句用一个值;,(2)所有WHEN后面的值在CASE语句中合起来的值 是值域中的全部;,(3)WHEN语句的次序可以任意排定。,CASE语句是V

3、HDL提供的另一种形式的控制语句,每当 单个表达式的值在多个起作用的项中选择时,用此语句是 较合适的,它根据所给表达式的值或域,选择“=”后面 的执行语句。,6,例:用VHDL设计7段16进制译码器,用CASE语句完成真值表的功能,向7段数码管输出信号,最高位控制小数点,7,one;,8,KX康芯科技,【例10-1】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY mux41 IS PORT(s4,s3,s2,s1:IN STD_LOGIC;z4,z3,z2,z1:OUT STD_LOGIC);END mux41;ARCHITECTURE acti

4、v OF mux41 IS SIGNAL sel:INTEGER RANGE 0 TO 110;BEGIN PROCESS(sel,s4,s3,s2,s1)BEGIN sel z1 z2 z3 z4=1;-当sel为8110中任一值时选中 END CASE;END PROCESS;END activ;,4选1选择器:根据4位输入码来确定4位输出中哪一位输出为1.,9,10.1 顺序语句,10.1.3 CASE语句,【例10-2】SIGNAL value:INTEGER RANGE 0 TO 110;SIGNAL out1:STD_LOGIC;.CASE value IS-缺少以WHEN引导的条

5、件句 END CASE;.CASE value IS WHEN 0=out1 out1 out1 out1=0;END CASE;,10,10.1 顺序语句,10.1.3 CASE语句,与IF语句相比,CASE语句组的程序可读性比较好,这是因为它把条件中所有可能出现的情况全部列出来了,可执行条件一目了然.而且CASE语句的执行过程即条件性是独立的,排它的,而不像IF语句那样有一个逐项条件顺序比较的过程.CASE中条件句的次序是不重要的,其运行方式更接近于并行方式.一般地,综合后对相同的逻辑功能,CASE语句比IF语句的描述耗用更多的硬件资源,不但如此,对于有的逻辑,CASE 语句无法描述.,1

6、1,10.1.4 LOOP语句,(1)单个LOOP语句,其语法格式如下:LOOP标号:LOOP 顺序语句 END LOOP LOOP标号;,.L2:LOOP a:=a+1;EXIT L2 WHEN a 10;-当a大于10时跳出循环 END LOOP L2;.,12,10.1.4 LOOP语句,(2)FOR_LOOP语句,语法格式如下:LOOP标号:FOR 循环变量 IN 循环次数范围 LOOP 顺序语句 END LOOP LOOP标号;FOR后的”循环变量”是一个临时变量,属LOOP语句的局部变量,不必事先定义.这个变量只能作为赋值源,不能被赋值,它由LOOP语句自动定义.使用时应当注意,在

7、LOOP语句范围内不要再使用其他与此循环变量同名的标识符.“循环次数范围”规定LOOP语句中的顺序语句被执行次数.循环变量从范围初值开始,每执行完一次顺序增1,直至最大值.,13,【例10-4】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY p_check IS PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);y:OUT STD_LOGIC);END p_check;ARCHITECTURE opt OF p_check IS SIGNAL tmp:STD_LOGIC;BEGIN PROCESS(a)BEGIN tm

8、p=0;FOR n IN 0 TO 7 LOOP tmp=tmp XOR a(n);END LOOP;y=tmp;END PROCESS;END opt;,奇校验就是看2进制数的1的个数为奇数 就在校验位填0 偶数就填1 使1的个数变成奇数个.偶校验相反 把1的个数变成偶数.然后传送数据,接收后在做相应的奇偶校验判断是否有位传送错误,14,10.1.4 LOOP语句,【例10-5】SIGNAL a,b,c:STD_LOGIC_VECTOR(1 TO 3);.FOR n IN 1 To 3 LOOPa(n)=b(n)AND c(n);END LOOP;此段程序等效于顺序执行以下三个信号赋值操作:

9、a(1)=b(1)AND c(1);a(2)=b(2)AND c(2);a(3)=b(3)AND c(3);,15,10.1 顺序语句,10.1.10 NEXT语句,NEXT;-第一种语句格式NEXT LOOP标号;-第二种语句格式NEXT LOOP标号 WHEN 条件表达式;-第三种语句格式,对于第一种格式,当LOOP内的顺序语句执行到NEXT语句时,即刻无条件终止当前的循环,跳回到本次循环LOOP语句处,开始下一次循环.,对于第二种格式,与第一种功能基本相似.只是在有多重LOOP语句嵌套时,前者可以跳转到指定标号的LOOP语句处.,对于第三种格式,分句”WHEN 条件表达式”是NEXT执行

10、的条件,如果条件表达式为TRUE,则执行NEXT语句,进入跳转操作,否则继续向下执行.,16,10.1 顺序语句,10.1.10 NEXT语句,【例10-6】.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;,17,10.1 顺序语句,10.1.10 NEXT语句,【例10-7】.L_x:FOR cnt_value IN 1 TO 8 LOOP s1:a(cnt_value):=0;k:=0;L_y:LOOP s2:b(k):=0;NEXT L_x

11、 WHEN(ef);s3:b(k+8):=0;k:=k+1;NEXT LOOP L_y;NEXT LOOP L_x;.,嵌套LOOP语句,跳转到标号处,18,10.1.6 EXIT语句,EXIT;-第一种语句格式EXIT LOOP标号;-第二种语句格式EXIT LOOP标号 WHEN 条件表达式;-第三种语句格式,EXIT的每种格式都与NEXT语句的格式和功能类似.所不同的是,NEXT是跳转到LOOP语句的起点,而EXIT是跳转方向是LOOP标号制定的LOOP循环语句的结束处,即完全跳出指定的循环,并开始执行此循环外的语句.这就是说,NEXT语句是转向LOOP语句的起始点,而EXIT语句则是转

12、向LOOP语句的终点.,19,10.1.6 EXIT语句,【例10-8】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语句继续比较,20,10.1 顺序语句,10.1.7 WAIT语句,WAIT;-第一种语句格式WAIT ON 信号表;-第二种语句格式 WAIT UNT

13、IL 条件表达式;-第三种语句格式WAIT FOR 时间表达式;-第四种语句格式,超时等待语句,21,10.1.7 WAIT语句,WAIT;-第一种语句格式WAIT ON 信号表;-第二种语句格式 WAIT UNTIL 条件表达式;-第三种语句格式WAIT FOR 时间表达式;-第四种语句格式,超时等待语句,第一种语句格式中,未设置停止挂起条件的表达式,表示永远挂起第二种格式称为敏感信号等待语句,在信号表中列出的信号是等待语句的敏感信号,当处于等待状态时,敏感信号的任何变化将结束挂起,再次启动进程.(已列出敏感量的进程中不能使用任何形式的WAIT语句).一般地,WAIT语句可用于进程中的任何地

14、方.,22,10.1 顺序语句,10.1.7 WAIT语句,【例10-9】SIGNAL s1,s2:STD_LOGIC;.PROCESSBEGIN.WAIT ON s1,s2;END PROCESS;,23,10.1.7 WAIT语句,【例10-10】(a)WAIT_UNTIL结构(b)WAIT_ON结构.LOOPWait until enable=1;Wait on enable;.EXIT WHEN enable=1;END LOOP;,WAIT_UNTIL结构称为条件等待语句,相对于第二种语句格式,条件等待语句格式中又多了一种重新启动进程的条件,即被此语句挂起的进程需顺序满足如下两个条件

15、,进程才能脱离挂起状态.在条件表达式中所含的信号发生了改变此信号改变后,且满足WAIT语句所设的条件,等效,24,10.1.7 WAIT语句,WAIT UNTIL 信号=Value;-(1)WAIT UNTIL 信号EVENT AND 信号=Value;-(2)WAIT UNTIL NOT 信号STABLE AND 信号=Value;-(3),WAIT UNTIL clock=1;WAIT UNTIL rising_edge(clock);WAIT UNTIL NOT clockSTABLE AND clock=1;WAIT UNTIL clock=1 AND clockEVENT;,一般地,

16、只有WAIT_UNTIL格式的等待语句可以被综合器接受(其余格式语句只能在VHDL仿真器中使用),3种表达方式:,如果设clock为时钟信号输入端,以下4条语句所设的进程启动条件都是时钟上升沿,所以他们对应的硬件结构是一样的.,与ENENT函数相反,在时间内无事件发生,25,10.1 顺序语句,10.1.7 WAIT语句,【例10-11】PROCESSBEGINWAIT UNTIL clk=1;ave=a;WAIT UNTIL clk=1;ave=ave+a;WAIT UNTIL clk=1;ave=ave+a;WAIT UNTIL clk=1;ave=(ave+a)/4;END PROCES

17、S;,完成硬件求平均的功能.4个时钟脉冲后将获得4个数值的平均值.,1个脉冲,2个脉冲,26,10.1 顺序语句,10.1.7 WAIT语句,【例10-12】PROCESSBEGINrst_loop:LOOPWAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号NEXT rst_loop WHEN(rst=1);-检测复位信号rst x=a;-无复位信号,执行赋值操作WAIT UNTIL clock=1 AND clockEVENT;-等待时钟信号NEXT rst_loop When(rst=1);-检测复位信号rst y=b;-无复位信号,执行赋值操作 END L

18、OOP rst_loop;END PROCESS;,27,【例10-13】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY shifter IS PORT(data:IN STD_LOGIC_VECTOR(7 DOWNTO 0);shift_left:IN STD_LOGIC;shift_right:IN STD_LOGIC;clk:IN STD_LOGIC;reset:IN STD_LOGIC;mode:IN STD_LOGIC_VECTOR(1 DOWNTO 0);qout:BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0)

19、;END shifter;ARCHITECTURE behave OF shifter IS SIGNAL enable:STD_LOGIC;BEGIN,28,BEGIN PROCESS BEGIN WAIT UNTIL(RISING_EDGE(clk);-等待时钟上升沿 IF(reset=1)THEN qout qout qout qout NULL;END CASE;END IF;END PROCESS;END behave;,29,10.1 顺序语句,10.1.9 RETURN语句,RETURN;-用于过程RETURN 表达式;-用于函数,有返回值,【例10-16】PROCEDURE r

20、s(SIGNAL s,r:IN STD_LOGIC;SIGNAL q,nq:INOUT STD_LOGIC)IS BEGIN IF(s=1 AND r=1)THEN REPORT Forbidden state:s and r are quual to 1;RETURN;ELSE q=s AND nq AFTER 5 ns;nq=s AND q AFTER 5 ns;END IF;END PROCEDURE rs;,30,10.1 顺序语句,【例10-17】FUNCTION opt(a,b,opr:STD_LOGIC)RETURN STD_LOGIC IS BEGIN IF(opr=1)THE

21、N RETURN(a AND b);ELSE RETURN(a OR b);END IF;END FUNCTION opt;,10.1.10 空操作语句,CASE Opcode IS WHEN 001=tmp:=rega AND regb;WHEN 101=tmp:=rega OR regb;WHEN 110=tmp:=NOT rega;WHEN OTHERS=NULL;END CASE;,31,10.2 并行语句,并行信号赋值语句(Concurrent Signal Assignments)。,进程语句(Process Statements)。,块语句(Block Statements)。,

22、条件信号赋值语句(Selected Signal Assignments)。,元件例化语句(Component Instantiations),其中包括类属配置语句。,生成语句(Generate Statements)。,并行过程调用语句(Concurrent Procedure Calls)。,ARCHITECTURE 结构体名 OF 实体名 IS 说明语句 BEGIN 并行语句END ARCHITECTURE 结构体名,3种形式:简单信号赋值条件信号赋值选择信号赋值,32,例:2选1多路选择器的VHDL描述,LIBRARY ieee;USE ieee.std_logic_1164.all;

23、,ENTITY mux21a IS PORT(a,b:IN STD_LOGIC;s:IN STD_LOGIC;y:OUT STD_LOGIC);END ENTITY mux21a;ARCHITECTURE one OF mux21a ISBEGIN y=(a AND(NOT s)OR(b AND s);END ARCHITECTURE one;,实体,结构体,1.简单的信号赋值语句,赋值语句的格式:,=,33,例:下面的两个结构体在功能上是等价的。,ENTITY exe IS PORT(a1,a2:IN BIT;b1,b2:OUT BIT);END exe;,ARCHITECTURE exe_

24、arc1 OF exe ISBEGIN b1=a1 AND b2;b2=(NOT a1)OR a2;END exe_arc1;,ARCHITECTURE exe_arc2 OF exe ISBEGIN b2=(NOT a1)OR a2;b1=a1 AND b2;END exe_arc2;,34,将第一个满足WHEN后赋值条件所对应的表达式的值,赋给赋值目标信号。,条件信号赋值语句的格式如下:WHEN ELSE WHEN ELSE;,2.条件赋值语句,数据类型:布尔量,条件测试的顺序性,35,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux4

25、 IS PORT(I0,I1,I2,I3,A,B:IN std_logic;Q:OUT std_logic);END mux4;,ARCHITECTURE mux4_arc OF mux4 IS BEGIN,Q=I0 WHEN A=0 AND B=0 ELSE I1 WHEN A=1 AND B=0 ELSE I2 WHEN A=0 AND B=1 ELSE I3;END mux4_arc;,例:四路数据选择器VHDL程序,36,当选择信号的值满足条件的子句时,将此子句表达式中的值赋给赋值目标信号。,选择信号赋值语句的格式如下:WITH SELECT WHEN,WHEN,WHEN;,3.选择信

26、号赋值语句:,包含所有的值,条件测试的同期性,37,10.2.1 并行信号赋值语句,选择信号赋值语句本身不能在进程中应用,但其功能却与进程中CASE语句的功能相似.CASE语句的执行依赖于进程中敏感信号的改变而启动进程,而且要求CASE语句中各子句的条件不能有重叠,必须包含所有的条件.选择信号语句中也有敏感量,即关键词WITH旁的选择表达式,每当选择表达式的值发生变化时,就将启动此语句对各子句的选择值进行测试对比,当发现有满足条件的子句时,就将此子句表达式中的值赋给赋值目标信号.选择信号语句对子句条件选择值的测试具有同期性,不允许有条件重叠的现象,也不允许存在条件涵盖不全的情况.,38,例:四

27、路数据选择器VHDL程序,ENTITY sels IS PORT(d0,d1,d2,d3:IN STD_LOGIC;s:IN STD_LOGIC_VECTOR(1 DOWNTO 0);out1:OUT STD_LOGIC);END sels;,ARCHITECTURE sels_arc OF sels ISBEGIN WITH s SELECT out1=d0 WHEN“00”,d1 WHEN“01”,d2 WHEN“10”,d3 WHEN others;END sels_arc;,39,LIBRARY ieee;USE ieee.std_logic_1164.all;ENTITY mux4

28、IS PORT(I0,I1,I2,I3,A,B:IN std_logic;Q:OUT std_logic);END mux4;,ARCHITECTURE mux4_arc OF mux4 IS SIGNAL sel:INTEGER RANGE 0 TO 3;BEGIN WITH sel SELECT Q=I0 WHEN 0,I1 WHEN 1,I2 WHEN 2,I3 WHEN 3;,sel=0 WHEN A=0 AND B=0 ELSE 1 WHEN A=1 AND B=0 ELSE 2 WHEN A=0 AND B=1 ELSE 3;END mux4_arc;,例:四路数据选择器VHDL程

29、序,40,KX康芯科技,【例10-19】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;USE IEEE.STD_LOGIC_UNSIGNED.ALL;ENTITY decoder IS PORT(a,b,c:IN STD_LOGIC;data1,data2:IN STD_LOGIC;dataout:OUT STD_LOGIC);END decoder;ARCHITECTURE concunt OF decoder IS SIGNAL instruction:STD_LOGIC_VECTOR(2 DOWNTO 0);BEGIN instruction=c,41

30、,10.2 并行语句,10.2.1 并行信号赋值语句,3.选择信号赋值语句,.WITH selt SELECTmuxout=a WHEN 0|1,-0或1 b WHEN 2 TO 10,-2或3,或4或10 c WHEN 6,d WHEN 7,Z WHEN OTHERS;.,注意:选择信号赋值语句的每一子句结尾是逗号,最后一句是分号;而条件赋值语句每一子句的结尾没有任何标点,只有最后一句有分号.,42,PROCESS 组成,PROCESS语句结构,进程说明,顺序描述语句,敏感信号参数表,简单赋值语句,进程启动语句,子程序调用语句,顺序描述语句,进程跳出语句,Something which yo

31、u can,Something which you can use within Process onlyIF-THEN-ELSIF-END IF CASE-WHEN-OTHERS LOOP-FOR,If-then-else syntax,IF _expression THEN _statement;_statement;ELSIF _expression THEN _statement;_statement;ELSE _statement;_statement;END IF;,Case-When-Others,CASE _expression ISWHEN _constant_value=_

32、statement;_statement;WHEN _constant_value=_statement;_statement;WHEN OTHERS=_statement;_statement;END CASE;,Loop-For,_loop_label:FOR _index_variable IN _range LOOP _statement;_statement;END LOOP _loop_label;,47,3)进程语句要点:,(1)PROCESS为一无限循环语句,(3)进程中的顺序语句具有明显的顺序/并行运行双重性,(2)进程必须由敏感信号的变化来启动,(4)进程语句本身是并行语句

33、,(5)信号是多个进程间的通信线,(6)一个进程中只允许描述对应于一个时钟信号的同步时序逻辑,48,10.2 并行语句,10.2.2 块语句结构,BLOCK语句应用知识一种将结构体中的并行描述语句进行组合的方法,它的主要目的是改善并行语句及其结构的可读性,或是利用BLOCK的保护表达式关闭某些信号。BLOCK 语句的表达格式如下:块标号:BLOCK(块保护表达式)接口说明 类属说明 BEGIN 并行语句END BLOCK 块标号;,49,10.2 并行语句,10.2.2 块语句结构,【例10-21】.b1:BLOCK SIGNAL s1:BIT;BEGIN S1=a AND b;b2:BLOC

34、K SIGNAL s2:BIT;BEGIN s2=c AND d;b3:BLOCK BEGIN Z=s2;END BLOCK b3;END BLOCK b2;y=s1;END BLOCK b1;.,50,【例10-22】LIBRARY IEEE;USE IEEE.std_logic_1164.ALL;ENTITY f_adder IS PORT(ain,bin,cin:IN std_logic;sum,cout:OUT std_logic);END f_adder;ARCHITECTURE e_ad OF f_adder IS SIGNAL so1,co1,co2:std_logic;BEGI

35、N h_adder1:BLOCK-半加器u1 BEGIN PROCESS(ain,bin)BEGIN so1=NOT(ain XOR(NOT bin);co1=ain AND bin;END PROCESS;END BLOCK h_adder1;h_adder2:BLOCK-半加器u2 SIGNAL so2:std_logic;BEGIN so2=NOT(so1 XOR(NOT cin);co2=so1 and cin;sum=so2;END BLOCK h_adder2;or2:BLOCK-或门u3 BEGIN PROCESS(co2,co1)BEGIN cout=co2 OR co1;EN

36、D PROCESS;END BLOCK or2;END e_ad;,51,10.2 并行语句,10.2.3 并行过程调用语句,过程名(关联参量名);,【例10-23】.PROCEDURE adder(SIGNAL a,b:IN STD_LOGIC;-过程名为adder SIGNAL sum:OUT STD_LOGIC);.adder(a1,b1,sum1);-并行过程调用.-在此,a1、b1、sum1即为分别对应于a、b、sum的关联参量名 PROCESS(c1,c2);-进程语句执行 BEGIN Adder(c1,c2,s1);-顺序过程调用,在此c1、c2、s1即为分别-对应于a、b、su

37、m的关联参量名 END PROCESS;,52,10.2 并行语句,10.2.3 并行过程调用语句,【例10-24】PROCEDURE check(SIGNAL a:IN STD_LOGIC_VECTOR;-在调用时 SIGNAL error:OUT BOOLEAN)IS-再定位宽 VARIABLE found_one:BOOLEAN:=FALSE;-设初始值 BEGIN FOR i IN aRANGE LOOP-对位矢量a的所有的位元素进行循环检测 IF a(i)=1 THEN-发现a中有 1 IF found_one THEN-若found_one为TRUE,则表明发现了一个以上的1 ER

38、ROR=TRUE;-发现了一个以上的1,令found_one为TRUE RETURN;-结束过程 END IF;Found_one:=TRUE;-在a中已发现了一个1 End IF;End LOOP;-再测a中的其他位 error=NOT found_one;-如果没有任何1被发现,error将被置TRUE END PROCEDURE check;,53,10.2 并行语句,10.2.3 并行过程调用语句,.CHBLK:BLOCK SIGNAL s1:STD_LOGIC_VECTOR(0 TO 0);-过程调用前设定位矢尺寸 SIGNAL s2:STD_LOGIC_VECTOR(0 TO 1)

39、;SIGNAL s3:STD_LOGIC_VECTOR(0 TO 2);SIGNAL s4:STD_LOGIC_VECTOR(0 TO 3);SIGNAL e1,e2,e3,e4:Boolean;BEGIN Check(s1,e1);-并行过程调用,关联参数名为s1、e1 Check(s2,e2);-并行过程调用,关联参数名为s2、e2 Check(s3,e3);-并行过程调用,关联参数名为s3、e3 Check(s4,e4);-并行过程调用,关联参数名为s4、e4 END BLOCK;.,54,10.2 并行语句,10.2.10 生成语句,生成语句可以简化为有规则设计结构的逻辑描述。生成语句

40、有一种复制作用,在设计中,只要根据某些条件,设定好某一元件或设计单位,就可以利用生成语句复制一组完全相同的并行元件或设计单元电路结构。生成语句有以下两种形式:标号:FOR 循环变量 IN 取值范围 GENERATE 说明 BEGIN 并行语句 END GENERATE 标号;,55,10.2 并行语句,10.2.10 生成语句,标号:IF 条件GENERATE 说明 Begin 并行语句 END GENERATE 标号;这两种语句格式都是由如下4部分组成:1。生成方式:有FOR和IF两种结构,用于规定并行语句的复制方式。,56,10.2 并行语句,10.2.10 生成语句,2.说明部分:对元件

41、数据类型、子程序、数据对象做一些局部说明。3.并行语句:生成语句结构中的并行语句是用来“复制”的基本单元,主要包括元件、进程语句、块语句、并行过程调用语句、并行信号赋值语句,甚至生成语句,这表示生成语句允许存在嵌套结构,因而可用于生成元件的多维阵列结构。4.标号:并非必需的,57,10.2 并行语句,10.2.10 生成语句,表达式 TO 表达式;-递增方式,如1 TO 10表达式 DOWNTO 表达式;-递减方式,如10 DOWNTO 1,【例10-210】.COMPONENT compPORT(x:IN STD_LOGIC;y:OUT STD_LOGIC);END COMPONENT;SI

42、GNAL a:STD_LOGIC_VECTOR(0 TO 7);SIGNAL b:STD_LOGIC_VECTOR(0 TO 7);.gen:FOR i IN aRANGE GENERATE u1:comp PORT MAP(x=a(i),y=b(i);END GENERATE gen,.,58,10.2 并行语句,10.2.10 生成语句,图10-3 生成语句产生的8个相同的电路模块,59,10.2 并行语句,10.2.10 生成语句,【例10-26】锁存器LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY Latch IS PORT(D,ENA:

43、IN STD_LOGIC;Q:OUT STD_LOGIC);END ENTITY Latch;ARCHITECTURE one OF Latch IS SIGNAL sig_save:STD_LOGIC;BEGIN PROCESS(D,ENA)BEGIN IF ENA=1 THEN sig_save=D;END IF;Q=sig_save;END PROCESS;END ARCHITECTURE one;,60,KX康芯科技,【例10-27】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY SN74373 IS PORT(D:IN STD_LOGI

44、C_VECTOR(8 DOWNTO 1);OEN,G:IN STD_LOGIC;Q:OUT STD_LOGIC_VECTOR(8 DOWNTO 1);END ENTITY SN74373;ARCHITECTURE two OF SN74373 IS SIGNAL sigvec_save:STD_LOGIC_VECTOR(8 DOWNTO 1);BEGIN PROCESS(D,OEN,G,sigvec_save)BEGIN IF OEN=0 THEN Q=sigvec_save;ELSE Q=ZZZZZZZZ;END IF;IF G=1 THEN Sigvec_save=D;END IF;END

45、 PROCESS;END ARCHITECTURE two;ARCHITECTURE one OF SN74373 IS COMPONENT Latch PORT(D,ENA:IN STD_LOGIC;Q:OUT STD_LOGIC);END COMPONENT;SIGNAL sig_mid:STD_LOGIC_VECTOR(8 DOWNTO 1);BEGIN GeLatch:FOR iNum IN 1 TO 8 GENERATE Latchx:Latch PORT MAP(D(iNum),G,sig_mid(iNum);END GENERATE;Q=sig_mid WHEN OEN=0 EL

46、SE ZZZZZZZZ;-当OEN=1时,Q(8)Q(1)输出状态呈高阻态END ARCHITECTURE one;,61,KX康芯科技,【例10-28】LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY d_ff ISPORT(d,clk_s:IN STD_LOGIC;q:OUT STD_LOGIC;nq:OUT STD_LOGIC);END ENTITY d_ff;ARCHITECTURE a_rs_ff OF d_ff ISBEGINbin_p_rs_ff:PROCESS(CLK_S)BEGIN IF clk_s=1 AND clk_sEVEN

47、T THEN q=d;nq=NOT d;END IF;END PROCESS;END ARCHITECTURE a_rs_ff;LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY cnt_bin_n isGENERIC(n:INTEGER:=6);PORT(q:OUT STD_LOGIC_VECTOR(0 TO n-1);in_1:IN STD_LOGIC);END ENTITY cnt_bin_n;(接下页),62,ARCHITECTURE behv OF cnt_bin_n ISCOMPONENT d_ff PORT(d,clk_s:IN STD

48、_LOGIC;Q,NQ:OUT STD_LOGIC);END COMPONENT d_ff;SIGNAL s:STD_LOGIC_VECTOR(0 TO n);BEGIN s(0)=in_1;q_1:FOR i IN 0 TO n-1 GENERATE dff:d_ff PORT MAP(s(i+1),s(I),q(i),s(i+1);END GENERATE;END ARCHITECTURE behv;,63,10.2 并行语句,10.2.10 生成语句,图10-4 6 位二进制计数器原理图,64,10.2 并行语句,10.2.6 REPORT语句,【例10-29】LIBRARY IEEE;

49、USE IEEE.std_logic_1164.ALL;ENTITY RSFF2 IS PORT(S,R:IN std_logic;Q,QF:OUT std_logic);END RSFF2;ARCHITECTURE BHV OF RSFF2 IS BEGIN P1:PROCESS(S,R)VARIABLE D:std_logic;BEGIN IF R=1 and S=1 THEN REPORT BOTH R AND S IS 1;-报告出错信息 ELSIF R=1 and S=0 THEN D:=0;ELSIF R=0 and S=1 THEN D:=1;END IF;Q=D;QF=NOT

50、D;END PROCESS;END BHV;,65,10.2 并行语句,10.2.7 断言语句:先判断ASSERT后的条件表达式的值,如果为真,继续执行,给出出错信息,指出错误级别,如果为假,表示正常,跳过下面两个句子,ASSERT REPORT SEVERITY;,表10-1 预定义错误等级,66,10.2 并行语句,10.2.7 断言语句,1.顺序断言语句:放在进程内的断言语句,【例10-30】P1:PROCESS(S,R)VARIABLE D:std_logic;BEGINASSERT not(R=1and S=1)REPORT both R and S equal to 1 SEVER

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

当前位置:首页 > 建筑/施工/环境 > 农业报告


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号