环境搭建与工具链:Linux环境配置、Synopsys工具链(DC/PT)、开源工具(Yosys/Iverilog)安装与使用
做网表逆向,说白了就是跟一堆门级网表打交道。你想想看,没有趁手的工具,就像厨师没有刀,再好的食材也白搭。这一章,我就带你把这套环境搭起来。
我个人习惯把环境分成三块:Linux基础环境、商业工具链(Synopsys DC/PT)、开源工具(Yosys/Iverilog)。这三块各司其职,缺一不可。
1. Linux环境配置
嗯,这里要注意。网表逆向几乎离不开Linux。我见过不少新手在Windows上折腾,最后都乖乖切回来了。为什么?因为商业EDA工具原生支持Linux,开源工具在Linux上也最稳定。
我建议你用CentOS 7或者Ubuntu 20.04 LTS。这两个发行版我都在项目里用过,兼容性最好。
核心依赖包清单(以Ubuntu为例):
sudo apt-get update
sudo apt-get install -y build-essential
sudo apt-get install -y libreadline-dev
sudo apt-get install -y libbz2-dev
sudo apt-get install -y libssl-dev
sudo apt-get install -y libncurses5-dev
sudo apt-get install -y tcl-dev tk-dev
sudo apt-get install -y flex bison
sudo apt-get install -y gawk
sudo apt-get install -y git
我曾经在配置环境时漏装了libreadline-dev,结果Yosys编译到一半报错,排查了半天。所以建议你一次性装全。
2. Synopsys工具链安装
DC(Design Compiler)和PT(PrimeTime)是网表逆向的利器。DC用来综合,PT用来做时序分析。在逆向场景下,我们经常需要把网表重新综合到目标工艺库,或者用PT验证恢复出来的时序路径是否正确。
安装步骤大致如下:
- 设置环境变量:在.bashrc或.cshrc中配置SYNOPSYS路径
- 配置license:设置SNPSLMD_LICENSE_FILE指向license文件
- 验证安装:运行dc_shell或pt_shell看能否正常启动
小技巧:我个人习惯把不同版本的DC/PT分开目录存放,用软链接指向当前使用的版本。这样切换版本时只需要改一下链接,不用改环境变量。
# 我的.bashrc配置示例
export SYNOPSYS=/tools/synopsys/syn_vO-2018.06-SP2
export SNPSLMD_LICENSE_FILE=27000@license-server
export PATH=$SYNOPSYS/bin:$PATH
alias dc='dc_shell -64bit'
alias pt='pt_shell -64bit'
3. 开源工具安装
商业工具有时候拿不到,或者项目预算有限。这时候开源工具就派上用场了。Yosys和Iverilog是我用得最多的两个。
3.1 Yosys安装
Yosys是一个开源的逻辑综合框架,在网表逆向领域非常强大。它支持从Verilog到BLIF/EDIF等多种格式的转换,还能做逻辑优化和等价性检查。
# 从源码编译安装
git clone https://github.com/YosysHQ/yosys.git
cd yosys
make config-gcc
make -j$(nproc)
sudo make install
编译过程中如果报错,多半是依赖没装全。我记得有一次在旧版Ubuntu上编译,缺了libffi-dev,加上就好了。
3.2 Iverilog安装
Iverilog(Icarus Verilog)是一个轻量级的Verilog仿真器。在逆向过程中,我经常用它来跑一些简单的功能仿真,验证恢复出来的网表逻辑是否正确。
# Ubuntu直接apt安装
sudo apt-get install -y iverilog
# 或者从源码编译
git clone https://github.com/steveicarus/iverilog.git
cd iverilog
sh autoconf.sh
./configure
make -j$(nproc)
sudo make install
注意:Iverilog对SystemVerilog的支持有限。如果你遇到复杂的SV语法报错,可以试试用VCS或者Questasim。不过对于网表逆向场景,Iverilog基本够用了。
4. 工具链验证
装完工具后,我建议你跑一个简单的测试用例,确保所有工具都能正常工作。
// test.v - 一个简单的与门
module test(input a, b, output y);
assign y = a & b;
endmodule
用Yosys综合:
yosys -p "read_verilog test.v; synth; write_blif test.blif"
用Iverilog仿真:
iverilog -o test.vvp test.v
vvp test.vvp
如果都能跑通,恭喜你,环境搭好了。
5. 知识体系总览
下面这张图是我自己整理的,把本章的核心内容串了起来。你可以把它当作一个快速索引。
6. 避坑指南
最后,分享几个我踩过的坑:
- 路径不要有中文或空格:Synopsys工具对路径很敏感,中文路径直接报错。我曾经因为这个折腾了一下午。
- 注意32位/64位兼容库:有些老版本的DC需要32位库,Ubuntu默认不装。记得加装
lib32z1和lib32ncurses5。 - Yosys的ABC工具:Yosys内部依赖ABC做逻辑优化,如果编译时没装ABC,很多功能用不了。编译时加上
make ENABLE_ABC=1。 - Iverilog的VVP文件:仿真生成的.vvp文件是中间格式,不要直接删掉。有时候需要用它配合gtkwave看波形。
我的习惯:每次装完新工具,我都会写一个简单的测试脚本,把常用命令跑一遍。这样下次换环境时,直接复制脚本就能快速验证。
环境搭好了,后面的事情就顺了。接下来,你就可以开始真正接触网表文件了。
公众号:蓝海资料掘金营,微信deep3321