环境搭建与工具链: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验证恢复出来的时序路径是否正确。

安装步骤大致如下:

  1. 设置环境变量:在.bashrc或.cshrc中配置SYNOPSYS路径
  2. 配置license:设置SNPSLMD_LICENSE_FILE指向license文件
  3. 验证安装:运行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. 知识体系总览

下面这张图是我自己整理的,把本章的核心内容串了起来。你可以把它当作一个快速索引。

网表逆向工程环境搭建知识体系 Linux基础环境 CentOS 7 / Ubuntu 20.04 商业工具链 Synopsys DC / PT 开源工具 Yosys / Iverilog Linux环境配置要点 • 依赖包:build-essential, tcl, tk • 开发工具:flex, bison, gawk • 版本管理:git, 软链接切换 • 环境变量:PATH, LD_LIBRARY_PATH Synopsys工具链要点 • DC:逻辑综合与网表优化 • PT:静态时序分析 • License配置:SNPSLMD • 多版本管理:软链接切换 开源工具要点 • Yosys:逻辑综合/逆向 • Iverilog:功能仿真验证 • 源码编译:make install • 依赖检查:libffi等 工具链验证:跑通测试用例 → 环境就绪 三大模块相互配合,覆盖网表逆向全流程 Linux基础 → 商业工具(精度) + 开源工具(灵活性) 基础 商业 开源

6. 避坑指南

最后,分享几个我踩过的坑:

  • 路径不要有中文或空格:Synopsys工具对路径很敏感,中文路径直接报错。我曾经因为这个折腾了一下午。
  • 注意32位/64位兼容库:有些老版本的DC需要32位库,Ubuntu默认不装。记得加装lib32z1lib32ncurses5
  • Yosys的ABC工具:Yosys内部依赖ABC做逻辑优化,如果编译时没装ABC,很多功能用不了。编译时加上make ENABLE_ABC=1
  • Iverilog的VVP文件:仿真生成的.vvp文件是中间格式,不要直接删掉。有时候需要用它配合gtkwave看波形。

我的习惯:每次装完新工具,我都会写一个简单的测试脚本,把常用命令跑一遍。这样下次换环境时,直接复制脚本就能快速验证。

环境搭好了,后面的事情就顺了。接下来,你就可以开始真正接触网表文件了。


公众号:蓝海资料掘金营,微信deep3321