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:硬体调试和软体调试的工程均已经上传附件。

posted @ 2011-10-31 11:27  sunev  阅读(1632)  评论(0编辑  收藏  举报