第二章 环境搭建与工具链:Linux环境准备、EDA工具安装与License配置、Makefile流程管理基础
说实话,很多刚入行的朋友觉得芯片设计就是写写代码、跑跑流程。但以我十五年的经验来看,环境搭建才是第一道坎。搞不定这个,后面全是白搭。
我记得刚入行那会儿,带我的老工程师扔给我一台服务器,说「把环境配好」。我对着屏幕愣了半天——Linux不熟、EDA没装过、License更是听都没听过。折腾了整整一周才跑通第一个综合。嗯,今天我就把这些坑帮你填上。
2.1 Linux环境准备
做数字后端,Linux是躲不开的。我个人习惯用Red Hat Enterprise Linux或者CentOS,稳定第一。Ubuntu也能用,但有些EDA工具对它的支持没那么好。
你需要准备的基础环境包括:
- 操作系统:RHEL 7.x 或 CentOS 7.x(推荐)
- 磁盘空间:至少500GB,建议1TB以上。一个28nm的项目,光数据就能吃掉200GB
- 内存:32GB起步,64GB算标配。做顶层Floorplan时,16GB机器直接卡死
- CPU:16核以上,主频越高越好。后端工具对单核性能很敏感
装完系统后,有几个基础包必须装上:
# 基础开发工具
yum groupinstall -y "Development Tools"
yum install -y glibc.i686 libstdc++.i686
# 图形界面依赖(EDA工具需要)
yum install -y libXext libXft libXrender libXrandr libXfixes
# 网络与时间同步
yum install -y ntp
systemctl enable ntpd
systemctl start ntpd
这里有个小技巧——一定要关掉SELinux。我当年第一次装Synopsys工具,License死活起不来,查了两天才发现是SELinux在捣鬼。
# 临时关闭
setenforce 0
# 永久关闭(改完重启)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
2.2 EDA工具安装与License配置
后端流程主要用两大阵营的工具:Synopsys和Cadence。我个人的经验是,两者各有千秋,但实际项目中往往混着用。
| 流程环节 | Synopsys工具 | Cadence工具 |
|---|---|---|
| 逻辑综合 | Design Compiler (DC) | Genus |
| 布局布线 | IC Compiler II (ICC2) | Innovus |
| 时序分析 | PrimeTime (PT) | Tempus |
| 物理验证 | ICV | PVS / Assura |
安装步骤其实大同小异。以Synopsys的ICC2为例:
# 1. 解压安装包
tar -xzvf ICC2_v2020.12.tar.gz -C /tools/synopsys/
# 2. 设置安装目录
cd /tools/synopsys/ICC2_v2020.12
./installer -gui
# 3. 按提示选择安装路径,一般放在 /tools/synopsys/ICC2/
装完工具,最头疼的就是License。说白了,License就是个授权文件,告诉工具你能用哪些功能、用多久。
配置License的步骤:
- 获取MAC地址:用
ifconfig或ip link查看 - 生成License文件:把MAC地址发给厂商,拿到 .lic 文件
- 启动License服务:用 lmgrd 启动
# 设置环境变量
export SNPSLMD_LICENSE_FILE=27000@localhost
export LM_LICENSE_FILE=27000@localhost
# 启动License服务(建议加到rc.local里开机自启)
/tools/synopsys/scl/2020.12/linux64/bin/lmgrd \
-c /tools/synopsys/license/synopsys.lic \
-l /var/log/synopsys_license.log
2.3 环境变量配置
每次打开终端都要敲一堆 export 太麻烦了。我习惯把这些写到 .bashrc 或 .cshrc 里。
# ~/.bashrc 中添加
# Synopsys工具
export SYNOPSYS=/tools/synopsys
export DC_HOME=$SYNOPSYS/DC/2020.12
export ICC2_HOME=$SYNOPSYS/ICC2/2020.12
export PT_HOME=$SYNOPSYS/PT/2020.12
export PATH=$DC_HOME/bin:$ICC2_HOME/bin:$PT_HOME/bin:$PATH
# Cadence工具
export CADENCE=/tools/cadence
export INNOVUS_HOME=$CADENCE/Innovus/21.10
export PATH=$INNOVUS_HOME/bin:$PATH
# License
export SNPSLMD_LICENSE_FILE=27000@localhost
export CDS_LIC_FILE=5280@localhost
这里有个细节——不同工具的License端口不要冲突。Synopsys默认用27000,Cadence用5280。如果你有多个License服务,端口号要分开。
2.4 Makefile流程管理基础
后端流程步骤多、脚本杂。用手动敲命令的方式管理,迟早会出乱子。我强烈建议用Makefile来管理整个流程。
为什么用Makefile?说白了就三点:
- 自动化:一条命令跑完整个流程
- 增量更新:只重新运行有变化的部分
- 可复现:别人拿到你的Makefile,能一模一样跑出结果
一个典型的后端流程Makefile长这样:
# Makefile for Digital Backend Flow
# 变量定义
DESIGN = top
TECH_LIB = /libs/tsmc28nm
CLOCK_PERIOD = 1.0
# 目标定义
all: syn floorplace cts route sta
# 逻辑综合
syn:
dc_shell -f scripts/syn.tcl -log logs/syn.log
# 布局与布局规划
floorplace: syn
icc2_shell -f scripts/floorplan.tcl -log logs/floorplan.log
# 时钟树综合
cts: floorplace
icc2_shell -f scripts/cts.tcl -log logs/cts.log
# 布线
route: cts
icc2_shell -f scripts/route.tcl -log logs/route.log
# 静态时序分析
sta: route
pt_shell -f scripts/sta.tcl -log logs/sta.log
# 清理
clean:
rm -rf work/ logs/ *.log
.PHONY: all syn floorplace cts route sta clean
floorplace: syn 表示做Floorplan之前必须先跑完综合。这样Make会自动判断哪些步骤需要重新执行。
使用方式很简单:
# 跑完整流程
make all
# 只跑综合和布局
make syn floorplace
# 重新跑CTS(会先检查依赖是否最新)
make cts
# 清理中间文件
make clean
你想想看,如果项目有30个模块,每个模块都要跑5个步骤。手动敲命令得敲150次,还容易敲错。用Makefile,一条 make all 搞定。
2.5 避坑指南与个人经验
最后分享几个我这些年总结的经验:
- 磁盘空间要留够:有一次跑完PR,发现磁盘满了,结果最后一步的GDS没写完整。流片回来才发现有个模块是空的...嗯,从那以后我每周都检查磁盘使用率。
- 版本管理要做好:工具版本、库文件版本、脚本版本,全部用Git管理。别问我为什么——当你发现三个月前的脚本跑不出结果时,你会感谢我的。
- 日志文件要保留:每个步骤的log都按日期命名,比如
syn_20241001.log。出了问题,第一件事就是翻日志。 - 多核并行要谨慎:不是核数越多越好。我试过用64核跑Placement,结果内存带宽成了瓶颈,反而比32核还慢。一般建议用物理核数的50%-75%。
环境搭建这一步,看起来琐碎,但基础打好了,后面的流程才能走得顺。说白了,这就是芯片设计的「地基工程」。地基不稳,楼盖得再高也是白搭。
下一章,我们开始真正动手——从RTL综合开始,一步步把代码变成版图。