1 FPGA组成原理——IO资源

文章目录

一、前言

本文是FPGA组成原理教程的IO资源原理篇,FPGA六大资源:IO资源、逻辑资源、存储资源、时钟资源、布线资源和专用硬核,后续有时间出一篇有关FPGA组成结构的概述文章。
在开始阅读本文之前,这里先问大家一个问题:各位对IO的理解是什么? 可能对于绝大多数初学者而言,IO就是一个普通的管脚,没什么特别。各位在FPGA开发时应该都做过IO分配,如引脚位置、输出驱动电流和上下拉等,作为FPGA六大资源之一的IO真的仅局限于管脚的分配吗?
经验丰富的开发者可能接触过IBUFDS、OBUFDS、IDDR、ODDR、ISERDESE2、OSERDESE2、IDELAYE2和ODELAYE2等原语(各类原语具体作用可自行查询相关技术资料),其实这些原语都属于IO资源。什么是IO?它的基本构成是什么?信号从管脚到FPGA内部逻辑电路之间都经历了哪些电路处理?本文将带着上述问题分析当前国内外主要厂商FPGA的IO架构。

二、基本组成

当前主流FPGA厂商的IO结构(Xilinx称其IO技术为SelectIO)通常包含IO BUFFER(后续简称IOB)​ 和IO LOGIC(后续简称IOL)两部分。 Xilinx IO组成如下图(参考UG471 Figure 2-1和Figure 2-2):

Xilinx IO结构


Xilinx IO结构


紫光Logos系列产品的IO组成如下图(参考Pango UG020006 图1-1),其中左侧为IOL而右侧为IOB:

紫光IO结构


高云产品的IO同样包括IOB和IOL两部分,具体组成如下图(参考Gowin UG289 图2-1):

高云IO结构


各厂商IO结构基本一致,但Xilinx把ISERDES和OSERDES视为“Advance SelectIO Logic Resources”,而其他厂商普遍将上述部件划分到IOL范畴, 这里个人更倾向其余厂商的做法。下表详细列出了各厂商IO组件的具体命名:

-Xilinx紫光安路高云
IOBIOBIO BUFFERIOB输入输出缓存
IOLSelectIO Logic ResourcesIO LOGICIOL输入输出逻辑

IOB主要负责处理电气特性,具体作用包括:

  1. 信号类型转换: 由于FPGA内部资源通常采用单端信号进行互联,因此需将差分输入信号转化为单端信号或将FPGA内部单端信号转化为差分信号再进行输出;
  2. 电平标准转换: 外部信号电平标准可能为LVCMOS、LVTTL、SSTL和LVDS等,但FPGA内部资源通常为单一电源供电,如CLB使用VCCINT电源供电,因此需对电平进行转换;
  3. 其他: 如IO压摆率设置和上下拉电阻设置等。

而IOL则用于实现特定逻辑功能,具体作用包括:

  1. 串并转换(具体原理可阅读本人串并转换专题文章): 将高速串行输入数据转化为并行数据以便于FPGA内部处理,或将FPGA内部并行数据转化为高速串行数据进行输出;
  2. SDR/DDR转换(具体原理可阅读本人IDDRODDR专题文章): 将SDR信号转换为DDR信号;
  3. 其他: 如信号延时和输入输出寄存器等。

2.1 IOB

IOB的复杂度较高且更多涉及底层电路,同时不同厂商的IOB具体配置存在较大差异。此外个人对这部分内容了解程度相对有限, 下面给出各厂商IOB原理示意图作为学习参考。
下图为安路DR1系列FPGA的IOB基本组成结构原理图(参考Anlogic UG1210 图2-1),该示意图直观展示了IOB的多种功能特性,包括可编程上下拉电阻(图中标注为Programmable Pull up/down)、三态控制(图中标注为Driver)、LVDS电平标准支持(图中标注为LVDS)以及差分信号的片内终端电阻配置(图中标注为100Ω)等。(PS:下图相对通俗易懂)

Anlogic IOB原理图


下图为Xilinx FPGA Regular HR Bank IO的IOB基本组成结构原理图(参考UG471 Figure 1-4)(PS:相对比较抽象)

Xilinx IOB原理图


有关IOB各项功能的使用方法,可参阅相关文档,此处不赘述具体操作说明。

2.2 IOL

IOL的复杂度也比较高,但由于其主要为数字电路,因此相比IOB更容易学习和理解, 下面同样给出各厂商IOL原理示意图作为学习参考。
下图为高云FPGA的IOL输入逻辑的基本组成结构原理图(参考Gowin UG289 图4-1),该示意图直观展示了IOL的多种功能特性,包括信号延时(图中标注为IDELAY)、输入寄存器(图中标注为IREG)、串并转换(图中标注为IDES)和输入边沿监测(图中标注为IEM)等。

Gowin IOL原理图


下图为高云FPGA的IOL输出逻辑的基本组成结构原理图(参考Gowin UG289 图4-1),该示意图直观展示了IOL的多种功能特性,包括信号延时(图中标注为IODELAY)、输出寄存器(图中标注为OREG)和并串转换(图中标注为OSER)等。

Gowin IOL原理图


有关IOL各项功能的使用方法,可参阅相关文档,此处同样不赘述具体操作说明。

三、一些思考

在FPGA开发过程中,IOB主要体现在管脚约束设置, 如以下约束条件将led信号分配到L16管脚,采用LVCMOS33电平标准,配置16mA驱动电流,禁用上下拉电阻,并选择低速摆率模式。实际上管脚约束就是配置IOB电路,只是开发工具会自动根据约束完成具体的过程。

set_pin_assignment { led } { LOCATION = L16; IOSTANDARD = LVCMOS33; DRIVESTRENGTH = 16; PULLTYPE = NONE; SLEWRATE = SLOW; } 

而IOL主要体现在原语调用, 如以下原语将输入的rgmii_rxd DDR信号转化为SDR信号。当然并不是所有原语都属于IOL,IOB也有部分功能需要调用原语才能使用,如调用IBUFDS原语实现差分转单端功能。

genvar i; generate for (i = 0; i < 4; i = i + 1) begin: rxdata_bus IDDR # ( .DDR_CLK_EDGE("SAME_EDGE_PIPELINED"), .INIT_Q1(1'b0), .INIT_Q2(1'b0), .SRTYPE("SYNC") ) u_iddr_rxd ( .Q1(gmii_rxd[i]), // 1-bit output for positive edge of clock .Q2(gmii_rxd[4+i]), // 1-bit output for negative edge of clock .C(rgmii_rxc_bufio), // 1-bit clock input rgmii_rxc_bufio .CE(1'b1), // 1-bit clock enable input .D(rgmii_rxd[i]), // 1-bit DDR data input .R(1'b0), // 1-bit reset .S(1'b0) // 1-bit set ); end endgenerate 

最后回到文章开头的问题,什么是IO?IO是FPGA中一系列硬件资源的统称!基本构成?FPGA IO包括IOB和IOL两部分,其中IOB主要用于处理电气特性(如单端转差分),IOL主要用于实现特定逻辑功能(如串并转换)!

四、个人声明

本文由个人整理、创作,旨在进行个人学习、研究或记录,不用于任何商业性行为,文中部分内容参考以下资料:

Xilinx Inc. 7 Series FPGA SelectIO Resources User Guide(UG471).Pango Inc. Logos系列FPGA输入输出接口(IO)用户手册(UG020006).Anlogic Inc. SF1 FPGA IO用户指南(TN805).Anlogic Inc. DR1 FPGA IO用户指南(UG1210).Gowin Inc. 可编程通用管脚用户指南(UG289).

本文引用的任何第三方资料,其知识产权(包括但不限于著作权、商标权等)均归原作者或原始权利人所有。本文对这些内容不主张任何权利。

Read more

本地离线部署whisper模型进行话音转写,亲测可用

在本地搭建 Whisper 语音转写环境比较简单,以下是详细步骤,适用于 Windows、macOS 和 Linux 系统,其中windows系统亲测可用: 一、基础环境准备 1. 安装 Python 确保安装 Python 3.8+: * 下载地址:python.org/downloads * 安装时勾选 "Add Python to PATH"(关键步骤) 2. 验证 Python 安装 打开命令行(CMD/PowerShell/ 终端),输入:python --version # 或 python3 --version(macOS/Linux),显示版本号即表示安装成功。 二、

如何用MCP AI Copilot提升运维效率300%?真实数据告诉你答案

第一章:MCP AI Copilot 运维提效全景解析 在现代企业IT基础设施日益复杂的背景下,MCP AI Copilot 作为智能化运维助手,正在重塑传统运维模式。通过融合机器学习、自然语言处理与自动化执行能力,它能够实时分析系统日志、预测潜在故障并主动触发修复流程,显著降低平均修复时间(MTTR)。 智能告警与根因分析 MCP AI Copilot 可对接 Prometheus、Zabbix 等主流监控系统,利用语义聚类技术对海量告警进行去噪和聚合。当检测到异常指标时,自动调用链路追踪数据进行根因推理。 例如,以下 Go 代码片段展示了如何通过 API 触发告警分析任务: // 初始化AI分析客户端 client := NewAIClient("https://api.mcp-copilot/v1") // 提交告警事件进行智能分析 resp, err := client.AnalyzeAlert(Alert{ Timestamp:

Whisper JAX:革命性AI语音识别,比PyTorch快70倍的终极指南

想要体验闪电般的AI语音识别吗?🤩 Whisper JAX是OpenAI Whisper模型的JAX实现,提供高达70倍的速度提升,成为目前最快的语音识别解决方案!无论你是开发者、研究人员还是普通用户,这个终极指南将带你全面了解这个革命性技术。 【免费下载链接】whisper-jaxJAX implementation of OpenAI's Whisper model for up to 70x speed-up on TPU. 项目地址: https://gitcode.com/gh_mirrors/wh/whisper-jax 什么是Whisper JAX?🚀 Whisper JAX是基于JAX框架优化的OpenAI Whisper模型实现,相比原始的PyTorch版本,它在TPU上运行速度提升了惊人的70倍!这个项目完全兼容CPU、GPU和TPU设备,支持自主运行或作为推理端点部署。 核心关键词:AI语音识别、JAX优化、70倍加速、TPU支持 为什么选择Whisper JAX?

Stable-Diffusion-3.5与SDXL对比评测:生成速度与质量实测

Stable-Diffusion-3.5与SDXL对比评测:生成速度与质量实测 最近AI绘画圈又热闹起来了,Stability AI推出了全新的Stable Diffusion 3.5。大家都在问:这个新版本到底比之前的SDXL强在哪里?是画得更好了,还是跑得更快了?正好,我拿到了基于SD3.5官方模型优化的FP8镜像,用它和SDXL来了一次面对面的实测。 今天这篇文章,我就带你看看这两个模型在生成速度、图像质量、细节表现上的真实差距。我会用完全相同的提示词、相同的硬件环境,让它们俩“同台竞技”,看看谁才是真正的效率王者。 1. 评测准备:我们比什么,怎么比? 在开始之前,我们先明确一下这次评测的目标和方法。这不是一个泛泛而谈的对比,而是聚焦于普通用户最关心的两个核心问题:“画得怎么样”和“画得快不快”。 1.1 参赛选手介绍 * 选手A:Stable Diffusion 3.5 (FP8优化版) 这是今天的主角,Stability AI在SD3.0之后推出的重要升级。