亿迅智能制造网
工业4.0先进制造技术信息网站!
首页 | 制造技术 | 制造设备 | 工业物联网 | 工业材料 | 设备保养维修 | 工业编程 |
home  MfgRobots >> 亿迅智能制造网 >  >> Industrial programming >> Verilog

Verilog initial 块:用途、语法与不可综合特性

一组 Verilog 语句通常在仿真中顺序执行。这些语句放在 过程 块中。Verilog 中主要有两类 过程 块:initial 和 always。

语法

initial [single statement]
initial begin [multiple statements] end

initial 块用途

initial 块不可综合,无法转换为包含数字元件的硬件原理图。因此 initial 块除仿真外用途不大。主要用于初始化变量和驱动设计端口特定值。

initial 块何时开始和结束?

initial 块在仿真开始时刻 0 启动。整个仿真期间仅执行一次。执行完块内所有语句后结束。

上图模块 behave 有两个内部信号 a 和 b。initial 块仅一条语句,故无需放在 begin 和 end 内。该语句在时间 0 启动 initial 块时赋值 2'b10 给 a。

有延迟元素会怎样?

下面代码有额外语句赋值给信号 b,但仅在前一语句执行后 10 时间单位发生。意味着 a 先赋值,10 时间单位后 b 赋 0。

一个模块允许多少 initial 块?

模块内可定义的 initial 块数量无限制。

下面代码有 三个 initial 块,全部同时启动并并行运行。但因各块内语句和延迟不同,完成时间可能不同。

本例中,第一块延迟 20 单位,第二块总延迟 50 单位 (10+40),第三块延迟 60 单位。故仿真需 60 时间单位完成,因至少有一个 initial 块仍在运行直到 60 时间单位。

$finish 是 Verilog 系统任务,通知仿真器终止当前仿真。

若最后一块延迟 30 时间单位(如下),仿真将在 30 时间单位结束,从而终止此时仍活跃的其他 initial 块。

initial begin #30 $finish; end

查看下面闪存示例了解 initial 块在仿真中如何执行。

点击查看带仿真示例的幻灯片!

Verilog

  1. Verilog 入门:数字电路设计完整教程
  2. 掌握 Verilog 拼接操作:实用指南
  3. Verilog 核心要点速览
  4. 深入理解 Verilog 赋值语句:类型、语法与最佳实践
  5. Verilog阻塞与非阻塞赋值:关键区别详解
  6. 掌握Verilog函数:高效RTL设计的复用利器
  7. 理解Verilog任务:函数vs任务、语法与用法全解析
  8. Verilog 时钟发生器设计与实现指南
  9. 掌握 Verilog 数学函数:高效硬件设计的利器
  10. 掌握 Verilog $timeformat:精度控制与显示格式化
  11. 理解与打印 Verilog 任意作用域下的 Timescale
  12. 掌握 Verilog 文件 I/O:打开、读取、写入和关闭