Verilog系列:【4】initial和always区别

Verilog中的过程性语句结构主要有以下两种:

  • intial语句;

  • always语句;

在数字设计或者验证平台的搭建过程中,一个模块可以包含任意多个initial语句和always语句,并且这些语句在同一个模块中是并行执行的(需要注意避免竞争情况出现,特别是多个进程对同一个信号的控制)。两者的主要区别如下表所示:

initial

always

不可综合,可用来构建仿真平台和仿真模型

可综合

仿真0时刻开始运行,并且按照其中指定的序列顺序执行

仿真0时刻开始运行,可以按照其中敏感信号列表的变化反复执行

其中的各条过程性语句仅执行一次,除非使用foreverrepeat等结构构成内循环从而可实现多次执行(仿真时钟的产生)

可以根据敏感信号列表信号的变化情况反复执行,除非在结构中使用了wait等挂起结构

......

initial begin

    clk  = 1'b0;

     forever #PERIOD clk = ~clk;

end

......

......

always@(posedge clk)

begin

    ...

    reg_1 <= reg_0;

    reg_2 <= reg_1;

    ...

end

......


注意:经常在使用initial时对reg类型进行初始化,完全也可以将reg类型的初始化在reg类型变量声明的同时进行初始化,相当于先声明了变量然后再在initial中进行初始化。如下例:

reg var_init = 1'b0;

reg var_init;

initial begin

   var_init = 1'b0;

end


全部评论
楼主理解的这么深刻啊,感谢分享
点赞 回复 分享
发布于 2022-08-30 21:22 陕西

相关推荐

04-09 09:47
门头沟学院 Java
Arbelite_:2-3k,这工资还不如去摇奶茶
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务