理解Verilog任务:函数vs任务、语法与用法全解析
任务与函数核心区别
函数处理输入返回单值;任务更通用,可通过output/inout参数返回多值,可包含消耗仿真时间的元素(@、posedge等)。
任务声明语法
两种风格:传统分行声明输入/输出/inout,或ANSI风格括号内声明。端口列表可为空。automatic使任务可重入,每次调用动态分配内存不共享。
静态任务 vs 自动任务
静态任务:成员变量跨并发调用共享。示例中4个并发initial块调用静态display任务,内部整型i共享递增,输出1,2,3,4。
自动任务:每次调用分配独立内存,同例中输出全为1。
全局任务
模块外声明为全局任务,任意模块可调用。模块内声明则需通过实例名引用(u0.display())。
禁用任务
disable关键字可终止命名块。示例中display任务含T_DISPLAY和S_DISPLAY两块,50时间单位后禁用T_DISPLAY,S_DISPLAY继续执行完成。
函数调用任务的编译错误
函数中含时间控制语句(#10)编译报错:illegal time/event control statement within a function。
Verilog
- Verilog 入门:数字电路设计完整教程
- 掌握 Verilog 拼接操作:实用指南
- 深入理解 Verilog 赋值语句:类型、语法与最佳实践
- Verilog阻塞与非阻塞赋值:关键区别详解
- 掌握Verilog函数:高效RTL设计的复用利器
- 理解Verilog任务:函数vs任务、语法与用法全解析
- 掌握 Verilog 层次引用作用域:避免模块与块中的名称冲突
- Verilog 时钟发生器设计与实现指南
- 掌握 Verilog 显示任务:高效调试与日志记录
- 掌握 Verilog 数学函数:高效硬件设计的利器
- 掌握 Verilog $timeformat:精度控制与显示格式化
- 理解与打印 Verilog 任意作用域下的 Timescale