现代 FPGA 的 IO 是 3.3V 甚至更低,而现场大量 5V 器件仍在服役。直连轻则通信不稳,重则烧毁 IO。
5V 信号直接灌进 3.3V 输入脚,超过绝对最大额定值,长期运行会击穿输入级 ESD 结构。
5V CMOS 的 VIH 通常在 3.5V 以上,3.3V 高电平落在不确定区,器件时而识别为高、时而为低。
分立 MOS + 上拉电阻搭出来的转换电路,通道少、方向固定、走线杂乱,做出来的样机没法交给客户。
不是简单的转接排线,而是一块考虑过过冲、误触发与供电路径的成品小板。
Port1 / Port2 各 8 位,DIR1、DIR2 单独控制。两组可同时工作在相反方向,互不干扰。
A 侧 3.3V 由板载 AMS1117-3.3 产生,B 侧 5V 直接取自 J6-1。只要核心板供电,模块即工作。
DIR 高 = 3.3V→5V 输出,低 = 5V→3.3V 输入。运行中随时切换,不需要改硬件或跳线。
DIR 串 33Ω 匹配电阻并配 1kΩ 上/下拉网络,抑制长线过冲与误触发,上电阶段也有确定偏置。
J6 为 2×20 / 2.54 mm,直接插在 HSEDA 核心板扩展口;J1、J2 为 2×5,杜邦线或 IDC 排线均可引出。
输出使能 1G / 2G 已在板上接地,常使能。没有寄存器、没有初始化时序,插上就工作。
3.3V 数据经 A 侧进入转换器,5V 数据从 B 侧出来;方向由 DIR 决定,使能常通。电源只有一路。
核心参数一览。完整引脚映射与 BOM 见产品说明书。
| 产品型号 | 接口电平转换模块 V1.0(Level Expansion Board V1.0) |
|---|---|
| 转换通道数 | 16 通道(Port1:8 位,Port2:8 位) |
| 核心器件 | 74LVC164245(SSOP-48,双电源 16 位收发器) |
| A 侧逻辑电压 VCCA | 3.3V(板载 AMS1117-3.3 稳压) |
| B 侧逻辑电压 VCCB | 5V(直接取 J6-1 的 5V) |
| 支持电平组合 | 3.3V CMOS ↔ 5V CMOS / TTL |
| 单通道驱动能力 | ±24 mA(VCC = 3.0V 时) |
| 传输延迟 | 典型 4~5 ns |
| 建议工作频率 | ≤ 25 MHz(排线引出);短距离直连可达 50 MHz |
| 静态电流 | 小于 10 mA(不含负载,LED 约 1.5 mA) |
| 板载稳压器能力 | 3.3V / 800 mA(受 J6 供电路径限制) |
| 方向控制 | DIR1 = J6-38 控制 J1;DIR2 = J6-37 控制 J2 |
| 输出使能 | 1G / 2G 板上接地,常使能 |
| 接口 | J6:2×20,2.54 mm,40P;J1 / J2:2×5,2.54 mm,10P |
| 板卡尺寸 | 50.80 × 26.80 mm;4 × Ø3.2 mm 安装孔 |
| PCB 工艺 | 双面板,板厚 1.6 mm,蓝色阻焊,喷锡,过孔盖油 |
| 工作温度 | -40 ℃ ~ +85 ℃ |
三个连接器加一颗指示灯,50.8 × 26.8 mm,与核心板扩展口同宽,插上后不侵占额外空间。
接线前请先核对 1 脚位置。J6 引脚号与数据位是反向排列的,这是最容易出错的地方。
| 引脚 | 信号 | 说明 | 引脚 | 信号 | 说明 |
|---|---|---|---|---|---|
| 1 | 5V(D5V) | 5V 电源输入 | 2 | GND | 地 |
| 3 | NC | 未连接 | 4 | GND | 地 |
| 5 | GND | 地 | 6~20 | NC | 未连接(模块不使用) |
| 21 | 2A8 | Port2 数据位 8(MSB) | 22 | 2A7 | Port2 数据位 7 |
| 23 | 2A6 | Port2 数据位 6 | 24 | 2A5 | Port2 数据位 5 |
| 25 | 2A4 | Port2 数据位 4 | 26 | 2A3 | Port2 数据位 3 |
| 27 | 2A2 | Port2 数据位 2 | 28 | 2A1 | Port2 数据位 1(LSB) |
| 29 | 1A8 | Port1 数据位 8(MSB) | 30 | 1A7 | Port1 数据位 7 |
| 31 | 1A6 | Port1 数据位 6 | 32 | 1A5 | Port1 数据位 5 |
| 33 | 1A4 | Port1 数据位 4 | 34 | 1A3 | Port1 数据位 3 |
| 35 | 1A2 | Port1 数据位 2 | 36 | 1A1 | Port1 数据位 1(LSB) |
| 37 | 2DIR | Port2 方向控制 | 38 | 1DIR | Port1 方向控制 |
| 39 | NC | 未连接 | 40 | NC | 未连接 |
注意:J6 为 2×20 双排针,奇数脚在右列、偶数脚在左列,1 脚在右下方。插入核心板前务必核对 1 脚位置——插反会把 5V 加到信号脚上。
| J1(Port1,丝印 IN) | |
|---|---|
| 引脚 | 信号 |
| 1 | GND |
| 2 | GND |
| 3 | 1B8(MSB) |
| 4 | 1B7 |
| 5 | 1B6 |
| 6 | 1B5 |
| 7 | 1B4 |
| 8 | 1B3 |
| 9 | 1B2 |
| 10 | 1B1(LSB) |
| J2(Port2,丝印 OUT) | |
|---|---|
| 引脚 | 信号 |
| 1 | GND |
| 2 | GND |
| 3 | 2B8(MSB) |
| 4 | 2B7 |
| 5 | 2B6 |
| 6 | 2B5 |
| 7 | 2B4 |
| 8 | 2B3 |
| 9 | 2B2 |
| 10 | 2B1(LSB) |
J1 的丝印 IN、J2 的丝印 OUT 只是沿用「一路输入、一路输出」的习惯命名。实际方向由 DIR1 / DIR2 决定,两路都可以做输入,也都可以做输出。
| 数据位 | J6 | 网络 | J1 |
|---|---|---|---|
| bit1(LSB) | 36 | 1A1 → 1B1 | 10 |
| bit2 | 35 | 1A2 → 1B2 | 9 |
| bit3 | 34 | 1A3 → 1B3 | 8 |
| bit4 | 33 | 1A4 → 1B4 | 7 |
| bit5 | 32 | 1A5 → 1B5 | 6 |
| bit6 | 31 | 1A6 → 1B6 | 5 |
| bit7 | 30 | 1A7 → 1B7 | 4 |
| bit8(MSB) | 29 | 1A8 → 1B8 | 3 |
Port1(J6 ↔ J1),方向由 J6-38 控制
| 数据位 | J6 | 网络 | J2 |
|---|---|---|---|
| bit1(LSB) | 28 | 2A1 → 2B1 | 10 |
| bit2 | 27 | 2A2 → 2B2 | 9 |
| bit3 | 26 | 2A3 → 2B3 | 8 |
| bit4 | 25 | 2A4 → 2B4 | 7 |
| bit5 | 24 | 2A5 → 2B5 | 6 |
| bit6 | 23 | 2A6 → 2B6 | 5 |
| bit7 | 22 | 2A7 → 2B7 | 4 |
| bit8(MSB) | 21 | 2A8 → 2B8 | 3 |
Port2(J6 ↔ J2),方向由 J6-37 控制
最容易踩的坑:J6 引脚号与数据位反向排列(J6-36 = bit1,J6-29 = bit8);J1 / J2 也是 10 脚 = bit1、3 脚 = bit8。接线时请逐位核对上表。
| J6 | 网络 | EP4CE10 | EP4CE30 | XC6SLX9(V3.0) | XC7A35 / A100 |
|---|---|---|---|---|---|
| 21 | 2A8 | D9 | PIN_H19 | 118 | T1 |
| 22 | 2A7 | E10 | PIN_H20 | 117 | R2 |
| 23 | 2A6 | C11 | PIN_H21 | 116 | W7 |
| 24 | 2A5 | D11 | PIN_H22 | 115 | W6 |
| 25 | 2A4 | E6 | PIN_J17 | 114 | V7 |
| 26 | 2A3 | F8 | PIN_J18 | 112 | W5 |
| 27 | 2A2 | B5 | PIN_J21 | 111 | U6 |
| 28 | 2A1 | A5 | PIN_J22 | 105 | Y3 |
| 29 | 1A8 | B6 | PIN_K17 | 104 | W4 |
| 30 | 1A7 | A6 | PIN_K18 | 102 | V5 |
| 31 | 1A6 | B7 | PIN_K19 | 101 | V4 |
| 32 | 1A5 | A7 | PIN_K21 | 100 | T6 |
| 33 | 1A4 | B8 | PIN_K22 | 99 | V3 |
| 34 | 1A3 | A8 | PIN_L21 | 98 | U5 |
| 35 | 1A2 | C8 | PIN_L22 | 97 | U3 |
| 36 | 1A1 | A9 | PIN_M19 | 95 | T5 |
| 37 | 2DIR | B9 | PIN_M20 | 94 | T4 |
| 38 | 1DIR | A10 | PIN_M21 | 93 | T3 |
XC6SLX9 一列的数字为核心板排针序号(非 FPGA 引脚名);XC7A35 一列对应核心板 J11 接口。
整个流程只有四步,不需要装驱动、不需要配置寄存器。
J6 排针对准核心板扩展口,确认 1 脚方向后垂直插入。上电后红色 LED1 常亮,说明 3.3V 已建立。
J1 的 1、2 脚接外设 GND,3~10 脚接外设数据脚。DIR1 = 0 时用万用表量,应为稳定电平无抖动。
FPGA 中把 DIR 脚驱动到目标值。DIR1 = 1 输出、DIR2 = 0 输入,用万用表可在 J6-38 / J6-37 直接量到 3.3V 与 0V。
没有外设时,把 J1 的 3~10 脚按位短接到 J2 的 3~10 脚。Port1 输出 8 位计数,Port2 读回同值即 16 通道正常。
// 8 位数据经 Port1 输出到 5V 侧 module out8 ( input wire clk, input wire rst_n, output wire [7:0] dout, // 接 J6-36..29 output wire dir1 // 接 J6-38 ); assign dir1 = 1'b1; // 3.3V → 5V 输出 reg [7:0] dat; always @(posedge clk or negedge rst_n) if (!rst_n) dat <= 8'h00; else dat <= dat + 8'h01; assign dout = dat; endmodule
外设端用示波器应量到 0V / 5V 摆幅;若只有 0V / 3.3V,说明 5V 没有送到 B 侧,检查 J6-1。
// 采集 Port2 的 8 位 5V 输入 module in8 ( input wire clk, input wire rst_n, input wire [7:0] din, // 接 J6-28..21 output wire dir2, // 接 J6-37 output reg [7:0] dat ); assign dir2 = 1'b0; // 5V → 3.3V 输入 reg [1:0] sync; always @(posedge clk or negedge rst_n) if (!rst_n) begin sync <= 2'b00; dat <= 8'h00; end else begin sync <= {sync[0], din[0]}; // 打两拍同步(示例) dat <= din; end endmodule
5V 输入为高时 FPGA 侧读到的约 3.3V,为低时约 0V。切忌在 DIR2 = 1 时把外部信号强加进来,会造成两侧对顶。按键、拨码等边沿敏感慢速信号建议在 FPGA 内打两拍后再消抖。
// 半双工总线:sel=1 写,sel=0 读 module half_duplex ( inout wire [7:0] bus, // 接 J6-36..29 output wire dir1, // 接 J6-38 input wire sel, input wire [7:0] wdata, output reg [7:0] rdata ); assign dir1 = sel; assign bus = sel ? wdata : 8'bz; // 读周期先释放总线 always @(*) rdata = bus; endmodule
切换顺序:FPGA 侧对应引脚先置高阻 → 改变 DIR → 等待 ≥100 ns(远大于 5 ns 传输延迟)→ 再开始新的读写。不推荐用本模块做 I2C:SDA 在一次传输中多次换向,靠 DIR 切换会产生毛刺与总线争用。
# Port1:8 位输出(J6-36 → J6-29) set_location_assignment PIN_A9 -to dout[0] set_location_assignment PIN_C8 -to dout[1] set_location_assignment PIN_A8 -to dout[2] set_location_assignment PIN_B8 -to dout[3] set_location_assignment PIN_A7 -to dout[4] set_location_assignment PIN_B7 -to dout[5] set_location_assignment PIN_A6 -to dout[6] set_location_assignment PIN_B6 -to dout[7] # Port2:8 位输入(J6-28 → J6-21) set_location_assignment PIN_A5 -to din[0] set_location_assignment PIN_B5 -to din[1] set_location_assignment PIN_F8 -to din[2] set_location_assignment PIN_E6 -to din[3] set_location_assignment PIN_D11 -to din[4] set_location_assignment PIN_C11 -to din[5] set_location_assignment PIN_E10 -to din[6] set_location_assignment PIN_D9 -to din[7] # 方向控制 set_location_assignment PIN_A10 -to dir1 # J6-38 set_location_assignment PIN_B9 -to dir2 # J6-37 set_instance_assignment -name IO_STANDARD "3.3-V LVTTL" -to *
时钟引脚请按所用核心板的晶振实际引脚填写,不同版本核心板不一致。
完整原理图随产品文档提供。核心就一颗 ALVC164245 加一颗 LDO,没有隐藏的魔法。
十个在调试现场最常被问到的问题。
下面每一条都对应过现场的真实故障。