第6章 VHDL语言的主要描述语句
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1、IF语句的门闩控制
格式: IF 条件 THEN
顺序处理语句; END IF;
当程序执行到该 IF 语句时,就要判断 IF 语句所指定 的条件是否成立。如果条件成立,则执行顺序处理 语句;不成立则跳过 IF 语句所包含的顺序处理语句, 而向下执行 IF 语句的后续语句。这里的条件起到门 闩的控制作用。
wait until clk'event and clk='1';
q <= d; end process; end rtl;
3、WAIT FOR
WAIT FOR 语句的完整书写格式为: WAIT FOR 时间表达式; WAIT FOR 语句后面跟着的是时间表达式,当进程执 行到该语句时将被挂起,直到指定的等待时间到时, 进程再开始执行WAIT FOR 语句后继的语句。 例如: WAIT FOR 20ns; 这个语句中时间表达式是一个常数值20ns,当进程执行 到该语句时将等待20ns。一旦20ns时间到,进程将执行 WAIT FOR 语句的后继语句。
6.1 顺序描述语句
执行顺序与书写顺序一致,与传统软件设计语言的特 点相似。顺序语句只能用在进程与子程序中。 在VHDL语言中顺序描述语句有以下几种: * WAIT语句; * 变量赋值语句; * LOOP语句; * 过程调用语句; * 断言语句; * 信号代入语句; * IF语句; * CASE语句; * NEXT语句; * EXIT 语句; * NULL语句
2、WAIT UNTIL
WAIT UNTIL 语句的完整书写格式为:
WAIT UNTIL 表达式; 当表达式的值为“真”时,进程被启动,否则进 程被挂起。 该语句在表达式中将建立一个隐式的敏感信号量 表,当表中的任何一个信号量发生变化时,就立即对 表达式进行一次评估。如果评估结果使表达式返回一 个“真”值,则进程脱离等待状态,继续执行下一个 语句。例如:
2、IF语句的二选择控制
格式: IF 条件 THEN
顺序处理语句;
ELSE
顺序处理语句;
END IF;
当条件满足时,则执行 THEN 和 ELSE 之间的顺序处 理语句;如不满足则执行ELSE和END IF之间的顺序 处理语句。
IF二选择控制举例
二选一电路
ARCHITECTURE rtl OF mux2 IS
1、WAIT ON
WAIT ON 语句的完整书写格式为: WAIT ON 信号[,信号]; WAIT ON 后面跟着的是一个或多个信号量,例如: WAIT ON a , b;
该语句表明,等待信号量 a 或 b 中只要有一个发生变化, 进程将结束挂起状态,而继续执行WAIT ON 语句的后 继语句,从而再次启动进程的执行。从这一点来看, 与进程指定的敏感信号量有新的变化时,也会启动进 程的情况相类似。
上述语句等待的是3个条件: 第一,信号量 nmi 和 interrupt 任何一个有一次新的变化; 第二,信号量nmi或interrupt任何一个取值为“真”; 第三,等待5us。
只要上述3个条件中一个或多个条件满足,进程将再次启动, 继续执行WAIT语句的后继语句。
6.1.2 断言语句(ASS句的嵌套。
IF语句多条件控制语句举例
四选一电路: ELSIF ( sel = “10” ) THEN LIBRARY IEEE; y <= input ( 2 ); USE IEEE.STD_LOGIC_1164.ALL; ELSE ENTITY mux4 IS PORT ( y <= input ( 3); input : IN STD_LOGIC_VECTOR ( 3 DOWNTO 0); END IF; sel : IN STD_LOGIC_VECTOR ( 1 DOWNTO 0); END PROCESS; y: OUT STD_LOGIC); END rtl; END mux4; ARCHITECTURE rtl OF mux4 IS BEGIN PROCESS( input, sel ) BEGIN if_then_elsif 语句中隐 IF ( sel = “00” ) THEN 含了优先级别的判断,最 y <= input ( 0 ); 先出现的条件优先级最高, ELSIF ( sel = “01” ) THEN 可用于设计具有优先级的 y <= input ( 1 );
ASSERT语句主要用于程序仿真、调试中的人机对话,它可以 给出一个文字串作为警告和错误信息。ASSERT语句的书写格 式为: ASSERT 条件 [REPORT 输出信息] [SEVERITY 级别]; 如果条件为真则向下执行另一个语句,如果条件为假,则 输出错误信息和错误级别。REPORT后面的错误信息应用双引 号括起来。
6.1.3 信号代入语句
书写格式: 目的信号量<=信号量表达式; 意义:将右边信号量表达式的值赋给左边的目的信号 量。
6.1.4 变量赋值语句
书写格式: 目的变量:=表达式; 意义:表达式的值替代目的变量的值,立即有效。
补充:变量与信号的差异
1)赋值方式的不同: 变量:= 表达式; 信号 < = 表达式; 2)硬件实现的功能不同: 信号代表电路单元、功能模块间的互联,代表实际的硬 件连线;变量代表电路单元内部的操作,代表暂存的 临时数据。 3)有效范围的不同:
第六章
VHDL语言的主要描述语句
VHDL语言描述系统硬件行为时,按语句执行顺序可 以 分 为 顺 序 ( Sequential ) 描 述 语 句 和 并 发 ( Concurrent )描述语句。灵活运用这两类语句就可 以正确地描述系统的并发行为和顺序行为。
例如,进程语句( Process Statement )是一个并发语 句。在一个构造体内可以有几个进程语句同时存在, 各进程语句是并发执行的。但是,在进程内部所有语 句应是顺序描述语句,也就是说,是按书写的顺序自 上至下,一个语句一个语句地执行的。例如,IF 语句、 LOOP语句等都属于此类顺序描述语句。
注意
敏感信号量列表和 wait on 语句只能选其一,两者不能同时使用。
举例2
如果PROCESS 语句已有敏感信号量说明,那么 在进程中再不能使用WAIT ON 语句。例如,下面的描 述是非法的。
PROCESS (a,b) BEGIN y<=a AND b; WAIT ON a,b; 错误语句 END PROCESS;
举例1
PROCESS (a,b)
BEGIN
y<=a AND b;
END PROCESS;
PROCESS BEGIN y<=a AND b; WAIT ON a,b; END PROCESS;
上 面 两 个 进 程 的 描 述 是 完 全 等 价 的 , 只 是 WAIT ON 和 PROCESS 中所使用的敏感信号量的书写方法有区别 。在使用 WAIT ON语句的进程中,敏感信号量应写在进程中的WAIT ON语 句后面;而在不使用WAIT ON语句的进程中,敏感信号量只应在 进程开头的PROCESS后跟的括号中说明。
6.1.1 WAIT语句
进程在仿真时的两个状态:执行或挂起。 进程状态的变化受 WAIT 语句的控制。当进程执行到 WAIT 语句 时,就将被挂起,并设置好再次执行的条件。 WAIT 语句可以设置 4 种不同的条件:无限等待、时间到、条件 满足以及敏感信号量变化。其书写格式为: WAIT :无限等待 WAIT ON :敏感信号量变化 WAIT UNTIL: 条件满足 WAIT FOR: 时间到
BEGIN PROCESS( a, b, sel )
注
此例中,二选一电路的 输入端为 a 和 b, 选择控制 端为sel,输出端为c。
BEGIN
IF ( sel =„ 1 „ ) THEN c<= a;
ELSE
c<=b; END IF;
END PROCESS;
END rtl;
格式: IF
3、IF语句的多条件控制
信号:程序包、实体、结构体;全局量。 变量:进程、子程序;局部量。 4)赋值行为的不同: 信号赋值延迟更新数值;变量赋值立即更新数值;
6.1.5 IF语句
IF语句可用于选择器、比较器、编码器、译码器、 状态机的设计,是 VHDL 语言中最基础、最常用的 语句。 IF语句根据制定的条件来确定语句执行顺序,共 有三种类型。
D触发器的描述举例
LIBRARY IEEE;
USE IEEE.STD.LOGIC.1164.ALL; ENTITY dff IS PORT(clk,d : IN STD_LOGIC;
注
此例中, IF 语句的条 件是时钟信号 clk 事件 发生 ,且 时钟 clk=‘1’ (时钟脉冲上升沿到 来)。只有在这个时 候d端信号值才赋值给 q端。当该条件不满足 时,q端维持原来的输 出值。
q : OUT STD_LOGIC);
END dff; ARCHITECTURE rtl OF dff IS BEGIN PROCESS( clk ) BEGIN IF( clk‟EVENT AND clk=„ 1 „) THEN q<=d; END IF; END PROCESS; END trl;
条件 THEN
注
在多选择控制的 IF 语句中,设置了多个条 件。当某个条件满足时 就执行跟在该条件这后 的顺序处理语句, 如果条件都不满足则执 行 ELSE 和 END IF 之间 的语句。
顺序处理语句; ELSIF 条件 THEN
顺序处理语句;
┄
ELSIF 条件 THEN
顺序处理语句; ELSE 顺序处理语句; END IF;
注
电路。如 8-3 优先级编码器。
3、IF语句小结
( 1 ) IF 语句可以用于凡是可以进行条件控制的 逻辑电路设计。 ( 2 ) IF 语句的条件判断的输出是布尔量,即是 “真”( true) 或“假”(FALSE) 。因此在 IF 语句的 条件表达式中只能使用关系运算操作符( =, /=, <, >, <=, >=)及逻辑运算操作符的组合表达式。
4、多条件WAIT语句
在前面已叙述的 3 个 WAIT 语句中,等待的条件都是单 一的,要么是信号量,要么是布尔量,要么是时间量。实 际上WAIT语句还可以同时使用多个等待条件。例如: WAIT ON nmi,interrupt UNTIL ((nmi=TRUE) OR (interrupt=TRUE)) FOR 5us;
例如: WAIT FOR (a*(b+c));
此语句中, FOR 后面是一个时间表达式, a*(b+c) 是时 间量。WAIT FOR 语句在等待过程中,要对表达式进 行一次计算,计算结果返回的值就作为该语句的等待 时 间 。 例 如 ,a=2,b=50ns,c=70ns 。 那 么 WAIT FOR (a*(b+c)) 这 个 语 句 将 等 待 240ns , 也 就 是 说 该 语 句 和 WAIT FOR 240ns是等价的。
WAIT UNTIL ((X*10)<100);
在这个例子中,当信号量X的值大于或等于10时,进程 执行到该语句将被挂起;当X的值小于10时进程再次被 启动,继续执行WAIT 语句的后继语句。
举例
例:用wait until语句描述时钟沿,实现D触发器 architecture rtl of begin process begin d is
ASSERT 语句给程序的调试和仿真带来极大的方便,这样的 语句一般只用于行为级仿真中,而不能进行逻辑综合。
例: ASSERT(sendB=„ 1 „) REPORT “sendB timed out at „ 1‟ ” SEVERITY ERROR;
该断言语句的条件信号量是 sendB=‘1’。如果执行到该语句 时,信号量sendB=‘0’,说明条件不满足,就会输出REPORT后 跟的文字串。该文字串说明,出现了超时等待错误。 SEVERITY 后 跟 的 错 误 等 级 告 诉 操 作 人 员 , 其 出 错 等 级 为 ERROR。
6.1.6 CASE语句
case 语句常用来描述总线或编码、译码行为。 可读性比if 语句强。 格式: CASE 表达式 IS WHEN 条件表达式=>顺序处理语句; END CASE; 当CASE 和 IS 之间的表达式的取值满足指定的条件表达式的 值时,程序将执行由符号=>所指的顺序处理语句。