引脚符号与属性
- 在Pin Planner工具中把鼠标双击(或单机放在对应引脚上)可看到相关说明

- 下面这个表格汇总了常见的引脚符号及其含义
| 符号/标记类型 | 具体符号或属性 | 含义与用途 | 注意事项 |
|---|---|---|---|
| 圆形标记 | 圆形标记 | 表示普通用户I/O引脚,用户可以自由使用。 | 最常用的引脚类型,用于一般的输入输出信号。 |
| △ 三角标记 | 正三角 | 表示电源引脚 (VCC)。 | 通常连接到指定的电源网络。 |
| 倒三角 | 表示地引脚 (GND)。 | 通常连接到地网络。 | |
| 三角内部带字母"O" | 表示I/O引脚电源。 | 为I/O接口提供电源。 | |
| 三角内部带字母"I" | 表示内核电源。 | 为FPGA核心逻辑供电。 | |
| □ 正方形标记 | 正方形内有时钟沿的符号 | 表示全局时钟引脚。 | 专用全局时钟引脚针对时序进行过优化。 |
| ⬠ 五边形标记 | 五边形内部有字母 M, K, I, O | 表示JTAG接口引脚: TMS(M), TCK(K), TDI(I), TDO(O)。 | 用于FPGA的配置和调试。 |
| I/O标准 | I/O Standard | 用于支持不同的电气电平标准 (如LVTTL, LVCMOS, LVDS等)。 | 必须正确设置以确保与外部器件电平兼容。 |
| 保留选项 | Reserved | 对引脚内部的IO逻辑进行约束。 | 可设置为双向(bidirectional)、三态(tri-state)等。 |
| I/O Bank | I/O Bank | 引脚所属的I/O组。一个Bank内的引脚通常共享相同的I/O电压。 | 可通过Pin Planner中的颜色区分。跨Bank的电平标准需注意兼容性。 |
电气属性
引脚默认为推挽
| FPGA厂商 | 默认输出类型 | 说明 |
|---|---|---|
| Intel (Altera) | 推挽(Push-Pull) | 在未特别配置为开漏或三态时,输出为推挽 |
| Xilinx | 推挽(Push-Pull) | 默认使用 OBUF(输出缓冲器),即推挽结构 |
- 当HDL中声明一个
output信号并赋值为1'b0或1'b1时,FPGA会主动驱动高或低电平。
默认是推挽的优势
- 推挽输出驱动能力强、响应速度快、电平稳定
- 适用于大多数点对点数字接口(如SPI、GPIO、UART)
- 是最通用、最高效的输出方式
⚠️ 但这也意味着:如果误将推挽输出连接到开漏总线(如I²C),可能会导致短路!
FPGA做IIC的主机 (开漏输出)
- 让FPGA作为I²C(Inter-Integrated Circuit)主机,与做SPI主机有很大不同,最大的区别在于I²C的电气特性要求:开漏(Open-Drain)输出 + 外部上拉电阻。
I²C协议核心特点
I²C是两线制、半双工、多主多从、低速的串行总线:
- SCL:时钟线(由主机驱动)
- SDA:数据线(双向,所有设备共享)
关键电气特性:
- 开漏输出(Open-Drain):所有设备只能主动拉低信号,不能主动驱动高电平。
- 外部上拉电阻:高电平由外部上拉电阻(通常4.7kΩ ~ 10kΩ)连接到VCC提供。
- 标准模式(100kHz):4.7kΩ ~ 10kΩ
- 快速模式(400kHz):1kΩ ~ 4.7kΩ(减小RC时间常数)
- 相关内容:探究上拉电阻的取值
- 线与逻辑(Wired-AND):任意设备拉低,总线即为低。
FPGA做I²C主机的完整配置步骤
- 需要软硬件协同设计,才能实现FPGA作为I²C主机。
设置“开漏”
-
在FPGA中,没有直接的“开漏”选项,但可以通过以下方式实现:
-
使用
inout+ 外部上拉- inout SDA ;// 这会使得chip中I/O属性的Macro Cell 为ADLIB:BIBUF
-
三态控制
- FPGA IO默认是推挽,但你可以在HDL中通过
assign sda = (en) ? 1'b0 : 1'bz;实现开漏行为 - 工具会自动将
1'bz映射为高阻态输出
- FPGA IO默认是推挽,但你可以在HDL中通过
// 示例:三态控制
assign sda_o = (sda_out_en) ? 1'b0 : 1'bz; // 开漏:0=拉低,z=高阻,高阻态FPGA不驱动,由外部上拉提供高电平。
assign sda_pad = sda_o;
assign sda_i = sda_pad; // 输入采样
- 或
assign SDA = SDAOE ? SDAo : 1'bZ;
- 以上语句会被综合工具自动推断为一个 IOBUF 原语(或等效结构 ),可主动驱动高电平、主动驱动低电平、高阻态。

HDL代码设计(核心逻辑)
module test (
input clk,
input rst_n,
inout scl,
inout sda
);
// 三态控制信号
reg scl_out_en; // 1: 拉低 SCL, 0: 释放
reg sda_out_en; // 1: 拉低 SDA, 0: 释放
wire scl_in; // 采样 SCL 实际电平
wire sda_in; // 采样 SDA 实际电平
// 三态缓冲
assign scl = (scl_out_en) ? 1'b0 : 1'bz; // 开漏模拟
assign sda = (sda_out_en) ? 1'b0 : 1'bz; // 开漏模拟
// 输入采样
assign scl_in = scl;
assign sda_in = sda;
// 状态机控制 scl_out_en 和 sda_out_en ...
// (实现 Start, Stop, Read, Write 等时序)
endmodule
- 注:iic的SCL也是开漏的,实际应用也可以用推挽。
- 另外,
assign sda = (sda_out_en) ? 1'b0 : 1'bz;其实也可以在主设备进行输出时使用推挽输出(类似assign sda = (sda_out_en) ? Push_Pull_data : 1'bz;),然后在主设备不输出时不占用总线(也就是输出高阻态)能让其他器件拉低SDA即可。这样的话,输出的高电平可能会比通过上拉电阻得到的高电平高一点。
未使用引脚处理
- 其他未使用的FPGA引脚仍应设为
As output driving ground(在Unused Pins设置中) - Reserved(保留)设置主要针对“在设计中没有被HDL代码(如Verilog/VHDL)显式使用”的引脚
- 保留管脚 外部物理引脚 确保引脚在电路板上处于安全的电气状态,防止硬件问题 Quartus设置 方式见RESERVE_PIN

被折叠的 条评论
为什么被折叠?



