FPGA中的嵌入式RAM分为两种:专用的BRAM和分布是RAM(用LUT实现的)。这两种RAM又可以配置成单端口和双端口的RAM和ROM。双端口RAM又可以根据读写地址是否在同一块分为Double Port 和Two Port。读取方式也有多种方式,包括:Read first, Write first, No change 等。

Block RAM和分布式RAM

在FPGA实现RAM时,可在专用Block RAM和分布式RAM中实现。这两者的选择不仅会影响资源选择,同时还会严重地影响性能和功耗。哪如何选用BRAM和分布式RAM呢?一般而言,容量需求大时采用BRAM,对读写性能有要求时,用分布式RAM。一般来说RAM要求的深度是首要标准。RAM的深度比较小时,在LUTRAM中实现,深度超过256位的存储器阵列时用BlockRAM实现。Xilinx和Altera 的FPGA器件能够灵活地以多种宽度深度组合实现各种类型的RAM。

嵌入式RAM的使用方式有三种:原语,FPGA厂商提供的例化工具以及综合工具根据RTL代码推译出RAM。下面是一个简单的单端口RAM,在综合时会被综合工具推译出BRAM。

 module bram_inference(
input clk,
input [:] mem_din,
input [:] mem_addr,
input mem_we,
output reg [:] mem_dout ); reg [:] ram [:]; always (posedge clk)
begin
if(mem_we)
ram[mem_addr] <= mem_din;
mem_dout <= ram[mem_addr];
end endmodule

嵌入式RAM的初始化

XILINX 的RAM初始文件格式是coe,在Vivado中例化RAM时会将coe 文件转换成*.mif 文件,mif 文件的文件名和RAM的名字一样。但XILINX的mif 文件和ALTERA RAM的mif 文件格式不同。

小结

当今FPGA中所使用的嵌入式存储器具有宽存储器带宽特性,以及通用性,能够实现各种存储器功能,包括:随机访问存储器(RAM),ROM,CAM,FIFO(FIFO是由FIFO控制器逻辑和真双端口RAM实现的),真双端口存储器,移位寄存器,异步工作模式,同步工作模式。还可以选择输出是否寄存一拍。各家FPGA厂商的RAM具体实现有所不同但功能都一样,对RAM的控制信号做简单的修改就能操作不同厂家的嵌入式RAM了。

问题:

1 Altera的FPGA有没有真双端口RAM的原语?如果没有,是否可以由单端口RAM组成真双端口RAM?

2 在Vivado中,如何用脚本语言生成RAM IP?

3 如何不从新综合布局布线更新RAM中初始化数据 ?

参考文献:

[1] 阿昏豆. FPGA研发之道(13)-设计不是凑波形(三)RAM. http://www.eetop.cn/blog/html/60/1494260-52826.html. 2015,12,24.

[2] Xilinx. UG949 vivado设计套件的UltraFAST设计方法指南. 2014,04,02.

FPGA的嵌入式RAM的更多相关文章

  1. 理解FPGA中的RAM、ROM和CAM;ROM、RAM、DRAM、SRAM、FLASH

    目前大多数FPGA都有内嵌的块RAM(Block RAM),可以将其灵活地配置成单端口RAM(DPRAM,Single Port RAM).双端口RAM(DPRAM,Double Ports RAM) ...

  2. FPGA与嵌入式一点见解

    FPGA:即现场可编程门阵列,它是在PAL.GAL.CPLD等可编程器件的基础上进一步发展的产物.它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可 ...

  3. FPGA的嵌入式乘法器

    1. FPGA主要应用在并行处理资源的应用,视频与图像处理,无线通信的中频调制解调器. 嵌入式乘法器可以配置成一个 18 × 18 乘法器,或者配置成两个 9 × 9 乘法器.对于那些大于18 × 1 ...

  4. FMC与FPGA双口ram通讯

    硬件环境:ARM+FPGA通过FMC互联,STM32F767和 EP4CE15F23I7 FMC设置,STM的系统时钟HCLK为216MHz /* FMC initialization functio ...

  5. xilinx fpga中块ram的使用——简单双端口ram的使用

    在简单双端口ram中最简单有9个端口:分别是 clka  为输入端口的时钟 wea  读写控制端,高为写,低为读 addra 写地址 dina  待写入的数据 clkb 为输出端口的时钟的 addrb ...

  6. FPGA芯片内部硬件介绍

    FPGA芯片内部硬件介绍 FPGA(Filed programmable gate device):现场可编程逻辑器件 FPGA基于查找表加触发器的结构,采用SRAM工艺,也有采用flash或者反熔丝 ...

  7. 给FPGA初学者的建议——不要浮躁(转)

    原作者:http://hi.baidu.com/zhoubin7020 作为FPGA新人常常在论坛上问,用什么语言啊,用什么软件啊,用那个公司的芯片等问题.我个人认为学习FPGA和学习单片机有相同的道 ...

  8. FPGA基础知识了解

    FPGA学习的一些误区 FPGA入门必看资源 FPGA百度百科 FPGA基础知识及其工作原理 高端设计工具为少有甚是没有硬件设计技术的工程师和科学家提供现场可编程门阵列(FPGA).无论你使用图形化设 ...

  9. FPGA笔试必会知识点2—FPGA器件

    FPGA 综合工具并不一定保证能够充分利用芯片结构特点以达到最优目的而且工具本身也不一定非常智能,因为设计本身是复杂多样的且一直在变化,问题总会越来越多,因此在这种情况下,我们必须了解我们的器件结构, ...

随机推荐

  1. 配置哨兵监控Redis运行情况

    Redis的主从架构,如果master发现故障了,还得手动将slave切换成master继续服务,手动的方式容易造成失误,导致数据丢失,那Redis有没有一种机制可以在master和slave进行监控 ...

  2. C++STL 求和:accumulate 【转】

    该算法在numeric头文件中定义. accumulate()的原型为(文件取自DEV-C++编译器): template<typename _InputIterator, typename _ ...

  3. 看后端程序员调试CORS的姿势

    # 目录 为什么有同源策略? 需要解决的问题 CORS跨域请求方案 preflight withCredentials 附:高效.优雅地调试CORS实现 为什么有同源策略?       同源策略Sam ...

  4. HDU4247【瞎搞】

    题意: 给你4个小正方形的边长,让你求一个最小大正方形的边长以至于可以存这么四个正方形. 思路: 比划了一下...就是最大边+次大边,因为他们一定有交集. #include <cstdio> ...

  5. 51nod 1297

    思路: 搞个栈模拟一下,也才5w; 直接wa1了..然后想到井口如果都进不去那就...一定GG了. 所以维护一下从井口到井底是非递增的就好了: #include <cstdio> #inc ...

  6. hdu5883【欧拉通路】

    题意:n个点m条无向边的图,找一个欧拉通路/回路,下标是p1,p2,p3-pt,然后使得ap1XORap2XOR-XORapt这个值最大. 思路: 首先要判断一下这个图是不是联通的,用并查集就好了,然 ...

  7. studio 配置 opencv3.1

    环境 win10 android studio2.0 OpenCV-3.1.0-android-sdk android-ndk-r10e-windows-x86_64 jdk-8u102-window ...

  8. Mol Cell Proteomics. |王欣然| 基于微粒的蛋白聚合物捕获技术让能满足多种不同需求的蛋白质组学样品制备方法成为可能

    大家好,本周分享的是发表在Molecular & Cellular Proteomics. 上的一篇关于蛋白质组学样本质谱分析前处理方法改进的文章,题目是Protein aggregation ...

  9. 阿里云物联网 .NET Core 客户端 | CZGL.AliIoTClient:9. 自定义委托事件方法

    文档目录: 说明 1. 连接阿里云物联网 2. IoT 客户端 3. 订阅Topic与响应Topic 4. 设备上报属性 4.1 上报位置信息 5. 设置设备属性 6. 设备事件上报 7. 服务调用 ...

  10. Java之多线程同步基础

    java学习的道路上呢总有一些麻烦的东西需要花费一些时间去理解,比如个人认为不好搞的多线程. 线程是并列运行的 因为是并列运行,所以有时候会发生资源抢占,从而导致参数变化; 比如酱紫 package ...