fpga系列 硬件(IO):Quartus Pin Planner引脚符号含义 + IO原语&电气属性(推挽(Push-Pull)+ 开漏(Open-Drain))+未使用引脚处理

引脚符号与属性

  • 在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 BankI/O Bank引脚所属的I/O组。一个Bank内的引脚通常共享相同的I/O电压。可通过Pin Planner中的颜色区分。跨Bank的电平标准需注意兼容性。

电气属性

引脚默认为推挽

FPGA厂商默认输出类型说明
Intel (Altera)推挽(Push-Pull)在未特别配置为开漏或三态时,输出为推挽
Xilinx推挽(Push-Pull)默认使用 OBUF输出缓冲器),即推挽结构
  • 当HDL中声明一个 output 信号并赋值为 1'b01'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:数据线(双向,所有设备共享)
关键电气特性:
  1. 开漏输出(Open-Drain):所有设备只能主动拉低信号,不能主动驱动高电平。
  2. 外部上拉电阻:高电平由外部上拉电阻(通常4.7kΩ ~ 10kΩ)连接到VCC提供。
  • 标准模式(100kHz):4.7kΩ ~ 10kΩ
  • 快速模式(400kHz):1kΩ ~ 4.7kΩ(减小RC时间常数)
  • 相关内容:探究上拉电阻的取值
  1. 线与逻辑(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 映射为高阻态输出
// 示例:三态控制
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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值