位置:51电子网 » 技术资料 » EDA/PLD

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;



相关IC型号

热门点击

 

推荐技术资料

声道前级设计特点
    与通常的Hi-Fi前级不同,EP9307-CRZ这台分... [详细]
版权所有:51dzw.COM
深圳服务热线:13751165337  13692101218
粤ICP备09112631号-6(miitbeian.gov.cn)
公网安备44030402000607
深圳市碧威特网络技术有限公司
付款方式


 复制成功!