FRAM读写模块设计与仿真-Verilog实现
johncheapon 于 2017年07月18日 发表在 FPGA 开发

FRAM特性介绍

FRAM(ferromagnetic random access memory)即铁电存储器。是一种利用铁电晶体的铁电效应的存储器。有如下特点:

l  速度和读写特性与SRAM很相似,都是异步存储器,与SDRAM不同,FRAMSRAM都是以一个Cycle为时间单位进行读写,所以SRAM的读写逻辑只需稍作移植就能应用于FRAM

l  SRAMSDRAM相比,掉电不丢失。

l  相比于E2PROMFlashFRAM读写次数几乎不受限制,当然,受制于实际工艺条件,FRAM还是存在一定的读写寿命。

FM16W08是赛普拉斯推出的一款容量为8K*8bits的并行FRAM存储芯片。其关键特性如下:

读写次数

100 trillion (1014)   read/writes

数据保存时间

151 Years

访问时间Access Time

70 ns

读写周期Cycle Time

130 ns

功耗

Active <12mA,Standby 20uA

供电电压

2.7V~5.5V

温度范围

-40~+85

封装

SOIC-28,1.27mm pitch

最突出的特点是读写次数和数据保存时间,作为非易失性存储器,我们可以做如下对比:

型号

种类

读写次数

数据保存时间/

FM16W08

FRAM

1014

151

W25Q64

SPI NOR Flash

10万次

20

AT24C64

EEPROM

1百万次

100

         可见,FRAM的读写次数差不多是Nor Flash10亿倍,是EEPROM1亿倍!数据保存时间也明显优于其他两者。

         其实,为了兼顾RAM的速度又想让数据掉电不丢失,之前就有人尝试过将电池集成到SRAM模组内部,这就叫BBSRAM(battery-backed SRAM)但使用电池保持数据的方式本身存在很多不可靠的因素。FRAM完全克服了这个问题。

FM16W08介绍

管脚分布和同为异步存储器的SRAM类似,地址线不复用,控制线还是CE/OE/WE,该芯片的PinOut如下图:

blob.png

SRAM的不同

       FRAM会将地址锁存。以读为例,CE拉低会锁存Address总线上的内容,在下一个Cycle之前,主控哪怕改变Address总线上的内容,也不会对这个Cycle内的操作产生任何影响。这一点使得FRAM的稳定性优于SRAM。在硬件电路设计的时候也要注意,SRAM的片选管脚CE可以直接接GND以简化时序设计,而FRAM不能这么做,需要将CE上拉到VDD

操作时序

         最关键的三个参数是访问时间tCA,预充电时间tPCCycle Time。一般来说tCA+tPC=Access Time,但实际做RTL设计时,三者都要满足。具体参数见数据手册。

时序逻辑设计

读时序

1准备地址,拉高CEOE

2拉低CE以锁存地址,拉低OE。虽然拉低OE的时候地址都没保持好,更别说有效数据输出了,但OE拉低不会导致异常,这样会简化时序。

3等待至少70ns时间以满足tCAtCE的需求。

4读取数据

5拉高OECE至少维持60ns以满足tPC的要求。

FM16W08的读时序图如下:

blob.png

双向端口FRAM_data要设置为输入:

reg FRAM_data_dir;//FRAM databus direction control.| 1:output 0:input |

assign FRAM_data=FRAM_data_dir ? data_in:8'hzz;

data_in来自内部总线,要写到FRAM中的数据就从这里进来。FRAM_data_dir为高时,设置为输出。为低时,双向端口被置为高阻输入。

CE控制的写时序

写时序和SRAM几乎一样,没什么特别的地方。

1准备地址和数据、拉低WE

2拉低CE并等待至少70ns以满足tCA的要求。因为满足tCA(70ns)一定也会满足tAH(15ns)tDS(30ns)的要求。

3写入数据。

4拉高CEWE,至少等待60ns以满足tPC的要求。tCA+tPC=tWC,正好是一个Write Cycle

OE始终拉高。

双向端口要设置为输出。

 仿真验证

  由于FRAM时序非常简单,并且笔者设置的FPGA主时钟只有50MHz,所以只需做前仿基本就能验证RTL代码是否能正常工作。仿真环境为Modelsim ASEFRAM芯片的模型是赛普拉斯提供的VerilogHDL Model,这个模型使用VerilogHDL语言编写,完全根据芯片实际的时序参数设计,所以能很好的整合到仿真工程中。

Testbench用来验证单字节读写功能:

1)初始化FM16W08中的每一个单元中的内容为0xFF

2)准备地址0x0000和数据0x88,产生一个写Request信号

3)等待至少一个写Cycle,通过波形观察FRAM地址0中的数据是否由0xFF变位0x88

4)准备与(2)同样的地址和数据,产生一个读Request

5)等待至少一个读Cycle,通过波形观察数据总线上是否出现0x88

仿真波形图如下:

blob.png

  从上图可以看出,单字节读写功能被成功验证。至于多字节连续读写,只要设置好Request信号和地址数据,问题也不大,此处不再赘述。

  虽然FRAM目前成本偏高,但作为一种新的高性能存储器,未来可能会随着工艺的改进而不断被推向市场。

附件是完整的RTL、Testbench代码和Modelsim工程,在不同电脑使用时注意设置工程目录(点击下载附件

注意:本站所有文章除特别说明外,均为原创,转载请务必以超链接方式并注明作者出处。 标签:VerilogHDL,存储器,FPGA