FPGA-存储IP核FIFO、单口RAM、双口RAM概述

一、FIFO与RAM区别:
FIFO:先入先出,顺序存储。
RAM:数据的读写顺序由用户代码决定,可以从任意写(读)地址开始进行写入(读取)数据。

二、FIFO与RAM联系:
规模较大的FIFO一般都是用RAM实现的(规模特别小的FIFO才会使用寄存器实现)。如图所示,双端口RAM作为存储模块,加上外部逻辑结构组成了一个异步FIFO。
在这里插入图片描述
三、应用场合:
FIFO常用于数据传输缓存,避免数据丢失,如不同速率时钟模块间的数据传输就需要用到异步FIFO。
RAM常用于暂存指令或中间数据,指令cache和数据cache就由RAM来实现。

四、RAM细分:
我们讨论Altera公司FPGA芯片IP核。
在这里插入图片描述
单口RAM,只有一组数据线与地址线,因此读写不可同时进行;即,单端口RAM的读写操作共用端口A的地址,数据通过A写入和读出。
图2 单口RAM示意图
双口RAM,有俩组数据线和地址线,读写可以同时进行,FIFO读写可以同时进行,可以看作是双口。分为Simple two-dual RAM和true two-dual RAM。简单双口RAM,一个端口只读,另一个端口只写,且写入和读取的时钟可以不同,位宽比可以不是1:1;而双口RAM两个端口都分别带有读写端口,可以在没有干扰的情况下进行读写,彼此互不干扰。
在这里插入图片描述
true two-dual RAM
FIFO也是一个端口只读,另一个端口只写。FIFO与伪双口RAM的区别在于,FIFO为先入先出,没有地址线,不能对存储单元寻址;而伪双口RAM两个端口都有地址线,可以对存储单元寻址;异步时钟域的缓存只要是双口器件都可以完成,但FIFO不需对地址进行控制,是最方便的。

五、RAM读写操作触发:
内部存储器块的读写操作触发有所不同:对于所有内部存储块,读操作均在时钟上升沿触发其中MLAB支持连续读操作。对于M10K、M20K、M144K、M9K和M-RAM,写操作在时钟上升沿触发;对于M4K和M512,写操作在时钟下降沿触发;对于MLAB,如果FPGA芯片为Arria V、Cyclone V和Stratix系列,则写操作在时钟上升沿触发,对于其他系列的FPGA,写操作在时钟下降沿触发。

六、地址时钟使能(adressstall):
地址时钟使能是端口是高电平有效的异步控制信号,使能时保持以前地址值。如果存储块配置为双端口RAM或ROM,则可以为每个地址端口创建单独地址时钟使能信号。下图给出了读操作和写操作期间地址使能信号的时序。
在这里插入图片描述
从上图可看出,读地址在时钟上升沿时稳定,下降沿时翻转。当异步地址时钟使能信号为高时,锁存地址在inclock的下降沿就以a1为稳定输出,也可以说成,虽然读地址在不断累加,可是在a1之后的inclock上升沿因为地址时钟使能信号为高,读地址的变化不再锁存到内部地址锁存器中。直到其为低电平时候,在inclock上升沿的地址才会被锁存入内部地址锁存器。

七、字节使能(byteena):
所有实现RAM的内部存储块都支持字节使能,字节使能用于屏蔽部分或全部输入数据,从而使特定数据写入存储器,没有写入的字节或比特保留以前的写入值。字节使能端口的最低位对应数据总线的最低位字节。例如,如果使用x18模式的RAM块且字节使能端口的值为01,则使能data[8:0]并禁止[17:9],可以定义字节使能端口的字节大小,有效值包括5,8,9和10,取值与内部存储块的类型有关。例如MLAB仅仅支持5和10。

为创建字节使能端口,输入端口data的数据位宽必须是字节大小的倍数。例如,如果使用MLAB存储块,则只有数据位宽是5、8、9或10的倍数时(10、15、16、18、20、24、25、27、30等)才支持字节使能。如果端口data数据位宽为10,则可以定义字节的大小为5,这种情况下,可以有俩位的字节使能端口,每位控制数据输入的5个比特是否写入。如果端口data的位宽是20,则字节大小可以定为5或10,相应字节使能端口的位宽是4或2。

下图给出了对存储器进行读写的字节使能信号的时序。
在这里插入图片描述
由上图可知,byteena有几位就代表把data分为几个字节,图中是2位,代表data被分成2个字节,又因为data共16位,所以每个字节8位。a0时byteena为10,代表高字节使能有效,所以下一个时钟的上升沿就有a0常数就为ABFF,高字节被写入,而低字节保留原来的不变;a2时byteena为11,表示俩个子节都进行使能,所以,下个时钟上升沿,就可以看到ABCD都被写入了(注解是按异步输出来的,同步异步输出自己辨别理解)。

八、异步复位:

在Altera的大部分FPGA芯片中,内部存储器都支持异步复位的属性。用于输出锁定和输出寄存器复位。因此,如果设计的RAM没有使用输出寄存器,则用输出锁定异步复位清除RAM输出。即使输出端口没有寄存,也可以用异步复位属性清除输出,但该属性不支持MLAB存储块。不能用异步复位端口清除内部存储块的内容,只能清除输入寄存器和输出寄存器的内容。

读操作期间,异步清除输入读地址将破坏存储器内容,清除写地址也会对写操作产生同样的影响。

  • 10
    点赞
  • 72
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值