zoukankan      html  css  js  c++  java
  • FPGA的嵌入式RAM

           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。

     1 module bram_inference(
     2       input clk,
     3       input [15:0] mem_din,
     4       input [9:0] mem_addr,
     5       input mem_we,
     6       output reg [15:0] mem_dout );
     7 
     8 reg [15:0] ram [0:1023];
     9 
    10 always (posedge clk)
    11 begin
    12       if(mem_we)
    13            ram[mem_addr] <= mem_din;
    14       mem_dout <= ram[mem_addr];
    15 end
    16 
    17 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.

  • 相关阅读:
    一致性 hash 算法( consistent hashing )a
    wcf 推送 与 广播
    TFS 自动同步Server 端文件的批处理命令
    PHP面向对象
    H5缓存机制浅析-移动端Web加载性能优化【干货】
    100+ 超全的web开发工具和资源
    从零开始搭建论坛(一):Web服务器与Web框架
    JQuery:选择器
    JQuery:事件
    JQuery:DOM操作
  • 原文地址:https://www.cnblogs.com/dpc525/p/5161846.html
Copyright © 2011-2022 走看看