【FPGA】FPGA芯片结构

news2024/12/24 9:07:08

目录

  • 1 可编程输出/输出单元(IOB)
  • 2 可配置逻辑块(CLB)
  • 3 数字时钟管理模块(DCM)
  • 4 嵌入式块存储器(BRAM)
  • 5 布线资源
  • 6 内嵌功能模块(专用IP单元)
    • 6.1 PLL(锁相环)原理
    • 6.2 DLL(延迟锁相环)原理
    • 6.3 DLL和PLL相似点与区别
  • 7 内嵌专用硬核
  • 参考资料

目前主流的FPGA仍是基于查找表技术的。FPGA芯片主要包括7部分,分别为可编程输入/输出单元、基本可编程逻辑单元、完整的时钟管理、嵌入式RAM、丰富的布线资源、底层内嵌功能单元和内嵌专用硬核。

1 可编程输出/输出单元(IOB)

  • 什么是可编程输入输出单元?

可编程输出/输出单元简称I/O单元,是芯片与外界电路的接口部分,完成不同电气特性下对输入/输出信号的驱动与匹配要求。为了便于管理和适应多种电器标准,FPGA的IOB被划分成了若干个组(Bank),每组都能够独立的支持不同的I/O标准。通过软件的灵活配值,可适配不同的电气标准与I/O物理特性,可以调整驱动电流大小,可以改变上、下拉电阻大小。每个组的接口标准由其接口电压Vcco决定,一个组只有一种Vcco(Vcco是FPGA芯片中的一个电源引脚,它代表的是输出的高电压电源),只有相同电气标准的接口才能连接在一起,Vcco电压相同是接口标准的基本条件。

  • 输入输出IO标准有哪些?

I/O std详见链接:【FPGA】I/O接口标准

2 可配置逻辑块(CLB)

  • 什么是可配置逻辑块?

可配置逻辑块(Configurable Logic Block,CLB)是FPGA内的基本逻辑单元,每个CLB都包含一个可配置开关矩阵。在Xilinx公司的FPGA器件中,Slice是Xilinx公司定义的基本逻辑单元,CLB由多个相同的Slice和附加逻辑构成。每个CLB模块不仅用于实现组合逻辑、时序逻辑,还可以配置为分布式RAM和分布式ROM。例如,s7系列的每个CLB包含两个Slice,每个Slice由4个(A、B、C、D)6输入LUT和8个寄存器REG组成,功能上包括查找表、寄存器、进位链和多个多数选择器。

3 数字时钟管理模块(DCM)

  • 为什么需要管理时钟?
    时钟源一般来自外部,通过专用的时钟输入引脚进入FPGA,通过FPGA内部的时钟树传递到整个器件并连接到需要的寄存器。在FPGA中,采用时钟树结构保证所有触发器收到的时钟信号尽可能相同。如果用一个长的数据路径一个接一个地驱动触发器,那么最接近时钟引脚的触发器接收的信号看上去将比位于时钟路径最末端所接收到的时钟沿早到,这种时钟沿的延迟被称为时钟抖动,可能带来很多严重问题。在FPGA中,时钟树都采用专门的走线,于通用可编程互连相分离,从而降低时钟抖动。
  • 时钟资源有哪些?
    时钟管理模块用于产生高质量的时钟,时钟资源分为全局时钟资源、区域时钟资源和I/O时钟资源。全局时钟网络是一种全局布线资源,他可以保证时钟信号到达哥跟目标逻辑的延时基本相同。区域时钟网络是一组独立于全局时钟网络的时钟网络。I/O时钟资源可用于局部I/O串行/解串器的电路设计,对于源同步接口设计尤其重要。Xilinx提供数字时钟管理和相位环路锁定。相位环路锁定能够提供精确的时钟综合,能够降低抖动,并且能够实现过滤功能。

4 嵌入式块存储器(BRAM)

嵌入式块存储器(Block Memory,BRAM)是FPGA内部除了逻辑资源使用频率最高的功能块。大多数FPGA都具有内嵌的BRAM,可配置为单端口RAM、双端口RAM、内容地址存储器(Content Addressable Memory,CAM)以及FIFO等常用存储结构。 
可以根据需要改变其位宽和深度。单片BRAM的容量为18 Kbit,即位宽为18 bit、深度为1024 bit,,但要遵循两个原则:第一,修改后的容量不能大于18 Kbit;第二,位宽最大不能超过36位。当多片BRAM级联起来形成更大的RAM时,只受限于芯片内的BRAM数量,而不再受上面两条原则约束。

5 布线资源

布线资源联通FPGA内部的所有单元,而连线的长度和工艺决定着信号在连线上的驱动能力和传输速度。FPGA芯片内由丰富的布线资源,根据工艺、长度、宽度和分布位置的不同而划分为4类不同的类别。

  • 全局布线资源,用于芯片内部全局时钟和全局复位/置位的布线;
  • 长线资源,用以完成芯片间的高速信号和第二全局时钟信号的布线;
  • 短线资源,用于完成基本逻辑单元之间的逻辑互连和布线;
  • 分布式的布线资源,用于专有时钟、复位等控制信号线。
    在FPGA设计流程中,设计者不需要直接选择布线资源,布局布线器可自动地根据输入逻辑网表的拓扑结构和约束条件,选择布线资源来连通各个模块单元。基本上,布线资源的使用结果和前端设计的架构有密切、直接的关系

6 内嵌功能模块(专用IP单元)

  • 内嵌功能模块通常有哪些?
    内嵌啊功能模块主要指延迟锁相环(Delay Locked Loop,DLL)、锁相环(Phase Locked Loop,PLL)、DSP和CPU等处理器软核,以及FPGA内部处理能力强大的硬核,整合后可以等效于ASIC电路。丰富的内嵌功能单元使得单片FPGA成为系统级的设计工具,使其具备了软硬件联合设计的能力,逐步向SOC平台过渡。

6.1 PLL(锁相环)原理

  • 原理
    PLL通过VCO(Voltage Controlled Oscillator)来调整输出信号相位,使其与参考信号相位保持同步。通过鉴频鉴相器将输入信号与参考信号进行比较,并产生与其相位差成正比的误差信号。误差信号随着相位的增加而增加,这回反方向驱动VCO相位,从而减少误差信号。结果,输出的相位被锁定到另一个输入相位。当PLL输出密切跟踪输入并且误差信号较小且相对稳定时,PLL被称为锁相。根据应用,系统中使用PLL系统的输出,要么时VCO的输出,要么时VCO的控制信号。
    在这里插入图片描述
图1 PLL基本结构图

相位/频率检测器 (PFD)(通常简称为相位检测器 PD):将输入信号与参考信号进行比较,并产生与其相位差成正比的误差信号(请记住,相位和频率密切相关,因为频率是相位的时间导数);相位检测器的输出通常进入电荷泵,将小电流差转换为更大的电压
低通滤波器 (LPF):它对误差信号的频谱进行整形
压控振荡器:输出相位/频率由误差信号控制
分频器:使 PLL 以参考频率的倍数 N 生成频率;N 可以是整数,许多 PLL 设计支持小数 N 非整数除法

当 PLL 输出密切跟踪输入并且误差信号较小且相对稳定时,PLL 被称为“锁相”或简称为“锁相”。根据应用,系统中使用的 PLL 系统的输出要么是 VCO 的输出,要么是 VCO 的控制信号。
PLL 可以使用模拟、数字或混合信号电路构建。早期的 PLL 是全模拟的,带有模拟鉴相器、低通滤波器、VCO 和可选的分频器;除法器很快升级为数字除法器,以允许整数和小数整数除法。数字 PLL 现在用升降计数器代替相位检测器,该计数器在数字域中执行类似功能,并且还可以使用数字滤波器,误差信号驱动直接数字合成器作为 VCO。

  • PLL设计
    与大多数电子电路一样,有一些基本参数适用于几乎所有应用,有些在特定情况下更为关键。通过调整相位检测器、低通滤波器、VCO 和分频器的一些设计细节,PLL 设计可以在这些参数之间权衡性能,以最好地满足应用优先级。顶级因素包括:

    • 工作频率:PLL 及其 VCO 的标称、自由运行频率
    • 工作范围:PLL 和 VCO 将工作的频率跨度。这包括 PLL 可以获取信号并实现锁定的拉入范围,以及一旦实现它可以保持锁定的更宽范围
    • 转换或捕获时间:PLL 捕获并锁定在操作外部限制的信号所花费的时间,这在很大程度上由低通滤波器决定;带宽较窄的滤波器具有较长的捕获时间,但会限制噪声和抖动,而带宽较宽的滤波器具有更快的响应,但允许更多噪声通过 PLL 系统
    • 噪声和抖动:由 PLL 的元件添加并因此出现在其输出端的任何噪声或抖动,即使是完美的信号也是如此。整体噪声品质因数 (FOM) 以 dBc/Hz 表示,有几种不同类型的 FOM
    • 死区当相位/频率检测器的两个输入非常接近时,检测器可能看不到这一点,因此不会产生错误输出;这有点类似于电子滞后或机械静摩擦。
  • PLL优点
    高稳定性、高精度、易于控制,适用于频率合成、频率变换、时钟恢复和同步通信等领域。

  • PL缺点
    输出的相位误差较大,且需要精确的参考时钟源。

6.2 DLL(延迟锁相环)原理

dll是延迟锁相环(Delay—locked Loop)的简称,该技术是在PLL技术上改进得到的,被广泛应用于时序领域中。它继承了PLL电路的锁相技术,但去掉了PLL电路内的振荡器部分,取而代之的是一根延迟量可控制的延迟线。

  • 原理
    相位检测器检测输入时钟信号和延时后的时钟信号之间的相位差,将其转换为数字信号,并送入环路滤波器,以控制延时线的长度,从而实现输出信号与输入信号相位同步。
    在这里插入图片描述
图2 DLL基本结构图
  • 优点
    相位误差较小、速度较快、成本较低,适用于高速通信和数字存储领域。
  • 缺点:
    DLL所实现的是延时,而不是频率合成,对频率的改变较为敏感。

6.3 DLL和PLL相似点与区别

PLL和DLL都是基于反馈控制的锁相环结构,可以有效地控制输出信号的相位,将输入信号和参考信号的相位差控制在一定范围之内,并输出一个与参考信号相位同步的输出信号。

他们的主要区别在于其反馈电路的作用方式。PLL利用压控振荡器调整频率来改变相位,DLL利用压控延迟线调整延时来改变相位。

  1. 作用方式
    PLL通过VCO(Voltage Controlled Oscillator)来调整输出信号相位,使其与参考信号相位保持同步。而DLL中,则是通过一个延时线或模拟电路来实现反馈环路来控制输出信号的相位。
  2. 应用领域
    • PLL在数字系统中应用广泛,能够实现高稳定性和高精度的信号输出。
    • DLL适用于高速通信和数字存储领域,其输出相位差小,速度相对较快。

7 内嵌专用硬核

FPGA处理能力强大的硬核,等效于ASIC电路。例如为了提高FPGA的乘法速度,主流的FPGA芯片内都集成了专用的乘法器;为了适用通信总线与接口标准,很多高端FPGA内部都集成了串并收发器(SERDES),以达到10 Gbps+的收发速度。

参考资料

《Xilinx FPGA高级设计及应用》汤琦、蒋军敏著
详解锁相环 (PLL)电路、信号、模块组成
锁相环PLL/DLL
DLL工作原理

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2157493.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot简易商品管理系统

> 这是一个基于SpringBootThymeleaf实现的简易商品管理系统。 > 包含基本的登录/注册与商品管理功能。 > 界面简洁美观,代码结构清晰,适用于JAVA初学者在此基础上进行二次开发。 一、项目演示 二、技术框架 框架描述Spring Boot容器管理 S…

CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略

CV之OCR:GOT-OCR2.0的简介、安装和使用方法、案例应用之详细攻略 目录 GOT-OCR2.0的简介 1、更新 GOT-OCR2.0的安装和使用方法 1、安装 安装环境cuda11.8torch2.0.1 安装包 安装Flash-Attention GOT权重:1.43G 2、演示 3、训练 4、评估 GOT-…

Tomcat靶场攻略

一.CVE-2017-12615 1.首页抓包,修改为 PUT 方式提交 ,将jsp木马写到数据包中 2.哥斯拉默认秘钥连接 二.后台弱⼝令部署war包 1.制作WAR包,上传 将JSP⽊⻢压缩为ZIP格式,然后修改后缀为war 2.文件上传成功后,默认会在网站根目录下生成和wa…

使用centos7搭建wiki论坛,使用nginx网站来搭建wiki负载均衡,反向代理。

1.安装一个wget,进入目录opt下 #安装wget yum -y install wget#进入目录/opt/下面 cd /opt/2.获取 mysql8.0 rpm包,安装mysql8.0,安装mysql-server,yum会自动下载所需安装及依赖包. #获取 mysql8.0 rpm包 wget https://dev.mysql.com/get/mysql80-comm…

2024人工智能结课作业-DFS/BFS/Astar解决数码问题

1 深度优先遍历搜索(DFS) 1.1算法介绍 深度优先搜索算法(Depth-First-Search,DFS)是一种用于遍历或搜索树或图的算法。沿着树的深度遍历树的节点,尽可能深的搜索树的分支。当节点v的所在边都己被探寻过,搜索将回溯到发…

基于SSM的“在线CRM管理系统”的设计与实现(源码+数据库+文档+开题报告)

基于SSM的“在线CRM管理系统”的设计与实现(源码数据库文档开题报告) 开发语言:Java 数据库:MySQL 技术:SSM 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 总体功能模块图 登录页面 后台管理页面 产品信息页面 客…

【Android】BottomSheet基本用法总结(BottomSheetDialog,BottomSheetDialogFragment)

BottomSheet BottomSheet 是一种位于屏幕底部的面板,用于显示附加内容或选项。提供了从屏幕底部向上滑动显示内容的交互方式。这种设计模式在 Material Design 中被广泛推荐,因为它可以提供一种优雅且不干扰主屏幕内容的方式来展示额外信息或操作。 具体…

大型综合医院供配电系统设计

摘要:众所周知,医院供配电系统关系着整个医院的正常运行,一旦出现故障将会对病患的安全造成威胁。基于此,本文就大型综合医院供配电系统设计进行深入探讨,以期为其他类似医院建筑供配电系统设计提供借鉴。 关键词&…

代理模式详解:控制对象访问的利器

代理模式(Proxy Pattern)是一种结构型设计模式,它为其他对象提供一种代理以控制对这个对象的访问。代理模式通常用于延迟对象的创建、控制对对象的访问或在访问对象时添加一些额外的操作。 代理模式通过引入一个代理对象来控制对目标对象的访…

超详细超实用!!!AI编程之cursor配置中文(一)

云风网 云风笔记 云风知识库 一、配置中文扩展 打开扩展,搜索chinese,安装chinese(simplified) 简体中文语言包,重启即可 二、配置中文方法二 使用快捷键组合【CtrlShiftp】,在搜索框中输入configure display language,选择中文也可配置中文 三、配置…

九、成功版--windows上安装artifactory配置postgressql

centos上搞不定,windows上搞定了 现阶段是想用java写程序控制制品库,等以后研究多了需要写一些脚本的时候,在研究linux上安装artifactory(公司就用的linux安装的配置mysql,有空对着配一下linux的) 源码地…

【实证数据】国家信息消费试点城市(2000年-2023年)

数据说明:2013年,国务院发布《促进信息消费若干意见》,旨在激发需求、拓宽市场及丰富服务内容。随后,工信部启动信息消费试点城市建设,分两批确立104个试点区域,旨在通过试点引领,促进信息消费增…

STM32—I2C通信外设

1.I2C外设简介 STM32内部集成了硬件I2C收发电路,可以由硬件自动执行时钟生成、起始终止条件生成、应答位收发、数据收发等功能,减轻CPU的负担支持多主机模型(可变多主机)支持7位/10位地址模式(11110......)支持不同的通…

2024好评的开放式耳机排行榜10强?五款开放式蓝牙耳机推荐!

​开放式耳机目前非常流行,它们的设计不侵入耳道,长时间佩戴也不会感到不适,同时还能维护耳部卫生,这使得它们特别受到运动爱好者和耳机发烧友的喜爱。然而,市场上的开放式耳机品牌众多,质量参差不齐&#…

对HttpServletRequest中的Header进行增删

HttpServletRequest 没有提供修改/删除的 Api HttpServletRequest中定义的对 Header 的操作全是只读,没有修改。代码实现如下: public interface HttpServletRequest extends ServletRequest {...public long getDateHeader(String name);public String…

Isaac Sim 4.2.0 Windows版本打开报 fbgemm.dll 加载错误

方案一:下载缺少的dll复制到目录里即可 可以看到后台命令窗口出现了错误,发生在import pytorch的时候,根据提示,是因为fbgemm.dll缺少依赖,导致加载异常,一般情况是缺少 libomp140.x86_64.dll 这个文件&am…

前端工程化4:从0到1构建完整的前端监控平台

前言 一套完整的前端监控系统的主要部分: 数据上报方式数据上送时机性能数据采集错误数据采集用户行为采集定制化指标监控sdk 监控的目的: 一、数据上报方式 本文的方案是,优先navigator.sendBeacon,降级使用1x1像素gif图片…

C语言 | Leetcode C语言题解之第419题棋盘上的战舰

题目&#xff1a; 题解&#xff1a; int countBattleships(char** board, int boardSize, int* boardColSize){int row boardSize;int col boardColSize[0];int ans 0;for (int i 0; i < row; i) {for (int j 0; j < col; j) {if (board[i][j] X) {if (i > 0 &…

手机在网状态查询接口如何用PHP进行调用?

一、什么是手机在网状态查询接口&#xff1f; 手机在网状态查询接口&#xff0c;即输入手机号码查询手机号在网状态&#xff0c;返回有正常使用、停机、在网但不可用、不在网&#xff08;销号/未启用/异常&#xff09;、预销户等多种状态。 二、手机在网状态查询适用哪些场景…

C++ | Leetcode C++题解之第429题N叉树的层序遍历

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<vector<int>> levelOrder(Node* root) {if (!root) {return {};}vector<vector<int>> ans;queue<Node*> q;q.push(root);while (!q.empty()) {int cnt q.size();vector<…