Linux 环境与 EDA 工具入门
做数字芯片后端,说白了就是天天跟 Linux 命令行和 EDA 工具打交道。我记得刚入行那会儿,看着满屏的黑底白字,心里直发怵。后来才发现,其实常用的命令就那么十几个,翻来覆去地用。这一章,我就带你把这些基本功打扎实。
2.1 Linux 基础命令:你的第二双手
后端工程师 80% 的时间都在终端里。鼠标?那是给前端画版图用的。我们后端,键盘就是武器。
2.1.1 文件与目录操作
这几个命令,我每天至少敲几百遍。你想想看,从项目顶层目录一层层翻到某个模块的 netlist,再翻回来,全靠它们。
| 命令 | 作用 | 我常用的参数 |
|---|---|---|
ls |
列出目录内容 | -l(详细列表)、-h(人类可读大小)、-t(按时间排序) |
cd |
切换目录 | cd -(回到上一个目录)、cd ~(回家) |
pwd |
显示当前路径 | 无参数,但经常用 |
mkdir |
创建目录 | -p(递归创建,比如 mkdir -p a/b/c) |
cp |
复制文件/目录 | -r(递归复制目录)、-v(显示过程) |
mv |
移动/重命名 | 小心别覆盖了重要文件 |
rm |
删除 | -rf(强制递归删除,慎用!) |
rm -rf 后面跟了个变量,结果变量没展开,直接把整个项目目录删了。嗯,从那以后,我每次敲 rm 之前都会先 ls 确认一遍。你也记住:rm -rf 前面一定要加 ./ 或者路径,别偷懒。
2.1.2 文本搜索与处理
芯片后端项目,日志文件动不动就几百 MB。你不可能一行行翻,得学会用工具。
grep:文本搜索的瑞士军刀。我个人习惯用grep -rn "error" .来递归搜索当前目录下所有文件里的 "error" 关键词。加上-i忽略大小写,-v反向匹配。find:找文件用的。比如find . -name "*.v" -type f找出所有 Verilog 文件。我经常用它来清理临时文件:find . -name "*.log" -exec rm {} \;。sed:流编辑器,批量替换文本。比如sed -i 's/old_name/new_name/g' file.v。awk:文本分析利器。我常用它来提取日志里的时序数据,比如awk '/slack/ {print $5}' timing.rpt。
grep 和 find 组合写成 alias,放在 .bashrc 里。比如 alias grepi='grep -rn --include="*.log" -i',这样每次敲 grepi "error" 就能快速搜日志了。
2.1.3 进程与资源管理
跑一个综合或布局布线,动不动就几十个小时。你得学会看进程、管资源。
ps -ef | grep <进程名>:查看某个 EDA 工具是否在跑。top或htop:看 CPU 和内存占用。我习惯用htop,界面更友好。free -h:看内存还剩多少。df -h:看磁盘空间。后端项目很吃硬盘,一个完整的 7nm 项目,光数据就得几百 GB。kill -9:强制杀掉进程。慎用,最好先kill -15优雅退出。
kill -9 杀进程,结果工具没来得及保存 checkpoint,白跑了 3 天。从那以后,我都是先 kill -15,等几分钟,实在不行再上 -9。
2.2 常用 EDA 工具介绍
数字芯片后端,说白了就是三大厂的工具:Synopsys、Cadence、Mentor(现在叫 Siemens EDA)。每家都有自己的看家本领。
2.2.1 三大厂工具矩阵
| 流程环节 | Synopsys | Cadence | Mentor (Siemens) |
|---|---|---|---|
| 逻辑综合 | Design Compiler (DC) | Genus | Precision |
| 布局布线 | IC Compiler II (ICC2) | Innovus | Olympus-SoC |
| 静态时序分析 | PrimeTime (PT) | Tempus | — |
| 物理验证 | ICV | PVS | Calibre |
| 功耗分析 | PrimePower | Joules | — |
| 形式验证 | Formality | Conformal | — |
我个人习惯用 Synopsys 的 DC + ICC2 + PT 这套流程,因为脚本风格统一,学起来顺手。但 Cadence 的 Innovus 在先进工艺节点上布线质量确实不错。至于物理验证,Calibre 几乎是行业标准,跑 DRC/LVS 基本绕不开它。
2.2.2 工具启动方式
所有 EDA 工具都是在终端里敲命令启动的。比如:
# 启动 Design Compiler
dc_shell -f run.tcl | tee dc.log
# 启动 IC Compiler II
icc2_shell -f place.tcl | tee place.log
# 启动 PrimeTime
pt_shell -f sta.tcl | tee sta.log
# 启动 Innovus
innovus -files run.tcl -log innovus.log
# 启动 Calibre
calibre -drc -rules rule_file -hier
| tee 加上,这样屏幕能看到实时输出,同时日志文件也保存下来了。否则一旦终端断开,你就啥也看不到了。
2.3 环境变量与 License 配置
这是新手最容易卡住的地方。工具装好了,一启动报错:License check failed。别慌,八成是环境变量没配好。
2.3.1 核心环境变量
这些变量通常写在 .bashrc 或 .cshrc 里,每次登录自动加载。
| 变量名 | 作用 | 示例 |
|---|---|---|
LM_LICENSE_FILE |
指向 License 服务器或文件 | 27000@license_server |
SNPSLMD_LICENSE_FILE |
Synopsys 专用 License 变量 | 27001@license_server |
CDS_LIC_FILE |
Cadence 专用 License 变量 | 27002@license_server |
MGLS_LICENSE_FILE |
Mentor 专用 License 变量 | 27003@license_server |
PATH |
工具可执行文件路径 | /tools/synopsys/dc/bin |
SYNOPSYS |
Synopsys 安装根目录 | /tools/synopsys |
CDS_ROOT |
Cadence 安装根目录 | /tools/cadence |
2.3.2 配置示例(Bash)
# 在 ~/.bashrc 中添加
# Synopsys 工具
export SYNOPSYS=/tools/synopsys
export PATH=$SYNOPSYS/dc/bin:$SYNOPSYS/icc2/bin:$SYNOPSYS/pt/bin:$PATH
export SNPSLMD_LICENSE_FILE=27001@192.168.1.100
# Cadence 工具
export CDS_ROOT=/tools/cadence
export PATH=$CDS_ROOT/innovus/bin:$CDS_ROOT/genus/bin:$PATH
export CDS_LIC_FILE=27002@192.168.1.100
# Mentor 工具
export MGLS_LICENSE_FILE=27003@192.168.1.100
export PATH=/tools/mentor/calibre/bin:$PATH
# 通用 License 变量(兜底)
export LM_LICENSE_FILE=27000@192.168.1.100
LM_LICENSE_FILE 是通用变量,但 Synopsys 和 Cadence 优先读自己的专用变量。如果专用变量没设对,工具会去读 LM_LICENSE_FILE。我曾经因为 SNPSLMD_LICENSE_FILE 写错了端口号,结果工具一直报错,折腾了半天才发现是变量优先级的问题。
2.3.3 验证 License 是否可用
配置完环境变量后,别急着跑大流程。先验证一下 License 能不能 checkout。
# 查看 Synopsys License 状态
lmstat -a -c 27001@192.168.1.100
# 查看特定 feature 是否可用
lmstat -a -c 27001@192.168.1.100 | grep -i "Design-Compiler"
# 手动 checkout 测试
dc_shell -f /dev/null
如果 lmstat 能看到 feature 并且有 ISSUED 状态,说明 License 没问题。如果工具启动时还报错,八成是 PATH 没指对,或者 .bashrc 没 source 生效。
echo $PATH 确认路径加载顺序。然后 which dc_shell 看看能不能找到工具。最后再 lmstat 看 License。三步走完,基本不会出问题。
2.4 本章知识体系
下面这张图,把这一章的核心内容串起来了。你可以把它当成一张地图,以后遇到问题,先看看自己卡在哪一步。
嗯,这一章的内容就这些。Linux 命令别死记硬背,多用几次就熟了。EDA 工具先了解各自定位,后面每章都会深入讲。环境变量配一次,后面基本不用动。打好这个基础,后面学综合、布局布线就顺了。