You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
Coq
75 lines
Coq
3 years ago
|
`include "defs.v"
|
||
|
|
||
|
module gpr #(
|
||
|
parameter EXPAND_TYPE=`INFERRED
|
||
|
) (
|
||
|
input clk,
|
||
|
input [4:0] rd_adr_0,
|
||
|
output [31:0] rd_dat_0,
|
||
|
input [4:0] rd_adr_1,
|
||
|
output [31:0] rd_dat_1,
|
||
|
input [4:0] rd_adr_2,
|
||
|
output [31:0] rd_dat_2,
|
||
|
input wr_en_0,
|
||
|
input [4:0] wr_adr_0,
|
||
|
input [31:0] wr_dat_0
|
||
|
);
|
||
|
|
||
|
generate case (EXPAND_TYPE)
|
||
|
|
||
|
`INFERRED: begin
|
||
|
reg [31:0] regFile [0:31] /* verilator public */ ;
|
||
|
assign rd_dat_0 = regFile[rd_adr_0];
|
||
|
assign rd_dat_1 = regFile[rd_adr_1];
|
||
|
assign rd_dat_2 = regFile[rd_adr_2];
|
||
|
always @ (posedge clk) begin
|
||
|
if(wr_en_0) begin
|
||
|
regFile[wr_adr_0] <= wr_dat_0;
|
||
|
end
|
||
|
end
|
||
|
end
|
||
|
`GPR_2R1W: begin
|
||
|
/* veeerilator is parsing this when not gen'd */
|
||
|
DFFRF_2R1W #() regFile01 (
|
||
|
.CLK(clk),
|
||
|
.RA(rd_adr_0),
|
||
|
.DA(rd_dat_0),
|
||
|
.RB(rd_adr_1),
|
||
|
.DB(rd_dat_1),
|
||
|
.RW(wr_adr_0),
|
||
|
.WE(wr_en_0),
|
||
|
.DW(wr_dat_0)
|
||
|
);
|
||
|
// should this be a ram_32x32? any other diffs between reg/ram besides multiple we vs extra port?
|
||
|
DFFRF_2R1W #() regFile23 (
|
||
|
.CLK(clk),
|
||
|
.RA(rd_adr_2),
|
||
|
.DA(rd_dat_2),
|
||
|
.RB('h0),
|
||
|
.DB(),
|
||
|
.RW(wr_adr_0),
|
||
|
.WE(wr_en_0),
|
||
|
.DW(wr_dat_0)
|
||
|
);
|
||
|
end
|
||
|
`GPR_3R1W: begin
|
||
|
reg_3r1w #() regFile (
|
||
|
|
||
|
);
|
||
|
end
|
||
|
`GPR_RAM: begin
|
||
|
ram_32x32 #() regFile0 (
|
||
|
|
||
|
);
|
||
|
ram_32x32 #() regFile1 (
|
||
|
|
||
|
);
|
||
|
ram_32x32 #() regFile2 (
|
||
|
|
||
|
);
|
||
|
end
|
||
|
|
||
|
endcase
|
||
|
endgenerate
|
||
|
|
||
|
endmodule
|