告别手抄端口列表:Verilog 例化自动生成

2026-08-15 · svfic · 代码生成

例化一个模块,最怕什么?

例化是 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 的解析器处理这些场景:

和格式化管道一样,解析的第一步永远是去注释 —— 注释里写的任何关键词都不会干扰端口提取。

和格式化配合使用

例化模板生成后,直接复制进代码,再执行一次一键格式化: 例化映射的 7 列对齐会和文件里其它例化保持同一套列宽。 生成 → 复制 → 对齐,一条流水线下来, 新模块接入工程的例化部分一分钟搞定,且和工程原有风格完全一致。

Testbench 生成:同源的另一个惊喜

同一套解析器还驱动着Testbench 生成:时钟、复位、DUT 例化、 激励区域全部自动布局。写验证时不再从空文件开始,直接往骨架里填测试向量。 下一篇我们会详细拆解它。

上一篇:一键格式化:拆解 svfic 的 7 步格式化管道
下一篇:Testbench 自动生成(敬请期待)