• 关于Xilinx芯片中Block RAM和Distributed RAM 的区别 ------ 转载


    转载自:https://blog.csdn.net/yzy19900402/article/details/45025901

    块RAM 和 分布式RAM

    ① Xilinx 的FPGA结构主要由CLB、IOB、IR、Block RAM组成,其中CLB是最最重要的资源。
    ② 以V5为例,1个CLB包括的2个Slice,每个Slice包括4个6输入查找表,4个FlipFlop和相关逻辑。在这里需要注意的是Slice分两种,SliceM和SliceL,它们都包括前面的东西,但是很特别的是SliceM还增加了基于查找表的分布式RAM和移位寄存器。
     
    (注:其中M是Memory的首字母,L是Logic的首字母,比较SliceM和SliceL,他们的区别就是SliceM的查找表具有RAM和ROM的功能,而SliceL的则不具备。所以SliceM比SliceL多的功能就是做存储器和移位。这样就很清楚了:SliceM可实现Distribut RAM,而Distribut RAM是由SliceM中的LUT实现。CLB的结构下所示:

                             Matric    -------SliceM(2)    SliceL(3)--------Y1
                             Switch   ------ SliceM(0)    SliceL(1)--------Y0
                                                    |                    |
                                                    |                    |
                                                   X0                   X1
    这里XNYM,X--列,N--列号,Y--行,M--行号,Xilinx FPGA内部结构是一种阵列结构。)
     
    ③ 每个CLB中都包含SliceL,但并不是每个CLB中都包含SliceM,整个一块V5芯片中SliceM和SliceL的比例为1:3。SliceM的放置有一定的规则,这里不做阐述。
    ④ Xilinx的FPGA中有 分布式RAM 和 Block RAM 两种存储器。用分布式RAM 时其实要用到其所在的SliceM,所以要占用其中的逻辑资源;而Block RAM 是单纯的存储资源,但是要一块一块的用,不像分布式RAM 想要多少bit都可以。
    ⑤ 用户申请存储资源,FPGA先提供Block RAM ,当Block RAM 数量不够时再用分布式RAM补充。
     
    区别:
    1.Bram 的输出需要时钟,Dram在给出地址后即可输出数据。
    2.Dram使用更灵活方便些。
    3.Bram有较大的存储空间,Dram浪费LUT资源。

    补充:
    1.物理上看,Bram是fpga中定制的ram资源,Dram就是用逻辑单元拼出来的。
    2.较大的存储应用,建议用Bram;零星的小ram,一般就用Dram。但这只是个一般原则,具体的使用得看整个设计中资源的冗余度和性能要求
    3.Dram可以是纯组合逻辑,即给出地址马上出数据,也可以加上register变成有时钟的ram。而Bram一定是有时钟的。
    4.如果要产生大的FIFO或timing要求较高,就用BlockRAM。否则,就可以用Distributed RAM。
     
    注意:
           并不是用BRAM就一定性能好。FPGA中的资源位置是固定的,例如BRAM就是一列一列分布的,这就可能造成用户逻辑和BRAM之间的route延时比较长。举个最简单的例子,在大规模FPGA中,如果用光所有的BRAM,性能一般会下降,甚至出现route不通的情况,就是这个原因。灵活的运用BRAM和distributed RAM可以有效利用FPGA资源,提升性能。如果需要用较多的BRAM,合理规划布局也可以提升性能,可以使用Planahead进行布局规划。
     
    另外一个问题:
    请问SliceM除了可实现Distribut RAM之外还能实现什么功能?
    SliceM实现Distribut RAM时使用SliceM中的SRL16存储单元么?


    - 答 -
    如果看SliceM的图,是看不到里面有专么这个SRL16的。其实SRL16就是一个基于查找表结构的移位寄存器。而SRL16以primitive形式存在而已。在userguide中,也画了SRLC16的图,它就是一个查找表。比较SliceM和SliceL,他们的区别就是SliceM的查找表具有RAM和ROM的功能,而SliceL的则不具备。所以SliceM比SliceL多的功能就是做存储器和移位。“SliceM实现Distribut RAM时使用SliceM中的SRL16存储单元么?”  因为SRL16用的就是LUT,所以,如果这个LUT作为Distribute RAM使用了,则就不能再作为SRL16使用了。
     
     
     
     
     
     
  • 相关阅读:
    一些性能查询的SQL 备忘
    Oracle Stream配置详细步骤
    Oracle 一次生产分库,升级,迁移
    Oracle数据文件和临时文件的管理
    db_recovery_file_dest_size 修改大一点及删除归档日志 |转|
    android启动优化
    C++ primer 中文第三版 阅读笔记 第八章
    XMPP通讯开发-好友获取界面设计
    用SHELL与列表处理了件尴尬事
    各种快递查询--Api接口
  • 原文地址:https://www.cnblogs.com/hxing/p/13545557.html
Copyright © 2020-2023  润新知