Verilog HDL行为建模--- 过程赋值语句
发布时间:2008/5/28 0:00:00 访问次数:1322
7.3 过程赋值语句
verilog hdl 中提供两种过程赋值语句 initial 和 always 语句,用这两种语句来实现行为的建
模。这两种语句之间的执行是并行的,即语句的执行与位置顺序无关。这两种语句通常与语句块
(begin ....end)相结合,则语句块中的执行是按顺序执行的。
1. initial 语句
initial 语句只执行一次,即在设计被开始模拟执行时开始(0时刻)。通常只用在对设计进行
仿真的测试文件中,用于对一些信号进行初始化和产生特定的信号波形。
语法如下:(大家只要先有个概念就可以)
initial
[timing_control] procedural_statement
procedural_statement 是下列语句之一:
procedural_assignment (blocking or non-blocking ) / / 阻塞或非阻塞性过程
赋值语句/ /
procedural_continuous_assignment
conditional_statement
case_statement
loop_statement
wait_statement
disable_statement
event_trigger
task_enable (user or system)
事例如上产生一个信号波形:
initial
begin
#2 stream = 1;
#5 stream = 0;
#3 stream = 1;
#4 stream = 0;
#2 stream = 1;
#5 stream = 0;
end
2004-08-16 第36页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
2. always 语句
always 语句与initial 语句相反,是被重复执行,执行机制是通过对一个称为敏感变量表的事件
驱动来实现的,下面会具体讲到。always 语句可实现组合逻辑或时序逻辑的建模。
例[1]:
initial
clk = 0 ;
always
#5 clk = ~clk;
因为always 语句是重复执行的,因此,clk 是初始值为0 的,周期为10 的方波。
例[2] d 触发器
always @ ( posedge clk or posedge rst )
begin
if rst
q <= ‘ b 0;
else
q <= d;
上面括号内的内容称为敏感变量,即整个always 语句当敏感变量有变化时被执行,否则不执
行。因此,当rst 为1 时,q被复位,在时钟上升沿时,d被采样到q。有@ 的用来描述一个时序器
件。
例[3] 2 选一的分配器
always @( sel ,a ,b)
c = sel ? a :b;
这里的sel ,a,b 同样称为敏感变量,当三者之一有变化时,always 被执行,当sel 为 1 ,c被
赋值为a ,否则为b 。描述的是一个组合逻辑 mux 器件。
注意以下几点:
1、对组合逻辑的always 语句,敏感变量必须写全,敏感变量是指等式右边出现的所有标识符
如上的a,b和条件表达式中出现的所以标识符如上例3的sel。
2、对组合逻辑器件的赋值采用阻塞赋值“=”
3、时序逻辑器件的赋值语句采用非阻塞赋值“<=”,如上的 q 〈= d;
7.3 过程赋值语句
verilog hdl 中提供两种过程赋值语句 initial 和 always 语句,用这两种语句来实现行为的建
模。这两种语句之间的执行是并行的,即语句的执行与位置顺序无关。这两种语句通常与语句块
(begin ....end)相结合,则语句块中的执行是按顺序执行的。
1. initial 语句
initial 语句只执行一次,即在设计被开始模拟执行时开始(0时刻)。通常只用在对设计进行
仿真的测试文件中,用于对一些信号进行初始化和产生特定的信号波形。
语法如下:(大家只要先有个概念就可以)
initial
[timing_control] procedural_statement
procedural_statement 是下列语句之一:
procedural_assignment (blocking or non-blocking ) / / 阻塞或非阻塞性过程
赋值语句/ /
procedural_continuous_assignment
conditional_statement
case_statement
loop_statement
wait_statement
disable_statement
event_trigger
task_enable (user or system)
事例如上产生一个信号波形:
initial
begin
#2 stream = 1;
#5 stream = 0;
#3 stream = 1;
#4 stream = 0;
#2 stream = 1;
#5 stream = 0;
end
2004-08-16 第36页,共41页
版权所有,侵权必究
绝密
verilog hdl 入门教程请输入文档编号
2. always 语句
always 语句与initial 语句相反,是被重复执行,执行机制是通过对一个称为敏感变量表的事件
驱动来实现的,下面会具体讲到。always 语句可实现组合逻辑或时序逻辑的建模。
例[1]:
initial
clk = 0 ;
always
#5 clk = ~clk;
因为always 语句是重复执行的,因此,clk 是初始值为0 的,周期为10 的方波。
例[2] d 触发器
always @ ( posedge clk or posedge rst )
begin
if rst
q <= ‘ b 0;
else
q <= d;
上面括号内的内容称为敏感变量,即整个always 语句当敏感变量有变化时被执行,否则不执
行。因此,当rst 为1 时,q被复位,在时钟上升沿时,d被采样到q。有@ 的用来描述一个时序器
件。
例[3] 2 选一的分配器
always @( sel ,a ,b)
c = sel ? a :b;
这里的sel ,a,b 同样称为敏感变量,当三者之一有变化时,always 被执行,当sel 为 1 ,c被
赋值为a ,否则为b 。描述的是一个组合逻辑 mux 器件。
注意以下几点:
1、对组合逻辑的always 语句,敏感变量必须写全,敏感变量是指等式右边出现的所有标识符
如上的a,b和条件表达式中出现的所以标识符如上例3的sel。
2、对组合逻辑器件的赋值采用阻塞赋值“=”
3、时序逻辑器件的赋值语句采用非阻塞赋值“<=”,如上的 q 〈= d;