第10章VHDL基本语句.ppt
《第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.选择信
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 10 VHDL 基本 语句

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