Vivado实战手记:Pmod外设通信从“灯不亮”到“波形稳”的全链路通关指南
你有没有过这样的经历?
把Pmod OLED插进Basys 3的JB口,烧完bit文件,屏幕一片漆黑;
ILA抓出来的SPI波形里,MOSI数据总在SCLK下降沿跳变,而芯片手册清清楚楚写着“CPOL=0, CPHA=0,上升沿采样”;
XDC里明明写了set_property PACKAGE_PIN E15 [get_ports {pmod_jb[0]}],结果逻辑分析仪一测——信号根本没出来。
这不是玄学,是Vivado工程中物理引脚、协议语义、IP行为、约束语法、调试视角五者未对齐的真实写照。今天不讲概念堆砌,我们以一个真实踩坑又填坑的过程为线索,带你把Pmod在Vivado里的每一步“为什么这么写”“不这么写会怎样”“怎么一眼看出错在哪”,掰开揉碎讲透。
Pmod不是“即插即用”,而是“即插即约”
先破一个迷思:Pmod接口没有协议栈,只有引脚契约。Digilent发布的《Pmod Interface Specification v1.2.0》通篇没提一句“SPI时序图”,它只干一件事:告诉你12个焊盘(JD1–JD12)对应FPGA的哪12个物理引脚,以及这些引脚默认电平、驱动能力、推荐上拉/下拉方式。
所以当你看到一块标着“Pmod SPI ADC”的模块,它其实什么都没承诺——
- 它没说SCK必须由FPGA输出;
- 没说SS要低有效还是高有效;
- 更没说MISO是否需要三态控制。
一切协议语义,都落在你写的Verilog、选的IP核、配的寄存器、下的XDC约束上。
✅ 关键认知:Pmod是物理层规范,不是通信协议标准。你用SPI、I²C还是纯GPIO bit-bang,全由你定义;但你定义的那一刻,就必须让硬件(引脚)、IP(行为)、软件(寄存器操作)、约束(时序)四者严丝合缝。
Basys 3 Pmod JB引脚真相:别再靠“经验”硬猜
很多教程直接甩出一串引脚映射表,却不告诉你这个表从哪来、能不能信。我们直接翻Basys 3官方原理图(Basys3_Schematic.pdf,Page 7 “Pmod JB Connector”):
| Pmod Pin | FPGA Pin | Bank | VCCO | Notes |
|---|---|---|---|---|
| JB1 | E15 | 34 | 3.3V | ← 这是SCK常用位,但原理图只标”JB1”,没写协议! |
| JB2 | D14 | 34 | 3.3V | |
| JB3 | F16 | 34 | 3.3V |