热度 10
2013-4-3 21:33
2329 次阅读|
2 个评论
由于毕设需求片外SRAM,现对片外sram时序进行测试,下面会陆续更新其他测试,为大家以后的设计提供可能的参考,片外sram型号:IS61LV25616,FPGA芯片为altera的,这个不重要,关于该芯片大家可以参考其手册。 下面给出该手册上给出的读写条件,还有一些读写时要注意的最小时间,大家用的话可以看下手册: 下面给出测试代码,比较简单的反应了读写时序,不太严谨,忘谅解: /* 片外SRAM在没有往里面写数据之前,从里面读出的数据是随机的 */ module chipout_sram_test ( input wire CLOCK_50, input wire SW, output reg SRAM_WE_N, // write enable output reg SRAM_CE_N, // chip enable output reg SRAM_OE_N, // data output enable output reg SRAM_LB_N, // low_byte enable output reg SRAM_UB_N, // high_byte_enable output reg SRAM_ADDR, // addr,0!256k-1 inout wire SRAM_DQ // dual_direction data ); reg dq_reg; reg cnt1,cnt2; assign SRAM_DQ=(!SRAM_WE_N)?dq_reg:16'bz; always @(posedge CLOCK_50) begin if (SW ) begin SRAM_WE_N=1; SRAM_CE_N=1; SRAM_OE_N=1; SRAM_LB_N=1; SRAM_UB_N=1; SRAM_ADDR=0; cnt1=0; cnt2=0; dq_reg=0; end else begin if (cnt1=16) //write test begin SRAM_WE_N=0; SRAM_CE_N=0; SRAM_OE_N=0; SRAM_LB_N=0; SRAM_UB_N=0; SRAM_ADDR=cnt1; dq_reg=cnt1; cnt1=cnt1+1; end else // read test begin SRAM_WE_N=1; SRAM_CE_N=0; SRAM_OE_N=0; SRAM_LB_N=0; SRAM_UB_N=0; SRAM_ADDR=cnt2; cnt2=cnt2+1; end end end endmodule 其中cnt1产生写地址及写数据,cnt2产生读地址,我用SignalTap II 工具抓取了波形,触发条件是SW 变为低电平(SignalTap怎么用大家百度一下): 波形显示:当前周期给读地址,下个周期数据就出现在数据端口上,再下个周期就可以进行采样,其实这和工作频率有关,我的设计中是50Mhz(20ns),手册上也给出读地址给后最多15ns后即可出现数据; 我没仿真在对一个地址写数据后多少周期可以读该地址的数据,不过参考手册至少中间要隔一个周期后才可以, 整体而言sram的速率还是非常快的。