Xilinx UltraScale架构

1. 关于UltraScale架构

本文将介绍UltraScale 架构下的FPGA的组成。

2. 可配置逻辑块(Configurable Logic Block, CLB)

CLB是FPGA内部最基本的逻辑单元,并且分布非常广泛,主要用于实现时序逻辑和组合逻辑电路。

每个CLB 包含一个Slice

Slice有两种类型SliceL(Logic)和SliceM(Memory),其中SliceM能够将其内部的LUT整合成分布式RAM或ROM。

每个Slice包括:

6 输入 2 输出 查找表(Look-Up Table, LUT)× 8

锁存/触发器(Flip-Flop, FF)× 16

例如FDRE、FDR

8位进位链(Carry)× 1

F7类型多路复用开关(Multiplexer, MUX) × 4,F8类型MUX × 2,F9类型MUX × 1

下面对上述成分依次作介绍

2.1. 查找表 LUT

查找表的内部原理是内部逻辑是一个真值表的结构,通过修改真值表的结果值以实现各种各样的逻辑。

CLB中的LUT是6输入A1,…,A6和2输出O5、O6。

注意到SliceL和SliceM中的LUT 是不同的,SliceL的LUT如下所示
SliceL中的LUT

而SliceM的LUT如下所示
在这里插入图片描述

SliceM中的LUT可用于构成RAM或ROM,从两幅图中看书SliceM中的LUT要比SliceL多很多个端口就是为了构成存储器,这些端口的含义是:
DI1,DI2是写数据输入端口
O5,O6是数据输出端口,支持一次性两bit或者单bit读写
A[6:1]为读地址
WA[6:1]为写地址
WE为写使用
CLK为时钟端口。

因此可以实现的逻辑函数包括:

6输入 1输出的一个函数

存在公共变量的 ≤5输入 2输出的两个函数

2个输出就是两个逻辑函数,这种情况下如果没有公共变量那就是最多一个3输入一个3输入,例如 O 5 = A 1 + A 2 A 3 , O 6 = A 4 A 5 + A 6 O_{5}=A_{1}+A_{2}A_{3}, O_{6}=A_{4}A_{5}+A_{6} O5=A1+A2A3,O6=A4A5+A6

也可以是两个逻辑函数存在公共变量,比如两个5输入的函数,1个公共变量的函数 O 5 = A 1 + A 2 A 3 + A 4 A 5 , O 6 = A 1 A 2 + A 3 A 4 + A 6 O_{5}=A_{1}+A_{2}A_{3}+A_{4}A_{5}, O_{6}=A_{1}A_{2}+A_{3}A_{4}+A_{6} O5=A1+A2A3+A4A5,O6=A1A2+A3A4+A6

可见上式 A 5 A_{5} A5 A 6 A_{6} A6是公共变量。

不仅是实现一般的逻辑函数,LUT还可在实现其他功能

2.1.1. 分布式RAM(Distributed Random Access Memory, DRAM)

利用LUT作为RAM存储资源,可形成单端口、简单双端口、双端口甚至更多端口的模式。

单端口RAM

如下图所示,表示读写公用一个端口,WA与A是相连接的,由WE控制读还是写

如果WE=1则是写,将数据D写入地址A[6:1]中。如果WE=0则是读,将地址A[6:1]的数据读出O中。

在这里插入图片描述

简单双端口RAM

读写为两个地址接口,但仍需要WE决定当前是读还是写。

如果WE=1则是写,将数据D写入地址A[6:1]中。如果WE=0则是读,将地址DRPA[6:1]的数据读出DPO中。

在这里插入图片描述

双端口RAM

依旧是两个地址接口,不过这两个地址接口均可以对RAM进行读写操作。

关于多端口RAM的区别可参考Vivado中单端口和双端口RAM的区别
LUT查找表实现各种RAM及ROM原理精讲

2.1.2. 分布式只读存储器(Read Only Memory, ROM)

与RAM类似,LUT也可以作为ROM使用,可以配置成64×1的ROM(1个LUT)、128×1的ROM(2个LUT)、256×1的ROM(4个LUT)、512×1的ROM(8个LUT)

如下图所示由7个LUT4(只用了LUT6的一部分端口)组成的16×8 bits的分布式ROM
在这里插入图片描述

2.1.3. 移位寄存器

支持使用LUT实现移位寄存器(Shift Register Look-up table, SRL),由于LUT是基于真值表实现的,所以对于一个6输入的LUT 就可以实现 2 5 = 32 2^5=32 25=32bit的SRL,或是使用5输入实现 2 4 = 16 2^4=16 24=16bit的SRL,当然需要添加触发器。

FPGA中的SRL16表示一个16bit的移位寄存器,SRL32则表示一个32bit的移位寄存器。并且可以通过地址线查询SRL内部某个触发器的值。

在UltraScale架构中,还可以跨越SLICEM实现多个LUT的组合构成SRL。

在vivado中使用SYNTHESIS下的Schemetic可以看出使用一个LUT变成的SRL16E
在这里插入图片描述

2.2. 多路复用器(Multiplexer, MUX)

MUX的作用是根据需要将某个输入的一路信号选择出来的电路。例如4选1数据选择器即MUX4:1就是有4个数据输入端口表示4个数据,以及2个选择输入端口(表示选择哪一路数据),如下图所示
在这里插入图片描述
实际上可以很容易的看出,MUX4_1需要6个输入端和1个输出端,因此一个MUX4_1可以通过一个LUT6实现。别忘了LUT6内部是通过真实表实现的,因此只需修改真值表中的结果值就可以构成一个MUX4_1。

● 每个Slice内部有着F7MUX_AB、F7MUX_CD、F7MUX_EF、F7MUX_GH,每个F7MUX均可以与其后面的2个相邻的LUT构成一个MUX8_1(每个Slice恰共有8个LUT)

● 每个Slice内部还有着F8MUX_BOT和F8MUX_TOP,每个F8MUX均可以与其后面的邻近2个F7MUX以及后面的邻近4个LUT构成一个MUX16_1

● 每个Slice内部还有着F9MUX,可以与其后面的所有的F7MUX、F8MUX、LUT构成一个MUX32_1

请添加图片描述

FPGA从入门到精通(4) - MUX

2.3. 进位链(Carry Chain)

Slice中的进位链能够实现快速加法和减法运算。

首先简单介绍一下加法器和减法器。

对于两个多bits常量的加法,如下图所示A和B为两个数某一bit的两个二进制值,CIN为做加法时到该bit的进位,S为本bit的结果,COUT为向下一个bit的进位。

例如A = 1,B = 0,CIN = 1,则S为0,COUT为1。

在这里插入图片描述

由此可得该bit的加法逻辑为:

S = A ⊕ B ⊕ C I N S=A⊕B⊕CIN S=ABCIN

C O U T = A ⋅ B + C I N ⋅ ( A ⊕ B ) COUT=A·B+CIN·(A⊕B) COUT=AB+CIN(AB)

因此将上述这样的多个加法器级联就可以实现多bits的加法,例如两个加数为 4 ′ b A 4 A 3 A 2 A 1 4'bA_{4}A_{3}A_{2}A_{1} 4bA4A3A2A1 4 ′ b B 4 B 3 B 2 B 1 4'bB_{4}B_{3}B_{2}B_{1} 4bB4B3B2B1(Verilog整形常量写法)并且结果为 4 ′ b S 4 S 3 S 2 S 1 4'bS_{4}S_{3}S_{2}S_{1} 4bS4S3S2S1。则进位链就为

在这里插入图片描述
而减法实现是 被减数-减数 等价于 被减数+减数的补码+1。对于上例子则是
4 ′ b A 4 A 3 A 2 A 1 — 4 ′ b B 4 B 3 B 2 B 1 = 4 ′ b A 4 A 3 A 2 A 1 + ∼ ( 4 ′ b B 4 B 3 B 2 B 1 ) + 4 ′ b 1 4'bA_{4}A_{3}A_{2}A_{1}—4'bB_{4}B_{3}B_{2}B_{1}=4'bA_{4}A_{3}A_{2}A_{1}+ \sim (4'bB_{4}B_{3}B_{2}B_{1})+4'b1 4bA4A3A2A14bB4B3B2B1=4bA4A3A2A1+(4bB4B3B2B1)+4b1

例如4’b0101-4’b0010=4’b0011,就等价于4’b0101+4’b1101+4’b1=5’b10011,实际情况下只截取4位,因此就是4’b0011。

因此减法的话就对应到进位链中 4 ′ b B 4 B 3 B 2 B 1 4'bB_{4}B_{3}B_{2}B_{1} 4bB4B3B2B1各位取反,再令最左面的加法器的CIN初始为1即可。

下面介绍进位链内部结构,与加法器大同小异,如下图所示其中的四位:

在这里插入图片描述
以红色框为例,端口定义如下:

● CIN=上一链的进位输入(当它在最低位时,置0做加法,置1做减法)
● S0=A0⊕B0 (这里和全加器中的S有些区别),需要先通过LUT完成一次异或再通过O6输入
O0=S0 ⊕CIN=A0⊕B0 ⊕CIN
● DI0 = A0 或者 B0 (这里指的是两个加数中的一个,它的作用要配合S0)
● AX 是预置数,这里我们不过多关注

因此整个进位链的元件如下图所示,如上面所介绍的,其中S[3:0]为两加数各位异或的结果,DI[3:0]就为加数的其中之一,CI为前级进位端,CO[3:0]为后级进位端,O[3:0]为本位输出。
在这里插入图片描述

  • 2
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Starry丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值