第三章:开发环境搭建——Linux环境配置、EDA工具链安装与PDK准备
说实话,做SRAM编译器开发,环境搭建这一步最容易被忽视。很多人一上来就想写代码,结果装工具装到崩溃。我当年第一次搭环境时,光VCS就折腾了两天——后来发现是gcc版本不兼容。嗯,咱们今天就把这事一次性说清楚。
3.1 Linux环境配置——选对系统,少走弯路
我个人习惯用Red Hat Enterprise Linux 7.9或CentOS 7.x。为什么?因为主流EDA工具对RHEL7的支持最成熟。Ubuntu虽然好用,但很多工具在Ubuntu上需要额外打补丁,你想想看,这多出来的工作量值不值?
核心配置清单:
- 操作系统:RHEL 7.9 / CentOS 7.9(64位)
- 内核版本:3.10.0-1160.el7.x86_64 以上
- 磁盘空间:至少500GB(工具链+PDK+项目文件)
- 内存:32GB起步,64GB更稳妥
- CPU:8核以上,主频2.5GHz+
我在项目中遇到过一个问题:某次用Ubuntu 20.04装DC,结果license daemon死活起不来。查了两天,发现是Ubuntu的libssl版本和Synopsys的lmgrd不兼容。后来换回CentOS 7,半小时搞定。所以,别在这上面浪费时间。
3.2 基础依赖包安装
装完系统第一件事,把基础库补齐。别等工具报错了再回头装,那太被动。
# 基础开发工具
yum groupinstall -y "Development Tools"
yum install -y gcc gcc-c++ glibc-devel glibc-static
# 必备库
yum install -y libXext libXft libXmu libXt libXrender
yum install -y motif lesstif openmotif
yum install -y libstdc++-static libstdc++-devel
# 网络与许可相关
yum install -y ntpdate ntp
yum install -y redhat-lsb-core
# 脚本语言
yum install -y perl perl-devel perl-CPAN
yum install -y tcl tcl-devel tk tk-devel
yum install -y python3 python3-devel
小技巧:装完这些后,建议重启一次。有些库的加载路径需要刷新,否则工具启动时会报"cannot open shared object file"的错误。我曾经因为这个浪费了半天。
3.3 EDA工具链安装——VCS、DC、ICC2
这三款工具是SRAM编译器开发的核心。VCS做仿真验证,DC做综合,ICC2做后端布局布线。咱们一个一个来。
3.4 VCS安装与配置
VCS是Synopsys的仿真工具。安装其实不复杂,但要注意版本匹配。我建议用VCS 2020.12-SP2或更新的版本,对SystemVerilog的支持更完善。
# 解压安装包
tar -xvf vcs_2020.12-SP2_linux64.tar -C /opt/synopsys/
# 设置环境变量(建议写入~/.bashrc)
export VCS_HOME=/opt/synopsys/vcs_2020.12-SP2
export PATH=$VCS_HOME/bin:$PATH
export VCS_ARCH_OVERRIDE=linux64
# 验证安装
vcs -version
注意:VCS对gcc版本有严格要求。VCS 2020.12要求gcc 4.8.5。如果你系统gcc版本不对,可以用scl工具切换版本,或者直接装一个兼容的gcc。
我记得有一次,团队新来的同事装VCS后编译报错,提示"internal compiler error"。我一看,他系统gcc是9.3,VCS根本不认。换成4.8.5后,问题立刻消失。说白了,工具链版本匹配是门玄学,但也是有规律可循的。
3.5 DC(Design Compiler)安装
DC是综合工具,把RTL代码转成门级网表。安装步骤类似,但要注意license配置。
# 解压
tar -xvf dc_2020.12-SP2_linux64.tar -C /opt/synopsys/
# 环境变量
export DC_HOME=/opt/synopsys/dc_2020.12-SP2
export PATH=$DC_HOME/bin:$PATH
export LM_LICENSE_FILE=27000@license_server_ip
# 启动验证
dc_shell -f
这里有个坑:DC启动时会检查.synopsys_dc.setup文件。如果这个文件不存在或配置错误,DC会报warning甚至启动失败。我建议在用户home目录下创建这个文件,至少包含以下内容:
set search_path [list . $DC_HOME/libraries/syn]
set target_library [list typical.db]
set link_library [list * typical.db]
set symbol_library [list generic.sdb]
3.6 ICC2(IC Compiler II)安装
ICC2是布局布线工具。安装方式和DC类似,但资源消耗更大。我建议至少64GB内存,否则跑大设计时会直接OOM。
# 解压
tar -xvf icc2_2020.12-SP2_linux64.tar -C /opt/synopsys/
# 环境变量
export ICC2_HOME=/opt/synopsys/icc2_2020.12-SP2
export PATH=$ICC2_HOME/bin:$PATH
# 启动
icc2_shell
环境变量统一管理建议:
我个人习惯把所有EDA工具的环境变量写到一个文件里,比如/opt/synopsys/synopsys_env.sh,然后在~/.bashrc里source它。这样切换项目时只需要改一个文件,不会乱。
3.7 PDK与标准单元库准备
PDK(Process Design Kit)是工艺厂提供的设计套件。标准单元库则是综合和布局布线的基础。这两样东西,缺一不可。
3.8 PDK安装
以TSMC 28nm为例,PDK通常包含以下内容:
- 技术文件:.tf文件,定义工艺层、设计规则
- 标准单元库:.lib文件(时序模型)、.lef文件(物理信息)
- IO库:输入输出单元的库文件
- RC参数文件:.itf或.rc文件,用于寄生参数提取
# 解压PDK
tar -xvf tsmc28nm_pdk.tar.gz -C /home/design/pdk/
# 设置PDK路径
export PDK_HOME=/home/design/pdk/tsmc28nm
export TECHDIR=$PDK_HOME/techfile
export STDCELL_LIB=$PDK_HOME/stdcell
我在项目中遇到过一个问题:PDK里的标准单元库版本和工具版本不匹配。比如PDK是2019年的,但DC是2020年的,有时候会报"incompatible library version"错误。解决办法是找工艺厂要最新的库文件,或者降级工具版本。
3.9 标准单元库准备
标准单元库通常包含多个PVT(工艺-电压-温度)条件下的时序库。比如:
| 库文件 | 工艺角 | 电压 | 温度 |
|---|---|---|---|
| typical.db | TT | 0.9V | 25°C |
| slow.db | SS | 0.81V | 125°C |
| fast.db | FF | 0.99V | -40°C |
你想想看,SRAM编译器生成的存储器,在不同工艺角下性能差异可能达到30%。所以库文件必须齐全,否则时序分析就是纸上谈兵。
避坑指南:我曾经在项目中只准备了typical库,结果综合后时序全绿,但后仿时发现setup time违例。后来补上slow库重新综合,才发现问题。所以,至少准备slow和fast两个库,这是底线。
3.10 环境验证——跑一个简单的测试
所有工具装完后,我建议跑一个最简单的测试,确保整个链路是通的。
# 1. 验证VCS
echo "module test; initial \$display(\"Hello, VCS!\"); endmodule" > test.v
vcs -R test.v
# 2. 验证DC
dc_shell -f -c "echo \"Hello, DC!\""
# 3. 验证ICC2
icc2_shell -f -c "echo \"Hello, ICC2!\""
# 4. 验证PDK读取
dc_shell -f -c "read_lib $STDCELL_LIB/typical.lib"
如果以上命令都能顺利执行,恭喜你,环境搭建成功了。如果报错,别慌。99%的问题出在环境变量或库文件路径上。检查一下LD_LIBRARY_PATH和LM_LICENSE_FILE,这两个是最容易出错的。
总结一下:
- 系统选RHEL7/CentOS7,别折腾Ubuntu
- 工具版本匹配很重要,gcc版本尤其关键
- PDK和标准单元库要齐全,至少准备slow/fast两个工艺角
- 环境变量统一管理,别散落在各个脚本里
好了,环境搭好了,下一章咱们就可以开始写SRAM编译器的第一行代码了。嗯,到时候你会感谢今天认真搭环境的自己。
公众号:蓝海资料掘金营,微信deep3321