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

Pycharm中Github Copilot插件安装与配置全攻略(2023最新版)

PyCharm中GitHub Copilot:从安装到实战的深度配置指南 如果你是一位Python开发者,最近可能已经被各种关于AI编程助手的讨论所包围。GitHub Copilot,这个由GitHub和OpenAI联手打造的“结对编程”伙伴,已经不再是科技新闻里的概念,而是实实在在地进入了我们的开发工作流。特别是在PyCharm这样的专业IDE中,Copilot的集成能带来怎样的化学反应?是效率的倍增,还是全新的编码体验?这篇文章,我将从一个深度使用者的角度,带你走完从零安装到高效实战的全过程,并分享一些官方文档里不会告诉你的配置技巧和实战心得。 1. 环境准备与账号激活:迈出第一步 在开始安装插件之前,我们需要确保两件事:一个可用的GitHub Copilot订阅,以及一个正确版本的PyCharm IDE。很多人第一步就卡在了这里。 首先,关于订阅。GitHub Copilot提供个人和商业两种订阅计划。对于个人开发者,尤其是学生和开源项目维护者,GitHub有相应的优惠甚至免费政策。你需要一个GitHub账号,并前往 GitHub Copilot 官方页面 进行注册和订

Windows 11 配置 CUDA 版 llama.cpp 并实现系统全局调用(GGUF 模型本地快速聊天)

Windows 11 配置 CUDA 版 llama.cpp 并实现系统全局调用(GGUF 模型本地快速聊天)

Windows 11 配置 CUDA 版 llama.cpp 并实现系统全局调用(GGUF 模型本地快速聊天) 前言 在本地快速部署大模型进行离线聊天,llama.cpp 是轻量化、高性能的首选工具,尤其是 CUDA 版本能充分利用 NVIDIA 显卡的算力,大幅提升模型推理速度。本文将详细记录在 Windows 11 系统中,从环境准备、CUDA 版 llama.cpp 配置,到实现系统全局调用、快速运行 GGUF 格式模型的完整步骤,全程基于实际操作验证,适配 RTX 3090 等 NVIDIA 显卡,新手也能轻松上手。 https://github.com/ggml-org/llama.cpp

【人工智能】异构算力重构AIGC | 蓝耘智算平台部署通义万相2.1文生图技术全解析

【人工智能】异构算力重构AIGC | 蓝耘智算平台部署通义万相2.1文生图技术全解析

📝个人主页🌹:Eternity._ 🌹🌹期待您的关注 🌹🌹 ❀ 蓝耘智算平台 * 通义万相2.1文生图 * 优势 * 模型效果对比 * 蓝耘智算平台 * 登陆注册 * 蓝耘:通义万相2.1文生图的配置部署 * 使用实例 * 总结 前言:在人工智能(AI)技术日新月异的今天,AIGC(生成式人工智能内容生成)作为新兴领域,正以前所未有的速度改变着内容创作的格局。随着数据规模、算法复杂度的不断攀升,算力需求也呈现出爆发式增长的趋势。在这一背景下,异构算力作为提升算力效率与灵活性的关键手段,正逐渐成为推动AIGC技术发展的核心驱动力。 在AIGC技术指数级进化的浪潮下,文生图模型的参数量已突破千亿级门槛,据Stability AI最新报告显示,单次1080P图像生成的算力消耗较两年前激增320%,传统同构计算架构面临显存墙、能耗比失衡、硬件利用率不足等多重挑战。蓝耘智算平台通过革命性的异构算力重构方案,成功部署通义万相2.1这一业界领先的文生图大模型,开创了"算法-算力-场景"三位一体的AIGC工业化新范式。 蓝耘智算平台

Qwen3-TTS部署教程:Qwen3-TTS与Whisper ASR构建双向语音对话系统

Qwen3-TTS部署教程:Qwen3-TTS与Whisper ASR构建双向语音对话系统 想象一下,你对着电脑说一句话,电脑不仅能听懂,还能用自然、有感情的声音回答你,整个过程流畅得就像在和朋友聊天。这听起来像是科幻电影里的场景,但现在,通过Qwen3-TTS和Whisper ASR这两个强大的开源模型,我们完全可以自己动手搭建这样一个系统。 今天,我就带你一步步实现这个目标。无论你是想做一个智能语音助手,还是想为你的应用增加语音交互功能,这篇教程都会给你一个清晰的路线图。我们会从最基础的部署开始,到最终实现一个能听会说的双向对话系统。 1. 准备工作与环境搭建 在开始之前,我们先来了解一下今天要用到的两个核心工具。 Qwen3-TTS 是一个强大的文本转语音模型。它最吸引人的地方在于,它支持10种主要语言,包括中文、英文、日文等,还能生成多种方言和语音风格。更厉害的是,它能理解你文本里的情感和意图,自动调整说话的语调、语速,让生成的声音听起来特别自然。 Whisper ASR 则是OpenAI开源的语音识别模型,它的识别准确率非常高,支持多种语言,而且对带口音、有噪声