- 23
- 0
- 约8.17千字
- 约 17页
- 2017-08-20 发布于重庆
- 举报
vhdl中的信号与变量仿真
从仿真语义的角度看VHDL中的信号与变量
VARIABLE A : STD_LOGIC :=’1’;
虽然变量定义时可以定义初始值,但是综合器并不支持设置初始值。故定义变量时多从仿真的角度出发,定义表述如下:
VARIABLE 变量名 : 数据类型 ;
然后,在需要的时候再对该变量进行赋值,变量赋值的表述如下:
目标变量名 := 表达式;
赋值语句右方的“表达式”必须是一个与“目标变量名”具有相同数据类型的数值,这个表达式可以是一个运算表达式,也可以是一个数值。而且,新的变量值的获得是立即发生的。
信号
信号是描述硬件系统的基本数据对象,它的性质类似于连接线。信号可以作为设计实体中并行语句模块间的信息交流通道。
信号定义的语句格式如下:
SIGNAL 信号名 : 数据类型 := 初始值 ;
信号的赋值语句格式一般如下:
目标信号名 = 表达式 AFTER 时间量;
同变量一样,信号的初始值的设置也不是必需的,而且初始值仅在VHDL的行为仿真中有效。而与变量相比,信号的硬件特征更为明显,它具有全局的特性。信号的使用、定义范围是实体、结构体和程序包,在进程和子程序的顺序语句中不允许定义信号。另外,在进程中只能将信号列入敏感表,而不能将变量列入敏感表。
这里的“表达式”可以是一个运算表达式,也可以是数据对象(变量、信号或常量)。数据信息的传入可以设置延时量,如AFTER 3ns。因此,目标信号获得传入的数据并不是即时的。即使是零延时(不做任何显式的延时设置,即等效于AFTER 0ns),也要经历一个特定的延时,即δ延时。因此,符号“=”两边的数值并不总是一致的,这与实际器件的传播延迟特性是相吻合的,因此这与变量的赋值过程有很大的差别。
信号的赋值可以出现在一个进程中,也可以直接出现在结构体的并行语句结构中,但他们运行的含义不一样。前者属于顺序信号赋值,这时的信号赋值操作要视进程是否已经被启动,并且允许对同一目标信号进行多次赋值;后者属于并行信号赋值,其赋值操作是各自独立并行地发生的,且不允许对同一目标信号进行多次赋值。
变量与信号的相同之处
初始值的功效相同。
变量和信号定义的初始值都不是必需的,即使设置了,经综合后的硬件电路也不支持。
变量与信号都具有能够接受赋值这一重要的共性。
在不完整的条件语句中,单独的变量赋值语句和信号赋值语句都能产生相同的时序电路,但此时变量已经不是简单的数据临时储存结构。
下面分别用利用变量和信号的VHDL描述构成一个D触发器。
程序清单1 D触发器(变量)
LIBRARY IEEE;
Use IEEE.STD_LOGIC_1164.ALL;
entity D_variable is
port
(
-- Input ports
CLK : in STD_LOGIC;
D : in STD_LOGIC;
-- Output ports
Q : out STD_LOGIC
);
end D_variable;
architecture EXP of D_variable is
BEGIN
PROCESS(CLK)
VARIABLE Temp_QV : STD_LOGIC;
begin
if CLKEVENT AND CLK=1 then
Temp_QV :=D;
end if;
Q =Temp_QV;
END PROCESS;
--Q =Temp_Q;
end EXP;
此代码在QUARTUS II中综合的时间戳如图1:
图1 变量的VHDL描述构成D触发器在quartus综合的时间戳
工作时序如图2:
图2 变量的VHDL描述构成D触发器的工作时序
生成的RTL电路如图3:
图3 变量的VHDL描述构成D触发器的RTL电路
此代码在Synplify Pro 9.0.1中综合的报告信息、时间戳如图4:
图4 变量的VHDL描述构成D触发器在Synplify综合的时间戳
Synplify生成的RTL电路如图5:
图5 变量的VHDL描述构成D触发器在Synplify中产生的RTL电路
程序清单2 D触发器(信号)
LIBRARY IEEE;
Use IEEE.STD_LOGIC_1164.ALL;
entity D_signal is
port
(
-- Input ports
CLK : in STD_LOGIC;
D : in STD_LOGIC;
-- Output ports
Q : out STD_LOGIC
);
end D_signal;
architecture EXP of D_signal is
SIGNAL Temp_QS:STD_LOGIC;
B
原创力文档

文档评论(0)