kevinc

主攻ZYNQ及RTOS开发,关注Flash存储

双口BRAM的使用

1
阅读(2997) 评论(0)

打算在zynq的逻辑侧缓冲1-page数据。直接调用IP,使用内部的block ram,配置成双口BRAM。ARM一侧通过AXI总线读写Port-A,逻辑侧代码读写Port-B。

调用IP:

M_AXI_GP0 <-> AXI_Interconnect <-> AXI_BRAM_Controller <->

Port_A <->Block_Memory_Generator <-> Port_B <-> User_Logic


搜狗截图20170428112053.bmp

Mode里面可以选择Stand Alone和BRAM Controller,差别在Alone的可以配置位宽,Controller两侧都是32bit位宽。我们在Port-B侧需要8bit的byte位宽,所以选择Alone。如果是32位宽2K深度,那么A端地址是11位的,B端是13位的。当然也可以勾选右上的Generate address interface with 32 bit,都配置成32bit的。


Memory Type选项基本有single口/dual口可选,如果选带simple则是某侧port只写或只读。 我们需要两侧都能读写的,多以这里选择True Dual Port RAM


两个port都能配置Operating Mode,默认是Write First Mode,这个也是我们实际需要的。user这侧需要连续发生random data写入bram,bram同步把数据output给flash。以及逐个把对应addr的数据out出来跟flash对此,同时把flash的这个数据write到bram的这个addr,就是逐位对比再加存储。


从这个时序图完全可以看出满足需求:

在T2写入bram,T3即可输出到flash;反过来,T1出来的data,在T2即可与flash出来的data对比,同时可在T2写入bram;每个写操作的下个节拍都会自动输出data。

搜狗截图20170428114444.bmp

注意地址位是按照4byte加一,还是每个byte就加一。


附录:

PG058 - Block Memory Generator v8.3 Product Guide

https://www.xilinx.com/support/documentation/ip_documentation/blk_mem_gen/v8_3/pg058-blk-mem-gen.pdf

PG078 - AXI Block RAM (BRAM) Controller v4.0 Product Guide

https://www.xilinx.com/support/documentation/ip_documentation/axi_bram_ctrl/v4_0/pg078-axi-bram-ctrl.pdf