刚接触IC设计的朋友们,第一次在Ubuntu上部署TSMC18RF工艺库时,往往会卡在环境配置这一步。我自己最初安装时,就被Virtuoso启动时满屏的字体警告搞得头皮发麻。其实解决方法很简单,两条命令就能搞定:
bash复制sudo apt-get update
sudo apt-get install xfonts-75dpi xfonts-100dpi
这两个字体包看起来不起眼,但如果不装,后续Virtuoso的图形界面会出现各种显示异常。我建议在开始PDK安装前,先把系统的基础依赖检查一遍。Ubuntu 18.04用户特别要注意,这个版本默认移除了libXp.so.6库,而CDB转OA格式时这个库又是必需的。可以提前下载好安装包:
bash复制wget http://archive.ubuntu.com/ubuntu/pool/main/libx/libxp/libxp6_1.0.2-2_amd64.deb
sudo dpkg -i libxp6_1.0.2-2_amd64.deb
有次我在客户现场调试,发现即使装了libXp还是报错,后来发现是32位/64位库混用的问题。如果遇到类似情况,可以试试:
bash复制sudo apt-get install libxp6:i386
TSMC18RF的PDK文件通常以压缩包形式分发,原始文章提到的csdn下载链接可能已经失效。实际项目中,PDK应该通过公司内部服务器或代工厂正式渠道获取。假设我们已经拿到tsmc18rf_pdk_v13d.tar文件,解压时要注意两点:
推荐这样做:
bash复制mkdir -p ~/Cad/Mylib
tar -xvf tsmc18rf_pdk_v13d.tar -C ~/Cad/Mylib
解压后的目录结构应该是这样的:
code复制tsmc18rf_1P6M/
├── cds.lib
├── display.drf
├── pdkInstall.pl
└── techfile
遇到过最坑的情况是,有些PDK版本会把techfile放在子目录里,导致后续安装失败。如果发现工艺文件缺失,可以用find命令全局搜索:
bash复制find ~/Cad/Mylib -name "techfile"
进入解压目录运行安装脚本时,新手容易直接照搬网上的命令:
bash复制cd ~/Cad/Mylib/tsmc18rf_1P6M
perl pdkInstall.pl
但其实这个脚本支持多个实用参数:
-help 查看所有选项-clean 清除之前安装-force 强制覆盖已有文件我建议第一次安装时加上-verbose参数,这样能看到详细的安装日志:
bash复制perl pdkInstall.pl -verbose
安装过程中可能会提示选择工艺类型(比如1P6M或1P8M),这取决于你拿到的PDK版本。如果脚本执行报错,常见原因有三个:
现代Cadence版本(IC617+)默认使用OA格式,而老版PDK多是CDB格式。转换过程看似简单,实则暗藏玄机。先建立转换用的目录结构:
bash复制mkdir -p ~/Cad/Mylib/OA/cdb
cp ~/Cad/Mylib/tsmc18rf_1P6M/cds.lib ~/Cad/Mylib/OA/cdb/
编辑这个cds.lib文件时,新手常犯的错误是保留原始DEFINE语句的注释符号。正确的写法应该是:
code复制DEFINE tsmc18rf /home/你的用户名/Cad/Mylib/tsmc18rf_1P6M/tsmc18rf
注意路径要改成你自己的实际路径!转换时如果遇到"cdb2oa: error while loading shared libraries: libXp.so.6"错误,说明前面libXp没装好。有个变通方法是手动指定库路径:
bash复制export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu
启动Virtuoso后,在Conversion Toolbox界面操作时:
转换完成后,记得用OA目录下生成的新文件替换原文件:
bash复制rm -rf ~/Cad/Mylib/tsmc18rf_1P6M/tsmc18rf
cp -r ~/Cad/Mylib/OA/tsmc18rf ~/Cad/Mylib/tsmc18rf_1P6M/
转换完成后还需要手动调整两个关键文件。首先是libInit.il,用文本编辑器打开后,找到这两行并注释掉:
tcl复制;load("cdsinit.il")
;load("display.drf")
然后是techfile的调整,这个最容易出错。正确的做法是把Controls段落(通常以CONTROL开头)移动到文件最前面。用vim操作的话:
bash复制vim ~/Cad/Mylib/tsmc18rf_1P6M/techfile
在命令模式下输入:
code复制:/CONTROL
dd
gg
P
:wq
保存后,还需要复制display.drf到项目目录:
bash复制cp ~/Cad/Mylib/tsmc18rf_1P6M/display.drf ~/Cad/Project/
有次我遇到元件显示异常的问题,后来发现是display.drf版本不匹配。解决方法是用PDK自带的display.drf覆盖Virtuoso默认的:
bash复制cp ~/Cad/Mylib/tsmc18rf_1P6M/display.drf ~/cds/your_cadence_version/tools/dfII/etc/display.drf
最后一步是创建新Library验证安装结果。在Virtuoso中:
创建成功后,试着调取一个MOS管看看。如果出现"undefined device"错误,可能是OA转换不完整。这时需要检查:
bash复制ls -l ~/Cad/Mylib/tsmc18rf_1P6M/tsmc18rf/
应该能看到类似这样的结构:
code复制cellName1/
cellName2/
...
如果只有空目录,说明转换失败了。有个补救办法是用Cadence自带的cdb2oa命令手动转换:
bash复制cdb2oa -lib tsmc18rf -cdslib ~/Cad/Mylib/OA/cdb/cds.lib -oalib ~/Cad/Mylib/tsmc18rf_1P6M/tsmc18rf
验证时还有个常见问题是缩略图显示异常。这通常是因为display.drf没加载正确。可以在CIW窗口手动加载:
tcl复制load("~/Cad/Project/display.drf")
实际使用中,我总结出几个提升效率的技巧:
bash复制setenv OA_HOME ~/Cad/Mylib/OA
setenv CDS_LIC_FILE 5280@localhost
bash复制ln -s ~/Cad/Mylib/tsmc18rf_1P6M ~/Cad/Project/tsmc18rf
bash复制sed -i 's/oldText/newText/g' *.tf
bash复制top -p `pgrep virtuoso`
遇到特别棘手的问题时,可以查看Virtuoso的详细日志:
bash复制virtuoso -log ./virtuoso.log -nograph
最后提醒一点:不同Ubuntu版本可能需要不同的依赖库。比如在20.04上,还需要额外安装:
bash复制sudo apt-get install libjpeg62 libglu1-mesa