FPGA结构与片上资源

news/2024/7/5 4:13:08

文章目录

  • 0.总览
  • 1.可配置逻辑块CLB
    • 1.1 6输入查找表(LUT6)
    • 1.2 选择器(MUX)
    • 1.3 进位链(Carry Chain)
    • 1.4 触发器(Flip-Flop)
  • 2.可编程I/O单元
    • 2.1 I/O物理级
    • 2.2 I/O逻辑级
  • 3.布线资源
  • 4.其他资源介绍
  • 5.Vivado中资源查看步骤
    • 资源总览
    • 结构名称查看
      • CLB
      • SLICE
      • I/O
      • GTX
      • BRAM
      • DSP48
    • 布线资源查看
    • 真值表查看
    • 时钟区域查看
  • 参考资料

0.总览

可编程逻辑单元CLB(Configurable Logic Block)、可编程I/O单元和布线资源构成了FPGA内部三大主要资源。

本文以Xilinx 7系列FPGA为例进行FPGA结构和片上资源讲解,其采用28nm工艺节点。

1.可配置逻辑块CLB

可配置的逻辑块(CLB)是主要的逻辑资源,用于实现时序和组合逻辑电路

可配置逻辑单元(CLB)在 FPGA 中最为丰富,由两个 SLICE 组成。由于 SLICE 有 SLICEL(L:Logic)和 SLICEM(M:Memory)之分,因此 CLB 可分为 CLBLL 和 CLBLM 两类。

一个CLB包含两个SLICE:2个SLICEL或者1个SLICEL+一个SLICEM。

SLICEL和SLICEM内部都包含4个6输入查找表(Look-Up-Table,LUT6)、3个数据选择器(MUX)、1个进位链(Carry Chain)和8个触发器(Flip-Flop)。
在这里插入图片描述

1.1 6输入查找表(LUT6)

查找表Look-up Table,本质上就是1个6输入,64深度的ROM (SLICEM中的则是RAM,因为可读)。通过将所有结果保存在其内部,使用时通过由输入构建的地址线对其进行查找,从而实现6输入的函数逻辑。需要注意的是SLICEM中的查找表,除了读功能外还具备写功能,这就使得其内部的LUT由一个ROM变成了一个RAM,这也是其实现移位寄存器功能和分布式DRAM功能的原因。

虽然SLICEL和SLICEM的结构组成一样,但两者更细化的结构上略有不同,区别在于LUT6上(如下图所示),从而导致LUT6的功能有所不同(如下表格所示)。
在这里插入图片描述

LUT功能SLICELSLICEM
逻辑函数发生器
ROM
分布式RAM
移位寄存器

逻辑函数发生器:用作逻辑函数发生器时,查找表就扮演着真值表的角色,真值表的内容可在Vivado中查看。

ROM:不论是 SLICEL 还是 SLICEM,他们的 LUT6 都可以作为 ROM 使用,配置为 64x1(占用 1 个 LUT6,64 代表深度,1 代表宽度)、128x1(占用 2 个 LUT6)和 256(占用 4 个 LUT6)的 ROM。

分布式RAM: SLICEM中的查找表可配置为RAM ( Random Access Memory),称为分布式RAM。其中 RAM 的写操作为同步,而读操作是异步的,即与时钟信号无关。如果要实现同步读操作,则要额外占用一个触发器,从而增加了意识时钟的延迟(Latency),但提升了系统的性能。这就解释了为什么我们实现RAM同步读写的时候,读出输出要延迟一个 clk。对于布式存储单元(RAM和ROM),Vivado 提供了相应的IP: Distributed Memory Generator

移位寄存器:SLICEM 中的 LUT 还可以配置为移位寄存器,每个 LUT6 可实现深度为 32 的移位寄存器,(注意:只能左移)。这样,每个LUT可以将串行数据延迟1到32个时钟周期。移位输入D(LUT DI1脚)和移位输出Q31 (LUT MC31脚)可以进行级联,以形成更大的移位寄存器。一个SLICEM的4个LUT6级且同一个 SLICEM 中的 LUT6(4个)可级联实现 128 深度的移位寄存器。移位寄存器的典型应用是延迟补偿和同步FIFO。需要注意的是,这里的移位寄存器均没有复位端,这是因为LUT6本身不支持复位。一旦代码描述中使用了复位,无论是同步复位还是异步复位,都会导致移位寄存器采用触发器级联的方式实现。

1.2 选择器(MUX)

SLICE 中的三个 MUX(Multiplexer)两个F7MUX:F7AMUX,F7BMUX +一个 F8MUX。可以和 LUT6 联合共同实现更大的MUX。

一个 LUT6 可实现 4 选 1 的 MUX。

SLICE 中的 F7MUX(F7AMUX 和 F7BMUX)的输入数据来自于相邻的两个 LUT6 的 O6 端口。每个SLICE中都有2个MUXF7,其输入只能为LUT6的输出,而输出只能接到MUXF8;每个SLICE中都有1个MUXF8,其输入只能为MUXF7的输出。

一个 F7MUX 和相邻的两个 LUT6 可实现一个 8 选 1 的 MUX。因此,一个 SLICE 可实现 2 个 8 选 1 的 MUX。

4 个 LUT6、F7AMUX、F7BMUX 和 F8MUX 可实现一个 16 选 1 的 MUX。因此,一个 SLICE 可实现一个 16 选 1 的 MUX。

1.3 进位链(Carry Chain)

进位链用于实现加法和减法运行。它内部实际还包含 4 个 MUX 和 4 个 2 输入异或门(XOR)。每个CLB Slice都有一个专用的加法器CARRY4, 可以实现两个4bit数的加减法运算。CARRY4是一种超前进位的加法器(或者说减法器),是FPGA内部用来实现加减法运算的基本运算单元,但同时也可以实现一些其他的函数功能。

1.4 触发器(Flip-Flop)

每个 SLICE 中有 8 个触发器

Slice中的存储单元便是我们前面提到的寄存器FF,FF是实现时序逻辑最基本的单元。需要注意的是,这 8 个触发器可分为两大类:4 个只能配置为边沿敏感的 D 触发器(Flip-Flop)和 4 个即可配置为边沿敏感的 D 触发器又可配置为电平敏感的锁存器(Flop & Latch)。但后四个一旦被配置为锁存器后,则前4个触发器也不能使用了,会造成一定的资源浪费。

当后者被用作锁存器的时候,前者将无法使用。

当这8个触发器都用作D触发器时,他们的控制端口包括使能端CE、置位/复位端口S/R和时钟端口CLK是对应共享的,也就是就是说共用的。{CE,S/R,CLK}称为触发器的控制集。显然,在具体的设计中,控制集种类越少越好,这样可以提高触发器的利用率。那么怎样减少控制集种类呢?我的理解是:

  • 减少时钟种类,即频率越少越好;
  • 统一规范的设计逻辑,如复位。

S/R端口可配置为同步/异步置位或同步/异步复位,且高有效,因此可形成4种D触发器,如下表所示。

原语(Primitive)功能描述原语(Primitive)功能描述
FDCE同步使能,异步复位FDRE同步使能,同步复位
FDPE同步使能,异步置位FDSE同步使能,同步置位

在我们的常规设计中,FDCE和FDPE占了绝大多数。

说到高有效,让我想起了一个大家习以为常,但很少深究的问题:为什么一开始接触FPGA的时候,都告诉我们低电平复位?后来查了一些资料,有说从功耗、噪声可靠性方面考虑等等,但是偶然看到Xilinx和Altera两家芯片的触发器不一样!如下图所示,Xilinx的触发器是高电平复位,而Altera的触发器时低电平复位。所以这也是需要考虑的一点吗?
在这里插入图片描述

2.可编程I/O单元

7系列FPGA的输人输出(I/O)进行了优化,用来在物理级和逻辑级上满足不同的要求,这些要求包括:高速存储器、网络、视频平板和传感器接口,高速的ADC/DAC连接,以及传统接口。7系列FPGA使用了Xilinx统一的I/O结构。
物理I/O能力和结构提供了一个I/O标准范围、端接和节省能量模式。每个I/O组的I/O数量、它们相对应的时钟、新的I/O资源的放置,以及I/O在FPGA晶圆上的排列都是同等重要的。此外,详细的I/O绑定逻辑功能,比如输人/输出延迟和串行化/解串行化功能,对于所支持的I/O应用是非常关键的。所添加的最新功能结构,比如移相器,PLL和I/O FIFO完整接口特性,支持最高性能的DDR3.及其他存储器接口。下图给出了基本的I/O结构和与新I/O相关的模块。
在这里插入图片描述

2.1 I/O物理级

在物理级上,I/O要求支持一个范围的驱动电压(或电平)和驱动强度,以及接收功能接口的不同I/O标准。I/O也支持不同的输人/输出端接特性,它可以动态地确认和移除。
7系列的结构有两种类型的I/O:

(1)高性能(High Performance)I/O,在组中称为HP I/O组;
(2)宽范围(High Range,HR)I/O(支持宽范围的I/O标准),在组中称为HR I/O组。

所有的I/O类型都是基于Virtex-6的结构,但是扩展了功能和所支持的电压范围。这两种I/O类型被绑定到一个有50个I/O的整个I/O组。Artix-7 FPGA只有3.3V的HR I/O组,Virtex-7和Kintex FPGA既有HP I/O组,也有HR I/O组。下面详细介绍HP I/O和HP I/O组。下图给出了Kintex-7XC7K160T的I/O组和CMT的布局结构图。
在这里插入图片描述
用于存储器接口的I/O电源主要有3个元件:
(1)DCI:用于匹配PCB布线的阻抗。
(2)参考输人接收器:用于调整I/O电压到核电压。
(3)IDELAY:用于同步信号到时钟。

2.2 I/O逻辑级

所有的I/O都能被配置成组合或者寄存方式。所有的输入/输出支持双数据率(double data rate, DDR)模式。任何一个输人和一些输出可以通过编程IDEALY和ODELAY进行延迟。
每个I/O 块包含一个可编程的绝对延迟原语IDELAY2。IDELAY可以连接到ILOGICE2/ISERDESE2或者ILOGICE3/ISERDESE2模块。
每个HP I/O组包含一个可编程绝对延迟原语称为ODELAY2(HR I/O组不可用)。

很多应用连接了高速、位串行的I/O,以及FPGA内低速并行操作的逻辑。这就要求在I/O结构内有一个串行化器和解串行化器。每个I/O引脚包含8位IOSERDES,能执行串行-并行或并行-串行转换。
7系列内用于精确实现ISERDES的原语是ISERDESE2,精确实现OSERDES的原语是OSERDESE2。

3.布线资源

互联是FPGA内用于连接功能元件,比如IOB、CLB、DSP和BRAM,输人和输出信号通路的可编程网络。互联也称为布线,被分段用于最优的连接。
7系列FPGA CLB在FPGA内以规则的阵列排列。如图所示,每个到开关矩阵的连接用来访问通用的布线资源。
在这里插入图片描述

FPGA内部定义了不同类型的布线,这些布线通过长度来定义。较长的路径元素对于较长的距离来说速度更快。互联类型有快速连接、单连接、双连接和四连接。

  1. 快速连接:快速连接将模块的输出布线回模块的输入。与较大的CLB一起,快速连接为较简单的功能提供了高性能布线。
  2. 单连接:单连接用于在垂直和水平方向上,布线到相邻的单元。
  3. 双连接:双连接在所有4个方向上,水平和垂直连接到所有其他的单元和对角线相邻的单元。
  4. 四连接:四连接在水平和垂直方向,每隔4个CLB连接一个或者对角线连接到两行和两列的距离的单元。与前几代的单通道长线相比,四连接线具有更好的灵活性。
    在这里插入图片描述

4.其他资源介绍

《Xilinx FPGA设计权威指南》2.2 FPGA原理及结构
在这里插入图片描述
《FPGA深度解析》第2章 FPGA结构与片上资源
在这里插入图片描述

5.Vivado中资源查看步骤

资源总览

上方选择Window-Device,打开Device布局图可以看到FPGA的内部结构资源。
在这里插入图片描述

结构名称查看

放大后点击具体结构可在左侧Site Properties中看到具体的结构名称等信息。

CLB

在这里插入图片描述

SLICE

在这里插入图片描述

I/O

在这里插入图片描述

GTX

在这里插入图片描述

BRAM

在这里插入图片描述

DSP48

在这里插入图片描述
等等。

布线资源查看

布线BEL则不实现逻辑功能,而只用来实现布线功能。要看到布线EBL,首先需要把模式改成Routing Resource这个选项勾上:
在这里插入图片描述

放大界面看可以看到布线BEL(Basic Element of Logic):可以看到在原来的SLICE块基础上多了互联线和一些布线选择块
在这里插入图片描述

接下来随便选择一个布线BEL, 把鼠标悬停在它上面就会出现一些基本信息,如果点击选中它则会在左下角出现更详细的信息,比如它的输入/输出管脚分别连接到哪里,它属于哪个时钟区域,它是什么类型的BEL等等。
在这里插入图片描述

Switch Box可以理解成一个“中转站“ ,附近的各种资源的输出都到这里完成转接,所以这个布线BEL的输出可能是来自相邻的FF,也可能是来自相邻的LUT,具体都根据实际的RTL代码来决定。
布线BEL用来实现各种输入的选取,从而实现底层资源间的灵活互联!正是有了这些布线资源和布线BEL, FPGA才可以做到这么灵活。
在这里插入图片描述

真值表查看

综合后LUT真值表的查看。
在这里插入图片描述

时钟区域查看

时钟区域是Xilinx FPGA对时钟的一种划分结构,它把整个芯片根据不同的IO BANK内的所有资源和连线都划定到不同的各个时钟区域下,这样对在同一时钟区域下的时钟信号就方便管理,同时也方便各种时钟资源走线和互联。
在这里插入图片描述

综合后打开Clock Regions可以看到时钟区域和Bank划分。IO BANK和时钟区域不是一一对应的。
在这里插入图片描述

参考资料

CLB部分参考:

《Vivado从此开始》第1章FPGA技术分析

从底层结构开始学习FPGA(0)----FPGA的硬件架构层次(BEL Site Tile FSR SLR Device)

从底层结构开始学习FPGA(1)----可配置逻辑块CLB(Configurable Logic Block)

FPGA基础学习(7) – 内部结构之CLB

LUT部分补充:

从底层结构开始学习FPGA(2)----LUT查找表

其他部分参考:

《FPGA深度解析》第2章 FPGA结构与片上资源

《Xilinx FPGA设计权威指南》2.2 FPGA原理及结构

官方文档:

7 Series FPGAs Configurable Logic Block User Guide (UG474)


http://lihuaxi.xjx100.cn/news/2131110.html

相关文章

钓鱼_精准定位GPS

目录 一、Seeker (一) 简介 二、实验环境 三、实验操作 (一) 下载安装 (二) 运行和使用 (三) 隧道代理 1. 登录平台 2. 下载代理客户端 3. 使用代理客户端

深度学习故障诊断实战 | 数据预处理之基于滑动窗的数据样本增强

前言 本期给大家分享介绍如何基于滑动窗方法进行数据样本增强 背景 深度学习模型训练需要大量的样本。在故障诊断领域,每个类别大都会达到300个样本。但是在实际公开数据集中,以CWRU数据集为例,每个类别只有24组数据,这明显是不…

淘宝订单中的涉及红包检测、优惠券检测方案|工具|API

首先,检测订单红包的核心价值是什么? “红包的本质就是薅平台羊毛:不用怀疑,平台对于这种损害平台利益的行为肯定是最高等级的稽查”。那么,在日常运营中,需要尽可能过滤这类订单。 其次,如何使…

鸿蒙开发之AES加解密

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。 简介 这个标准用来替代原先的DES(Data Encryption Standard)&#x…

代码随想录阅读笔记-二叉树【翻转二叉树】

题目 翻转一棵二叉树。 思路 如果要从整个树来看,翻转还真的挺复杂,整个树以中间分割线进行翻转,如图: 可以发现想要翻转它,其实就把每一个节点的左右孩子交换一下就可以了。 关键在于遍历顺序,前中后序应…

【Python】python+requests+excel+unittest+ddt实现接口自动化实例

目录 测试需求实现思路框架代码实例1. 环境准备和配置文件2. Excel接口数据及测试结果3. API封装4. 读取Excel数据5. 测试用例6. 日志和配置文件处理7. HTMLTestRunner生成可视化的html报告8. 报告通过飞书/邮件发送报告通过飞书发送报告通过邮件发送9. 入口函数10. 飞书Webhoo…

​如何用“Dreamina”进行文生图​

文生图,顾名思义,就是用文字描述来生成图片。近年来,随着人工智能技术的进步,文生图技术也逐渐成熟,并逐渐应用于各种领域,例如设计、创作、娱乐等等。 本文将介绍如何使用“Dreamina”进行文生图。 步骤…

dnf手游:如何利用副本和任务快速积累泰拉财富?

DNF手游中,搬砖赚钱的方式多种多样,其中利用副本和任务是一种快速赚取泰拉的有效途径。本攻略将介绍如何通过参与副本和任务来获取泰拉,帮助玩家在游戏中获得更多的经济收益。 一、认识游戏中的泰拉 在DNF手游中,泰拉是一种主要的…