概述
在边缘计算、低功耗 AI 加速的真实场景中,FPGA 的核心价值在于底层掌控力。尤其是在资源受限的小型设备里,不仅要跑得快,还得省电、可重构、延迟确定。这一切都始于对每一个逻辑门的清晰理解。
本文将在 FPGA 上,用基本逻辑单元实现一个完整的多层感知机(MLP)。不靠高级综合,不依赖浮点运算,全程手动构建数据通路,带你走完从算法到硅片的最后一公里。
为什么要在 FPGA 上跑 MLP?
GPU 当然也能跑神经网络,但它本质上是个'通用并行处理器',需要操作系统调度、有内存墙问题、功耗动辄几十瓦——这对一块电池供电的传感器节点来说简直是奢侈。
ASIC 性能最强,但一锤定音,改不了。而我们的目标是在工业现场部署成千上万个智能传感节点,每个可能都要根据具体振动频率、温度环境微调模型结构……这时候,FPGA 的可重构性就成了杀手锏。
更重要的是,FPGA 允许你完全掌控每一条数据路径。你可以把 8 位定点乘法器做得比标准 IP 更紧凑;可以把激活函数压缩进几个 LUT 里;甚至可以在空闲时关掉某一层的时钟域来节能。
换句话说,在 FPGA 上实现 MLP,不是为了替代 GPU 训练大模型,而是为了在 功耗<100mW、延迟<1μs、面积只有几平方毫米 的条件下,完成精准的本地决策。
MLP 的本质:三个操作撑起整个前馈网络
多层感知机看起来复杂,拆开来看其实就三步:
- 乘法:输入 × 权重
- 累加:所有乘积求和 + 偏置
- 非线性变换:比如 ReLU、Sigmoid
这三个步骤反复堆叠,就构成了从输入到输出的完整推理链路。
而在硬件层面,它们分别对应:
- 定点乘法器 → 由移位和加法构成
- 累加器 → 加法树 + 寄存器
- 激活函数 → 查找表(LUT)或比较器
关键来了:这些模块,全都可以用最基本的逻辑门搭建出来。
从零开始:如何用 AND/XOR 门造出一个神经元?
第一步:搞定加法——全加器是怎么来的?
所有的算术运算,归根结底都是加法。而加法的基础,是一个叫 全加器(Full Adder) 的小电路。
它的功能很简单:输入三个一位二进制数 a, b, cin(进位),输出本位和 sum 和新的进位 cout。
它的逻辑表达式是这样的:
sum = a ^ b ^ cin; cout = (a & b) | (b & cin) | (a & cin);
看出来了吗?全是异或门和与门。没有别的魔法。
这个模块虽然小,却是大厦的地基。把它复制粘贴几次,就能拼出 4 位加法器;再组合成加法树,就可以高效完成向量点积中的累加操作。
提示:Xilinx FPGA 里的 LUT6 其实天然支持 6 输入任意布尔函数,所以一个 LUT 就能实现一个全加器。这意味着你在 Artix-7 上用几百个 LUT 就能搭出高性能加法网络。
第二步:乘法器也能'手写'
现代 FPGA 综合工具会自动把 a * b 编译成 DSP Slice,但我们今天偏不用它——我们要自己做一个 基于逻辑门思想的定点乘法器。
思路很简单:模仿小学列竖式乘法。
比如你要算 5 × 3,也就是 4'b0101 × 4'b0011:
- 如果
b[0]==1,加上a << 0 - 如果
b[1]==1,加上a << 1 - …以此类推
这就是所谓的' 条件移位相加法 '。
下面是 Verilog 实现:

