跳转至

FPGA Verilog HDL基础与IoT外设实现

难度:🟢 初级 | 领域:FPGA 入门 | 关键词:Verilog, 并发, UART/SPI/PWM | 阅读时间:约 18 分钟

日常类比

写软件像按菜谱一步步做;写硬件描述语言(Hardware Description Language, HDL)像同时安排厨房所有工位——同一时钟边沿,多块逻辑一起动作。Verilog 描述的是电路结构,综合后变成现场可编程门阵列(Field-Programmable Gate Array, FPGA)上的查找表与触发器,不是 CPU 指令序列[1][2]。

摘要

建立并发思维、wire/reg、时序与组合 always,并用通用异步收发传输器(UART)、串行外设接口(SPI)、脉冲宽度调制(PWM)说明物联网外设骨架。语法以 IEEE 1364/SystemVerilog 常用可综合子集为准[3]。

1. 软件 vs HDL

维度 C/Python Verilog HDL
模型 顺序 并发
时间 指令 时钟周期
产物 可执行文件 比特流

每个 always/assign 对应并行硬件。wire 像连线;reg 在时钟 always 中通常推断寄存器,在组合 always 中可为组合逻辑[1]。

2. 可综合骨架

同步复位计数器、有限状态机(Finite State Machine, FSM)是外设核心。IoT 上常见:波特率分频的 UART TX/RX、SPI 主模式移位寄存器、PWM 比较计数器驱动发光二极管或电机[4][5]。

外设 关键硬件块 注意
UART 波特计数 + 移位 亚稳态:异步 RX 需同步
SPI 移位 + SCLK 生成 CPOL/CPHA 模式
PWM 计数器 + 比较 分辨率 vs 频率权衡
GPIO 三态/寄存输出 与 MCU 电平与上拉

仿真(testbench)先看波形再上板;引脚约束与时序约束(时钟、输入延迟)不可省[6]。

3. 工具链一瞥

综合 → 布局布线 → 比特流;厂商工具如 Vivado / Quartus / 开源 Yosys+nextpnr。初学可用小容量 FPGA 点亮 LED、再做 UART 环回[7]。

4. 局限、挑战与可改进方向

1. 把 HDL 当软件写

局限:在 always 里写长“算法式”顺序思维,仿真过但面积时序爆炸。 改进:显式流水线/FSM;每级寄存器清晰;对照 RTL 原理图[2]。

2. 异步与亚稳态

局限:未同步的跨时钟/外部输入导致偶发错误。 改进:双触发器同步;CDC 用握手或异步 FIFO[8]。

3. 阻塞/非阻塞混用

局限:时序 always 用 = 导致仿真与综合不一致风险。 改进:时序用 <=,组合用 =;避免同一 reg 多驱动[3]。

4. 外设只“能跑”未验证

局限:上板偶发波特率不准、SPI 采样沿错误。 改进:自检环回;逻辑分析仪;约束真实 IO 延迟[5][6]。

总结

先掌握并发、时钟与 FSM,再用 UART/SPI/PWM 练可综合外设;仿真与约束和代码同等重要。进阶再学总线与软核,而不是堆更长组合逻辑。

参考文献

[1] IEEE Std 1364, Verilog Hardware Description Language. [2] C. Maxfield, The Design Warrior's Guide to FPGAs. [3] Sutherland, Verilog-2001 / 可综合编码指南相关文献. [4] Xilinx/AMD, UG901 Vivado 综合用户指南(编码建议). [5] 开源 UART/SPI 核与 FPGA4Fun 等教程(入门对照). [6] IEEE 时序约束与 SDC 基础应用笔记. [7] Yosys / nextpnr 开源 FPGA 工具链文档. [8] Clifford Cummings, 异步信号同步与 CDC 论文(SNUG). [9] Intel Quartus, Recommended HDL Coding Styles. [10] Pong P. Chu, FPGA Prototyping by Verilog Examples. [11] ARM AMBA / 简单APB外设接口入门对照. [12] Lattice / 低成本 FPGA 入门板用户手册.