我今天在做一个RAM块的读写时遇到一个很奇怪的问题,我用的芯片是xilinx的spartan-3E
对RAM写操作的代码
always@(posedge write_clk or negedge rst_n)
if(!rst_n) write_addr <= 0;
else if(write_allow) write_addr <= write_addr + 1;
我的思路是,从RAM地址的0位地址位开始写入数据,用以上的代码来实现我的想法
但是我读出RAM的数据却是从ram的第1位地址位读出数据
例如我写进四个数 AA,BB,CC,DD读出来的数却是 00 ,AA ,BB ,CC,
为什么我写入的数据好像往后移位了 一个地址??
谢谢
此帖出自
小平头技术问答
对RAM写操作的代码
always@(posedge write_clk or negedge rst_n)
if(!rst_n) write_addr <= 0;
else if(write_allow) write_addr <= write_addr + 1;
7位宽的reg 变量write_addr和block ram 的8位宽的地址总线相连接
我的理解是:第一个写入的数据应该放到ram地址指针 write_addr =0 的地址中。
从实际的情况来看,却像是写入了write_addr = 1的地址中。
那么当write_allow为高电平且write_clk为上升沿时,地址指针write_addr所指向的
ram中的地址是write_addr所在的地址还是write_addr+1所在的地址?
同样对ram的读写操作也遇到了fifo中的问题,对ram读操作的第一个数是上一次使写操作为满状态的
最后一个数据。
一周热门 更多>