原创 FPGA研发之道(13)-设计不是凑波形(三)RAM

2014-7-18 23:00 2347 14 19 分类: FPGA/CPLD 文集: FPGA研发之道

 FPGA内部资源中,RAM是较为常用的一种资源。

     通常实例化RAM中,一种使用为BLOCK RAM 也就是块RAM 。另外资源可以通过寄存器搭,也就是分布式RAM。前者一般用于提供较大的存储空间,后者则提供小的存储空间。

     在实际应用过程中,一般使用的包括,单端口、双端口RAMROM等形式等不同的形式。 实际应用中FIFO也是利用RAM和逻辑一起实现的。

    对于一块RAM中,其能够例化的深度是有限的。例如cyclone4RAM9k中可以例化的资源如下所示:

20140718225647323.jpg

     因此:例化化深度<256RAM,其同样也需要占用一块BLOCKRAM的资源,例如例化宽度为64 深度为128RAM,其资源为8K 。但是仍然需要占用两块BOCK RAM。也就是说,只要例化RAM深度少于256.则对于本器件9K来说,剩下的资源也是浪费。

20140718225702675.jpg

    那是不是可以例化成双端口RAM,通过高位地址区分,变为两个单端口RAMwidth32depth128)来使用,这样就可以节省资源了?

    而对于双端口RAM来说,每个M9K能够配置是的最小深度就变成是512,而最大宽度为18,如下图所示,因此作为真双端口RAM使用,深度小于512的话,仍然会占用1RAM。且宽度》18就会多占用额外的一块RAM,因此上述的节省资源的方式是不正确的。

20140718225724607.jpg

通过查看datasheet的中RAM能够配置的方式,从而能够正确的使用RAM资源,从而达到高的利用效率。可以看出,RAM9K其应用方式受限,主要是因为RAM的端口的连接信号受限,例如:该RAM9K的读端口最大支持36根信号线,因此对于单端口其支持的宽度为36,双端口为18(两个端口,总共36根数据线),作为FPGA来说,其布线资源是有限的,不可能无限制的增加其端口数。

RAM例化时,有时需要初始化RAMALTERAXLINX的初始化方法如下所示:

1ALTERA RAM中,例化时为MIF文件,其格式为:

DEPTH = 32;                   -- The size of memory in words
WIDTH = 8;                    -- The size of data in bits
ADDRESS_RADIX = HEX;          -- The radix for address values
DATA_RADIX = HEX;             -- The radix for data values
CONTENT                       -- start of (address : data pairs)
BEGIN

00 : 0;                -- memory address : data
01 : 1;

END;

2XILINXRAM中,RAM出示化文件为COE文件,其格式为:

         MEMORY_INITIALIZATION_RADIX=2;  设定进制

MEMORY_INITIALIZATION_VECTOR=  初始化向量 

值得注意的是:XILINXRAM初始化后会自动生成MIF文件,而此mif文件与ALTERA  mif文件格式不同。不能用于初始化ALTERA RAM

    鉴于例化不同IP的复杂性,现在编译工具也支持利用VERILOG语言来描述RAM,而编译工具自动识别为RAM,自动产生相应的IP核,下面以XILINXEDA工具为例简要介绍。

module ram(

clk, wr,addr,din,dout

);

input clk;

input [7:0] addr;

input wr;

input [31:0] din;

output [31:0] dout;

reg [31:0]  mem [0:255];

reg [31:0] dout;

always@(posedge clk)

if(wr)

mem[addr] <= din;

always @(posedge clk)

dout  =  mem[addr] ;

endmodule

 上述描述可以被描述成RAM,自动产生RAM.其例化的报告为:

=========================================================================

*                           HDL Synthesis                               *

=========================================================================

Performing bidirectional port resolution...

Synthesizing Unit .

    Related source file is "ram.v".

    Found 256x32-bit single-port RAM for signal .

    Found 32-bit register for signal .

    Summary:

         inferred   1 RAM(s).

         inferred  32 D-type flip-flop(s).

Unit synthesized.

=========================================================================

HDL Synthesis Report

Macro Statistics

# RAMs                                                : 1

 256x32-bit single-port RAM                           : 1

# Registers                                           : 1

 32-bit register                                      : 1

=========================================================================

    综上: RAM作为FPGA内部一种基本资源,掌握RAM的特性和基本用法,则是FPGA工程师的基本技能,能够充分利用FPGA内部的资源,毕竟对于FPGA来说“资源就是金钱”,节省资源就是省钱。

 

PARTNER CONTENT

文章评论5条评论)

登录后参与讨论

13811674212_398810906 2015-11-12 23:31

谢谢,争取不偷懒,常更新。

莫问奴家名 2015-11-12 20:42

楼主,写的真心不错,可以出书了

用户1774275 2014-7-19 10:20

不错

用户377235 2014-7-19 09:36

有问题欢迎提问啊,有错误欢迎指正啊。共同学习。

用户1665414 2014-7-19 09:33

很好,一直在追着楼主的更新!
相关推荐阅读
阿昏豆 2015-11-21 23:25
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现
把大象关冰箱的步骤 --- NAND FLASH控制器磨损管理算法芯片化硬实现   目前,存储领域包括eMMC,SATA SSD ,PCIe SSD等控制器是一个非常热门的领域。通常,由于...
阿昏豆 2015-11-09 22:25
平行宇宙的追逐--异步FIFO控制器的设计
  平行宇宙的追逐--异步FIFO控制器的设计。    在逻辑设计中,通常会用到异步FIFO,异步FIFO控制器是经典的异步信号传输的范例,通过FIFO控制器与异步双端口RAM的组合实现数据的...
阿昏豆 2014-08-23 23:36
FPGA研发之道(25)-管脚
     管脚是FPGA重要的资源之一,FPGA的管脚分别包括,电源管脚,普通I/O,配置管脚,时钟专用输入管脚GCLK等。 (1)电源管脚:    通常来说: FPGA内部的电压包括...
阿昏豆 2014-08-10 22:22
FPGA研发之道(24)-控制(下)
   首先依次回答上篇提出的几个问题:       第一个问题:如何避免状态机产生lacth 示例如下,通过在always(*)语句块中,添加默认赋值,ns_state = cs_state; alw...
阿昏豆 2014-08-07 21:53
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
阿昏豆 2014-08-06 23:12
FPGA研发之道(23)-控制(上)
本质上说,FPGA的模块设计就是将输入转化成想要得到的输出结果。而除了某些简单模块,即在当拍内完成,即将输入进行逻辑操作后,再输出。(如简单加法器等)。其余大部分的设计需要通过时序逻辑和组合逻辑混合实...
EE直播间
更多
我要评论
5
14
关闭 站长推荐上一条 /3 下一条