proper srams
This commit is contained in:
@@ -160,37 +160,69 @@ module VX_dp_ram #(
|
|||||||
assign rdata = ram[raddr];
|
assign rdata = ram[raddr];
|
||||||
end
|
end
|
||||||
end else begin
|
end else begin
|
||||||
if (OUT_REG != 0) begin
|
`ifndef FIRESIM
|
||||||
reg [DATAW-1:0] ram [SIZE-1:0];
|
if (DATAW == 1024 && SIZE == 16) begin // dcache data
|
||||||
reg [DATAW-1:0] rdata_r;
|
dcache_data ram (
|
||||||
`RAM_INITIALIZATION
|
.R0_addr(raddr),
|
||||||
always @(posedge clk) begin
|
.R0_clk(clk),
|
||||||
if (write) begin
|
.R0_data(rdata),
|
||||||
for (integer i = 0; i < WRENW; ++i) begin
|
.R0_en(read),
|
||||||
if (wren[i])
|
.W0_addr(waddr),
|
||||||
ram[waddr][i * WSELW +: WSELW] <= wdata[i * WSELW +: WSELW];
|
.W0_clk(clk),
|
||||||
end
|
.W0_data(wdata),
|
||||||
end
|
.W0_en(write),
|
||||||
if (read) begin
|
.W0_mask(wren)
|
||||||
rdata_r <= ram[raddr];
|
);
|
||||||
end
|
end else if (DATAW == 305 && SIZE == 8) begin // mshr
|
||||||
end
|
cache_mshr ram (
|
||||||
assign rdata = rdata_r;
|
.R0_addr(raddr),
|
||||||
|
.R0_clk(clk),
|
||||||
|
.R0_data(rdata),
|
||||||
|
.R0_en(read),
|
||||||
|
.W0_addr(waddr),
|
||||||
|
.W0_clk(clk),
|
||||||
|
.W0_data(wdata),
|
||||||
|
.W0_en(write)
|
||||||
|
);
|
||||||
|
end else if (DATAW == 24 && SIZE == 16) begin // dcache tags
|
||||||
|
dcache_tags ram (
|
||||||
|
.R0_addr(raddr),
|
||||||
|
.R0_clk(clk),
|
||||||
|
.R0_data(rdata),
|
||||||
|
.R0_en(read),
|
||||||
|
.W0_addr(waddr),
|
||||||
|
.W0_clk(clk),
|
||||||
|
.W0_data(wdata),
|
||||||
|
.W0_en(write)
|
||||||
|
);
|
||||||
|
end else if (DATAW == 1024 && SIZE == 128) begin // icache data
|
||||||
|
icache_data ram (
|
||||||
|
.R0_addr(raddr),
|
||||||
|
.R0_clk(clk),
|
||||||
|
.R0_data(rdata),
|
||||||
|
.R0_en(read),
|
||||||
|
.W0_addr(waddr),
|
||||||
|
.W0_clk(clk),
|
||||||
|
.W0_data(wdata),
|
||||||
|
.W0_en(write),
|
||||||
|
.W0_mask(wren)
|
||||||
|
);
|
||||||
|
end else if (DATAW == 21 && SIZE == 128) begin // icache tags
|
||||||
|
icache_tags ram (
|
||||||
|
.R0_addr(raddr),
|
||||||
|
.R0_clk(clk),
|
||||||
|
.R0_data(rdata),
|
||||||
|
.R0_en(read),
|
||||||
|
.W0_addr(waddr),
|
||||||
|
.W0_clk(clk),
|
||||||
|
.W0_data(wdata),
|
||||||
|
.W0_en(write)
|
||||||
|
);
|
||||||
end else begin
|
end else begin
|
||||||
if (NO_RWCHECK != 0) begin
|
`endif
|
||||||
`NO_RW_RAM_CHECK reg [DATAW-1:0] ram [SIZE-1:0];
|
if (OUT_REG != 0) begin
|
||||||
`RAM_INITIALIZATION
|
|
||||||
always @(posedge clk) begin
|
|
||||||
if (write) begin
|
|
||||||
for (integer i = 0; i < WRENW; ++i) begin
|
|
||||||
if (wren[i])
|
|
||||||
ram[waddr][i * WSELW +: WSELW] <= wdata[i * WSELW +: WSELW];
|
|
||||||
end
|
|
||||||
end
|
|
||||||
end
|
|
||||||
assign rdata = ram[raddr];
|
|
||||||
end else begin
|
|
||||||
reg [DATAW-1:0] ram [SIZE-1:0];
|
reg [DATAW-1:0] ram [SIZE-1:0];
|
||||||
|
reg [DATAW-1:0] rdata_r;
|
||||||
`RAM_INITIALIZATION
|
`RAM_INITIALIZATION
|
||||||
always @(posedge clk) begin
|
always @(posedge clk) begin
|
||||||
if (write) begin
|
if (write) begin
|
||||||
@@ -199,10 +231,41 @@ module VX_dp_ram #(
|
|||||||
ram[waddr][i * WSELW +: WSELW] <= wdata[i * WSELW +: WSELW];
|
ram[waddr][i * WSELW +: WSELW] <= wdata[i * WSELW +: WSELW];
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
if (read) begin
|
||||||
|
rdata_r <= ram[raddr];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign rdata = rdata_r;
|
||||||
|
end else begin
|
||||||
|
if (NO_RWCHECK != 0) begin
|
||||||
|
`NO_RW_RAM_CHECK reg [DATAW-1:0] ram [SIZE-1:0];
|
||||||
|
`RAM_INITIALIZATION
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (write) begin
|
||||||
|
for (integer i = 0; i < WRENW; ++i) begin
|
||||||
|
if (wren[i])
|
||||||
|
ram[waddr][i * WSELW +: WSELW] <= wdata[i * WSELW +: WSELW];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign rdata = ram[raddr];
|
||||||
|
end else begin
|
||||||
|
reg [DATAW-1:0] ram [SIZE-1:0];
|
||||||
|
`RAM_INITIALIZATION
|
||||||
|
always @(posedge clk) begin
|
||||||
|
if (write) begin
|
||||||
|
for (integer i = 0; i < WRENW; ++i) begin
|
||||||
|
if (wren[i])
|
||||||
|
ram[waddr][i * WSELW +: WSELW] <= wdata[i * WSELW +: WSELW];
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
assign rdata = ram[raddr];
|
||||||
end
|
end
|
||||||
assign rdata = ram[raddr];
|
|
||||||
end
|
end
|
||||||
|
`ifndef FIRESIM
|
||||||
end
|
end
|
||||||
|
`endif
|
||||||
end
|
end
|
||||||
`endif
|
`endif
|
||||||
end else begin
|
end else begin
|
||||||
|
|||||||
Reference in New Issue
Block a user