前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Xilinx 7 系列 FPGA 底层资源-- 内部结构之CLB(LUT查找表、Flip-Flop、进位链、MUX)

Xilinx 7 系列 FPGA 底层资源-- 内部结构之CLB(LUT查找表、Flip-Flop、进位链、MUX)

作者头像
FPGA探索者
修改2021-05-03 15:23:51
4.5K0
修改2021-05-03 15:23:51
举报
文章被收录于专栏:FPGA探索者FPGA探索者

文章转载自【肉娃娃】,阅读原文

  • 1. 总览
  • 2. 可配置逻辑单元
    • 2.1 6 输入查找表(LUT6)
    • 2.2 选择器(MUX)
    • 2.3 进位链(Carry Chain)
    • 2.4 触发器(Flip-Flop)
  • 参考文献

一直以来,觉得自己关于 FPGA 方面,摸不到“低”——对底层架构认识不清,够不着“高”——没真正独立做过 NB 的应用,如高速、复杂协议或算法、神经网络加速等高大上的应用,所以能力和认识水平都处于中间水平。这段时间做时序优化,感觉心有余而力不足了,可能要触及手动布局布线了,打开 Device 布局图才开始有兴趣探究一些底层结构的东西。

看吧,资源已经用了80%的A7 200芯片

可能翻开任何一本有关FPGA的书籍,上来就会介绍FPGA的历史,原理,内部结构什么的,大部分人看着都极其枯燥,常常要么直接略过,要么就看一遍,久了也就忘记了(部分靠翻译文档的书作者该好好反思)。我硬着头皮去弥补之前缺失的一些基础知识,结合Xilinx A7 芯片,总结一下自己的收获。

1. 总览

平台:Vivado

芯片:XC7A200

FPGA 主要有六部分组成:可编程输入输出单元(IO)、可编程逻辑单元(CLB)、完整的时钟管理、嵌入块状RAM、布线资源、内嵌的底层功能单元和内嵌专用硬件模块。其中最为主要的是可编程输出输出单元、可编程逻辑单元和布线资源。

放大,这些就是内部资源,主要是逻辑单元和块状 RAM 及一些内嵌功能单元

再放大,这些逻辑单元的内部结构也出来了,像大型“停车场”

2. 可配置逻辑单元

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

点击内部的逻辑单元,通过阴影区别包含的范围,你可以清晰的看到结构划分的层级。在旁边窗口可以清晰的看到选中部分的属性(Properties)。

来,再放大,放大到一个 SLICEL,如下图所示。

SLICEL 和 SLICEM 内部都包含 4 个 6 输入查找表(Look-Up-Table,LUT6)、3 个数据选择器(MUX)、1 个进位链(Carry Chain)和 8 个触发器(Flip-Flop),下面分部分介绍的时候,时不时可以再回头看这张结构图。

2.1 6 输入查找表(LUT6)

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

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

另外既然 SLICEM 中的 M 代表 memory 的意思,所以增加了更多存储功能。可以配置为 RAM,尤其指分布式 RAM。其中 RAM 的写操作为同步,而读操作是异步的,即与时钟信号无关。如果要实现同步读操作,则要额外占用一个触发器,从而增加了意识时钟的延迟(Latency),但提升了系统的性能。

这就解释了为什么我们实现RAM同步读写的时候,读出输出要延迟一个 clk。一个 LUT6 可配置 64x1 的 RAM,当 RAM 的深度大于 64 时,会占用额外的 MUX(F7AMUX,F7BMUX,F8MUX,即一个 SLICE 中的那 3 个 MUX)。

SLICEM 中的 LUT 还可以配置为移位寄存器,每个 LUT6 可实现深度为 32 的移位寄存器,且同一个 SLICEM 中的 LUT6(4个)可级联实现 128 深度的移位寄存器。

2.2 选择器(MUX)

SLICE 中的三个 MUX(Multiplexer:F7AMUX,F7BMUX 和 F8MUX)可以和 LUT6 联合共同实现更大的MUX。事实上,一个 LUT6 可实现 4 选 1 的 MUX。

SLICE 中的 F7MUX(F7AMUX 和 F7BMUX)的输入数据来自于相邻的两个 LUT6 的 O6 端口。

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

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

2.3 进位链(Carry Chain)

进位链用于实现加法和减法运行。就是结构图中,中间那个大的部分,可以看到它内部实际还包含 4 个 MUX 和 4 个 2 输入异或门(XOR)。

异或运算是加法运算中必不可少的运算。

2.4 触发器(Flip-Flop)

每个 SLICE 中有 8 个触发器。这 8 个触发器可分为两大类:4 个只能配置为边沿敏感的 D 触发器(Flip-Flop)和 4 个即可配置为边沿敏感的 D 触发器又可配置为电平敏感的锁存器(Flop & Latch)。当后者被用作锁存器的时候,前者将无法使用。

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

减少时钟种类,即频率越少越好; 统一规范的设计逻辑,如复位。 S/R端口可配置为同步/异步置位或同步/异步复位,且高有效,因此可形成4种D触发器,如下表所示。

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

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

复位,同步复位、异步复位、同步复位异步释放

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2021-04-27,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 FPGA探索者 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章转载自【肉娃娃】,阅读原文
  • 1. 总览
  • 2. 可配置逻辑单元
    • 2.1 6 输入查找表(LUT6)
      • 2.2 选择器(MUX)
        • 2.3 进位链(Carry Chain)
          • 2.4 触发器(Flip-Flop)
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档