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 优雅退出。
避坑指南: 我曾经在跑一个 48 核并行的布局布线时,用 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工具入门知识体系 Linux 环境与 EDA 工具入门知识体系 Linux 基础命令 常用 EDA 工具 环境变量 & License 文件操作:ls, cd, cp, mv, rm 文本搜索:grep, find, sed, awk 进程管理:ps, top, kill Synopsys:DC, ICC2, PT Cadence:Genus, Innovus Mentor:Calibre PATH / 安装路径 LM_LICENSE_FILE 等 lmstat 验证 目标:流畅运行后端流程 💡 三个模块缺一不可:命令不熟寸步难行,工具不会无法干活,License 配不好一切白搭 建议按「命令 → 工具 → 环境」的顺序逐步掌握

嗯,这一章的内容就这些。Linux 命令别死记硬背,多用几次就熟了。EDA 工具先了解各自定位,后面每章都会深入讲。环境变量配一次,后面基本不用动。打好这个基础,后面学综合、布局布线就顺了。