进程中的信号赋值与变量赋值
比较对象 | 信号SIGNAL | 变量VARIABLE |
---|---|---|
基本用法 | 用于作为电路的信号连线 | 用于作为进程中局部数据存储单元 |
适用范围 | 在整个结构体内的任何地方都能适用 | 只能在所定义的进程中使用 |
行为特性 | 在进程的最后才对信号赋值,有延时 | 立即赋值,无延时 |
与Verilog对比 | 信号赋值类似于非阻塞式赋值 | 变量类似于阻塞式赋值 |
在进程中的赋值应该注意以下3点
(1)信号的赋值需要有一个δ延时。
(2)进程中的赋值特点是,所有赋值语句,包括信号赋值和变量赋值,都必须在一个δ延时内完成
(变量在δ延时前即已经完成赋值),即一个进程的运行时间固定为一个δ延时。
“执行赋值”只是一个过程,它具有顺序的特征;
而“完成赋值”是一种结果,它的发生具有VHDL的信号赋值最有特色的并行行为特征。
(3)当在进程中存在同一信号有多个赋值源(即对同一信号发生多次赋值)时,
实际完成赋值,即赋值对象的值发生更新的信号是最接近END PROCESS语句的信号。
使用变量赋值的时序模块设计
ARCHTECTURE bhv OF DDF1 IS
BEGIN
PROCESS(CLK)
VARIABLE Q1 : STD_LOGIC;
BEGIN
IF CLK'EVENT AND CLK = &