DIY_DE2之SRAM调试
DIY_DE2中使用了2片256KX16bit的SRAM存储器,SRAM的读写相对简单,对其的操作可分为硬体调试和软体调试。
调试环境:Quartus II 9.0 + NIOS II 9.0
1、硬体调试
这也就是用Verilog HDL语言对SRAM读写,最简单的办法就是分别建立写SRAM工程和读SRAM工程。先对SRAM进行写操作,在不断电的情况下,在对SRAM进行读操作,最后采用SignalTap II观察数据线上的值。这种方法程序较简单,但操作稍微复杂了一点。
写程序:
module SRAM_HR(// Host Data
CLOCK_50,
LED,
// SRAM
SRAM1_D,
SRAM1_A,
SRAM1_UB,
SRAM1_LB,
SRAM1_WE,
SRAM1_CE,
SRAM1_OE
);
// Host Side
input CLOCK_50;
// SRAM Side
inout [15:0] SRAM1_D;
output [17:0] SRAM1_A;
output SRAM1_UB,
SRAM1_LB,
SRAM1_WE,
SRAM1_CE,
SRAM1_OE;
output reg [7:0] LED;
reg [15:0] iDATA;
reg [17:0] iADDR;
wire [15:0] oDATA;
reg iWE_N;
wire iOE_N;
wire iCE_N,iCLK;
wire [1:0] iBE_N;
assign SRAM1_D = SRAM1_WE ? 16'hzzzz : iDATA;
assign oDATA = SRAM1_D;
assign SRAM1_A = iADDR;
assign SRAM1_WE = iWE_N;
assign SRAM1_OE = iOE_N;
assign SRAM1_CE = iCE_N;
assign SRAM1_UB = iBE_N[1];
assign SRAM1_LB = iBE_N[0];
assign iBE_N = 2'b00;
assign iCE_N = 1'b0;
assign iOE_N = 1'b0;
always @(posedge CLOCK_50)
begin
iWE_N <= 1'b0; //WE信号拉低,写SRAM
iDATA <= 16'hffaa; //把要写入的值给数据寄存器,最低4位是4'h5(或4'b0101),
//所以写入SRAM数据线的最低4位就是: Sram_dq[3]=0;Sram_dq[2]=1;// Sram_dq[1]=0;Sram_dq[0]=1;
iADDR <= 18'h00001; // 给出要写入的地址
// LED <= oDATA[7:0];
end
endmodule
读程序:
module SRAM_HR(// Host Data
CLOCK_50,
LED,
// SRAM
SRAM1_D,
SRAM1_A,
SRAM1_UB,
SRAM1_LB,
SRAM1_WE,
SRAM1_CE,
SRAM1_OE
);
// Host Side
input CLOCK_50;
// SRAM Side
inout [15:0] SRAM1_D;
output [17:0] SRAM1_A;
output SRAM1_UB,
SRAM1_LB,
SRAM1_WE,
SRAM1_CE,
SRAM1_OE;
output reg [7:0] LED;
reg [15:0] iDATA;
reg [17:0] iADDR;
wire [15:0] oDATA;
reg iWE_N;
wire iOE_N;
wire iCE_N,iCLK;
wire [1:0] iBE_N;
assign SRAM1_D = SRAM1_WE ? 16'hzzzz : iDATA;
assign oDATA = SRAM1_D;
assign SRAM1_A = iADDR;
assign SRAM1_WE = iWE_N;
assign SRAM1_OE = iOE_N;
assign SRAM1_CE = iCE_N;
assign SRAM1_UB = iBE_N[1];
assign SRAM1_LB = iBE_N[0];
assign iBE_N = 2'b00;
assign iCE_N = 1'b0;
assign iOE_N = 1'b0;
always @(posedge CLOCK_50)
begin
iWE_N <= 1'b1; //WE信号拉低,写SRAM
// iDATA <= 16'hffaa; //把要写入的值给数据寄存器,最低4位是4'h5(或4'b0101),
//所以写入SRAM数据线的最低4位就是: Sram_dq[3]=0;Sram_dq[2]=1;// Sram_dq[1]=0;Sram_dq[0]=1;
iADDR <= 18'h00001; // 给出要写入的地址
LED <= oDATA[7:0];
end
endmodule
上述是读写SRAM,将读出的值赋给LED。另外可以通过Quartus II中的自带仿真工具 SignalTap II观察SRAM数据总线上的数据。
2、软体调试
这里是指借助NIOS II软核的办法来测试SRAM,有两种方法:
一、将软核下载到SRAM里面,如果能下载进去且程序运行正常,则SRAM正常;
二、将软核下载到其他存储器中,对SRAM进行读写操作,如果读写数据正常,则SRAM正常。
PS:硬体调试和软体调试的工程均已经上传附件。