首页->【FPGA/CPLD助学小组】

45 1

/上电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才对呀?

求教。。。。。

楼主可见

  1. shwnyoo 1#

    学习了,赞