关于FPGA中的块RAM和分布式RAM

在Spartan-3系列FPGA中使用LUT构建分布式RAM http://xilinx.eetrend.com/tag/846?quicktabs_1=0

利用块RAM实现数据延迟的一些问题 http://bbs.eetop.cn/thread-431323-1-1.html

分布式RAM是如何产生的及其与Block RAM的区别

- 问 -
分布式和Block RAM的区别

- 答 -
CLB单元生成的distribute ram ,CLB是FPGA的基本单元,blockram也是基本单元,但分布ram要由CLB单元生成。由CLB生成分布式ram,消耗逻辑资源。而blockram则固定在fpga内,无论使用与否都存在于那里。当block ram不够用时可以用逻辑资源生成分布式ram。

- 问 -
分布式RAM是如何产生的?

- 答 -
这里以Virtex4为例说明:一个CLB由4个Slice组成,这4个Slice又分SliceM和SliceL,其中M是Memory的首字母,L是Logic的首字母,比较SliceM和SliceL,他们的区别就是SliceM的查找表具有RAM和ROM的功能,而SliceL的则不具备。所以SliceM比SliceL多的功能就是做存储器和移位。这样就很清楚了:SliceM可实现DistributRAM,而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内部结构是一种阵列结构。

- 问 -
请问SliceM除了可实现Distribut RAM之外还能实现什么功能?
SliceM实现Distribut RAM时使用SliceM中的SRL16存储单元么?

- 答 -
如果看SliceM的图,是看不到里面有专么这个SRL16的。其实SRL16就是一个基于查找表结构的移位寄存器。而SRL16以primitive形式存在而已。在userguide中,也画了SRLC16的图,它就是一个查找表。比较SliceM和SliceL,他们的区别就是SliceM的查找表具有RAM和ROM的功能,而SliceL的则不具备。所以SliceM比SliceL多的功能就是做存储器和移位。“SliceM实现DistributRAM时使用SliceM中的SRL16存储单元么?”  因为SRL16用的就是LUT,所以,如果这个LUT作为DistributeRAM使用了,则就不能再作为SRL16使用了。

  

时间: 2024-11-03 13:20:37

关于FPGA中的块RAM和分布式RAM的相关文章

ARC中block块作为属性的使用笔记

ARC中block块作为属性的使用笔记 block较难理解,根据在内存中的分布情况就分为3种类型,根据使用的情形又分为很多很多种.虽然用起来容易,但使用不当会造成内存泄露,虽然都是这么说,但你真的研究过为什么会泄露吗?为什么有些时候外部变量进入block的时候会导致引用计数+1呢?   本人做过MRC以及ARC的开发,但大势所趋,ARC将是以后开发的主要模式,即使有MRC也是ARC混编MRC的代码,所以,本文的block的一些使用上的心得都基于ARC的,已经不考虑MRC的了,请看官注意,MRC与

Ruby中的块的知识

  这篇文章主要介绍了详解Ruby中的块的知识,包括yield语句和begin/end块等知识点,需要的朋友可以参考下 语法: ? 1 2 3 4 5 block_name{ statement1 statement2 .......... } 在这里,将学习如何通过使用一个简单的 yield 语句调用块.还将学习使用yield语句具有参数调用块.将检查的示例代码,这两种类型的 yield 语句. yield 语句: 让我们来看看在yield语句的一个例子: ? 1 2 3 4 5 6 7 8

FPGA中浮点运算实现方法——定标

有些FPGA中是不能直接对浮点数进行操作的,只能采用定点数进行数值运算.对于FPGA而言,参与数学运算的书就是16位的整型数,但如果数学运算中出现小数怎么办呢?要知道,FPGA对小数是无能为力的,一种解决办法就是采用定标.数的定标就是将要运算的浮点数扩大很多倍,然后取整,再用这个数进行运算,运算得到的结果再缩小相应的倍数就可以了.在设计中,一定不要忘记小数点.在FPGA 中是体现不出来小数点的,小数点的位置只有程序员知道.Q表示小数点的位置,Q15就表示小数点在第15位. 浮点数(x)转换为定点

android-在安卓中开启一个新线程,发现如下代码中if块是DeadCode?为什么,如何解决?

问题描述 在安卓中开启一个新线程,发现如下代码中if块是DeadCode?为什么,如何解决? new Thread(){ public void run(){ try { sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } while(hasData < 100){ progressStatus = progressStatus + (i

javaee-java中构造块和成员变量的执行顺序是依据什么机制?

问题描述 java中构造块和成员变量的执行顺序是依据什么机制? 代码的执行不是应该和写的顺序无关吗 但是为什么构造块和成员变量的顺序不一样,执行的结果也不一样呢??? 求大神解答 解决方案 你的理解是有误的,成员变量的初始化值跟代码顺序有一定关系的.java创建对象时,对实例变量即类的非静态成员的初始化,主要在三个地方 1 成员变量定义时指定初始值 2 非静态代码块中指定初始值 3 构造函数中对成员变量指定初值值 这三种方式1,2执行先于构造函数3的执行,但是1,2方式的执行顺序与源程序中的排列

c++-请问tiff文件中Strip块的大小如何设置

问题描述 请问tiff文件中Strip块的大小如何设置 我从一个tiff文件中读取了像素块,想自己编写代码把像素块写入到一个新的tiff文件中,但是写入后图像显示不完全,有的地方被黑色覆盖.查找后发现每个Strip块的大小与原文件不同.请问Strip块的大小该如何设置. 这是我设置Strip块大小的代码 m_ScripRows = 8 * 1024;//RowsPerStrip if(m_PlanarConfig == 1) { m_ScriptCount = floor((double)(m_

深入理解JavaScript中的块级作用域、私有变量与模块模式_基础知识

本文详细的介绍了JavaScript中的块级作用域.私有变量与模块模式,废话就不多说了,具体如下: 1.块级作用域(私有作用域),经常在全局作用域中被用在函数外部,从而限制向全局作用域中添加过多的变量和函数. (function(count){ for(var i=0;i<count;i++){ console.log(i);//=>0.1.2.3.4 } console.log(i);//=>5 })(5); (function(){ var now=new Date(); if(no

C#和.NET中如何利用FastDFS打造分布式文件系统

背景 海量存储.系统负载的迁移.服务器吞吐的瓶颈等等 让文件系统独立于业务系统 提高整个项目的扩展性以及可维护性 目前主流的方案 MFS FASTDFS GFS LUSTRE HADOOP等等 我选择的是FASTDFS 用一句广告语来说 "免费.快速.找得到".FASTDFS的作者是淘宝的资深架构师余庆,很诙谐.很有爱!!!其他方案还没玩过 暂不评论. 简介 FastDFS是一款开源的轻量级分布式文件系统纯C实现,支持Linux.FreeBSD等UNIX系统类google FS,不是通

jquery中选择块并改变属性值的方法

本文为大家介绍下使用jquery改变class属性的值,通过removeClass.addClass实现,具体如下,感兴趣的朋友可以学习下   jquery改变class属性的值 复制代码 代码如下: $("#top_sta").removeClass().addClass("top_tab no_current"); 1.先找到块所在的div.p的位置 2.移除原来的class属性,remove("***")表示移除class中的***,rem