5-VHDL主要描述语句(顺序语句)培训教材

上传人:yuzo****123 文档编号:143095177 上传时间:2020-08-26 格式:PPT 页数:52 大小:362.50KB
返回 下载 相关 举报
5-VHDL主要描述语句(顺序语句)培训教材_第1页
第1页 / 共52页
5-VHDL主要描述语句(顺序语句)培训教材_第2页
第2页 / 共52页
5-VHDL主要描述语句(顺序语句)培训教材_第3页
第3页 / 共52页
5-VHDL主要描述语句(顺序语句)培训教材_第4页
第4页 / 共52页
5-VHDL主要描述语句(顺序语句)培训教材_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《5-VHDL主要描述语句(顺序语句)培训教材》由会员分享,可在线阅读,更多相关《5-VHDL主要描述语句(顺序语句)培训教材(52页珍藏版)》请在金锄头文库上搜索。

1、第五章 VHDL主要描述语句第一部顺序语句,5.1.1 赋值语句 5.1.2 IF语句 5.1.3 CAS E语句 5.1.4 LOOP语句 5.1.5 NEXT语句 5.1.6 EXIT语句,5.1.7 WAIT语句 5.1.8 子程序调用语句 5.1.9 RETURN(返回)语句 5.1.10 NULL语句 5.1.11 ASSERT 5.1.12 REPORT语句,5.1 顺序语句,顺序语句(Sequential Statements)和并行语句(Concurrent Parallel Statements)是VHDL程序设计中两大基本描述语句系列。在逻辑系统的设计中,这些语句从多侧面完

2、整地描述数字系统的硬件结构和基本逻辑功能,其中包括通信的方式、信号的赋值、多层次的元件例化以及系统行为等。 顺序语句是相对于并行语句而言的,其特点是每一条顺序语句的执行(指仿真执行)顺序是与它们的书写顺序基本一致的,但其相应的硬件逻辑工作方式未必如此,在理解过程中要注意区分VHDL语言的软件行为及描述综合后的硬件行为间的差异。,顺序语句只能出现在进程(Process)和子程序中。在VHDL中,一个进程是由一系列顺序语句构成的,而进程本身属并行语句,这就是说,在同一设计实体中,所有的进程是并行执行的。然而任一给定的时刻内,在每一个进程内,只能执行一条顺序语句。一个进程与其设计实体的其他部分进行数

3、据交换的方式只能通过信号或端口。如果要在进程中完成某些特定的算法和逻辑操作,也可以通过依次调用子程序来实现,但子程序本身并无顺序和并行语句之分。利用顺序语句可以描述逻辑系统中的组合逻辑、时序逻辑或它们的综合体。 顺序语句包括:赋值语句、IF语句、CASE语句、LOOP语句、NEXT语句、EXIT语句、WAIT语句、过程调用语句、RETURN语句、NULL语句、断言语句、 REPORT语句。,变量赋值语句和信号赋值语句的语法格式如下: 变量赋值目标 := 赋值源; 信号赋值目标 = 赋值源; 在信号赋值中,需要注意的是,当在同一进程中,同一信号赋值目标有多个赋值源时,信号赋值目标获得的是最后一个

4、赋值源的赋值,其前面相同的赋值目标则不作任何变化。,例 SIGNAL s1,s2 :STD_LOGIC; SIGNAL svec :STD_LOGIC_VECTOR(0 TO 7); . PROCESS(s1,s2 ) IS VARIABLE v1,v2:STD_LOGIC; BEGIN v1 := 1; -立即将v1置位为1 v2 := 1; -立即将Vv置位为1 s1 = 1; -s1被赋值为1 s2 = 1; -由于在本进程中,这里的s2不是最后一个赋值语句故 不作任何赋值操作 svec(0) = v1; -将v1在上面的赋值1,赋给svec(0) svec(1) = v2; -将v2在

5、上面的赋值1,赋给svec(1) svec(2) = s1; -将s1在上面的赋值1,赋给svec(2) svec(3) = s2; -将最下面的赋予s2的值0,赋给svec(3) v1 := 0; -将v1置入新值0 v2 := 0; -将v2置入新值0 s2 := 0; -由于这是s2最后一次赋值,赋值有效,此0将上面准 备赋入的1覆盖掉 svec(4) = v1; -将v1在上面的赋值0,赋给svec(4) svec(5) = v2; -将v2在上面的赋值0,赋给svec(5) svec(6) = s1; -将 s1在上面的赋值1,赋给svec(6) svec(7) = s2; -将s2

6、在上面的赋值0,赋给svec(7) END PROCESS,赋值目标 赋值语句中的赋值目标有四种类型。 标识符赋值目标及数组单元素赋值目标 标识符赋值目标是以简单的标识符作为被赋值的信号或变量名。 数组单元素赋值目标的表达形式为: 数组类信号或变量名 下标名可以是一个具体的数字,也可以是一个文字表示的数字名,它的取值范围在该数组元素个数范围内。下标名若是未明确表示取值的文字(不可计算值),则在综合时,将耗用较多的硬件资源,且一般情况下不能被综合。(见上例),段下标元素赋值目标及集合块赋值目标 段下标元素赋值目标可用以下方式表示: 数组类信号或变量名(下标1 TO/DOWNTO 下标2) 括号中

7、的两个下标必须用具体数值表示,并且其数值范围必须在所定义的数组下标范围内,两个下标的排序方向要符合方向关键词TO或DOWNTO,具体用法如下例所示: VARIABLE a,b:STD_LOGIC_VECTOR (1 TO 4); a (1 TO 2) := 10 ; - 等效于A(1):=1, A(2):=0 a (4 DOWNTO 1) :=1011;,集合块赋值目标 集合块赋值目标,是以一个集合的方式来赋值的。对目标中的每个元素进行赋值的方式有两种,即位置关联赋值方式和名字关联赋值方式,具体用法如下例所示: SIGNAL a,b, c, d :STD_LOGIC: SIGNAL s: ST

8、D_LOGIC_VECTOR( 1 TO 4) . VARIABLE e,f :STD_LOGIC; VARIABLE g :STD_LOGIC_VECTOR(1 TO 2 ); VARIABLE h :STD_LOGIC_VECTOR(1 TO 4 ); s e, 4=f, 2 =g(1), 1=g(2) ):=h;-名字关联方式赋值,示例中的信号赋值语句属位置关联赋值方式,其赋值结果等效于: a =0;b =1;c =0 ;d =0; 示例中的变量赋值语句属名字关联赋值方式,赋值结果等效于: g(2) := h(1) ;g(1) := h(2) ;e := h(3) ;f := h(4)

9、;,IF语句是一种条件语句,它根据语句中所设置的一种或多种条件,有选择地执行指定的顺序语句,其语句结构如下: IF 标号: IF 条件句 THEN 顺序语句; ELSIF 条件句 THEN 顺序语句; ELSE 顺序语句; END IF IF 标号:,5.1.2 IF语句,所以,IF语句共有三种类型。,例 利用IF语句完成一个具有2输入与门功能的函数定义: FUNCTION and_func (x,y:IN BIT) RETURN BIT IS BEGIN IF x=1 AND y=1 THEN RETURN 1; ELSE RETURN 0; END IF; END and_func ;,例

10、 LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY control_stmts IS PORT (a,b,c: IN BOOLEAN; output:OUT BOOLEAN); END control_stmts ; ARCHITECTURE example OF control_stmts IS BEGIN PROCESS(a,b,c) VARIABLE n: BOOLEAN; BEGIN IF a THEN n:=b; ELSE n :=c; END IF; output =n; END PROCESS, END example;,上例对应

11、的硬件电路如下图所示:,例 SIGNAL a,b,c,p1,p2,z: BIT; . IF (p1=1) THEN z=a; -满足此语句的执行条件是(p1=1) ELSIF (p2=0) THEN z=b; -满足此语句的执行条件是(p1=0)AND (p2=0) ELSE z=c; -满足此语句的执行条件是(p1=0)AND (p2=1) END IF;,该例是由两个2选1 多路选择器构成的电路逻辑描述,其中,p1和p2分别是两个多路选择器的通道选择开关,当为高电平时下端的通道接通。,双2选1多路选择器电路,5.1.3 CASE语句,CASE语句根据满足的条件直接选择多项顺序语句中的一项执

12、行。 CASE语句的结构如下: CASE 表达式 IS WHEN 选择值 =顺序语句; WHEN 选择值 =顺序语句; WHEN OTHERS =顺序语句; END CASE;,使用CASE语句需注意以下几点: 条件句中的选择值必须在表达式的取值范围内。 除非所有条件句中的选择值能完整覆盖CASE语句中表达式的取值,否则最末一个条件句中的选择必须用“OTHERS”表示。 CASE语句中每一条语句的选择只能出现一次,不能有相同选择值的条件语句出现。 CASE语句执行中必须选中,且只能选中所列条件语句中的一条。这表明CASE语句中至少要包含一个条件语句。,例:用CASE语句描述4选1多路选择器:

13、LIBRARY IEEE; USE IEEE.STD_LOGIC_1164.ALL; ENTITY mux41 IS PORT(s1,s2 :IN STD_LOGIC; a, b, c, d :IN STD_LOGIC; z :OUT STD_LOGIC); END ENTITY mux41; ARCHITECTURE activ OF mux41 IS SIGNAL s :STD_LOGIC_VECTOR(1 DOWNTO 0); BEGIN s z z z z z=x; END CASE; END PROCESS; END activ;,注意本例的第五个条件名是必需的,因为对于定义STD_

14、LOGIC_VECTOR数据类型的s,在VHDL综合过程中,它可能的选择值除了00、01、10和11外,还可以有其他定义于STD_LOGIC的选择值。本例的逻辑图如下所示:,4选1多路选择器,CASE语句与IF语句比较: CASE语句组的程序可读性比较好,这是因为它把条件中所有可能出现的情况全部列出来了,可执行条件一目了然。而且CASE语句的执行过程不像IF语句那样有一个逐项条件顺序比较的过程。CASE语句中条件句的次序是不重要的,它的执行过程更接近于并行方式。一般地,综合后,对相同的逻辑功能,CASE语句比IF语句的描述耗用更多的硬件资源,而且有的逻辑,CASE语句无法描述,只能用IF语句来

15、描述。这是因为IF_THEN_ELSIF语句具有条件相与的功能和自动将逻辑值“-”包括进去的功能(逻辑值“-”有利于逻辑化简),而CASE语句只有条件相或的功能。,5.1.4 LOOP语句,LOOP语句就是循环语句,它可以使所包含的一组顺序语句被循环执行,其执行次数可由设定的循环参数决定,循环的方式由 NEXT和EXIT语句来控制。其语句格式如下: LOOP 标号: 重复模式 LOOP 顺序语句 END LOOPLOOP 标号; 重复模式有两种:FOR 和WHILE,格式分别为: LOOP 标号: FOR 循环变量 IN 循环次数范围 LOOP -重复次数已知 LOOP 标号:WHILE 循环控制条件 LOOP -重复次数未知,例: 简单LOOP语句的使用。 L2: LOOP a:=a+1; EXIT L2 WHEN a10; -当a大于10时跳出循环 END LOOP L2; ,例: FORLOOP语句的使用(8位奇偶校验逻辑电路的VHDL程序)。 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 ENTITY p_check ; ARCH

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 中学教育 > 教学课件 > 高中课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号