DC运行流程
DC运行流程
|
|
仿真配置1
总结配置2
心得3
|
|
VCS 仿真命令4
数字全流程虚拟机5
|
|
-
read_file -format db /home/ic_libs/TSMC_013/synopsys/typical.db
- read_file -format db /home/ICer/project/synopsys/lib/tsmc018/osu018_stdcells.db
-
list_libs
-
check_library
-
remove_design -designs
|
|
这个库是后仿真用verilog库,dc综合后的网表仿真以及布局布线后网表仿真都用到它。一般随工艺库由foundry提供。举例来说,tower 0.18 工艺库,在主目录底下应该包含synopsys、astro等所用的库子目录。dc综合时用的工艺库应该包含在synopsys子目录下,同理,仿真用的verilog库应包含在名为verilog的子目录下,共包含2个文件,twr18.v 与 twr18_neg.v,其中后一个包含了负时序(- holdtiming)信息,但仿真速度较慢,一般不采用。在对综合或布局布线后网表进行仿真时将这个.v文件与所得的sdf或者spef文件一起载入仿真器仿真即可。当然,不同的foundry提供的工艺库目录结构可能略有不同,但基本上遵循上述的目录结构。楼主请到相应的库目录下查找一下即可。
问题
- 改变电压和输出芯片没变化,在亚阈值区
- 怎么用向量测试
- 我觉得还是先进行第二步,用modelsim看时序,写测试逻辑在所
- 如何把32位乘法器模块化设计的更好些
翻译加e入6
转换库7
网表 (Netlist) 是由 Design Compiler (DC) 在运行完 compile 命令之后生成的。
在你的脚本 run.tcl 中,它是由 write 这个命令产生的。
1. 网表在哪里生成? (Where)
在你提供的 run.tcl 文件末尾,有一行:
write -format ddc -hier -out unmapped/MY_DESIGN.ddc
⚠️ 注意: 这行生成的是 .ddc 文件(二进制数据库),只能给 DC 自己读,Modelsim 和 Virtuoso 读不懂!
你需要手动添加下面这一行命令到 run.tcl 的最后(在 exit 之前),才能生成通用的 Verilog 网表:
Tcl
# 必须添加这一行来生成 .v 文件
write -format verilog -hierarchy -output mult32_netlist.v- 生成的时机: 必须在
compile 命令之后执行。 - 生成的位置: 会出现在你运行 DC 的当前文件夹下,名字叫
mult32_netlist.v。
2. 网表的格式是怎样的? (Format)
网表虽然也是 .v 文件,但它和你要自己写的 mult32.v 长得完全不一样。
- 你的代码 (RTL): 描述的是“功能” (人类能看懂)。
- 网表 (Netlist): 描述的是“连接关系” (机器能看懂)。
举个例子对比:
A. 你写的代码 (Behavioral RTL):
Verilog
module mult32 (A, B, P);
input [31:0] A, B;
output [63:0] P;
assign P = A * B; // 一句话搞定
endmoduleB. DC 生成的网表 (Gate-level Netlist):
(这就是 mult32_netlist.v 里的内容,DC 把你的乘号打碎成了几千个门)
Verilog
module mult32 ( A, B, P );
input [31:0] A;
input [31:0] B;
output [63:0] P;
// 1. 定义了一堆乱七八糟的中间连线
wire n1, n2, n3, n45, n_sys_12, net_334;
// 2. 调用工艺库里的“标准单元” (Standard Cells)
// AND2X1, XOR2X1 这些名字来自你的 SMIC .18 库
AND2X1 U1 ( .A(A[0]), .B(B[0]), .Y(n1) );
AND2X1 U2 ( .A(A[1]), .B(B[0]), .Y(n2) );
// 3. 具体的连接关系
XOR2X1 U3 ( .A(n1), .B(n_sys_12), .Y(P[0]) );
INVX1 U4 ( .A(n45), .Y(net_334) );
// ... 下面还有几千行这样的东西 ...
endmodule3. 如何检查网表是否正确?
当你打开生成的 mult32_netlist.v 文件时:
- 看名字: 里面的模块名(比如
AND2X1、FAX1)必须是 SMIC .18 工艺库里的名字。如果看到GTECH_AND这种名字,说明综合没完全成功(没映射到具体工艺上)。 - 看结构: 里面不应该再出现
assign P = A * B;这种语句。 - 看端口: 模块的输入输出端口(
A,B,P)应该和你原始设计保持一致。
下一步操作建议:
修改你的 run.tcl,加上 write -format verilog … 那行代码,重新运行一遍 DC,然后去文件夹里找生成的 .v 文件。
-
仿真配置
1 2 3 4 5vcs -R -full64 -debug_access+all \ tb_mult.v \ signed_vedic_mult_32bit_netlist.v \ -v /home/ICer/EDA/verilog/tsmc13.v \ +neg_tchk +maxdelays
. 关于 “Fatal: Error loading environment variables…”
你 Log 的最后出现了这个严重错误:
驱动能力 5V
Plaintext
Fatal: Error loading environment variables from environment file. Terminating execution.这意味着你的仿真环境配置(AMS Designer)挂了。
-
影响:如果你只是画图、跑 LVS/DRC,这可能暂时不影响你使用。但如果你要进行 数模混合仿真 (AMS Simulation) ,工具会无法启动。
-
原因:通常是因为你的 Linux 环境变量配置有问题,或者工程目录下的
.cdsinit /ams.env文件里指向的路径不对。 -
建议:
- 如果 Virtuoso 没有闪退,可以先忽略它,专注解决上面的黄色框问题。
- 如果后续跑仿真报错,建议联系实验室负责服务器的同学,检查一下
AMS_DIR或相关的环境变量设置
-
-
总结配置
- DC用sdl
- 需要配置symbol(没的话仿真不了)和schematic(重要)
- 网表要对应
- 模型库8
↩︎
-
心得
学会了使用DC:写run.tlc,看报告
学会使用VCS+DVE:看时序
学会了verdi看电路层级结构
明白了网表是什么和它的使用
对工艺库有了更深刻的理解:DC工艺库,VCS仿真verilog库,virtuoso工艺库
-
将网表导入virtuoso是我遇到的最大困难
如何建立一个标准器件库,需要有依赖的基础库,原理图,symbol
如何导入全局电源在VDD!和GND!
如何打散层级结构导入 -
写Spectre仿真向量文件不能用16进制写,只能用2进制写
-
工程和研究的区别
-
对抗不确定性
- 在本科,做不出题你会慌;在研究生,几个月实验失败是常态。你必须学会如何在“不知道路在哪”的迷雾中,通过查文献、做对比实验、逻辑推演来寻找方向。
-
定义问题的能力
- Log 文件
-
信息检索与过滤能力
-
项目的全流程管理
-
- 时间管理与节点控制: 没人天天盯着你,你必须自己规划如果研二要发文章,研一这就得把实验跑通。这种自驱力的养成非常痛苦,但非常有价值。
- 测数据、调参、标数据,“工程实践”和“分析逻辑”;不仅仅是思维能力,更是动手能力
- 工程思维的核心——Result-Oriented(结果导向)
- 管理就是“在有限资源下寻找最优解”管理就是“在有限资源下寻找最优解”
-
-
主动学习能力
↩︎
-
-
VCS 仿真命令
1 2 3 4 5 6 7 8vcs -R -full64 \ -debug_acc+all -debug_region+cell+encrypt \ -timescale=1ns/1ps \ +v2k \ tsmc13.v \ signed_vedic_mult_32bit_netlist.v \ signed_vedic_mult_32bit_tb.v \ -l func_sim.log
dve -vpd inter.vpd
注意:这次运行后,你应该会看到生成了一个稍微大一点的
inter.vpd 或vcdplus.vpd文件。vcdplus.vpd
dve -vcdplus.vpd
./simv -gui &
run
如果你做后端或验证,通常会用 Verdi 来查看网表,它的原理图追踪功能比 Design Vision 强大得多。
看图
↩︎1verdi -sv signed_vedic_mult_32bit_netlist.v tsmc13.v & -
数字全流程虚拟机
这是一个非常“豪华”且专业的IC设计环境(通常被称为EDA虚拟机),几乎涵盖了数字IC设计(前端、后端)、模拟IC设计以及FPGA开发的整个全流程工具。
对于你的微电子科学与工程专业背景,这个环境非常适合学习和做项目。
以下是根据你提供的目录截图整理的工具清单及其作用,以及关于替代ModelSim的回答:
1. 能替代 ModelSim 的数字仿真工具
你问有没有能替代 ModelSim 的工具,答案是:有,而且更强大、更符合工业界标准。
在这个虚拟机中,你有三个顶级的工业级仿真器,它们在性能和功能上都超越了普通的 ModelSim:
-
vcs (Synopsys VCS):- 地位: 业界最主流的数字逻辑仿真器之一(通常与 Verdi 配合使用)。
- 特点: 它是编译型仿真器(Compile-based),速度比 ModelSim(解释型)快得多,尤其是在大规模设计时。
- 用法: 配合 Verdi 查看波形是数字IC设计工程师的标准工作流(不再是像 ModelSim 那样看自带的波形窗口)。
-
questasim (Mentor Questasim):- 地位: 它是 ModelSim 的“大哥”或“高级版”。
- 特点: 界面和操作逻辑与 ModelSim 几乎一模一样,但支持更多的高级验证特性(如 SystemVerilog 断言、UVM 方法学等),且仿真速度更快。如果你习惯了 ModelSim,上手这个是零门槛的。
-
INCISIVE (Cadence Incisive / IES):- 地位: Cadence 家的数字仿真平台(命令通常是
ncsim 或irun)。 - 特点: 同样是工业级强力仿真工具,常用于混合信号仿真(配合 Virtuoso)。
- 地位: Cadence 家的数字仿真平台(命令通常是
建议: 作为微电子专业的学生,建议你尽早开始学习使用
VCS + Verdi 的组合,这是目前数字后端和验证岗位最核心的技能之一。
2. 虚拟机内其他工具详细介绍
我们将这些工具按照厂商和用途分类:
A. Synopsys 系列 (数字IC设计的核心力量)
截图路径:
synopsys目录下-
vcs / vcs-mx : 数字逻辑仿真器(前面已提)。 -
verdi : 最强大的波形查看与调试工具。它不产生波形,而是读取 VCS 跑出来的波形文件(.fsdb),用于追踪信号、查看原理图逻辑,是数字工程师每天都要用的神器。 -
syn (Design Compiler - DC): 逻辑综合工具。将你写的 Verilog RTL 代码转换成门级网表(Gate-level Netlist)。这是数字前端设计最重要的工具。 -
icc2 (IC Compiler II): 数字后端布局布线工具 (P&R) 。用于将综合后的网表变成实际的版图(Layout)。 -
pts (PrimeTime - PT): 静态时序分析工具 (STA) 。用于检查芯片能否在指定频率下稳定工作,是Sign-off(签核)的金标准。 -
SpyGlass : RTL 检查工具。用于在综合之前检查你的代码风格、跨时钟域(CDC)问题等,防止低级错误。 -
lc (Library Compiler): 库文件处理工具,用于将 .lib 转为 .db 格式供 DC 使用。
B. Cadence 系列 (模拟/数模混合设计霸主)
截图路径:
cadence目录下-
IC617 (Virtuoso): 模拟/混合信号版图与原理图设计工具。画 MOS 管、画版图、做 DRC/LVS 都要用到它。微电子学生应该非常熟悉这个界面。 -
MMSIM151 (Spectre): 模拟电路仿真器。在 Virtuoso 里跑仿真(AC/DC/Tran)时,后台调用的就是它。 -
INCISIVE152 : 数字仿真平台(前面已提)。
C. Mentor (现 Siemens EDA) 系列
截图路径:
mentor目录下-
Calibre2015 : 物理验证金标准。用于做 DRC(设计规则检查)、LVS(版图原理图一致性检查)和 PEX(寄生参数提取)。在 Virtuoso 画完版图后,必须用 Calibre 跑一遍才算完成。 -
questasim : 高级数字仿真器(前面已提)。
D. Xilinx 系列 (FPGA 开发)
截图路径:
Xilinx目录下-
Vivado 2019.1 : Xilinx 的 FPGA 集成开发环境。包含综合、布局布线和仿真。 -
SDK : 嵌入式软件开发工具(通常用于 Zynq 系列里的 ARM 核开发)。
E. 开源/轻量级工具
-
iverilog (Icarus Verilog): 开源的 Verilog 仿真器,轻量级,适合简单测试。 -
gtkwave : 开源的波形查看器,通常配合 iverilog 使用。 -
Riscv_Tools : 专门用于 RISC-V 处理器开发的工具链(编译器 gcc 等)。
总结
这个虚拟机环境非常完善:
- 做数字IC: 你有 VCS (仿真) + Verdi (调试) + DC (综合) + ICC2 (后端) + PrimeTime (时序)。
- 做模拟IC: 你有 Virtuoso (设计) + Spectre (仿真) + Calibre (验证)。
- 做FPGA: 你有 Vivado。
对于你的“替代 ModelSim”的需求,直接去
synopsys 目录下找 vcs ,或者在终端里配置好环境变量后尝试运行 vcs 或 verdi 即可。 ↩︎ -
-
翻译加入
要在 Virtuoso (IC617) 中使用这个库,你需要把它“挂载”到 Library Manager 中。
根据你提供的截图,你已经在
osu_soc-master/cadence/lib/tsmc018路径下找到了库文件夹。请按照以下步骤操作:
第一步:确认 Linux 路径
非常重要: 你的截图 显示的是 Windows 路径 (D:\Virtual_share…)。
Virtuoso 运行在 Linux 中,它读不到 D 盘。你需要找到这个“共享文件夹”在 Linux 里的挂载路径。
- 通常是在
/mnt/hgfs/Virtual_share/ 或者/media/sf_Virtual_share/下。 - 你需要定位到 Linux 下的这个文件夹:
.../osu_soc-master/cadence/lib/tsmc018/OSU_stdcells_tsmc018
第二步:在 Library Manager 中添加库
-
打开 Virtuoso 的 Library Manager (库管理器)。
-
在顶部菜单栏点击 Edit -> Library Path… 。
-
这会弹出一个表格编辑器。在最下面的一行空白处填写:
- Library (库名):
OSU_stdcells(或者你自己喜欢的名字,只要记住就行)。 - Path (路径): 点击单元格里的浏览按钮,找到上面提到的 Linux 路径,选中
OSU_stdcells_tsmc018这个文件夹。 - (注意:要选那个文件夹本身,不要进去了)
- Library (库名):
-
点击 File -> Save (保存
cds.lib),然后关闭编辑窗口。
第三步:验证库是否有效
-
回到 Library Manager 主界面。
-
在左侧 Library 列表里,应该能看到你刚加的
OSU_stdcells。 -
点击它,看中间的 Cell 列表:
- 情况 A (成功): 如果你看到全是
AND2X1,DFF,INV等名字,恭喜你,挂载成功! - 情况 B (空库): 如果里面是空的,或者 Virtuoso 报错说格式不对(OpenAccess版本问题),说明这个文件夹里的数据是旧版格式或者只是个空壳。如果遇到这种情况,请看下面的“Plan B”。
- 情况 A (成功): 如果你看到全是
第四步:回到 Verilog In 界面 (解决你的最初问题)
一旦第三步确认成功,你就可以回到“Verilog In”导入界面 进行修改了:
- Target Library Name: 建议填
my_design(你自己新建的库)。 - Reference Libraries: 这里填写:
OSU_stdcells basic analogLib
(注意:OSU_stdcells 必须和你第二步里起的 Library 名字一模一样)
Plan B:如果直接挂载全是空的 (使用 GDS 导入)
OSU 的这个包有时候库文件不完整,但它一定提供了 GDSII 版图文件。如果上面的方法不行,请用这个方法“重建”库:
-
新建库: Library Manager -> File -> New -> Library。
- 名字:
OSU_stdcells。 - Technology File: 选择
Attach to an existing technology library -> 选择NCSU_TechLib_tsmc02 (或者是 tsmc03,如果没有就选Do not need process info)。
- 名字:
-
导入 GDS:
- Virtuoso 主界面 -> File -> Import -> Stream。
- Stream File: 浏览找到
.../osu_soc-master/cadence/lib/tsmc018/osu018_stdcells.gds2 (这个文件通常在lib文件夹同级或里面)。 - Library: 选择刚才新建的
OSU_stdcells。 - 点击 Translate。
-
这会自动把版图数据转换成 Virtuoso 的库。完成后,你再进行“第四步”即可。
- 通常是在
-
转换库
终端不能在同一个开启
这是一个非常典型的 “操作位置冲突” 错误。
简单来说:你正在
/root/Desktop/ 目录下运行转换工具,而你要修改的 cds.lib 文件也在这个目录下。cdb2oa 工具为了保护文件不被写坏,禁止在包含cds.lib的同一级目录下运行它自己。✅ 解决方案:换个地方运行命令
你只需要退到其他目录(比如
/tmp临时目录),然后“远程遥控”运行转换命令即可。请关闭 Virtuoso,打开终端 (Terminal),严格按照以下 3 步操作:
第一步:进入临时目录
在终端输入:
Bash
cd /tmp(这一步是为了离开 Desktop 目录,避开那个报错)
第二步:运行转换命令
复制并运行下面这行命令(这是根据你报错日志生成的修正命令):
Bash
cdb2oa -lib OSU_CDB -cdslibpath /root/Desktop/cds.lib-
解释:
-
-lib OSU_CDB:转换你刚才定义的那个旧版库。 -
-cdslibpath ...:告诉工具去哪里找你的配置文件。
-
-
执行过程中: 屏幕可能会滚动很多日志,如果没有报错
ERROR,并且最后显示cdb2oa结束,那就是成功了。
第三步:重启 Virtuoso 验证
- 回到你的工作目录:
- 打开 Library Manager。
- 点击左侧的
OSU_CDB 库。 - 关键时刻: 看中间的 Cell 列表(比如点
AND2X1),现在右边的 View 列表里应该同时出现了 layout, schematic, 和 symbol!
🚀 最后一步:重新导入网表 (Verilog In)
一旦你在 Library Manager 里看到了
symbol,就说明你已经拿到了“拼图的说明书”。-
打开 File -> Import -> Verilog。
-
Reference Libraries 必须修改为:
OSU_CDB basic analogLib(注意:一定要填刚才转换成功的库名
OSU_CDB ,不要再填那个只有 Layout 的 OSU_stdcells 了) -
点击 OK。
这次导入生成的 Schematic,必定是连线完整的电路图! ↩︎
-
-
模型库
这是一个非常关键的发现。从你的截图来看,
tran_models 在你的 Windows 系统里显示为一个黄色文件夹,这在标准的 FreePDK45 结构中是不太正常的(通常它应该是一个名为tran_models.sp 的文件)。这很可能是解压或下载过程中产生的问题(例如多套了一层文件夹)。
请按照以下 3 步操作来修复:
第一步:点进这个文件夹看看
请双击打开截图中的这个
tran_models 文件夹。- 情况 A:如果你在里面看到了一个叫
tran_models.sp 或者models.sp 的文件,那个才是真正的模型文件。 - 情况 B:如果你点进去是空的,或者是乱码文件,那么可能是文件丢失了。
通常正确的路径结构应该是:
…/ncsu_basekit/models/hspice/tran_models.sp (这是一个文本文件)
第二步:确认文件路径(Windows vs Linux)
由于你在跑 Spectre 仿真(这是 Linux 软件),而你的截图是 Windows 界面,说明你用了虚拟机共享文件夹(
Virtual_share)。绝对不要在 Cadence 里面直接填 Windows 的路径(如
D:\Virtual_share...),Cadence 读不懂。你需要找到这个文件在 Linux 系统里的对应路径。通常它长这样:
-
/mnt/hgfs/Virtual_share/des_test/ncsu_basekit/models/hspice/tran_models/tran_models.sp - 或者
/home/你的用户名/Desktop/share/...
第三步:在 ADE 中加载正确的文件
- 回到 Cadence ADE 的 Model Libraries 设置窗口。
- 点击 Browse(浏览),沿着 Linux 的挂载路径 找到那个真正的
.sp文件。 - 加载后,Section 一栏留空(不要填 tt)。
如果你在文件夹里找不到 .sp 文件:
你可以直接退回到上一级目录 …/ncsu_basekit/models/hspice/,看看这一层有没有名为 hspice_nom.include 或者 tran_models.sp 的文件。如果有,直接用那个即可。
一句话总结: 请点进那个黄色文件夹,找到里面的
.sp文件,并在 Cadence 里通过 Linux 路径加载它。 ↩︎ - 情况 A:如果你在里面看到了一个叫