Monday, October 31, 2011
Friday, October 7, 2011
pSRAM memory test for the Nexys 2
This is a very simple pSRAM memory test for the Nexys 2 with the Spartan 3E 500 FPGA. Simply writes and reads back the memory.
Note that the RAM chip on the Nexys 2 board is the MT45W8MW16BGX in a BGA package.
Note that the RAM chip on the Nexys 2 board is the MT45W8MW16BGX in a BGA package.
module Main( input wire clk, output wire [7:0] Led, input wire [3:0] btn, output wire MemOE, output wire MemWR, output wire RamAdv, output wire RamCS, output wire RamClk, output wire RamLB, output wire RamUB, output wire [23:1] MemAdr, inout wire [15:0] MemDB ); //Registers reg [31:0] state = 0; reg [7:0] rLed; reg rMemOE = 1; reg rMemWR = 1; reg [15:0] rMemDB; reg [23:1] rMemAdr; //Static assignments assign RamCS = 0; //chip select is always low (enabled) assign RamClk = 0; //clk is disabled in asynchronous mode assign RamAdv = 0; //address valid can always be pulled low in asynchronous mode assign RamLB = 0; //lower byte is enabled assign RamUB = 0; //upper byte is enabled //Register assignments assign MemOE = rMemOE; assign MemWR = rMemWR; assign MemDB[15:0] = rMemDB[15:0]; assign MemAdr[23:1] = rMemAdr[23:1]; assign Led[7:0] = rLed[7:0]; always @(posedge clk) begin if(btn[0]) //btn[0] is reset/write state <= 0; else if(btn[1]) //btn[1] is read state <= 50; else if(btn[2]) //btn[2] just toggles Led[7] rLed[7] <= ~rLed[7]; else begin case(state) 0: begin rMemAdr <= 23'b0; //set address to 0 rMemDB <= 16'h0505; //write 0x0505 to the data bus rMemWR <= 0; //pull write enable low to write the data state <= 10; end 10: begin rMemWR <= 1; //pull write enable to high again end 50: begin rMemDB <= 16'bzzzzzzzzzzzzzzzz; //set the data bus to high impedance rMemOE <= 0; //pull output enable low to start a read state <= 60; end 60: begin rLed[3:0] <= MemDB[7:0]; //set the LEDs to show the data state <= 70; end 70: begin rMemOE <= 1; //pull output enable high again end endcase end end endmodule
Subscribe to:
Posts (Atom)