当前位置: 首页 > article >正文

Verilog中initial的用法

Verilog 语言中,initial 语句用于在仿真开始时执行一次性初始化操作。它是顺序执行的,用来描述在仿真启动时立即运行的代码块,通常用于赋初值生成波形控制信号行为


语法

initial begin     
    // 语句1    
    // 语句2    
    ... 
end

特点

  1. 只执行一次

    • initial 块在仿真启动时执行,仅执行一次
    • 多个 initial 块会并行执行。
  2. 顺序执行

    • begin...end 块中的语句按顺序依次执行。
  3. 仿真专用

    • initial 块通常用于仿真环境,不能综合到硬件电路中。
  4. 典型应用

    • 初始化寄存器或信号。
    • 生成仿真测试激励(testbench)。
    • 打印调试信息。

示例 1:初始化信号

`timescale  1ns/1ns
module example();

reg clk;     
reg rst;      

	initial begin         
		clk = 0;         
		rst = 1;         
		#10 
		rst = 0;  // 在仿真10个时间单位后释放复位     
	end
	
end endmodule

解释

  • 在仿真开始时,clk 被初始化为 0,rst 初始化为 1。
  • #10 表示延迟 10 个时间单位后将 rst 置为 0。

示例 2:生成时钟信号

`timescale 1ns/1ns

module clk_gen();

reg clk;

initial begin
	clk = 0;
	forever #5
	clk = ~clk;  // 每5个时间单位翻转一次
end

end endmodule

解释

  • 在仿真启动时,clk 被初始化为 0。
  • forever 循环表示每 5 个时间单位翻转 clk,生成周期性时钟信号。

示例 3:打印调试信息

`timescale 1ns/1ns

module test();     

initial begin         
	$display("Simulation started");         
	#100 
	$display("Simulation ended");         
	$stop;     
end

end endmodule

解释

  • $display 在仿真时打印信息,帮助调试。
  • 仿真运行 100 个时间单位后打印 “Simulation ended” 并停止仿真。

与 always 的区别

特性initialalways
执行次数只执行一次无限循环执行
应用场景信号初始化、仿真激励设计逻辑描述(如时钟驱动)
综合到硬件不能综合(仅用于仿真)可以综合到硬件
常用关键字begin...end 表示顺序执行@(posedge clk) 表示在时钟上升沿触发

总结

  • initial 块是 Verilog 仿真中初始化信号或生成激励的重要部分。
  • 适用于设置初值、生成时序波形或打印仿真信息。
  • 它只在仿真环境中执行一次,无法用于实际硬件综合设计。

http://www.kler.cn/a/446954.html

相关文章:

  • 5G 模组 RG500Q常用AT命令
  • 深入浅出支持向量机(SVM)
  • 台球助教平台系统开发APP和小程序信息收藏功能需求解析(第十二章)
  • K8s 节点 NotReady 后 Pod的变化
  • 音频接口:PDM TDM128 TDM256
  • 【HarmonyOS NEXT】Web 组件的基础用法以及 H5 侧与原生侧的双向数据通讯
  • 使用C语言编写UDP循环接收并打印消息的程序
  • 云手机:超越常规认知的多功能利器
  • Vue3之路由(Router)介绍
  • [论文阅读]Universal and transferable adversarial attacks on aligned language models
  • MapReduce的shuffle过程详解
  • 【论文阅读】Deep Neural Network Pruning Using Persistent Homology
  • iClient3D for Cesium 实现限高分析
  • 【AI学习】Huggingface复刻Test-time Compute Scaling技术
  • uniapp使用腾讯地图接口的时候提示此key每秒请求量已达到上限或者提示此key每日调用量已达到上限问题解决
  • SSD目标检测算法
  • 每天40分玩转Django:Django测试
  • 人形机器人之间的协同合作运输方案[罗马大学-Giuseppe Oriolo]
  • 单元测试使用记录
  • idea开发工具创建子分支到结束完成流程
  • harbor离线安装 配置https 全程记录
  • iOS + watchOS Tourism App(含源码可简单复现)
  • macOS brew安装
  • QT笔记- QClipboard剪切板对QByteArray数据的复制与粘贴
  • C# 从控制台应用程序入门
  • 第一个AJAX调用XMLHttpRequest