0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在FPGA设计中可以用LUT组建分布式的RAM

FPGA设计论坛 来源:FPGA设计论坛 作者:FPGA设计论坛 2022-05-13 16:33 次阅读

一、查找表

LUT就是查找表,对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们在FPGA设计中可以用LUT组建分布式的RAM

这样也可以解释我们在设计中为什么要采用流水线的实现方法

因为当输入数据的位数远大于一个LUT的输入时,就需要用多个LUT级联来实现逻辑,那么级联产生的延时也就不可避免了,这样就会制约系统的运行频率。那么为了避免级联数过于多,就采用插入寄存器的方法来实现。

举一个简单的例子,如果要实现一个6*1的mux可以用一个6输入的LUT或者是2个4输入的LUT来实现,6输入的LUT相当于是6位地址线一位数据位,能够存储64bit的数据,而采用两个4输入的LUT的话,它的总容量大小为32位数据。

如果用6输入的LUT实现4输入LUT的功能,那么就浪费了1-16/64=75%的资源,所以采用少输入的LUT可以更好的节省面积和资源,但是呢如果LUT采用的是2输入的呢,那样岂不是更好吗,不是的,因为对于多输入的信号处理的时候,就需要有多个LUT的级联来实现,而级联有不可避免的会导致延时过分,导致时序不满足。因此在实际的FPGA产品中多采用的是4输入或者6输入的LUT。

5cda9be4-d291-11ec-bce3-dac502259ad0.jpg

图 4输入的LUT

CLB是xilinx基本逻辑单元,每个CLB包含两个slices,每个slices由4个(A,B,C,D)6输入LUT和8个寄存器组成(中间应该还有一些选择器、与非门、或非门之类的东西)。放一个slices的内部图

5cf78ed4-d291-11ec-bce3-dac502259ad0.png

同一CLB中的两片slices没有直接的线路连接,分属于两个不同的列。每列拥有独立的快速进位链资源。

5d195668-d291-11ec-bce3-dac502259ad0.png

slice分为两种类型 SLICEL, SLICEM

(1)SLICEL可用于产生逻辑,算术,ROM

(2)SLICEM除以上作用外还可配置成分布式RAM或32位的移位寄存器。每个CLB可包含两个SLICEL或者一个SLICEL与一个SLICEM.

分布式RAM

SLICEM可以配置成分布式RAM,一个SLICEM可以配置成以下容量的RAM

5d2cd698-d291-11ec-bce3-dac502259ad0.jpg

多bit的情况需要增加相应倍数的LUT进行并联。

分布式RAM和 BLOCK RAM的选择遵循以下方法:

1. 小于或等于64bit容量的的都用分布式实现

2. 深度在64~128之间的,若无额外的block可用分布式RAM。要求异步读取就使用分布式RAM。数据宽度大于16时用block ram.

3. 分布式RAM有比block ram更好的时序性能。分布式RAM在逻辑资源CLB中。而BLOCK RAM则在专门的存储器列中,会产生较大的布线延迟,布局也受制约。

移位寄存器(SLICEM)

SLICEM中的LUT能在不使用触发器的情况下设置成32bit的移位寄存器, 4个LUT可级联成128bit的移位寄存器。并且能够进行SLICEM间的级联形成更大规模的移位寄存器。

5d3d92a8-d291-11ec-bce3-dac502259ad0.jpg

MUX

一个LUT可配置成4:1MUX.

两个LUT可配置成最多8:1 MUX

四个LUT可配置成16个MUX

5d6e35f2-d291-11ec-bce3-dac502259ad0.jpg

同样可以通过连接多个SLICES达成更大规模设计,但是由于SLICE没有直接连线,需要使用布线资源,会增加较大延迟。

进位链

每个SLICE有4bit的进位链。每bit都由一个进位MUX(MUXCY)和一个异或门组成,可在实现加法/减法器时生成进位逻辑。该MUXCY与XOR也可用于产生一般逻辑。

设计中我们可以用vivado查看设计底层的LUT实现图,具体的差看方法https://blog.csdn.net/qijitao/article/details/51371434

二、LUT实现原理

LUT中文名字叫查找表。以7系列的FPGA为例,每一个Slice里面有四个LUT。FPGA就是通过LUT实现大量的组合逻辑,以及SLICEM里面的LUT还可以构成RAM,Shift Register,以及Multiplexers。这篇文章我们一起来学习LUT如何构成组合逻辑。

LUT,中文名字叫做查找表,其原理其实也就是一个一个查找表,根据输入去找到相应位置的信号,然后做输出。说白了就好像一个小容量的ROM,把输入当作地址信号,对LUT里面预存的内容进行寻址。

7系列的FPGA的LUT有6个输入端口(A1-6),然后有两个输出端口(O5,O6)。下图是SLICEL里面的LUT。


5de5c00e-d291-11ec-bce3-dac502259ad0.jpg

其可以实现6输入的布尔组合逻辑函数,输入信号为A1,A2,A3,A4,A5,A6,输出端口为O6。如下

O6=f(A1,A2,A3,A4,A5,A6)

其实现方式就是将输入(A1,A2…A6)对应的输出在LUT里面预存好(这一步在我们用bit文件配置FPGA时实现),然后把输入信号当作地址信号去把对应的输出信号调出来。

同样其还可以构成两个5输入的布尔组合逻辑函数,其中这两个函数共用5个输入信号(A1,A2,A3,A4,A5),A6被拉高,O5,O6分别是两个布尔逻辑的输出。

O5=f(A1,A2,A3,A4,A5)

O6=f(A1,A2,A3,A4,A5)

故这也相当于实现的是一个5输入2输出的逻辑函数。

[O5,O6]=f(A1,A2,A3,A4,A5)

二、LUT提升

总结一下,就好比单个LUT里面可以预存 2^6=64个结果。那么单个LUT可以实现

(1)输入信号最多为6bit,输出信号为1bit的的布尔逻辑函数;

(2)输入信号最多为5bit,输出信号为2bit的逻辑。

一个SLICE里面有四个LUT故最多可以预存的输出信号个数为 26*4=28。

因此在一个SLICE里面,借助选择器将多个LUT进行互连,可以实现输入数,输出数最多为如下所示的逻辑。

(1)2个LUT通过互连可以构成7bit输入,单bit输出的逻辑。实现方式为两个LUT的输入信号A1,A2,A3,A4,A5,A6接到一起,输出信号经过选择器选择输出,选择器的选择信号也是逻辑函数的一个输入信号。

将逻辑函数的输出送到Storage Element便可以形成同步时序逻辑。

5dfadf84-d291-11ec-bce3-dac502259ad0.jpg


(2)4个LUT通过互连可以构成8bit输入,单bit输出的逻辑。实现方式大家可以根据上面的实现方式自行推理。

(3)2个LUT通过互连可以构成6bit输入,2bit输出的逻辑。实现方式自行推理。

(4)4个LUT通过互连可以构成7bit输入,2bit输出的逻辑。实现方式自行推理。

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA设计
    +关注

    关注

    9

    文章

    428

    浏览量

    26460
  • RAM
    RAM
    +关注

    关注

    8

    文章

    1354

    浏览量

    114420
  • 分布式
    +关注

    关注

    1

    文章

    851

    浏览量

    74434

原文标题:FPGA学习- LUT查找表原理和编程方式

文章出处:【微信号:gh_9d70b445f494,微信公众号:FPGA设计论坛】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    FPGARAM分布和特性

    选择FPGA时,关注LUT(Look-Up Table)和BRAM(Block RAM)是非常重要的,因为它们是FPGA架构
    的头像 发表于 11-21 15:03 2005次阅读
    <b class='flag-5'>FPGA</b><b class='flag-5'>中</b>块<b class='flag-5'>RAM</b>的<b class='flag-5'>分布</b>和特性

    分布式软件系统

    降到最低。负载各处理机之间分担,可以避免临界瓶颈。 4、当现有机构已存在几个数据库系统,而且实现全局应用的必要性增加时,就可以由这些数据库自下而上构成
    发表于 07-22 14:53

    Quartus II 定制的RAM分布式的还是块的

    Quartus II 定制的RAM分布式的还是块的
    发表于 03-10 17:51

    FPGALUT设计

    ,能够存储16bit数据,这也是LUT能被用于组建分布式RAM的原因。如果要构成一个6输入1输出MUX,可以通过两片4输入查找表级联,也可直
    发表于 07-30 18:11

    FPGARAM有与其他产品有什么不同?

    实现了不同的逻辑功能。查找表(Look-Up-Table) 简称为LUTLUT 本质上就是一个RAM。目前FPGA 多使用4 输入的
    发表于 08-23 09:14

    分布式RAM怎么异步读取

    使用分布式RAM,因为文档说只要“我们”为低,读取地址就可以在任何时间被断言,读取存储器数据延迟后可用,Tilo ..请帮忙..问候KAPS以上来自于谷歌翻译以下为原文I plan
    发表于 04-16 09:52

    分布式RAM综合问题

    大家好 ...我实现大小为65535 * 3的分布式RAM时出现问题,大约2小时内合成时发生了很大的延迟并且没有停止,对这个问题有什么解释吗?提前致谢以上来自于谷歌翻译以下为原文H
    发表于 06-25 11:03

    如何利用FPGA设计无线分布式采集系统?

    近些年来,随着电子技术的发展,无线通信技术、计算机网络的发展,分布式无线数据采集网络技术开始兴起,并迅速的应用到各个领域。一些地形复杂,不适合人类出现的区域需要进行数据采集的情况下,都可以适当
    发表于 10-14 07:10

    请问分布式RAM和Block RAM的芯片中有menexternalmemory或内存吗?

    嗨!我有一个关于分布式RAM和Block RAM的问题。芯片中有menexternalmemory或内存吗?请详细告诉我。谢谢!
    发表于 11-07 09:07

    分布式RAM和Block RAM之间究竟有什么区别?

    您好!分布式RAM和Block RAM之间究竟有什么区别?两者都只是芯片内存,对吧?但我不知道两者之间的区别。和..下一个问题.. isaboutMUX ..根据7系列概述,7系列FPGA
    发表于 07-19 06:37

    FPGA设计如何用LUT组建分布式RAM

    一、查找表LUT就是查找表,对于4输入的LUT而言,实际上就是4位地址位,一位数据位的存储器,能够存储16位数据,所以我们FPGA设计
    发表于 07-28 08:42

    3系列FPGA中使用LUT构建分布式RAM(2)

    带有异步写/同步读的SRAM,其中的同步读取可以使用与分布式RAM相关联的触发器实现。
    发表于 02-11 13:54 2400次阅读
    3系列<b class='flag-5'>FPGA</b>中使用<b class='flag-5'>LUT</b>构建<b class='flag-5'>分布式</b><b class='flag-5'>RAM</b>(2)

    3系列FPGA中使用LUT构建分布式RAM(3)

    前面简要介绍了Spartan-3系列FPGA分布式RAM的基本特性。为什么不从更高级的Virtex系列入手呢?我仔细看了一下各个系列的介绍、对比,Spartan系列基本就是Virtex系列的精简版,其基本原理是一样的,所以从简
    发表于 02-11 13:57 1267次阅读
    3系列<b class='flag-5'>FPGA</b>中使用<b class='flag-5'>LUT</b>构建<b class='flag-5'>分布式</b><b class='flag-5'>RAM</b>(3)

    3系列FPGA中使用LUT构建分布式RAM(4)

    前面讲了分布式RAM的方方面面,下面以RAM_16S为例,分别给出其VHDL和Verilog HDL下面的模板代码(ISE Projec
    发表于 02-11 13:59 1515次阅读

    使用FPGA调用RAM资源的详细说明

    FPGA可以调用分布式RAM和块RAM两种RAM,当我们编写verilog代码的时候如果合理的编
    发表于 12-30 16:27 9次下载