第三章VHDL的语句.docVIP

  • 23
  • 0
  • 约3.57万字
  • 约 33页
  • 2017-12-11 发布于上海
  • 举报
第三章VHDL的语句

第三章 VHDL的语句 VHDL中的语句按其执行顺序可分为顺序描述语句和并行描述语句两大类。顺序描述语句的执行顺序是按语句的书写顺序依次执行的,常用于实现模块的算法部分;并行描述语句的执行顺序与书写顺序无关,所有语句是并发执行的,常用于表示模块间的连接关系。 本章将详细介绍这两类VHDL语句。 3.1 VHDL语言的顺序描述语句 顺序语句是建模进程、过程和函数功能的基本语句单元,它只能在进程、过程和函数中使用,其执行顺序按照书写顺序来执行,同时前面语句的执行结果会对后面语句的执行结果产生影响。顺序描述语句按照控制方式分为条件控制语句和迭代控制语句,其中,条件控制语句有IF语句和CASE语句,迭代控制语句有循环语句和顺序断言语句。 下面对顺序描述语句进行详细介绍。 3.1.1 信号赋值语句与变量赋值语句 采用VHDL描述硬件电路的过程中,数据的传递和端口界面数据的读写都是通过赋值语句来实现的,赋值语句就是将一个数值或表达式传递给某一个数据对象的语句。VHDL提供了两类赋值语句:信号赋值语句和变量赋值语句。 信号虽然只能在VHDL程序的并行部分进行说明,但是它在程序的顺序部分和并行部分都可使用。信号赋值语句的语法如下: 待赋值信号=表达式; 变量的说明和赋值操作都只能在程序的顺序部分进行。变量赋值语句的语法如下: 待赋值变量:=表达式; 注意:不论是信号还是变量,赋值符号两边必须具备相同的数据类型和位长。在前一章我们讲过信号与变量的区别,这里有必要重申一下:信号赋值的执行和信号值的更新之间是有一定延迟的,只有经过延迟后信号才能得到新值,否则保持原值;而变量赋值的语句执行后立即得到新值,没有延迟。 上面讲到,信号赋值会有延迟,其实,VHDL允许为信号赋值选择“延迟机制”,即:传输延迟或惯性延迟,其中,传输延迟用于表示无论输入脉冲宽度多窄都能在输出端无失真复现的延迟模型;惯性延迟用于表示输入脉冲传播时间受电路“惯性”影响的延迟模型。VHDL默认的延迟模型是惯性延迟。 由于信号的赋值有延迟,任何对信号的赋值都暂存于该信号的驱动器中,什么时候把新值代入信号,有待同步事件发生或延迟达到由保留字after指定的时间,例如: a=0 after 5 ns,1 after 10 ns; after指定的延迟时间应从执行信号赋值语句的模拟时刻起开始计算,如上例,假设在100 ns时执行该语句,那么把0值代入a的时刻是105 ns,而把1值代入a的时刻是110 ns。信号赋值语句本身的执行是不耗费时间的。 3.1.2 if语句 IF语句是具有条件控制功能的语句,它根据给出的条件及其条件是否成立的结果来确定执行语句的顺序,其格式由三种: 第一种 IF 条件 THEN 顺序语句 END IF 第二种 IF语句二选择控制,其书写格式为: IF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; END IF; 第三种 IF语句的多选择控制又称IF语句的嵌套,其书写格式为: IF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; …… ELSEIF 条件 THEN 顺序处理语句; ELSE 顺序处理语句; END IF; 下例是用if语句实现三态单向总线: LIBRARY ieee; USE ieee.std_logic_1164.all; ――程序包使用说明 ENTITY bufs IS ――ENTITY(实体) PORT (din : IN std_LOGIC_vector(7 downto 0); dout : OUT std_LOGIC_vector(7 downto 0) bus; ――PORT(端口定义) en : IN std_LOGIC); END bufs; ARCHITECTURE bufs1 OF bufs IS ――ARCHITECTURE(结构体) BEGIN process(en,din) --process(进程)en与din为进程敏感信号,控制进程的挂起和执行 begin if (en=1) then dout=din; else dout=ZZZZZZZZ; end if; end process; end bufs1; 下例是用if语句实现四选一多路选择器: LIBRARY ieee; USE ieee.std_logic_1164.all; entity mux4 is port(

文档评论(0)

1亿VIP精品文档

相关文档