第5 章 VHDL 顺序语句
第5章VHDL基本描述语句
多个赋值源
SVEC(0) <= V1; --将V1在上面的赋值1,赋给SVEC(0)
SVEC(1) <= V2;
SVEC(2) <= S1; SVEC(3) <= S2;
--将V2在上面的赋值1,赋给SVEC(1)
--将S1在上面的赋值1,赋给SVEC(2) --将最下面的赋予S2的值‘0’,赋给SVEC(3)
FOR LOOP循环主要用在规定数目的重复情况;
WHILE LOOP则根据控制条件执行循环直到条件为
FALSE。
FOR LOOP语句
FOR LOOP格式:
[标号:] FOR 循环变量 IN 循环次数范围 LOOP
顺序处理语句;
END LOOP [标号];
循环变量:属于LOOP语句的局部变量,不需要事先定义,也不能 被赋值,它的值从循环次数范围的初值开始,执行一次顺序语句 自动加一,当其值超出循环次数范围时,则退出循环语句。
5.1.1赋值语句
语句格式: 变量赋值目标:= 赋值源;
信号赋值目标<= 赋值源;
比较: (1)信号赋值有一定的延时,在时序电路中,在时 钟信号触发下的信号赋值,目标信号要比源信号延迟 一个时钟周期;变量赋值语句立即执行,没有延时。 (2)进程中同一变量多次赋值时按顺序立即执行, 而信号多次赋值时,只有进程结束前最后一个赋值被 执行。
不完整IF语句
作用:形成锁存,用于构成时序电路,而组合电路只能
使用完整的IF语句。
例5-6: IF (clk’event and clk=’1’) then
Q<=d;
End if;
二选一IF语句
语句格式:
IF 条件 THEN 顺序执行语句1;
第五VHDL语言的主要描述语句剖析
wait on 所起作用与进程的敏感信号量表相同, 两者不能同时存在。
2020/11/11
15
2. wait until 语句
1) 书写格式 wait until 布尔表达式;
❖ 利生变化时,就自动检测
布尔表达式是否为真; ❖ 如果为真,则进程脱离等待状态,执行后续语句;
assert语句检查一个布尔表达式为真或假,如果值 是真,则该语句任何事都不做,如果值是假,断言 语句将输出一用户规定的字符串到标准输出终端。
2020/11/11
10
设计者所写的文 字串,通常是说 明错误的原因, 文字串应用双引 号括起来。
错误严重程度的级别,
分为4级别:failure, error,waring,
如:在一个信号值维持期间,如果存在任何毛刺、脉 冲等周期小于器件本身的惯性延时的情况,输出信号 的值将不变,否则将引起信号的变化。
2020/11/11
5
惯性延时举例
假设某门电路的惯性延 时为20 ns
b<=inertial a after 20 ns;
10ns
所有器件都存在惯性延时, 在代入语句中加上惯性延 时时间,可以仿真硬件电 路实际工作情况,如:
2020/11/11
2
5.1.1 信号代入语句
1) 书写格式
目的信号量<= 敏感信号量表达式;
2) 举例
处于构造体中的信号代入语句 z <= a or (b nand c);
有3 个敏感量 a、b、 c,无论哪一个敏感量发生 变化,该代入语句将被执行。
2020/11/11
3
a <= b after 5 ns; --表示当b发生新的变化5ns后,才被代入到信
EAD课程-第5章VHDL顺序语句
y ( 2 TO 3 ) <= x ( 1 TO 2 ); --位置关联赋值,x的部分
位赋值y的部分位
EDA技术
8
第5章 VHDL顺序语句
5.2 流程控制语句
流程控制语句通过条件控制来决定是否执行一 条或几条语句,或重复执行一条或几条语句,或跳 过一条或几条语句。
流程控制语句共有五种: ■ IF语句 ■ CASE语句
第5章 VHDL顺序语句
5.1 赋值语句 5.2 流程控制语句 5.3 WAIT语句 5.4 ASSERT语句 5.5 RETURN返回语句 5.6 NULL空操作语句
EDA技术
1
第5章 VHDL顺序语句
VHDL语言的描述语句
VHDL语言的描述语句主要用来描述系统的硬件 结构、行为功能及信号之间的逻辑关系。分为顺序 语句和并行语句两大类。 顺序语句是按照语句书写的前后顺序自上而下、 一条接一条地按顺序执行,用来定义进程、过程和 函数的行为。 并行语句又称并发语句,出现在结构体中,各 语句并行(同步)执行,与书写的顺序无关。 有些语句既可作为并行语句又可作为顺序语句, 如赋值语句、过程调用语句和断言语句。
若循环控制条件为“假”,则结束循环。
EDA技术
25
第5章 VHDL顺序语句
【例4.6.5】用WHILE_LOOP语句描述八位奇偶校验器。
ARCHITECTURE example5 OF loop2 IS BEGIN PROCESS ( X ) VARIABLE temp: STD_LOGIC; VARIABLE n: INTEGER; BEGIN temp :=‘0’; n := 0; WHILE n < 8 LOOP temp := temp XOR X( n ); n := n+1; END LOOP; Y<= temp; END PROCESS; END example5;
第五章(VHDL主要描述语句)
(4) CASE语句执行中必须选中,且只能选中所列条件语
句中一条。这表明CASE语句中至少要包含一个条件语句。
CASE语句常用来描写总线行为、编码器和译码器的结构。CASE语句 与IF语句功能相似但CASE语句的可读性好,非常简洁。
CASE语句的误用:
SIGNAL value : INTEGER RANGE 0 TO 15 ; SIGNAL out_1 : BIT ; CASE value IS -- 缺少 WHEN条件语句 END CASE ; -- 分支条件不包含2到15 CASE value IS WHEN 0 => out_1 <= „1‟; WHEN 1 => out_1 <=„0‟; END CASE ; -- 在5到10上发生重叠 CASE value IS WHEN 0 TO 10 => out_1 <= „1‟; WHEN 5 TO 15 => out_1 <= „0‟; END CASE ;
IF语句不仅可用于选择器设计,还可用于比较 器,译码器等进行条件控制的逻辑设计。IF语句 中至少应有一个条件句,条件句必须由布尔表达 式构成,条件表达式中能使用关系运算操作及逻 辑运算操作的组合表达式。 IF语句颠倒条件判别次序,会引起在综合时逻辑 功能的变化,即IF语句判别条件不可颠倒。 IF语句中,先处理最起始的条件;如果不满足, 再处理下一个条件。一般把条件约束最多的作为 起始条件。
例
用IF语句描述一个二位等值比较器
ARCHITECTURE a OF compare IS LIBRARY IEEE; BEGIN PROCESS(a,b) USE IEEE.STD_LOGIC_1164.ALL; BEGIN ENTITY compare IS IF(a>b) THEN eater<='1';equal<='0';less<='0'; generic(n:natural:=2); ELSIF (a=b) THEN PORT( greater<='0';equal<='1';less<='0'; ELSE a,b:IN STD_LOGIC_VECTOR(n-1 DOWNTO 0); greater<='0';equal<='0';less<='1'; greater,equal,less:OUT STD_LOGIC); END IF; END PROCESS; END; END;
第五节 VHDL的基本描述语句
第五节VHDL的基本描述语句----顺序语句顺序语句是相对于并行语句而言的。
执行顺序与它们的书写顺序基本一致。
只能出现在进程(Process)和子程序中。
用于实现模型的算法部分。
VHDL中的顺序语句与传统的软件编程语言中的语句的执行方式十分相似。
VHDL的顺序语句主要有六类:赋值语句流程控制语句等待语句子程序调用语句返回语句空操作语句本节介绍这六类顺序描述语句及其功能。
一、赋值语句(TOP)信号赋值语句、变量赋值语句两种。
语法格式如下:变量赋值目标:= 赋值源信号赋值目标<= 赋值源赋值目标是欲赋值的对象,是信号或变量,可以表现为文字、标志符、数组等;赋值源可以是数值、逻辑运算或者算术运算表达式。
由信号赋值语句的语法格式可见,它与并行信号赋值语句相似。
VHDL规定赋值目标与赋值源的数据类型必须严格一致。
变量赋值与信号赋值的区别在:变量具有局部特征,它的有效性只在所定义的一个进程或一个子程序中,并且其赋值行为立即发生;信号则有全局性特征,它可以在一个设计实体的各单元之间传送数据,也可以与其它的实体进行通信,并且其赋值行为不立即发生,而是发生在一个进程结束的时候。
二、流程控制语句(TOP)流程控制语句通过条件控制开关决定程序的流程。
流程控制语句有:IF语句、CASE语句、LOOP语句、NEXT语句和EXIT语句等五种。
(一)IF语句IF 语句根据语句中所设置的条件执行指定的顺序语句。
IF 语句有如下三种语法格式:1.第一种IF语句IF 条件句Then{顺序语句}END IF;2.第二种IF语句IF 条件句Then{顺序语句}ELSE{顺序语句}END IF;3.第三种IF语句IF 条件句Then{顺序语句}ELSIF 条件句Then{顺序语句}ELSE{顺序语句}]END IF;IF语句中的条件必须是BOOLEAN表达式。
IF语句的条件产生的结果是TRUE 或FALSE。
IF 语句的每个分支可以有一个或者多个顺序语句。
VHDL顺序语句
BEGIN PROCESS(a) variable tmp:std_logic;-BEGIN tmp:='0'; FOR n IN 0 TO 7 LOOP tmp := tmp XOR a(n); END LOOP ; y <= tmp; END PROCESS;
END CASE;
9
算术逻辑单元的VHDL描述,在信号opcode的控制下可分别完成加、减、相等或不相等 比较操作
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY alu IS
PORT( a, b : IN STD_LOGIC_VECTOR (7 DOWNTO 0);
end process; end rtl;
4
5
5.2.2 CASE语句
CASE语句的结构如下:
CASE 表达式 IS When 选择值 => 顺序语句; When 选择值 => 顺序语句; ... END CASE ;
多条件选择值的一般表达式为: 选择值 [ |选择值 ]
选择值的计算结果必须是整型、枚举型或枚举型数组;选择为静 态表达式或动态范围,最终的选择是可以是"others",选择不能重 叠,若无"others"选择,那末选择必须覆盖表达式的所有可能值
opcode: IN STD_LOGIC_VECTOR (1 DOWNTO 0);
5VHDL顺序语句与并行语句
5 VHDL顺序语句与并行语句电子信息工程学院 顺序语句与并行语句 大纲进程语句 顺序语句 并行语句22电子信息工程学院顺序语句与并行语句VHDL 程序设计约定语句结构描述中方括号“[ ]”内的内容为可选内容。
对于VHDL 的编译器和综合器来说,程序文字的大小写是不加区分的。
程序中的注释使用双横线“--”。
QuartusII 要求源程序文件的名字与实体名、工程名必须一致。
编写程序注意不要在中文输入状态下输入英文字符和符号。
为了使程序结构清晰,使用层次缩进格式书写代码。
3 电子信息工程学院 顺序语句与并行语句 概述顺序语句仅出现在进程和子程序中。
在结构体中的执行是同时进行,执行顺序与书写顺序无关。
4电子信息工程学院顺序语句与并行语句进程语句(PROCESS )● 进程本身是并行语句,但内部是顺序语句;● 进程只有在特定的时刻(敏感信号发生变化)才会被激活。
[进程标号:] PROCESS (敏感信号参数表) [声明区]; BEGIN 顺序语句END PROCESS [进程标号];在进程中起作用的局部变量一个进程可以有多个敏感信号,任一敏感信号发生变化都会激活进程进程语句定义顺序语句模块,用于将从外部获得的信号值,或内部的运算数据向其他的信号进行赋值。
5电子信息工程学院顺序语句与并行语句进程的工作原理当某个敏感信号的值发生变化时,每个进程语句立即完成进程内顺序语句所定义的功能行为。
执行过程终止顺序语句所定义的功能行为的结果可以赋值给信号,并通过信号被其他的进程读取或赋值。
6电子信息工程学院顺序语句与并行语句进程与时钟在每个上升沿启动一次进程(执行进程内所有的语句)。
上升沿描述:Clock’ EVENT AND Clock=‘1’ 下降沿描述:Clock’ EVENT AND Clock=‘0’ 上升沿描述: rising_edge (Clock) 下降沿描述: falling_edge (Clock)7 电子信息工程学院 顺序语句与并行语句 进程语句格式与结构[进程标号: ] PROCESS [ ( 敏感信号参数表 ) ] [IS] [进程说明部分] BEGIN顺序描述语句END PROCESS [进程标号];PROCESS 语句结构进程说明顺序描述语句 敏感信号参数表信号赋值语句变量赋值语句进程启动语句子程序调用语句顺序描述语句进程跳出语句8电子信息工程学院 顺序语句与并行语句 1. PROCESS 为一无限循环语句2. PROCESS 中的顺序语句具有明显的顺序/并行运行双重性3. 进程语句本身是并行语句4. 信号是多个进程间的通信线5. 一个进程中只允许描述对应于一个时钟信号的同步时序 逻辑进程要点9电子信息工程学院 顺序语句与并行语句 进程注意事项● 进程本身是并行语句,但内部为顺序语句;● 进程在敏感信号发生变化时被激活,在使用了敏感表的进程中不能含wait 语句;● 在同一进程中对同一信号多次赋值,只有最后一次生效; ● 在不同进程中,不可对同一信号进行赋值; ● 一个进程不可同时对时钟上、下沿敏感。
EDA课件CH5 VHDL顺序语句
苏州大学电子信息学院
3
电子设计自动化
(1)赋值语句
赋值目标: 标志符赋值目标 数组单元赋值目标 段下标元素赋值目标 集合块赋值目标
苏州大学电子信息学院
4
电子设计自动化
(2)流程控制语句
通过条件控制开关决定是否执行一条或几条语 句,或重复执行一条或几条语句,或跳过一条或 几条语句。 IF_THEN_ELSE 语句 CASE_WHEN 语句 LOOP_FOR 语句 NEXT 语句 EXIT 语句
苏州大学电子信息学院
14
电子设计自动化
(3)WAIT语句 WAIT语句
执行WAIT语句时,程序被挂起,直到满足设 置的条件后,重新开始执行进程或过程。
注意:已列出敏感量的进程中不能使用任何形式 的WAIT语句。
苏州大学电子信息学院
15
电子设计自动化
(4)NULL语句 NULL语句
空语句,使程序走到下一个语句。用于排除一 些不用的条件。
苏州大学电子信息学院
7
电子设计自动化
A. IF_THEN_ELSE 语句
ELSIF可允许在一个语句中出现多重条件,每一个“IF”语句必 须有一个对应的“END IF”语句。可嵌套使用,但层数不易过多。 在含有多个不相关信号的条件时,采用CASE_WHEN语句程序的 可读性比较好
苏州大学电子信息学院
=> => => =>
x x x x
<= <= <= <=
a; b; c; d;
CASE语句的执行过程更接近于并行方式,完成相同的逻辑功能,CASE语句 比IF语句耗用更多的硬件资源。
苏州大学电子信息学院
11
电子设计自动化
第五讲VHDL顺序语句
Entity mux2 Is Port (a,b: In std_logic; s:In std_logic; f:Out std_logic);
End mux2; Architecture behavior Of mux2 Is Begin
mux2:Process(a,b,s) Begin
If (s=‘0’) Then f<=a; Else f<=b; End If; End Process; End behavior;
4
第第55讲讲 VVHHDDLL顺顺序序语语句句
➢ 进程 (Process)
✓ Process的启动和敏感信号列表: 敏感信号列表对于进程至关重要,它是进程描述的一个重要组成部
分。一般来说,如果描述的是组合电路模块,那么敏感信号列表必须包 括所有的输入信号;否则,在综合时会出错,在仿真时将导致一个错误 的结果。如果描述的是时序电路模块,那么敏感信号列表只需要包括时 钟信号和异步清零/置位信号。因为,触发器的输出只在时钟上升/下 降沿才会改变。
第5讲 VHDL顺序语句
顺序描述语句只能出现在进程(Process)或子程序中,它定义进程 或子程序所执行的算法。顺序描述语句按这些语句在进程或子程序中出 现的顺序执行,这一点与高级语言类似。
VHDL中常用的顺序描述语句包括:信号和变量赋值、Wait、If、 Case、Loop、Next、Exit、断言语句、过程调用语句、空语句等。
EDA技术——VHDL顺序语句
1
第第55讲讲 VVHHDDLL顺顺序序语语句句
➢ 进程 (Process)
所有的顺序描述语句都只能在进程(process)中使用,进程内是顺序 执行,进程与进程之间是并发的,有点类似于计算机操作系统中“进程” 的概念。
第5章-2-VHDL顺序语句
注意,这里的顺序是从仿真软件的运行和 顺应VHDL语法的编程逻辑思路而言的,其相 应的硬件逻辑工作方式未必如此。应该注意 区分VHDL语言的软件行为与描述综合后的硬 件行为的差异。
顺序语句
顺序语句在进程语句的内部。
PROCESS语句的表达格式如下: [进程标号:]PROCESS[(敏感信号参数表)] [IS] [进程说明部分] BEGIN 顺序描述语句 END PROCESS[进程标号];
5.2.1信号和变量的赋值
赋值语句的功能就是将一个值或一个表达式的 运算结果传递给某一数据对象,如信号或变量。 变量赋值语句和信号赋值语句的语法格式如下: 变量:= 表达式; 信号 < = 表达式;
变量与信号的差异
1)硬件实现的功能不同: 信号代表电路单元、功能模块间的互联,代表 实际的硬件连线; 变量代表电路单元内部的操作,代表暂存的临 时数据。
5.2.1转向控制语句
转向控制语句通过条件控制开关决定是否执行一 条或几条语句,或重复执行一条或几条语,或跳过一 条或几条语句。
分为五种:
if 语句、 case 语句、 loop 语句、 next 语句、 exit 语句
1.IF语句
1)IF语句的门闩控制 IF 条件 THEN 顺序语句 END IF; 2)二选一控制语句 IF 条件 THEN 顺序语句 ELSE 顺序语句 END IF; 3)多选择控制语句 IF 条件1 THEN 顺序语句1 ELSIF 条件2 THEN
可编程逻辑器件
第5章:VHDL设计进阶
——5.2 VHDL顺序语句
用VHDL语言进行设计时,按描述语句 的执行方式进行分类,可将VHDL语句分为: 顺序执行语句(Sequential)
并行执行语句(Parallel)
《VHDL语言与数字逻辑电路设计》——第5讲VHDL顺序语句精品PPT课件
2010.9
许钢 10/6/2020
《VHDL语言与数字逻辑电路设计》
1
第5讲 VHDL顺序语句
顺序描述语句只能出现在进程(Process)或子程序中,它定义进 程或子程序所执行的算法。顺序描述语句按这些语句在进程或子程序 中出现的顺序执行,这一点与高级语言类似。
VHDL中常用的顺序描述语句包括:信号和变量赋值、Wait、If、 Case、Loop、Next、Exit、断言语句、过程调用语句、空语句等。
许钢 10/6/2020
《VHDL语言与数字逻辑电路设计》
7
第5讲 VHDL顺序语句
5.2 进程 (Process)中的顺序语句
1. 信号和变量的赋值: • 变量的赋值语句格式:
目标变量名:=表达式; 例3:
v:=‘1’; s:=“010010”; 变量赋值的符号与信号赋值的符号不同,表达式与信号赋值的表达 式写法是完全一样的。
Entity mux2 Is
Port (a,b: In std_logic; s:In std_logic; f:Out std_logic);
End mux2;
Architecture behavior Of mux2 Is
Begin
mux2:Process(a,b,s)
Begin
If (s=‘0’) Then f<=a;
2. 转向控制语句: • 条件控制语句——If语句: 例4:
Entity dff Is
Port(d:In std_logd_logic);
End dff;
Architecture behavior Of dff Is
Begin
Process(clk)
第五章VHDL的LOOP语句
NEXT[标号][WHEN 条件]
该语句主要用于LOOP语句内部的 循环控制。当NEXT语句后不跟[标号], NEXT语句作用于当前最内层循环,即从 LOOP语句的起始位置进入下一次循环。 若NEXT语句不跟[WHEN 条件],NEXT 语句立即无条件跳出本次循环,而进入 下一次循环。
loop语句
LOOP语句就是循环语句,它可
以使包含的一组顺序语句被循环
执行,其执行的次数受迭代算法
控制。在VHDL中常用来描述迭 例如:
代电路的行为。
1.单个LOOP语句
loop1:LOOP
单个LOOP语句的书写格式如下: WAIT UNTIL clk=‘1’;
[标号:] LOOP 顺序语句
END LOOP[标号];
end encoder; architecture one of encoder is signal outs:std_logic_vector(2 downto 0); begin
outs<="111" when H='1' else "110" when G='1' else "101" when F='1' else "100" when E='1' else "011" when D='1' else "010" when C='1' else "001" when B='1' else "000" when A='1' else "XXX";
第5章VHDL语言基础(续)
… PROCESS VARIABLE temp: BIT; BEGIN
WAIT ON a, b; temp:= a OR b; c <= NOT temp; … END PROCESS; …
ARCHITECTURE a OF tran IS
BEGIN
PROCESS
BEGIN
WAIT UNTIL rst1=’1’; --等待rst1变成1,
Op1<= A ;
才将信号A送op1
END PROCESS;
END a;
5.2.8 NULL语句
SIGNAL s: INTEGER range 0 to 10; SIGNAL y, d0, d1: std_logic; …… CASE s IS
第5章 VHDL语言基础(续)
一个例子
LIBRARY IEEE; USE ieee.std_logic_1164.all;
ENTITY Logic IS PORT(
A,B,C: IN Std_logic; F: OUT Std_logic ); END Logic;
ARCHITECTURE a OF Logic IS SIGNAL D,E : Std_logic;
PROCEDURE vector_to_int ( z : IN std_logic_vector; x_flag : OUT boolean; q : INOUT integer) IS
BEGIN q:=0; x-flag:=false; FOR I IN z’range LOOP q:= q 2; IF z(i)/=’0’ THEN q:= q + 1; ELSIF z(i)=’0’ THEN x-flag:=true; END IF; END LOOP;
5_Vhdl程序的顺序结构
第5章 VHDL设计入门
二、IF语句
IF语句是一种条件语句,它根据语句中所设置的一 种或几种条件,有选择地执行指定的顺序语句,其语 句结构有三种。 格式一(二选一格式): IF 条件句 THEN 顺序语句; ELSE 顺序语句; END IF; 条件句必须由布尔表达式构成 ,
第5章 VHDL设计入门
五、其它顺序语句简介
1、NEXT语句
NEXT语句主要用在LOOP语句执行中有条件的或无 条件的转向控制,跳出本次循环。它的语句格式如下: NEXT [标号] [WHEN 条件表达式]; 此语句与loop构成loop语句,格式为: [标号:] LOOP 循环语句组; NEXT [标号] [WHEN 条件表达式]; END LOOP [标号];
第5章 VHDL设计入门
四、Loop语句
Loop语句与其它高级语言的循环语句相似。它有三 种格式。 1、FOR…LOOP语句 [标号:]FOR 循环变量 IN 循环次数范围 LOOP 循环语句组; END LOOP [标号]; 特点: 循环变量是loop内部自动声明的局部变量,仅在loop 内可见。 循环次数范围必须是可计算的整数范围; 整数表达式 to或downto 整数表达式
第5章vhdl设计入门五其它顺序语句简介当loop标号缺省时则执行next语句时即刻无条件终止当前的循环跳回到本次循环loop语句开始处开始下一次循环否则跳转到指定标号语句开始处重新开始执行循环操作
第5章 VHDL设计入门
5.4 VHDL程序的顺序结构
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
第5 章 VHDL 顺序语句
在 VHDL 中,一个进程是由一系列顺序语句构 成的,而进程本身属并行语句,在同一设计实 体中,所有的进程是并行执行的,一个进程与 其设计实体的其它部分进行数据交换的方式只 能通过信号或端口,如果要在进程中完成某些 特定的算法和逻辑操作,也可以通过依次调用 子程序来实现,但子程序本身并无顺序和并行 语句之分,利用顺序语句可以描述逻辑系统中 的组合逻辑、时序逻辑或它们的综合体。
第5 章 VHDL 顺序语句
VHDL有如下六类基本顺序语句: 赋值语句 流程控制语句 等待语句 子程序调用语句 返回语句 空操作语句
第5 章 VHDL 顺序语句
5.1 赋值语句 赋值语句的功能就是将一个值或一个表达式的
运算结果传递给某一数据对象 如信号或变量, 或由此组成的数组。VHDL 设计实体内的数据 传递以及对端口界面外部数据的读写都必须通 过赋值语句的运行来实现。
第5 章 VHDL 顺序语句
顺序语句(Sequential Statements)和并行语句 (Concurrent Statements)是 VHDL 程序设计中两大基 本描述语句系列。在逻辑系统的设计中 ,这些语句从 多侧面完整地描述了数字系统的硬件结构和基本逻辑 功能,其中包括通信的方式、信号的赋值、多层次的 元件例化以及系统行为等。顺序语句是相对于并行语 句而言的,顺序语句的特点是,每一条顺序语句的执 行(指仿真执行)顺序是与它们的书写顺序基本一致的。 顺序语句只能出现在进程(Process)和子程序中,子程 序包括函数(Function)和过程(Procedure)。
-- 将s2在上面的赋值0 赋给svec(7)
END PROCESS ;
第5 章 VHDL 顺序语句
5.1.2 赋值目标 赋值语句中的赋值目标有四种类型。 1. 标识符赋值目标 以简单的标识符作为信号或变量名,这类名字可作为
标识符赋值目标。 VARIABLE a, b STD_LOGIC ; SIGNAL c1 : STD_LOGIC_VECTOR (1 TO 4); a := '1' ; b := '0' ; c1 <= "1100“; 其中a b c1都属标识符赋值目标。
-- 立即将v2置位为1
s1 <= '1' ;
-- s1被赋值为1
s2 <= '1' ;
-- 由于在本进程中 这里的s2不是最后一个
-- 赋值语句 故不作任何赋值操作
svec(0) <= v1;
-- 将v1在上面的赋值1 赋给svec(0)
svec(1) <= v2;
-- 将v2在上面的赋值1 赋给svec(1)
第5 章 VHDL 顺序语句
变量赋值语句和信号赋值语句的语法格式如下: 变量赋值目标 := 赋值源; 信号赋值目标 <= 赋值源; 注意! 当在同一进程中,同一信号赋值目标有多个赋值源时,
信号赋值目标获得的是最后一个赋值源的赋值,其前 面相同的赋值目标不作任何变化。 当同一赋值目标处于不同进程中时,其赋值结果就比 较复杂,这可以看成是多个信号驱动源连接在一起可 以发生线与、线或、或者三态等不同结果。
第5 章 VHDL 顺பைடு நூலகம்语句
5.1.1 信号和变量赋值 赋值语句有两种 即信号赋值语句和变量赋值语句 每一
种赋值语句都由三个基本部分组成,它们是赋值目标 赋值符号和赋值源 赋值目标是所赋值的受体 它的基本 元素只能是信号或变量 但表现形式可以有多种,如文 字、标识符、数组等。赋值符号只有两种,信号赋值 符号是 <= 变量赋值符号是:= 赋值源是赋值的主体。 它可以是一个数值,也可以是一个逻辑或运算表达式。 VHDL 规定,赋值目标与赋值源的数据类型必须一致。
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最后一次赋值 赋值有效
第5 章 VHDL 顺序语句
变量赋值与信号赋值的区别在于,变量具有局 部特征,它的有效性只局限于所定义的一个进 程中,或一个子程序中。它是一个局部的,暂 时性数据对象(在某些情况下)。对于它的赋值 是立即发生的(假设进程已启动) 即是一种时间 延迟为零的赋值行为。
第5 章 VHDL 顺序语句
信号则不同,信号具有全局性特征。它不但可 以作为一个设计实体内部各单元之间数据传送 的载体,而且可通过信号与其它的实体进行通 信(端口本质上也是一种信号),信号的赋值并 不是立即发生的,它发生在一个进程结束时。 赋值过程总是有某种延时的,它反映了硬件系 统的重要特性。综合后可以找到与信号对应的 硬件结构,如一根传输导线一个输入输出端口 或一个D触发器等。
SIGNAL s1 ,s2 : STD_LOGIC;
SIGNAL svec : STD_LOGIC_VECTOR (0 TO 7);
...
PROCESS ( s1 ,s2 )
VARIABLE v1 ,v2 : STD_LOGIC
BEGIN
v1 := '1' ;
-- 立即将v1置位为1
v2 := '1' ;
第5 章 VHDL 顺序语句
2. 数组元素赋值目标
数组元素赋值表达式的赋值目标可表达为:
标识符(下标名);
在这里标识符是数组类信号或变量的名字,下 标名可以是一个具体的数字,也可以是一个以
文字表示的数字名。它的取值范围在该数组元
素个数范围内。下标名若是未明确表示取值的
文字(不可计算值) 则在综合时,将耗用较多的 硬件资源,且一般情况下不能被综合。
-- 此'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;