1、课程导学与环境搭建:收发器与卷积加速概述、Vivado与Vitis开发环境安装、开发板准备与上电测试

1.1 这门课到底要干什么?

说实话,每次开新课前,我都会问自己一个问题:学员学完能做什么?

这门课的目标很明确——让你亲手把卷积神经网络的加速器,跑在真实的FPGA开发板上,并且通过高速收发器把数据传进去、把结果拿出来。

不是仿真,不是跑波形,是实实在在的上板联调。

我当年第一次做收发器项目时,被眼图、误码率、参考时钟这些概念搞得晕头转向。后来发现,其实只要把几个关键点搞明白,收发器就是个高速串行管道。卷积加速呢?说白了就是乘加运算的流水线。两者一结合,就是一套完整的数据采集→处理→输出系统。

嗯,这里要注意:收发器不是万能的。它擅长的是点对点高速传输,不是片内互联。我们用它来模拟真实场景下的数据搬运,这才是工程实战的意义。

课程核心逻辑:

  • 收发器负责高速数据搬运(Gbps级别)
  • 卷积加速器负责计算密集型任务(乘加运算)
  • 两者通过AXI-Stream接口无缝衔接

下面这张图,是我自己画的课程知识体系。你看一眼,心里就有数了。

收发器卷积加速上板联调实战 - 知识体系 第1章:课程导学与环境搭建 收发器概述 | 卷积加速概述 | Vivado/Vitis安装 | 开发板准备 收发器核心 GTX/GTH | 眼图调试 | 时钟恢复 IBERT | 误码率测试 卷积加速器 乘加阵列 | 数据复用 | 流水线 Winograd | 量化部署 系统集成与联调 AXI-Stream接口 | DMA传输 | 上板调试 | 性能分析 最终交付:可运行的加速系统

1.2 收发器到底是什么?

收发器,英文叫Transceiver,是FPGA里专门处理高速串行信号的硬核模块。

你想想看,传统的并行总线(比如GPIO)跑个几百兆就信号变形了。收发器不一样,它内部有PLL、串化器/解串器、时钟恢复电路,能轻松跑到10Gbps以上。

我习惯把收发器比作FPGA的“高速公路收费站”:

  • 发送端:把并行数据打包成串行比特流,加上时钟信息,发出去
  • 接收端:从串行信号里恢复时钟,解出并行数据
  • 中间:靠差分信号(P/N对)传输,抗干扰能力强

个人经验:我第一次调收发器时,发现眼图总是不开。折腾了两天,最后发现是参考时钟的抖动太大。换了个低抖动的晶振,眼图立马就漂亮了。所以,时钟是收发器的命根子,千万别省这个钱。

1.3 卷积加速器在FPGA上怎么玩?

卷积运算,说白了就是滑动窗口乘加。一个3×3的卷积核,在特征图上滑一遍,每个位置做9次乘法和8次加法。

FPGA做这个事有天然优势:

  • 并行性:DSP48可以同时做多个乘加
  • 流水线:数据可以像工厂流水线一样流过去
  • 低延迟:没有CPU的取指、译码开销

但要注意,FPGA不是GPU。它不适合超大矩阵运算,而是擅长小批量、低延迟、定制化的场景。比如工业检测、边缘计算、实时视频处理。

课程中我们会实现的卷积加速器规格:

参数 数值 说明
输入通道 3(RGB) 彩色图像输入
输出通道 16 特征图数量
卷积核大小 3×3 标准卷积
数据位宽 8-bit 量化后定点数
加速比 ~10x 相比ARM Cortex-A9

1.4 开发环境安装——别踩我踩过的坑

环境安装是很多人放弃的第一步。其实没那么可怕,就是版本要选对。

Vivado和Vitis的关系:

  • Vivado:负责硬件设计(RTL综合、布局布线、生成比特流)
  • Vitis:负责软件开发(驱动编写、应用层代码、调试)

从2020.1版本开始,Vitis已经集成到Vivado安装包中了。你装一个Vivado,就同时有了Vitis。

避坑指南:我曾经装过2019.2版本,结果发现和Windows 11不兼容,安装到一半就报错。后来换了2021.1版本,一次成功。建议你用2021.1或2022.1,这两个版本比较稳定。

安装步骤(以Vivado 2021.1为例):

  1. 去Xilinx官网下载Vivado HLx 2021.1(约40GB,建议用下载工具)
  2. 运行安装程序,选择Vivado HL System Edition(包含Vitis)
  3. 勾选7 Series、Zynq-7000、Kintex-7等器件支持
  4. 安装路径不要有中文和空格(我习惯用C:\Xilinx\Vivado2021.1)
  5. 安装时间约1-2小时,取决于你的硬盘速度

小技巧:安装时把杀毒软件关了,不然会慢很多。另外,SSD硬盘能省一半时间,别问我怎么知道的。

1.5 开发板准备与上电测试

我们课程用的是Xilinx KC705开发板(Kintex-7系列)。如果你手头有其他板子,只要带GTX收发器就行。

上电前检查清单:

  • ✅ 12V电源适配器(原装的最好,别用杂牌)
  • ✅ Micro USB线(用于JTAG调试)
  • ✅ 以太网线(可选,用于网络调试)
  • ✅ 参考时钟(板载156.25MHz晶振,够用)

上电后,你会看到板子上的LED灯依次闪烁,这是板载的出厂测试程序在跑。如果没反应,先检查电源指示灯(D5)亮不亮。

上电测试步骤:

  1. 连接电源,按下SW1(电源开关)
  2. 观察D5(绿色)是否常亮——电源正常
  3. 观察D6-D9是否闪烁——FPGA已配置
  4. 用USB线连接PC,打开设备管理器,确认出现Xilinx USB Cable

如果设备管理器里没出现Xilinx USB Cable,别慌。大概率是驱动没装。去Xilinx官网下载Vivado Lab Solutions,里面包含驱动。或者直接装Vivado时勾选Install Cable Drivers。

注意:有些山寨USB线质量很差,会导致JTAG连接不稳定。我建议用带磁环的USB线,或者直接用Xilinx原装线。别在这种小配件上省钱,不然调试时掉线会让人崩溃。

1.6 第一个实验:点亮LED

环境搭好了,板子也亮了,我们来写个最简单的程序——点亮LED。这就像学编程时的"Hello World"。

打开Vivado,创建一个新工程:

1. File → New Project → Next
2. Project name: led_test
3. 选择 RTL Project
4. 选择器件:xc7k325tffg900-2(KC705的芯片型号)
5. Finish

然后添加一个Verilog文件:

module led_test(
    input  clk_156m25,   // 板载156.25MHz时钟
    output reg [3:0] led // 4个LED
);

reg [31:0] counter;

always @(posedge clk_156m25) begin
    counter <= counter + 1;
    if (counter == 156_250_000) begin  // 约1秒
        counter <= 0;
        led <= ~led;  // 翻转LED
    end
end

endmodule

综合、实现、生成比特流,然后下载到板子上。你会看到4个LED以大约1秒的频率闪烁。

嗯,这一步成功了,说明你的开发环境、下载线、板子都没问题。接下来就可以放心地进入收发器和卷积加速的正题了。

我的习惯:每次拿到新板子,我都会先跑这个LED程序。不是为了炫技,而是为了验证整个工具链是否通畅。如果这一步卡住了,后面所有实验都做不了。所以,别嫌它简单,老老实实跑一遍。

好了,环境搭好了,板子也亮了。下一章我们开始真正接触收发器的配置与调试。到时候我会教你如何用IBERT工具看眼图,以及如何让数据在Gbps级别跑起来。

记住一句话:硬件调试,慢就是快。每一步都验证清楚了再往下走,反而最省时间。


可可精品资料库