initial commit
This commit is contained in:
85
rtl/ip/ram_wrap/cache_sram.v
Normal file
85
rtl/ip/ram_wrap/cache_sram.v
Normal file
@@ -0,0 +1,85 @@
|
||||
`include "config.h"
|
||||
|
||||
module data_bank_sram (
|
||||
input [ 7:0] addra ,
|
||||
input clka ,
|
||||
input [31:0] dina ,
|
||||
output [31:0] douta ,
|
||||
input ena ,
|
||||
input [ 3:0] wea
|
||||
);
|
||||
`ifdef USE_CACHE
|
||||
localparam V_STYLE = "block";
|
||||
localparam P_STYLE = (V_STYLE == "ultra") ? "uram" :
|
||||
(V_STYLE == "distributed") ? "select_ram" :
|
||||
"block_ram";
|
||||
|
||||
(*ram_style = V_STYLE*) reg [31:0] mem_reg [255:0]/*synthesis syn_ramstyle=P_STYLE*/;
|
||||
reg [31:0] output_buffer;
|
||||
|
||||
always @(posedge clka) begin
|
||||
if (ena) begin
|
||||
if (wea) begin
|
||||
if (wea[0]) begin
|
||||
mem_reg[addra][ 7: 0] <= dina[ 7: 0];
|
||||
end
|
||||
|
||||
if (wea[1]) begin
|
||||
mem_reg[addra][15: 8] <= dina[15: 8];
|
||||
end
|
||||
|
||||
if (wea[2]) begin
|
||||
mem_reg[addra][23:16] <= dina[23:16];
|
||||
end
|
||||
|
||||
if (wea[3]) begin
|
||||
mem_reg[addra][31:24] <= dina[31:24];
|
||||
end
|
||||
end
|
||||
else begin
|
||||
output_buffer <= mem_reg[addra];
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign douta = output_buffer;
|
||||
`else
|
||||
assign douta = 32'h0;
|
||||
`endif
|
||||
|
||||
endmodule
|
||||
|
||||
module tagv_sram (
|
||||
input [ 7:0] addra ,
|
||||
input clka ,
|
||||
input [20:0] dina ,
|
||||
output [20:0] douta ,
|
||||
input ena ,
|
||||
input wea
|
||||
);
|
||||
`ifdef USE_CACHE
|
||||
localparam V_STYLE = "block";
|
||||
localparam P_STYLE = (V_STYLE == "ultra") ? "uram" :
|
||||
(V_STYLE == "distributed") ? "select_ram" :
|
||||
"block_ram";
|
||||
|
||||
(*ram_style = V_STYLE*) reg [20:0] mem_reg [255:0]/*synthesis syn_ramstyle=P_STYLE*/;
|
||||
reg [20:0] output_buffer;
|
||||
|
||||
always @(posedge clka) begin
|
||||
if (ena) begin
|
||||
if (wea) begin
|
||||
mem_reg[addra] <= dina;
|
||||
end
|
||||
else begin
|
||||
output_buffer <= mem_reg[addra];
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
assign douta = output_buffer;
|
||||
`else
|
||||
assign douta = 21'h0;
|
||||
`endif
|
||||
|
||||
endmodule
|
||||
Reference in New Issue
Block a user