icicle/rv32_execute.sv

85 lines
1.8 KiB
Systemverilog
Raw Normal View History

2017-12-01 23:30:33 +00:00
`ifndef RV32_EXECUTE
`define RV32_EXECUTE
2017-12-01 22:36:26 +00:00
`include "rv32_alu.sv"
2017-12-02 15:23:12 +00:00
`include "rv32_branch.sv"
2017-12-01 22:36:26 +00:00
module rv32_execute (
input clk,
/* control in */
input [3:0] alu_op_in,
input alu_sub_sra_in,
input alu_src1_in,
input alu_src2_in,
2017-12-02 10:22:48 +00:00
input mem_read_en_in,
input mem_write_en_in,
2017-12-02 15:23:12 +00:00
input [1:0] branch_op_in,
input branch_pc_src_in,
2017-12-02 11:26:12 +00:00
input [4:0] rd_in,
input rd_writeback_in,
2017-12-01 22:36:26 +00:00
/* data in */
input [31:0] pc_in,
input [31:0] rs1_value_in,
input [31:0] rs2_value_in,
input [31:0] imm_in,
2017-12-02 10:22:48 +00:00
/* control out */
output mem_read_en_out,
output mem_write_en_out,
2017-12-02 15:23:12 +00:00
output [1:0] branch_op_out,
2017-12-02 11:26:12 +00:00
output [4:0] rd_out,
output rd_writeback_out,
2017-12-02 10:22:48 +00:00
2017-12-01 22:36:26 +00:00
/* data out */
2017-12-02 10:22:48 +00:00
output [31:0] result_out,
2017-12-02 15:23:12 +00:00
output [31:0] rs2_value_out,
output [31:0] branch_pc_out
2017-12-01 22:36:26 +00:00
);
rv32_alu alu (
.clk(clk),
/* control in */
.op_in(alu_op_in),
.sub_sra_in(alu_sub_sra_in),
.src1_in(alu_src1_in),
.src2_in(alu_src2_in),
/* data in */
.pc_in(pc_in),
.rs1_value_in(rs1_value_in),
.rs2_value_in(rs2_value_in),
.imm_in(imm_in),
/* data out */
.result_out(result_out)
);
2017-12-02 10:22:48 +00:00
2017-12-02 15:23:12 +00:00
rv32_branch_pc_mux branch_pc_mux (
.clk(clk),
/* control in */
.pc_src_in(branch_pc_src_in),
/* data in */
.pc_in(pc_in),
.rs1_value_in(rs1_value_in),
.imm_in(imm_in),
/* data out */
.pc_out(branch_pc_out)
);
2017-12-02 18:29:51 +00:00
always_ff @(posedge clk) begin
2017-12-02 10:22:48 +00:00
mem_read_en_out <= mem_read_en_in;
mem_write_en_out <= mem_write_en_in;
2017-12-02 15:23:12 +00:00
branch_op_out <= branch_op_in;
2017-12-02 11:26:12 +00:00
rd_out <= rd_in;
rd_writeback_out <= rd_writeback_in;
2017-12-02 10:22:48 +00:00
rs2_value_out <= rs2_value_in;
end
2017-12-01 22:36:26 +00:00
endmodule
2017-12-01 23:30:33 +00:00
`endif