告别手抄端口列表:Verilog 例化自动生成
例化一个模块,最怕什么?
例化是 Verilog 里最机械的劳动:打开目标模块,逐行抄端口名,分清 in/out,
对齐位宽,再加上例化名和参数。一个 20 端口的模块抄完,眼睛花了,还抄错一个
output 方向 —— 综合器报出一屏"端口未连接",再回头一行行核对。
更要命的是改代码的时候:模块加了一个端口,所有例化处都要同步改。 漏改一处,就是一次综合失败。
svfic 的例化生成,把这个过程压缩到一次按键。
从模块到例化模板
光标停在任意一个模块里,一键触发,右侧立刻输出例化模板:
spi_top #(
.DATA_WIDTH (DATA_WIDTH ),
.CLK_DIV (CLK_DIV ),
.SPI_MODE (SPI_MODE )
) u_spi_top (
.clk (clk ),
.rst_n (rst_n ),
.tx_data (tx_data ),
.tx_valid (tx_valid ),
.rx_data (rx_data ),
.rx_valid (rx_valid ),
.spi_cs_n (spi_cs_n ),
.spi_sclk (spi_sclk ),
.spi_mosi (spi_mosi ),
.spi_miso (spi_miso ),
.busy (busy )
);
参数在上、端口在下,全部 7 列对齐。端口名、方向、位宽、参数默认值 都是从模块声明里解析出来的,不是模板填空 —— 模块改了多少端口,生成的例化就跟着变多少。
生成背后的解析
例化生成的正确性,完全取决于 Verilog 解析器的质量。svfic 的解析器处理这些场景:
- 多行端口声明、逗号在行首/行尾的两种风格;
parameter带默认值、带注释;- 位宽表达式如
[DATA_WIDTH-1:0]; - 端口列表里混着
input wire、output reg等组合声明。
和格式化管道一样,解析的第一步永远是去注释 —— 注释里写的任何关键词都不会干扰端口提取。
和格式化配合使用
例化模板生成后,直接复制进代码,再执行一次一键格式化: 例化映射的 7 列对齐会和文件里其它例化保持同一套列宽。 生成 → 复制 → 对齐,一条流水线下来, 新模块接入工程的例化部分一分钟搞定,且和工程原有风格完全一致。
Testbench 生成:同源的另一个惊喜
同一套解析器还驱动着Testbench 生成:时钟、复位、DUT 例化、 激励区域全部自动布局。写验证时不再从空文件开始,直接往骨架里填测试向量。 下一篇我们会详细拆解它。
上一篇:一键格式化:拆解 svfic 的 7 步格式化管道
下一篇:Testbench 自动生成(敬请期待)