由于毕设需求片外SRAM,现对片外sram时序进行测试,下面会陆续更新其他测试,为大家以后的设计提供可能的参考,片外sram型号:IS61LV25616,FPGA芯片为altera的,这个不重要,关于该芯片大家可以参考其手册。
下面给出该手册上给出的读写条件,还有一些读写时要注意的最小时间,大家用的话可以看下手册:
下面给出测试代码,比较简单的反应了读写时序,不太严谨,忘谅解:
/*
片外SRAM在没有往里面写数据之前,从里面读出的数据是随机的
*/
module chipout_sram_test (
input wire CLOCK_50,
input wire [4:0] 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 [17:0] SRAM_ADDR, // addr,0!256k-1
inout wire [15:0] SRAM_DQ // dual_direction data
);
reg [15:0] dq_reg;
reg [6:0] cnt1,cnt2;
assign SRAM_DQ=(!SRAM_WE_N)?dq_reg:16'bz;
always @(posedge CLOCK_50)
begin
if (SW[0])
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[0]变为低电平(SignalTap怎么用大家百度一下):
波形显示:当前周期给读地址,下个周期数据就出现在数据端口上,再下个周期就可以进行采样,其实这和工作频率有关,我的设计中是50Mhz(20ns),手册上也给出读地址给后最多15ns后即可出现数据;
我没仿真在对一个地址写数据后多少周期可以读该地址的数据,不过参考手册至少中间要隔一个周期后才可以,
整体而言sram的速率还是非常快的。
sunyzz 2013-4-15 21:23
用户1632198 2013-4-15 19:09