【教学课件】第7章VHDL基本语句与基本设计.ppt

上传人:小飞机 文档编号:5659306 上传时间:2023-08-06 格式:PPT 页数:56 大小:813.50KB
返回 下载 相关 举报
【教学课件】第7章VHDL基本语句与基本设计.ppt_第1页
第1页 / 共56页
【教学课件】第7章VHDL基本语句与基本设计.ppt_第2页
第2页 / 共56页
【教学课件】第7章VHDL基本语句与基本设计.ppt_第3页
第3页 / 共56页
【教学课件】第7章VHDL基本语句与基本设计.ppt_第4页
第4页 / 共56页
【教学课件】第7章VHDL基本语句与基本设计.ppt_第5页
第5页 / 共56页
点击查看更多>>
资源描述

《【教学课件】第7章VHDL基本语句与基本设计.ppt》由会员分享,可在线阅读,更多相关《【教学课件】第7章VHDL基本语句与基本设计.ppt(56页珍藏版)》请在三一办公上搜索。

1、第7章 VHDL基本语句与基本设计,EDA技术与VHDL设计,7.1,顺序语句,并行语句,VHDL组合逻辑电路设计,VHDL时序逻辑电路设计,7.2,7.3,7.4,VHDL基本语句与基本设计,顺序语句的执行顺序与书写顺序一致,与传统软件设计语言的特点相似。顺序语句只能用于进程和子程序中,被用来描述组合逻辑和时序逻辑。常用的顺序描述语句有:赋值语句、IF语句、CASE语句、LOOP语句、NEXT语句、EXIT语句、子程序、RETURN语句、WAIT语句和NULL语句。,7.1 顺序语句,信号赋值语句:,7.1.1 赋值语句,赋值目标=赋值源;,变量赋值语句:,赋值目标:=赋值源;,根据语句所设

2、条件,if语句有选择地执行指定的语句,其语法格式由简单到复杂可以分为三种:(1)具有开关控制的IF语句(2)具有二选择控制的IF语句(3)具有多选择控制的IF语句,7.1.2 IF语句,一般格式:if 条件 then 顺序语句;end if;当条件成立,执行顺序语句,否则跳过语句。,具有开关控制的IF语句,if(EN=1)then A=B;-当条件EN=1时,A随B变化;否则,该语句不执行end if;,具有开关控制的IF语句举例,一般格式:if 条件 then 顺序语句;else 顺序语句;end if;条件成立执行then后顺序语句;否则执行else后的顺序语句。,具有二选择控制的IF语句

3、,if OE=0 thenY=not x;elseY=Z;-高阻符号“Z”要大写end if;,用IF语句描述三态非门,一般格式:if 条件 then 顺序语句;elsif 条件 then 顺序语句;elsif 条件 then 顺序语句;else 顺序语句;end if;,具有多选择控制的IF语句,case语句根据表达式的取值直接从多组顺序语句中选择一组执行,其语句格式为:case 表达式 is when 选择值=顺序语句;when 选择值=顺序语句;.when others=顺序语句;end case;,7.1.3 CASE语句,一般格式:(1)关键词others只能出现一次,且只能作为最后

4、一种条件取值。使用others的目的是为了使条件句中的所有选择值能涵盖表达式的所有取值,以免综合器会插入不必要的锁存器。,使用CASE语句注意事项,一般格式:(2)条件句中的选择值必须在表达式的取值范围内。(3)case语句中每一条件句的选择值只能出现一次,不能有相同选择值的条件语句出现。(4)case语句执行必须选中,且仅能选中所列语句中的一条。,使用CASE语句注意事项,(1)WHEN 取值=顺序语句:(2)WHEN 取值|取值|取值=顺序语句:(3)WHEN 取值 TO 取值=顺序语句;(4)WHEN 取值 DOWNTO 取值=顺序语句;(5)WHEN OTHERS=顺序语句;,CASE

5、语句中WHEN字句书写格式,d0d0d1d2d3=d;END CASE;,CASE语句应用举例,LOOP语句与其它高级语言中的循环语句相似,它可以使所包含的一组顺序语句被循环执行,其执行次数可由设定的循环参数决定。LOOP语句有三种格式:(1)无限LOOP语句(2)FOR_LOOP语句(3)WHILE_LOOP语句,7.1.4 LOOP语句,标号:LOOP 顺序语句 EXIT 标号;END LOOP;举例:L2:LOOP a:=a+1;EXIT L2 WHEN a10;END LOOP L2;,无限LOOP语句,标号:FOR 循环变量 IN 离散范围 LOOP 顺序处理语句;END LOOP

6、标号;注意:(1)循环变量是LOOP内部自动声明的局部量,仅在LOOP内可见。(2)离散范围必须是可计算的整数范围。循环次数范围规定LOOP语句中的顺序语句被执行的次数。,FOR_LOOP语句,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY parity_check IS PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);y:OUT STD_LOGIC);END ENTITY parity_check;ARCHITECTURE one OF parity_check ISBEGIN PROCESS(a)VARIABLE

7、 tmp:STD_LOGIC;BEGIN tmp:=1;FOR i IN 0 TO 7 LOOP tmp:tmp xor a(i);END LOOP;y=tmp;END PROCESS;END;,用FOR LOOP语句描述8位奇偶校验电路,标号:WHILE 循环条件 LOOP 顺序处理语句;END LOOP 标号;例:sum:=0;i:=0;abcd:WHILE(i10)LOOP sum:=sum+i;i:=i+1;END LOOP abcd;,WHILE_LOOP语句,LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL;ENTITY parity_check I

8、S PORT(a:IN STD_LOGIC_VECTOR(7 DOWNTO 0);y:OUT STD_LOGIC);END ENTITY parity_check;ARCHITECTURE one OF parity_check ISBEGIN PROCESS(a)VARIABLE tmp:STD_LOGIC;VARIABLE i:INTEGER;BEGIN tmp:=0;i:=0;WHILE(i8)LOOP tmp:tmp xor a(i);i:=i+1;END LOOP;y=tmp;END PROCESS;END;,用WHILE_LOOP语句描述8位奇偶校验电路,在LOOP语句中,NEXT

9、语句用来跳出本次循环。其格式分三种:(1)NEXT:无条件终止当前的循环,跳回到本次循环LOOP语句开始处,开始下次循环。(2)NEXT:标号;无条件终止当前的循环,跳转到指定标号的LOOP语句开始处,重新开始执行循环操作。(3)NEXT 标号 WHEN 条件表达式;,7.1.5 NEXT语句,L1:WHILE i10 LOOP L2:WHILE j20 LOOP NEXT L1 WHEN i=j;END LOOP L2;END LOOP L1;,NEXT语句举例,EXIT语句是LOOP语句的内部循环控制语句,作用是结束循环状态。而区别在于NEXT语句是跳向LOOP语句的起始点,EXIT语句则

10、是跳向LOOP语句的终点。EXIT的语句格式也有3种:(1)EXIT;(2)EXIT LOOP 标号;(3)EXIT LOOP 标号 WHEN 条件表达式;,7.1.6 EXIT语句,PROCESS(a)VARIABLE int_a:INTEGER;BEGIN int_a:=a;FOR i IN 0 TO max_limit LOOP IF(int_a=0)THEN EXIT;ELSE int_a:=int_a-1;END IF;END LOOP;END PROCESS;,EXIT语句举例,在进程中(包括过程中),当执行到WAIT(等待语句时),运行程序将被挂起,直到满足此语句设置的结束挂起条

11、件后,才重新开始执行进程或过程中的程序。WAIT语句有以下四种不同的语句格式:(1)WAIT-无限等待(2)WAIT ON-敏感信号量变换(3)WAIT UNTIL-条件满足(可综合)(4)WAIT FOR-时间到,7.1.7 WAIT语句,进程中其一般格式为:WAIT ON 信号,信号;例如,以下两种描述是完全等价的:PROCESS(a,b)PROCESS BEGIN BEGIN y=a AND b;y=a AND b;END PROCESS;WAIT ON a,b;END PROCESS;敏感信号量列表和WAIT语句选其一,不能同时使用。,1.WAIT ON语句,进程中其一般格式为:WAI

12、T UNTIL 表达式;例如,WAIT UNTIL语句有三种表达方式:(1)WAIT UNTIL 信号某个数值;(2)WAIT UNTIL 信号EVENT AND 信号某个数值;(3)WAIT UNTIL NOT(信号STABLE)AND 信号某个数值;,2.WAIT UNTIL语句,在进程中允许对子程序进行调用。对子程序的调用语句是顺序语句的一部分。子程序包括过程和函数,可以在VHFL的结构体或程序包中的任何位置对子程序进行调用。子程序调用可以在任何地方根据其名称调用子程序。,7.1.8 子程序调用语句,调用过程的语句格式如下:过程名(参数名=表达式,参数名=表达式);其中表达式也称为实参,

13、它可以是一个具体的数值,也可以是一个标识符,是当前调用程序中过程形参的接受体。,过程调用,函数调用与过程调用十分类似,不同之处是调用函数将返回一个指定类型的值,函数的参量只能是输入值。函数调用的一般格式为:函数名(参数名=表达式,参数名=表达式);,函数调用,7.2 并行语句,并行信号赋值语句进程语句并行过程调用语句元器件例化语句生成语句,33/38,7.2.1 并行信号赋值语句,三种并行信号赋值:简单信号赋值条件信号赋值选择信号赋值,34/38,1.并行简单信号赋值语句,35/38,2.条件信号赋值语句,36/38,用when-else语句描述2选一的MUX,entity mux2to1 i

14、s port(a,b:in bit;sel:in bit;y:out bit);end mux2to1;architecture one of mux2to1 isbegin y=b when sel=1 else a;end one;,信号定义成比特类型,可取0和1。,如果把=1去掉,结果如何?,37/38,用when-else语句描述4选1的MUX,entity mux4to1 is port(a,b,c,d:in bit;sel1,sel0:in bit;y:out bit);end mux4to1;architecture one of mux4to1 isbegin y=a when

15、(sel1=0)and(sel0=0)else b when(sel1=0)and(sel0=1)else c when(sel1=1)and(sel0=0)else d;end one;,问题:如果00时选a,01时选b,10和11时都选c,怎么办?,y=a when(sel1=0)and(sel0=0)else b when(sel1=0)and(sel0=1)else c when(sel1=1)and(sel0=0)else d;,38/38,3.选择信号赋值语句,39/38,问题:如果00时选a,01时选b,10和11时都选c,怎么办?,architecture one of mux

16、4to1 issignal sel:bit_vector(1 downto 0);begin sel(1)=sel1;sel(0)=sel0;with sel select y=a when 00,b when 01,c when others;end one;,entity mux4to1 is port(a,b,c:in bit;sel1,sel0:in bit;y:out bit);end mux4to1;,注意:when others包含那些未被列出的可能。,40/38,如果信号类型换成STD_LOGIC,library ieee;use ieee.std_logic_1164.all

17、;entity mux4to1 is port(a,b,c:in std_logic;sel1,sel0:in std_logic;y:out std_logic);end mux4to1;,architecture one of mux4to1 issignal sel:std_logic_vector(1 downto 0);begin sel(1)=sel1;sel(0)=sel0;with sel select y=a when 00,b when 01,c when others;end one;,41/38,VHDL模型并行信号赋值,library ieee;use ieee.st

18、d_logic_1164.all;entity cmpl_sig isport(a,b,sel:in std_logic;x,y,z:out std_logic);end cmpl_sig;,architecture logic of cmpl_sig isbegin x=(a and not sel)or(b and sel);y=a when sel=0 else b;with sel select z=a when 0,b when 1,0 when others;end logic;,信号赋值执行是并行的,与语句放置的位置先后无关。,42/38,7.2.2 进程语句,过程语句有(1)隐

19、含的过程:并行信号赋值语句元件语句过程的敏感信号在表达式右边。(2)直接的过程:也是并行语句只包括顺序语句,-Explicit Process StatementPROCESS(敏感信号表)Constant Declarations Type Declarations Variable DeclarationsBEGIN-顺序语句#1;-.-顺序语句#N;END PROCESS;,43/38,Process语句的执行,process语句靠wait语句和敏感信号表来控制语句执行次数。敏感信号表隐含着在process的后面有一个wait语句。一个process可以有多个wait语句。Process

20、必须具有敏感信号表和wait语句中的一个。.注意:逻辑综合将对wait和敏感信号表作出限制。,process(a,b)begin-sequential statementsend process;processbegin-sequential statementswait on(a,b);end process;,44/38,多进程语句,一个构造体可以有多个process。process之间是并发的。在process内部,语句执行是有顺序的。,构造体,process1,processN,信号,信号,45/38,VHDL模型多进程语句,process语句的执行是并行的,与位置没有关系。,在pro

21、cess内的语句执行是顺序的。,process语句内也可进行信号赋值。,46/38,信号赋值延时(Delay),信号赋值可以在process语句内部也可以在外部进行(如三种并行赋值语句)。信号赋值发生时会有时延,延时的类型有两种:固有(Inertial)延时(缺省的)信号在传输过程中会时间长度增加。传输延时无论距离多近,都有传输延时。在VHDL中,除此之外的延时均不考虑。,47/38,请看两个程序是否等效?,并行赋值语句右边的变量全为敏感信号。,48/38,这两个程序等效吗?,不等效!process内部时顺序语句。要从时序上看。,49/38,变量说明,变量在process内部说明变量的说明使用

22、::=信号说明使用::=;variable temp:std_logic_vector(7 downto 0);变量赋值是立即执行的,没有延时。,50/38,为变量赋值,variable temp:std_logic_vector(7 downto 0);所有比特:temp:=“10101010”;temp:=x”AA”;(1076-1993)单个比特:temp(7):=1;几个比特:temp(7 downto 4):=“1010”;单个比特使用单引号,多个比特使用双引号。,51/38,变量使用举例1,变量说明,变量赋值,变量赋值给信号,52/38,变量使用举例2,val是个变量,只要有赋值给它,它就更新。,因此,更新过的val的值用于case语句。,53/38,信号与变量的区别,54/38,信号与变量类比,赋值,使用,范围,行为,y=a,y:=a,表示电路内连,表示局部存储,全局(process之间进行通信),局部(process内部使用),process结束时更新,立即更新,表决电路地址译码七段显示译码器双向总线优先编码器8位加法器,7.3 VHDL组合逻辑电路设计,触发器寄存器计数器分频器,7.4 VHDL时序逻辑电路设计,

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

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


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号