Xilinx RAM IP核的使用及注意事项

对于RAM IP核(Block Memory Generator核)的使用以及界面的配置介绍,文章RAM的使用介绍进行了较详细的说明,本文对RAM IP核使用中一些注意的地方加以说明。

三种RAM的区别

单端口RAM(Single-port RAM)

单端口RAM只有一个地址接口addra,对应有一对读写的数据接口dina和douta,ena和wea为1时,向addra地址中写数据;wea为0时,通过addra地址中读数据。
在这里插入图片描述

简单双端口RAM(Simple Dual-port RAM)

简单双端口RAM相当于读写分开,addra、dina和wea完成写,addrb和doutb完成读,你读你的,我写我的,互不干扰。
简单双端口RAM有两个地址接口addra和addrb,但却只有一对读写的数据接口dina和doutb,所以也叫他伪双端口;
A端口用来写RAM,B端口用来读RAM,可以同时进行读写数据
在这里插入图片描述

真双端口RAM(True Dual-port RAM)

真双端口RAM是两组地址对同一块Memory进行读写(如下图官方手册上有说明),对于AB两端口中的一个端口A或B其实就是单端口RAM的控制逻辑。我们在外部控制的时候如果只把A端口用作写,B端口用作读,那其实就和伪双端口RAM一样了。
在这里插入图片描述
真双端口RAM拥有两个地址接口,并且每个地址接口都有对应的读写数据接口,所以叫真双端口RAM,真双端口RAM支持两个端口同时对Memory进行访问,有效的提高了访问速度。同样的,对于双端口的ROM,我们可以通过两个端口同时读取ROM中的数据,所以如果两个processor是访问同样的一组数据的话,就不需要例化两个相同的ROM了。

在这里插入图片描述

总结:无论是单端口RAM、简单双端口RAM还是真双端口RAM,他们都只有一块Memory,并且他们都是通过寻址的方式访问这块Memory,在配置相同的位宽和存储深度时,所使用的BRAM资源是一样的,区别在于对应Memory的接口数量不同,也即是所谓的端口不同。

典型应用

Block Memory Generator(BMG)核用于创建定制存储器,以满足任何应用的需要。典型的应用包括:

存储器类型 典型应用
Single-port RAM Processor scratch RAM, look-up tables
Simple Dual-port RAM Content addressable memories, FIFOs
True Dual-port RAM Multi-processor storage
Single-port ROM Program code storage, initialization ROM
Dual-port ROM Single ROM shared between two processors/systems

使能端口

ENA、ENB置0时,写或读数据无效,输出的DOUT数据保存不变。

如果使用使能端口(Use ENA Pin),那么会多一个ena/enb。A端口在wea和ena同时为1时写入数据有效。B端口在enb为1时写入数据有效。选择始终使能(Always Enabled)时,在wea为1时写入数据有效。
在这里插入图片描述

位宽与深度

读写位宽:读写时的数据位宽,如写一个数8‘hcd即为8位宽。
读写深度:需要存储的数据的个数。例如需要存储4个数据此处填写4,而不要填写地址的位宽2。
在这里插入图片描述

位宽转换的数据地址对应关系

在AB两端口进行位宽转换时无论A端口低位宽数据转换为B端口高位宽数据,或是A端口高位宽数据转换为B端口低位宽数据。
低位宽的起始地址从高位宽起始地址中数据的低位开始取数据。简单讲就是低字节的数据会被放在低地址。

如下:16bit转32bit数据

在这里插入图片描述

16bit转4bit数据

在这里插入图片描述

验证代码见附录1。

位宽与资源消耗的评估

对于资源消耗的考虑非常重要:简单理解为设置的位宽越宽,对资源的浪费越大。
Xilinx FIFO Generator 需要注意BRAMs的资源消耗

数据的更新

从RAM中读取数据后,若未进行数据的更新,原地址数据依然存在,而不是读取之后就空了,因此在读地址再次循环读取时数据依然存在且不改变。

数据更新:在写使能、写地址、写数据有效时更新。
在这里插入图片描述

BLOCK RAM的读写模式

读写支持3种模式,分别是Write First Mode, Read First Mode, No Change Mode。

DOUTA和WEA相关联,DOUTB和WEB相关联,在Single-port RAM和True Dual-port RAM的两种RAM格式中会体现,也就是说Single-port RAM或True Dual-port RAM中,在WEA/WEB写使能置1时DOUTA(WEB写使能置1时DOUTB)也会有输出,并且此时的输出和读写模式有关。

通过下面的介绍可以看出:

单端口和真双端口:该读写模式的设置只会影响在写数据(wea=1)时DOUTA的输出,在wea=0时实际上输出的数据就是上一次写在地址中的数据。模式设置的不同在写数据时的DOUT数据作为一些条件判断等可能会有一定的用途。

简单双端口:读端口B的数据doutb由于有读地址线的控制,所以读出的数据和读地址addrb对应;在读写冲突时,读出的数据为此时写入的数据,所以读写模式对于简单双端口不起作用,无需关心。(验证代码见附录2)
在这里插入图片描述

接下来我们向单端口RAM里写入数据,写满后读出RAM中的数据,对比三种效果。

先写模式(Write First Mode)

这种模式下:
1)写操作:设置WEA为1写入当前地址的数据,在下一个时钟DOUTA会输出这个地址新写入的数据
2)读操作:设置WEA为0读出当前地址的数据,在下一个时钟DOUTA会输出这个地址的数据。

从 Write First 模式仿真图可以看到,当我们往 RAM 里写数据是,就有数据读出了,并且读出的是新写入的数据。
在这里插入图片描述

先读模式(Read First Mode)

这种模式下:
1)写操作:设置WEA为1写入当前地址的数据,而且在下一个时钟DOUTA会输出这个地址的原先的数据
2)读操作:设置WEA为0读出当前地址的数据,在下一个时钟DOUTA会输出这个地址的数据。

由于我们配置的单端口RAM是读优先模式,所以当我们往RAM里写入数据时,RAM读出的数据为写入前RAM中存储的数据,故当我们第一次往RAM写数据时,RAM读出的数据为初始的0,在第二次写入不同数据到地址时,由于读优先,所以DOUTA读出了第一次存入的数据。
在这里插入图片描述

不变模式(No Change Mode)

这种模式下:
1)写操作:设置WEA为1写入当前地址的数据,和前面两种方式不一样,DOUT保存不变。
2)读操作:设置WEA为0读出当前地址的数据,在下一个时钟DOUTA会输出这个地址的数据。

由于我们配置的单端口RAM是不变模式,所以当我们往RAM里写入数据时,RAM读出的数据为上一次读出的数据并保持不变,故当我们第一次往RAM写数据时,RAM读出的数据为初始的0,在第二次写入不同数据到地址时,DOUTA保持读0地址的数据1不变。
在这里插入图片描述
验证代码见附录3。

读数据延迟</

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值