第三章:开发环境搭建——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_PATHLM_LICENSE_FILE,这两个是最容易出错的。

总结一下

  • 系统选RHEL7/CentOS7,别折腾Ubuntu
  • 工具版本匹配很重要,gcc版本尤其关键
  • PDK和标准单元库要齐全,至少准备slow/fast两个工艺角
  • 环境变量统一管理,别散落在各个脚本里

好了,环境搭好了,下一章咱们就可以开始写SRAM编译器的第一行代码了。嗯,到时候你会感谢今天认真搭环境的自己。


公众号:蓝海资料掘金营,微信deep3321