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:
Comments (Atom)