verilog中的initial语句

本文介绍了 Verilog HDL 中的结构化过程语句,包括 initial 和 always 语句。initial 语句构成 initial 块,从仿真0时刻开始执行并在整个仿真过程中仅执行一次。文章通过示例详细阐述了 initial 语句的执行顺序及如何通过延迟控制执行时机。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 首先说说结构化过程语句,在verilog中有两种结构化的过程语句:initial语句和always语句,他们是行为级建模的两种基本语句。其他所有的行为语句只能出现在这两种语句里

 

与C语言不通,verilog在本质上是并发而非顺序的。verilog中的各个执行流程(进程)并发执行,而不是顺序执行的。每个initial语句和always语句代表一个独立的执行过程,每个执行过程从仿真时间0开始执行并且两种语句不能嵌套使用。下面举例解释之:

initial语句

所有的initial语句内的语句构成了一个initial块。initial块从仿真0时刻开始执行,在整个仿真过程中只执行一次。如果一个模块中包括了若干个initial块,则这些initial块从仿真0时刻开始并发执行,且每个块的执行是各自独立的。如果在块内包含了多条行为语句,那么需要将这些语句组成一组,一般式使用关键字begin和end将他们组合在一个块语句;如果块内只有一条语句,则不必使用begin和end.下面给出了initial语句的例子:

[cpp]  view plain  copy
 print ?
  1. module stimulus  
  2.   
  3. reg x,y, a,b, m  
  4.   
  5. initial  
  6.     m = 1'b0;  
  7.       
  8. initial  
  9. begin  
  10.     #5 a = 1'b1;  
  11.     #25 b = 1'b0;  
  12. end  
  13.   
  14. initial  
  15. begin  
  16.     #10 x = 1'b0;  
  17.     #25 y = 1'b1;  
  18. end  
  19.   
  20. initial  
  21.     #50 $finish;  
  22.       
  23. endmodule  


 


在上面例子中,三条initial语句在仿真0时刻开始并行执行。如果在某一条语句前面存在延迟#<delay>,那么这条initial语句的仿真将会停顿下来,在经过指定的延迟时间之后再继续执行。因此上面的initial语句执行顺序为:

[cpp]  view plain  copy
 print ?
  1. 时间              所执行的语句  
  2. 0                   m = 1'b0;  
  3. 5                   a = 1'b1;  
  4. 10                  x = 1'b0;  
  5. 30                  b = 1'b0;  
  6. 35                  y = 1'b1;  
  7. 50                  $finish;  


 

摘自《VerilogHDL数字设计与综合(第二版)》夏宇闻译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

怀想天空2011

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值