第一章:逆向工程环境搭建——Linux环境配置

说实话,做FPGA逆向工程,第一步不是学算法,也不是看网表。而是先把你的开发环境收拾利索了。我见过太多人,一上来就急着分析网表,结果装个Python库报错半天,最后连门都没进去。

这一章,咱们就把Linux环境、Python3、Tcl/Tk、常用EDA工具链,还有几个关键的开源库,一次性搞定。嗯,跟着我来,别急。

1.1 为什么选Linux?

你可能用Windows习惯了。但做逆向,尤其是网表级别的分析,Linux是绕不开的。原因很简单:

  • EDA工具原生支持Linux:Vivado、ISE、Yosys,这些工具在Linux下跑得最稳。Windows下装Vivado,我遇到过各种玄学问题,比如编译到一半崩溃。
  • Python生态更干净:Linux下装Python库,基本不会遇到路径乱码、DLL缺失这种破事。
  • 脚本化操作方便:Tcl/Tk、Shell脚本,在Linux下就是亲儿子。
我的建议:如果你手头没有Linux机器,装个Ubuntu 20.04 LTS或者22.04 LTS就行。别追新,稳定第一。

1.2 Python3环境配置

Python3是咱们分析网表的主力语言。我个人习惯用Python 3.8以上版本。Ubuntu 20.04自带Python 3.8,省事。

先检查一下系统里有没有Python3:

python3 --version

如果没装,或者版本太低,用这个命令装:

sudo apt update
sudo apt install python3 python3-pip python3-venv

这里有个坑——千万别直接用系统自带的pip装库。我建议用虚拟环境。为什么呢?因为不同项目可能依赖不同版本的库,混在一起迟早出问题。

创建虚拟环境:

python3 -m venv fpga_re_env
source fpga_re_env/bin/activate

激活之后,你的终端前面会出现 (fpga_re_env) 字样。这时候装库,就只影响当前环境。

我曾经踩过的坑:有一次我直接在系统环境里装了pyverilog,结果跟另一个项目的依赖冲突,折腾了两天才搞定。从那以后,每个项目我都用虚拟环境。

1.3 Tcl/Tk安装

Tcl/Tk在FPGA工具链里无处不在。Vivado的Tcl控制台、ISE的脚本,都靠它。咱们装它,主要是为了后面跑一些自动化脚本。

安装命令:

sudo apt install tcl tk

验证一下:

tclsh
% puts "Hello, FPGA Reverse!"
Hello, FPGA Reverse!
% exit

看到输出就对了。Tcl语法其实挺简单的,后面用到的时候我会细讲。

1.4 常用EDA工具链安装

这里咱们装三个工具:Vivado、ISE、Yosys。前两个是商业工具,Yosys是开源的。

1.4.1 Vivado

Vivado是Xilinx家的主力工具。装它有点大,大概30GB左右。下载地址在Xilinx官网,需要注册账号。

安装步骤:

  1. 下载 Xilinx_Vivado_SDK_*.tar.gz
  2. 解压:tar -xzf Xilinx_Vivado_SDK_*.tar.gz
  3. 运行安装脚本:./xsetup
  4. 选择版本,我一般选Vivado HL WebPACK,够用了
  5. 安装路径建议别用默认的,我放在 /opt/Xilinx

装完之后,设置环境变量:

source /opt/Xilinx/Vivado/2023.1/settings64.sh

验证:

vivado -version
小技巧:把上面那行source命令加到 ~/.bashrc 里,每次打开终端就不用重新敲了。

1.4.2 ISE

ISE是Xilinx的老工具,主要用来处理老款芯片(比如Spartan-6、Virtex-5)。虽然官方已经停止支持了,但逆向工程里经常遇到老网表,所以还得备着。

安装方法和Vivado类似,但要注意:ISE对Ubuntu 20.04以上的系统兼容性不太好。我建议用Docker跑:

docker pull xilinx/ise:latest

或者装个虚拟机跑CentOS 6。嗯,这确实有点麻烦,但没办法,老工具就这样。

1.4.3 Yosys

Yosys是开源界的宝贝。它能做综合、优化、网表转换,还能读入EDIF、Verilog网表。逆向分析里,我经常用它来做网表格式转换。

安装Yosys:

sudo apt install yosys

或者从源码编译(推荐,能用到最新功能):

git clone https://github.com/YosysHQ/yosys.git
cd yosys
make
sudo make install

验证:

yosys -version

看到版本号就对了。

1.5 开源库安装与测试

接下来装两个关键库:pyverilog和edifparser。它们能帮我们解析网表文件。

1.5.1 pyverilog

pyverilog是一个Python库,能解析Verilog代码,生成抽象语法树(AST)。逆向分析时,我常用它来提取网表中的模块和连线信息。

安装:

pip install pyverilog

测试一下:

python3 -c "import pyverilog; print('pyverilog imported successfully')"

写个小脚本试试:

from pyverilog.vparser.parser import parse

ast, _ = parse(['test.v'])
print(ast.children())

如果没报错,说明装好了。

注意:pyverilog对Verilog-2001支持得不错,但SystemVerilog的部分特性可能解析不了。遇到这种情况,我一般先用Yosys把网表转成纯Verilog-2001格式。

1.5.2 edifparser

edifparser是用来解析EDIF网表的。EDIF是一种中间格式,很多EDA工具都支持导出。逆向分析时,EDIF文件里包含了完整的网表结构。

安装:

pip install edifparser

测试:

python3 -c "import edifparser; print('edifparser imported successfully')"

解析一个EDIF文件:

from edifparser import EdifParser

parser = EdifParser('test.edf')
cells = parser.get_cells()
print(cells)

你会看到所有cell的名字和类型。这就是网表的基本单元。

1.6 知识体系总览

下面这张图,把咱们这一章的内容串起来了。你一看就明白:

FPGA网表逆向工程环境搭建 Linux环境 Python3环境 虚拟环境 + pip安装 Tcl/Tk apt安装 + 脚本验证 EDA工具链 Vivado(商业) ISE(老工具) Yosys(开源) 开源库 pyverilog edifparser

这张图里,Linux环境是底座。上面搭了Python3、Tcl/Tk、EDA工具链、开源库四根柱子。每一根都缺不了。

1.7 环境验证清单

装完之后,我建议你跑一遍这个清单,确保所有东西都正常:

组件 验证命令 预期结果
Python3 python3 --version Python 3.8+
Tcl tclsh 然后 puts hello 输出 hello
Vivado vivado -version 显示版本号
Yosys yosys -version 显示版本号
pyverilog python3 -c "import pyverilog" 无报错
edifparser python3 -c "import edifparser" 无报错

全部通过?恭喜你,环境搭好了。后面咱们就可以正式开始分析网表了。

最后说一句:环境搭建是最枯燥的一步,但也是最重要的一步。别嫌麻烦,一次搞定,后面就顺畅了。我当年第一次搭环境,折腾了整整两天。你现在跟着这个流程走,半天就能搞定。

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