Fix SRAM model: level-sensitive write for burst support
This commit is contained in:
25
sim/sram.v
25
sim/sram.v
@@ -28,24 +28,15 @@ module sram_sp #(
|
||||
assign write_enable[3:0] = (~ram_be_n) & {4{(~ram_ce_n) & (~ram_we_n)}};
|
||||
|
||||
|
||||
always@(posedge write_enable[0]) begin
|
||||
#10;
|
||||
if(~ram_be_n[0]) begin
|
||||
BRAM[ram_addr][7:0] <= ram_data[7:0];
|
||||
if (ram_addr >= 10'd320 && ram_addr < 10'd400)
|
||||
$display("SRAM WR addr=%d data=%08x be0=%b", ram_addr, ram_data, ram_be_n[0]);
|
||||
// Level-sensitive write (supports burst writes)
|
||||
always @(*) begin
|
||||
#1;
|
||||
if (!ram_ce_n && !ram_we_n) begin
|
||||
if (!ram_be_n[0]) BRAM[ram_addr][7:0] = ram_data[7:0];
|
||||
if (!ram_be_n[1]) BRAM[ram_addr][15:8] = ram_data[15:8];
|
||||
if (!ram_be_n[2]) BRAM[ram_addr][23:16] = ram_data[23:16];
|
||||
if (!ram_be_n[3]) BRAM[ram_addr][31:24] = ram_data[31:24];
|
||||
end
|
||||
always@(posedge write_enable[1]) begin
|
||||
#10;
|
||||
if(~ram_be_n[1]) BRAM[ram_addr][15:8] <= ram_data[15:8];
|
||||
end
|
||||
always@(posedge write_enable[2]) begin
|
||||
#10;
|
||||
if(~ram_be_n[2]) BRAM[ram_addr][23:16] <= ram_data[23:16];
|
||||
end
|
||||
always@(posedge write_enable[3]) begin
|
||||
#10;
|
||||
if(~ram_be_n[3]) BRAM[ram_addr][31:24] <= ram_data[31:24];
|
||||
end
|
||||
|
||||
wire [31:0] RDATA = BRAM[ram_addr];
|
||||
|
||||
Reference in New Issue
Block a user