1.如果两个双口ram数据位宽相同,则采用时钟快的ram等待时钟慢的ram来完成从一个ram中读取数据并存储到另一个ram中;例如从ram A中读取数据到ramB中,ram A的时钟为20M,而ram B的时钟为40M,可以重复读ram A来覆盖写ram B的方法,如果把ramB中的数据读取出写到ram A中,ram B需要等待ram A一个时钟后再改变地址。
2.如果两个双口ram数据位宽不同,可以通过移位或者拼凑位数来达到两个ram 之间的数据读写;例如,ram A的数据位宽为10,ram B的数据位宽为2,如果从A中读取数据写到B中,则ram A 每变动一次地址,需要有5个ram B的地址来接收数据,假如ram A B的读写时钟相同,则ram A 读取一个数据并写到ram B中至少需要5个时钟周期,考虑到ram读取的延时,对ram B 的地址addrB进行分析,一般初始化地址为0,0-4需要四次时钟累加,而4-9、9-14、......需要5次时钟累加,对于初始时第一次写入的5个时钟需要处理,方便做循环处理,可以通过延时或状态机来处理,使用6个时钟来读取1个位宽10的数据并写入到5个位宽为2的ram中。如下:A中100个数据写到B中500个地址中:
always@(posedge clk_high or negedge rst_n)
if(~rst_n)
main_state<=IDLE;
else
main_state&