2. 环境搭建与工具链
说实话,很多刚入行的朋友觉得后端设计就是跑脚本、调参数。但我要说,环境搭建才是真正的第一道坎。工具链没配好,后面全是白搭。我自己带过不少新人,发现90%的问题都出在环境配置上。
这一章,我们就来聊聊怎么把Linux环境、EDA工具和自动化流程搭起来。嗯,都是实打实的经验。
2.1 Linux环境准备
后端设计基本离不开Linux。我个人习惯用CentOS 7或RHEL 8,稳定,兼容性好。Ubuntu也能用,但有些EDA工具的官方支持列表里没有它,遇到问题你得自己折腾。
2.1.1 基础依赖安装
装完系统第一件事,把基础库补齐。别小看这一步,我见过有人因为缺一个libXext.so,折腾了两天。
# CentOS/RHEL
sudo yum install -y gcc gcc-c++ make cmake
sudo yum install -y libXext libXft libXmu libXt
sudo yum install -y glibc.i686 libstdc++.i686
sudo yum install -y perl python3 tcl tk
sudo yum install -y redhat-lsb-core
# Ubuntu
sudo apt-get install -y build-essential
sudo apt-get install -y libxext-dev libxft-dev libxmu-dev
sudo apt-get install -y libc6-i386 lib32stdc++6
sudo apt-get install -y perl python3 tcl tk
2.1.2 用户与目录规划
后端项目通常需要多人协作,目录结构要提前规划好。我一般这样分:
/home/eda/ # 工具安装目录
├── synopsys/ # Synopsys工具
├── cadence/ # Cadence工具
└── mentor/ # Mentor工具
/projects/ # 项目目录
├── project_a/ # 项目A
│ ├── rtl/ # RTL代码
│ ├── scripts/ # 脚本
│ ├── logs/ # 日志
│ └── results/ # 结果
└── project_b/ # 项目B
为什么要这样分?因为不同工具、不同项目之间要隔离。我曾经在一个项目里,因为目录权限没设好,同事误删了另一个项目的关键文件……嗯,从那以后我特别强调权限管理。
2.2 Synopsys DC安装与License配置
DC(Design Compiler)是综合工具里的老大哥。安装过程其实不复杂,但License配置是很多人的噩梦。
2.2.1 安装步骤
# 1. 解压安装包
tar -xzvf DC_2023.12-SP1.tar.gz -C /home/eda/synopsys/
# 2. 设置安装目录
cd /home/eda/synopsys/DC_2023.12-SP1
./installer -gui
# 3. 按提示选择安装路径,一般默认即可
# 4. 安装完成后,配置环境变量
2.2.2 License配置
License配置分两步:启动License Server,设置客户端环境变量。
# 在License Server上启动
lmgrd -c /home/eda/synopsys/license/Synopsys.dat -l /var/log/synopsys.log
# 客户端环境变量设置(加到.bashrc或.cshrc里)
export SNPSLMD_LICENSE_FILE=27000@license_server_ip
export SYNOPSYS=/home/eda/synopsys/DC_2023.12-SP1
export PATH=$SYNOPSYS/bin:$PATH
2.3 Cadence Genus工具安装
Genus是Cadence的综合工具,和DC是竞品。有些公司用DC,有些用Genus,也有两个都用的。我个人觉得Genus在低功耗综合上更顺手。
2.3.1 安装流程
# 1. 解压
tar -xzvf GENUS_2023.12.tar.gz -C /home/eda/cadence/
# 2. 运行安装脚本
cd /home/eda/cadence/GENUS_2023.12
./SETUP.SH
# 3. 配置环境变量
export CADENCE_HOME=/home/eda/cadence/GENUS_2023.12
export PATH=$CADENCE_HOME/bin:$PATH
export LM_LICENSE_FILE=5280@license_server_ip
alias use_dc="source ~/env_dc.sh"
alias use_genus="source ~/env_genus.sh"
2.4 Makefile自动化流程基础
后端设计里,重复劳动特别多。综合、形式验证、时序分析……每次改完RTL都要跑一遍。手动敲命令?太慢了。Makefile就是用来解决这个问题的。
2.4.1 一个简单的Makefile示例
# 变量定义
TOP_MODULE = top
RTL_DIR = ./rtl
SCRIPT_DIR = ./scripts
LOG_DIR = ./logs
RESULT_DIR = ./results
# 工具路径
DC = dc_shell
GENUS = genus
# 目标定义
all: synth
# 综合
synth:
@echo "Starting synthesis..."
$(DC) -f $(SCRIPT_DIR)/synth.tcl -x "set TOP_MODULE $(TOP_MODULE)"
@echo "Synthesis done."
# 清理
clean:
rm -rf $(LOG_DIR)/* $(RESULT_DIR)/*
# 查看日志
log:
less $(LOG_DIR)/synth.log
.PHONY: all synth clean log
你看,这样只要敲make synth就能跑综合,不用每次都敲一长串命令。我刚开始带项目时,团队里有人总忘记加某个参数,导致综合结果不对。后来统一用Makefile,问题少了很多。
2.4.2 进阶用法:多目标并行
有时候要同时跑多个模块的综合,可以用Makefile的并行功能:
# 定义多个模块
MODULES = module_a module_b module_c
# 并行综合
synth_all: $(MODULES)
$(MODULES):
@echo "Synthesizing $@..."
$(DC) -f $(SCRIPT_DIR)/synth_$@.tcl
@echo "$@ done."
# 使用 -j 参数并行执行
# make synth_all -j4
2.5 知识体系总览
这一章的内容比较多,我画了张图帮你理清思路:
2.6 避坑指南
最后,分享几个我踩过的坑:
- 路径不要有中文和空格——EDA工具对中文支持很差,路径里有空格会直接报错。
- License文件要定期检查——有些License有有效期,过期了工具就罢工。我建议每个月检查一次。
- Makefile里的Tab和空格——Makefile要求命令前必须是Tab,不能用空格。这个坑我至少见过5个人踩过。
- 环境变量不要写死——用
source脚本加载环境变量,方便切换不同版本的工具。
嗯,环境搭建这部分就讲到这里。工具链配好了,后面的事情才能顺利推进。记住,磨刀不误砍柴工。
可可精品资料库