BRAM研究

Xlinx系列FPGA,包含两种RAM:Block RAM 和 Distributed RAM,

他们的区别在于,Block RAM是内嵌专用的RAM,而Distributed RAM需要消耗珍贵的逻辑资源组成。前者具有更高的时序性能,而后者由于分布在不通的位置,延迟较大。

BRAM的应用形式

Single-port ROM

Untitled

数据只读(毕竟ROM嘛。)

Dual-port ROM

Untitled

能从两个端口同时访问ROM,理解上应该是加大流量了,并且可以用不同的时钟访问。同样只读

Single-port RAM

Untitled

同时时钟下的单口随机读写

Simple Dual-port RAM

Untitled
A口写,B口读(好像已经能处理不同时钟了)

True Dual-port RAM

Untitled

A,B口都可以读和写

BRAM的读写模式

  • Write first mode

    这种模式下
    

1)写操作:设置WEA为1写入当前地址的数据,而且在下一个时钟DOUTA会输出当前写入的

2)读操作:设置WEA为0读出当前地址的数据,在下一个时钟,DOUTA有效

Untitled

  • Read first mode 这种模式下: 1)写操作:设置WEA为1写入当前地址的数据,而且在下一个时钟DOUTA会输出之前这个地址的数据 2)读操作:设置WEA为0读出当前地址的数据,在下一个时钟,DOUTA有效

Untitled

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

Untitled

  • Byte Wirite 可以只针对一个字节读写,如下图,WEA = “010” ,则下一个DOUT 只有中间字节会改变成DIN的中间字节,其他保持

Untitled

Something should be noticed

  • 异步时钟处理原则 使用异步时钟,当一个端口将数据写入存储位置时,另一端口在指定的时间内不得读取或写入该位置。 器件数据手册中定义了该时钟到时钟的建立时间,以及其他Block RAM切换特性。这里说到的” 时钟到时钟的建立时间”我还没注意到哪一个文档有说明。所以异步时钟可以通过长期的稳定性测试获取到这个时间间隔。