Warp-LC/fpga/L2CacheWay.v

54 lines
971 B
Verilog

/* L2 Cache Way
* 1024 x 47 bits
* (1) Valid
* (14) Tag - {A[30], A[28], A[25:2]}
* (32) Data
*/
module L2CacheWay(
input CLK,
input CPUCLKr,
input [27:2] RDA,
output [31:0] RDD,
output RDMatch,
input [27:2] WRA,
input [31:0] WRD,
input [3:0] WRM,
input TS,
input WR,
input CLR,
input ALL);
/* Read address */
wire [15:0] RDATag = RDA[27:12];
wire [11:0] RDAIndex = RDA[11:2];
/* Write address */
wire [15:0] WRATag = WRA[27:12];
wire [11:0] WRAIndex = WRA[11:2];
/* Cache way RAM */
wire [31:0] TSD;
wire [15:0] RDTag;
wire [15:0] TSTag;
wire RDValid;
wire TSValid;
assign RDMatch = RDValid && RDTag==RDATag;
wire TSMatch = TSValid && TSTag==WRATag;
L2WayRAM way (
.clka(CLK),
.ena(~CPUCLKr),
.wea(1'b0),
.addra(RDAIndex),
.dina(50'b0),
.douta({RDValid, RDTag, RDD}),
.clkb(CLK),
.enb(1'b0),
.web(1'b0),
.addrb(WRAIndex),
.dinb({~CLR, WRATag, WRD}),
.doutb({TSValid, TSTag, TSD}));
endmodule