掌握Verilog参数:构建可复用可扩展模块
参数基本概念
参数使模块可按不同规格复用。如4位加法器参数化位宽,实例化时传入新值变为8/16位加法器。类似函数调用传参。参数本质为常量,运行时不可修改,不可与网络/变量/其他参数重名。分模块参数和指定参数两大类。
模块参数
可在实例化或defparam中覆盖。Verilog-1995风格模块头声明参数;ANSI风格在模块名后#(parameter ...)声明。常用大写命名显眼。
覆盖方式:
1. 实例化传参:design_ip #(BUS_WIDTH=64, DATA_WIDTH=128) d0 (...);(RTL设计常用)
2. defparam:defparam d0.FIFO_DEPTH = 128;(仿真快速修改常用)
实例:参数化计数器
模块counter含参数N(位宽,默认2)、DOWN(增/减,默认0递增)。
2位加计数器:实例化#(.N(2)),DOWN默认0。
4位减计数器:实例化#(.N(4), .DOWN(1))。附综合原理图展示不同配置硬件结构。
指定参数
用specparam声明,主要提供时序延迟值。可在specify块内或模块主体声明。SDF可覆盖值。
两类参数对比表
| 指定参数 | 模块参数 |
|---|---|
specparam声明 | parameter声明 |
可在specify块或主体声明 | 仅主体声明 |
| 可赋specparam和parameter | 不可赋specparam |
| SDF覆盖 | 实例化参数或defparam覆盖 |
Verilog
- Verilog 入门:数字电路设计完整教程
- 掌握 Verilog 拼接操作:实用指南
- Verilog 核心要点速览
- 深入理解 Verilog 赋值语句:类型、语法与最佳实践
- Verilog阻塞与非阻塞赋值:关键区别详解
- 掌握Verilog函数:高效RTL设计的复用利器
- 理解Verilog任务:函数vs任务、语法与用法全解析
- 掌握 Verilog 层次引用作用域:避免模块与块中的名称冲突
- Verilog 时钟发生器设计与实现指南
- 掌握 Verilog 数学函数:高效硬件设计的利器
- 掌握 Verilog $timeformat:精度控制与显示格式化
- 理解与打印 Verilog 任意作用域下的 Timescale