parent
53865371ce
commit
738fba1d6f
|
@ -29,7 +29,7 @@ module divider(
|
|||
input wire start_i, // 开始信号,运算期间这个信号需要一直保持有效
|
||||
input wire[3:0] op_i, // 具体是哪一条指令
|
||||
|
||||
output reg[31:0] result_o, // 除法结果,高32位是余数,低32位是商
|
||||
output reg[31:0] result_o, // 除法结果
|
||||
output reg ready_o // 运算结束信号
|
||||
|
||||
);
|
||||
|
|
|
@ -332,6 +332,7 @@ module exu(
|
|||
.muldiv_op_divu_i(muldiv_op_divu_o),
|
||||
.muldiv_op_rem_i(muldiv_op_rem_o),
|
||||
.muldiv_op_remu_i(muldiv_op_remu_o),
|
||||
.int_stall_i(int_stall_i),
|
||||
.muldiv_reg_wdata_o(muldiv_reg_wdata_o),
|
||||
.muldiv_reg_we_o(muldiv_reg_we_o),
|
||||
.muldiv_stall_o(muldiv_stall_o)
|
||||
|
@ -366,9 +367,9 @@ module exu(
|
|||
.reg_wdata_o(reg_wdata_o)
|
||||
);
|
||||
|
||||
assign reg_we_o = commit_reg_we_o;
|
||||
assign reg_we_o = commit_reg_we_o & (~int_stall_i);
|
||||
|
||||
assign jump_flag_o = bjp_cmp_res_o | bjp_op_jump_o | sys_op_fence_o | int_assert_i;
|
||||
assign jump_flag_o = ((bjp_cmp_res_o | bjp_op_jump_o | sys_op_fence_o) & (~int_stall_i)) | int_assert_i;
|
||||
assign jump_addr_o = int_assert_i? int_addr_i:
|
||||
sys_op_fence_o? next_pc_i:
|
||||
bjp_res_o;
|
||||
|
@ -376,10 +377,10 @@ module exu(
|
|||
|
||||
assign csr_raddr_o = csr_addr_o;
|
||||
assign csr_waddr_o = csr_addr_o;
|
||||
assign csr_we_o = req_csr_o;
|
||||
assign csr_we_o = req_csr_o & (~int_stall_i);
|
||||
assign csr_wdata_o = alu_res_o;
|
||||
|
||||
assign mem_we_o = mem_mem_we_o;
|
||||
assign mem_we_o = mem_mem_we_o & (~int_stall_i);
|
||||
assign mem_wdata_o = mem_wdata;
|
||||
|
||||
assign inst_valid_o = hold_flag_o? 1'b0: inst_valid_i;
|
||||
|
|
|
@ -33,6 +33,8 @@ module exu_muldiv(
|
|||
input wire muldiv_op_rem_i,
|
||||
input wire muldiv_op_remu_i,
|
||||
|
||||
input wire int_stall_i,
|
||||
|
||||
output wire[31:0] muldiv_reg_wdata_o,
|
||||
output wire muldiv_reg_we_o,
|
||||
output wire muldiv_stall_o
|
||||
|
@ -41,7 +43,7 @@ module exu_muldiv(
|
|||
|
||||
// 除法操作
|
||||
wire op_div = muldiv_op_div_i | muldiv_op_divu_i | muldiv_op_rem_i | muldiv_op_remu_i;
|
||||
wire div_start = op_div & (!div_ready);
|
||||
wire div_start = op_div & (!div_ready) & (~int_stall_i);
|
||||
wire[3:0] div_op = {muldiv_op_div_i, muldiv_op_divu_i, muldiv_op_rem_i, muldiv_op_remu_i};
|
||||
wire[31:0] div_result;
|
||||
wire div_ready;
|
||||
|
|
Loading…
Reference in New Issue