DC验证流程
DC验证流程
做数字IC设计,DC综合后的验证通常被称为门级仿真 (Gate-Level Simulation, GLS) 或 后仿真 (Post-Sim) 。
它的目的是验证 DC 生成的“网表”是否与你原来的 RTL 功能一致,以及时序是否满足要求。
在这个虚拟机里,你主要使用 VCS (负责跑仿真) 和 Verdi (负责看波形)。以下是手把手的操作流程:
第一步:准备文件 (在 DC 中生成)
在 DC (Design Compiler) 中综合完成后,你必须保存两个关键文件,否则无法进行后续验证:
- 门级网表 (.v): 这是把你的代码变成了用 TSMC 库里的 AND, OR, XOR 门连接的电路。
- 标准延时文件 (.sdf): (可选,做带时序的后仿需要) 包含了每个门的真实延迟信息。
第二步:修改 Testbench (测试平台)
你需要对原来的 Testbench 做一点点修改,让它能加载延迟文件(如果你只做逻辑验证,不关心延迟,可以跳过 initial 块里的代码)。
打开你的 tb_adder_32.v,加入以下内容:
Verilog
module tb_adder_32;
// ... 你的信号定义 ...
// 实例化你的设计 (注意:这里实例化的是 DC 生成的网表模块名)
adder_32 u_adder_32 ( ... );
initial begin
// 【关键】加载波形记录功能 (为了给 Verdi 看)
$fsdbDumpfile("adder_post_sim.fsdb");
$fsdbDumpvars(0, tb_adder_32);
// 【关键】反标 SDF 延迟文件 (如果要看真实延迟)
// 第一个参数是sdf文件路径,第二个是Testbench里例化的DUT名字
$sdf_annotate("adder_32.sdf", u_adder_32);
end
// ... 你的测试激励 ...
endmodule第三步:运行 VCS 仿真 (核心步骤)
这是最关键的一步。你需要告诉 VCS:我要仿真网表、我的 Testbench、以及厂家给的门电路仿真模型。
在终端中输入以下命令(假设你在当前目录下):
Bash
vcs -R -full64 -debug_access+all \
tb_adder_32.v \
adder_32_netlist.v \
-v /你的库文件路径/verilog/tsmc13.v \
+neg_tchk +maxdelays命令详解 (必须看):
-
-R: 编译后立即运行。 -
-full64: 使用 64 位模式。 -
-debug_access+all: 开启调试模式,否则无法生成 fsdb 波形给 Verdi 看。 -
tb_adder_32.v: 你的测试平台。 -
adder_32_netlist.v: DC 吐出来的网表。 -
-v /.../verilog/tsmc13.v: 这是最重要的! 网表里全是XOR2X1 这种名字,VCS 不认识,必须指向你截图里的那个tsmc13.v文件,它里面定义了这些门的逻辑行为。 -
+neg_tchk: 后仿常见选项,防止因负的时间检查导致仿真报错。
第四步:使用 Verdi 查看波形
如果 VCS 运行成功,你会看到终端打印出仿真时间,并且目录下会生成一个 adder_post_sim.fsdb 文件。
现在打开 Verdi 来看波形和电路图:
方法 1:直接加载波形
Bash
verdi -ssf adder_post_sim.fsdb &方法 2:加载设计和波形 (推荐,可以看门级电路图)
Bash
verdi -sv tb_adder_32.v adder_32_netlist.v -v /你的库文件路径/verilog/tsmc13.v -ssf adder_post_sim.fsdb &打开后:
- 按
g键(Get Signals)把信号拉出来。 - 你会发现波形不再是完美的方形,信号变化会有微小的延迟(如果你加载了 SDF),这就是后仿真的意义!
- 你可以双击代码窗口里的模块,查看 DC 综合出来的真实门电路连接图(不再是 RTL 代码,而是 Schematic)。
总结
- DC -> 吐出
netlist.v 和.sdf。 - Testbench -> 加
$sdf_annotate 和$fsdbDump。 - VCS -> 编译
TB + Netlist + tsmc13.v。 - Verdi -> 看
.fsdb波形。