blob: ce6fae867012a63f6c8e32b62b4320de7acbe5f3 [file] [log] [blame]
module ins_buffer #(
parameter INS_BUFFER_DATA = 96,
parameter INS_BUFFER_SIZE = 8,
parameter INS_BUFFER_SIZE_WIDTH = 3
) (
input clk,
input reset,
input flush,
input [31:0] pc_in,
input [31:0] next_pc_in,
input [31:0] instruction_in,
input rd_en,//from decode
input wr_en,//from fetch
// from fu
output [31:0] pc_out,
output [31:0] next_pc_out,
output [31:0] instruction_out,
output reg ins_full, //to fetch
output reg ins_empty //to decode
);
wire [INS_BUFFER_DATA-1:0] buffer_input_line;
reg [INS_BUFFER_DATA-1:0] buffer_output_line;
assign buffer_input_line[31:0] = pc_in;
assign buffer_input_line[63:32] = next_pc_in;
assign buffer_input_line[95:64] = instruction_in;
assign pc_out = buffer_output_line[31:0];
assign next_pc_out = buffer_output_line[63:32];
assign instruction_out = buffer_output_line[95:64];
/* verilator lint_off UNUSED */
reg [INS_BUFFER_SIZE_WIDTH-1:0] fifo_num;
fifo_tmp #(
.FIFO_DATA_WIDTH(INS_BUFFER_DATA),
.FIFO_SIZE(INS_BUFFER_SIZE),
.FIFO_SIZE_WIDTH(INS_BUFFER_SIZE_WIDTH)
) ins_buffer(
.clk(clk),
.reset(reset),
.flush(flush),
.wr_en(wr_en),
.rd_en(rd_en&!ins_empty),
.wdata(buffer_input_line),
.rdata(buffer_output_line),
.fifo_full(ins_full),
.fifo_empty(ins_empty),
.fifo_num(fifo_num)
);
/* verilator lint_on UNUSED */
endmodule