第二章:Linux环境与EDA工具入门
说实话,很多刚入行的朋友觉得后端设计就是跑脚本、调参数。但我要说,你得先把吃饭的家伙——Linux环境和EDA工具——玩明白。这一章,咱们就把这些基础打牢。
2.1 Linux基础命令:你每天都会用的那些
我见过太多新人,连个文件都找不到就开始跑综合。嗯,这不行。下面这些命令,是你每天都要敲的。
| 命令 | 用途 | 我的常用技巧 |
|---|---|---|
ls -ltr |
按时间排序查看文件 | 找最新生成的log文件,这招最快 |
cd - |
回到上一个目录 | 在两个项目目录间切换,省时间 |
grep -rn "error" *.log |
递归搜索错误信息 | 排查问题时,我第一件事就是跑这个 |
find . -name "*.v" -mtime -1 |
查找24小时内修改的.v文件 | 确认自己改过哪些代码,心里有数 |
du -sh * |
查看各目录大小 | 磁盘快满时,先查谁在吃空间 |
我的习惯:每次打开终端,第一件事就是敲
pwd 确认自己在哪。别笑,我见过有人把脚本跑错目录,结果把整个项目文件搞乱了。
2.2 文件系统:你得知道东西放哪了
一个典型的数字后端项目,文件结构大概长这样:
project_root/
├── rtl/ # 你的RTL代码
├── scripts/ # Tcl、Makefile、Perl脚本
├── synthesis/ # 综合结果
│ ├── reports/ # 时序、面积报告
│ └── netlist/ # 门级网表
├── floorplan/ # 布局规划
├── place/ # 标准单元放置
├── cts/ # 时钟树综合
├── route/ # 绕线
├── signoff/ # 签核检查
└── logs/ # 所有运行日志
我个人习惯把每个阶段的脚本和结果分开存放。为什么?因为有一次我误删了整个综合目录,还好脚本在另一个文件夹里,不然就得重跑三天。
避坑指南:千万不要在项目根目录下直接跑EDA工具。工具会生成大量临时文件,把你的目录搞得一团糟。我曾经见过有人把Innovus跑在/home下,结果磁盘爆了,整个服务器都卡死。
2.3 常用EDA工具:Innovus vs ICC2
目前主流的两大后端工具,就是Cadence的Innovus和Synopsys的ICC2。说白了,它们干的事一样,但脾气不同。
| 对比项 | Innovus | ICC2 |
|---|---|---|
| 命令风格 | 偏向Tcl原生语法 | 封装了大量自定义命令 |
| 数据库 | 使用.enc.dat/.mmmc | 使用.mw/.nlib |
| 时序引擎 | 内置Tempus | 内置PrimeTime |
| 学习曲线 | 中等,文档清晰 | 较陡,但自动化程度高 |
| 我的偏好 | 调试时用,交互性好 | 跑flow时用,脚本稳定 |
你想想看,这两个工具的命令差异有多大?举个例子,读入网表:
# Innovus
read_netlist ./results/top.v
# ICC2
read_verilog ./results/top.v
看着差不多?但到了设置时序约束时,差别就大了。我个人建议:先精通一个,另一个触类旁通。
2.4 Makefile基础:自动化你的工作流
为什么要学Makefile?因为后端流程里,你要反复跑综合、布局、绕线。手动敲命令?太累了。用Makefile,一键搞定。
一个简单的Makefile长这样:
# 变量定义
DESIGN = top
TECH = 28nm
CLOCK_PERIOD = 5.0
# 目标:综合
synthesis:
innovus -files scripts/synthesis.tcl \
-log logs/synthesis.log
# 目标:布局
place: synthesis
innovus -files scripts/place.tcl \
-log logs/place.log
# 目标:绕线
route: place
innovus -files scripts/route.tcl \
-log logs/route.log
# 目标:全部跑完
all: route
@echo "Flow completed!"
# 清理
clean:
rm -rf logs/*.log results/*
使用时,你只需要敲:
make all # 跑完整流程
make place # 只跑布局
make clean # 清理中间文件
关键点:Makefile的依赖关系很重要。上面例子中,
place依赖synthesis,所以如果你改了RTL,只需要重新跑make place,它会自动先跑综合。
我在项目中遇到过一个问题:有同事改了RTL,但忘了重新跑综合,直接跑布局。结果布局工具读的是旧网表,浪费了半天时间。用Makefile的依赖机制,就能避免这种低级错误。
2.5 本章知识结构
下面这张图,帮你理清这一章的核心脉络:
2.6 实战小练习
光看不练假把式。给你留个小任务:
- 在你的Linux环境下,创建一个项目目录,结构参考2.2节
- 写一个Makefile,包含
clean和help两个目标 - 用
grep命令搜索你电脑上所有包含"error"的.log文件
做完这些,你就已经迈出了数字后端的第一步。别急,后面还有更多实战等着你。