
/上电500us延时等待sdram就绪
reg[13:0] delay; //500us延时计数器
always @(posedge clk or negedge rst_n)
if(!rst_n) delay <= 14'd0;
else if(delay < 14'd12500) delay <= delay+1'b1;
wire delay_done = (delay == 14'd12500); //1ms延时结束
//------------------------------------------
//每640ns写入8个16bit数据到sdram,
//上电后所有地址写入完毕时间需要不到360ms时间
reg[5:0] cntwr; //写sdram定时计数器
always @(posedge clk or negedge rst_n)
if(!rst_n)
cntwr <= 6'd0;
else
if(delay_done)
cntwr <= cntwr+1'b1;
reg wr_done; //所有数据写入sdram完成标志位
always @(posedge clk or negedge rst_n)
if(!rst_n) wr_done <= 1'b0;
else if(addr == 19'h7ffff) wr_done <= 1'b1;
assign syswr_done = wr_done;
//------------------------------------------
//读写sdram地址产生
reg[18:0] addr; //sdram地址寄存器
always @(posedge clk or negedge rst_n)
if(!rst_n) addr <= 19'd0;
else if(!wr_done && cntwr == 6'h3f) addr <= addr+1'b1;//写地址产生
else if(wr_done && neg_rdack) addr <= addr+1'b1; //读地址产生 ////////////test
assign moni_addr = {addr,3'b000};
//////////////////////////////////////////////////////////问题如下
这里的clk为25M,计数记到6'h3f(也就是说64),那么应该是64*40ns=2560ns呀,而不应该是640ns呀,如果是640ns的话,clk应该是100M才对呀?
求教。。。。。
学习了,赞