From ed0bd705f94f6aea568ec8405534984a37770f21 Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Mon, 25 Sep 2023 19:12:49 -0600 Subject: rtl/core, tb: replace bus_master with a new top-level module --- rtl/core/decode/branch.sv | 18 ------------ rtl/core/decode/branch_dec.sv | 18 ++++++++++++ rtl/core/decode/coproc.sv | 24 ---------------- rtl/core/decode/coproc_dec.sv | 24 ++++++++++++++++ rtl/core/decode/data.sv | 65 ------------------------------------------- rtl/core/decode/data_dec.sv | 65 +++++++++++++++++++++++++++++++++++++++++++ rtl/core/decode/mul.sv | 33 ---------------------- rtl/core/decode/mul_dec.sv | 33 ++++++++++++++++++++++ 8 files changed, 140 insertions(+), 140 deletions(-) delete mode 100644 rtl/core/decode/branch.sv create mode 100644 rtl/core/decode/branch_dec.sv delete mode 100644 rtl/core/decode/coproc.sv create mode 100644 rtl/core/decode/coproc_dec.sv delete mode 100644 rtl/core/decode/data.sv create mode 100644 rtl/core/decode/data_dec.sv delete mode 100644 rtl/core/decode/mul.sv create mode 100644 rtl/core/decode/mul_dec.sv (limited to 'rtl/core/decode') diff --git a/rtl/core/decode/branch.sv b/rtl/core/decode/branch.sv deleted file mode 100644 index 1dbc1ad..0000000 --- a/rtl/core/decode/branch.sv +++ /dev/null @@ -1,18 +0,0 @@ -`include "core/decode/isa.sv" -`include "core/uarch.sv" - -module core_decode_branch -( - input word insn, - - output logic link, - output ptr offset -); - - logic[23:0] immediate; - assign immediate = insn `FIELD_B_OFFSET; - - assign link = insn `FIELD_B_L; - assign offset = {{6{immediate[23]}}, immediate}; - -endmodule diff --git a/rtl/core/decode/branch_dec.sv b/rtl/core/decode/branch_dec.sv new file mode 100644 index 0000000..1dbc1ad --- /dev/null +++ b/rtl/core/decode/branch_dec.sv @@ -0,0 +1,18 @@ +`include "core/decode/isa.sv" +`include "core/uarch.sv" + +module core_decode_branch +( + input word insn, + + output logic link, + output ptr offset +); + + logic[23:0] immediate; + assign immediate = insn `FIELD_B_OFFSET; + + assign link = insn `FIELD_B_L; + assign offset = {{6{immediate[23]}}, immediate}; + +endmodule diff --git a/rtl/core/decode/coproc.sv b/rtl/core/decode/coproc.sv deleted file mode 100644 index 153cadf..0000000 --- a/rtl/core/decode/coproc.sv +++ /dev/null @@ -1,24 +0,0 @@ -`include "core/decode/isa.sv" -`include "core/uarch.sv" - -module core_decode_coproc -( - input word insn, - - output coproc_decode decode, - output reg_num rd, - output logic writeback, - update_flags -); - - assign rd = insn `FIELD_CP_RD; - assign writeback = decode.load && rd != `R15; - assign update_flags = decode.load && rd == `R15; - - assign decode.crn = insn `FIELD_CP_CRN; - assign decode.crm = insn `FIELD_CP_CRM; - assign decode.op1 = insn `FIELD_CP_OPCODE; - assign decode.op2 = insn `FIELD_CP_OPCODE2; - assign decode.load = insn `FIELD_CP_LOAD; - -endmodule diff --git a/rtl/core/decode/coproc_dec.sv b/rtl/core/decode/coproc_dec.sv new file mode 100644 index 0000000..153cadf --- /dev/null +++ b/rtl/core/decode/coproc_dec.sv @@ -0,0 +1,24 @@ +`include "core/decode/isa.sv" +`include "core/uarch.sv" + +module core_decode_coproc +( + input word insn, + + output coproc_decode decode, + output reg_num rd, + output logic writeback, + update_flags +); + + assign rd = insn `FIELD_CP_RD; + assign writeback = decode.load && rd != `R15; + assign update_flags = decode.load && rd == `R15; + + assign decode.crn = insn `FIELD_CP_CRN; + assign decode.crm = insn `FIELD_CP_CRM; + assign decode.op1 = insn `FIELD_CP_OPCODE; + assign decode.op2 = insn `FIELD_CP_OPCODE2; + assign decode.load = insn `FIELD_CP_LOAD; + +endmodule diff --git a/rtl/core/decode/data.sv b/rtl/core/decode/data.sv deleted file mode 100644 index f744972..0000000 --- a/rtl/core/decode/data.sv +++ /dev/null @@ -1,65 +0,0 @@ -`include "core/decode/isa.sv" -`include "core/uarch.sv" - -module core_decode_data -( - input word insn, - - output data_decode decode, - output logic snd_is_imm, - snd_shift_by_reg_if_reg, - writeback, - conditional, - update_flags, - restore_spsr -); - - alu_op op; - reg_num rn, rd; - logic uses_rn; - - assign decode.op = op; - assign decode.rn = rn; - assign decode.rd = rd; - assign decode.uses_rn = uses_rn; - - assign rn = insn `FIELD_DATA_RN; - assign rd = insn `FIELD_DATA_RD; - assign op = insn `FIELD_DATA_OPCODE; - - assign snd_is_imm = insn `FIELD_DATA_IMM; - assign snd_shift_by_reg_if_reg = insn `FIELD_DATA_REGSHIFT; - - always_comb begin - unique case(op) - `ALU_ADC, `ALU_SBC, `ALU_RSC: - conditional = 1; - - default: - conditional = 0; - endcase - - unique case(op) - `ALU_CMP, `ALU_CMN, `ALU_TST, `ALU_TEQ: - writeback = 0; - - default: - writeback = 1; - endcase - - unique case(op) - `ALU_MOV, `ALU_MVN: - uses_rn = 0; - - default: - uses_rn = 1; - endcase - - update_flags = insn `FIELD_DATA_S; - restore_spsr = (rd == `R15) & update_flags; - - if(restore_spsr) - update_flags = 0; - end - -endmodule diff --git a/rtl/core/decode/data_dec.sv b/rtl/core/decode/data_dec.sv new file mode 100644 index 0000000..f744972 --- /dev/null +++ b/rtl/core/decode/data_dec.sv @@ -0,0 +1,65 @@ +`include "core/decode/isa.sv" +`include "core/uarch.sv" + +module core_decode_data +( + input word insn, + + output data_decode decode, + output logic snd_is_imm, + snd_shift_by_reg_if_reg, + writeback, + conditional, + update_flags, + restore_spsr +); + + alu_op op; + reg_num rn, rd; + logic uses_rn; + + assign decode.op = op; + assign decode.rn = rn; + assign decode.rd = rd; + assign decode.uses_rn = uses_rn; + + assign rn = insn `FIELD_DATA_RN; + assign rd = insn `FIELD_DATA_RD; + assign op = insn `FIELD_DATA_OPCODE; + + assign snd_is_imm = insn `FIELD_DATA_IMM; + assign snd_shift_by_reg_if_reg = insn `FIELD_DATA_REGSHIFT; + + always_comb begin + unique case(op) + `ALU_ADC, `ALU_SBC, `ALU_RSC: + conditional = 1; + + default: + conditional = 0; + endcase + + unique case(op) + `ALU_CMP, `ALU_CMN, `ALU_TST, `ALU_TEQ: + writeback = 0; + + default: + writeback = 1; + endcase + + unique case(op) + `ALU_MOV, `ALU_MVN: + uses_rn = 0; + + default: + uses_rn = 1; + endcase + + update_flags = insn `FIELD_DATA_S; + restore_spsr = (rd == `R15) & update_flags; + + if(restore_spsr) + update_flags = 0; + end + +endmodule diff --git a/rtl/core/decode/mul.sv b/rtl/core/decode/mul.sv deleted file mode 100644 index 114b65b..0000000 --- a/rtl/core/decode/mul.sv +++ /dev/null @@ -1,33 +0,0 @@ -`include "core/decode/isa.sv" -`include "core/uarch.sv" - -module core_decode_mul -( - input word insn, - - output mul_decode decode, - output reg_num rd, - rs, - rm, - output logic update_flags -); - - logic long_mul; - reg_num short_rd, rn; - - assign rd = long_mul ? rn : short_rd; - assign rs = insn `FIELD_MUL_RS; - assign rm = insn `FIELD_MUL_RM; - assign update_flags = insn `FIELD_MUL_S; - - assign decode.add = insn `FIELD_MUL_ACC; - assign decode.long_mul = long_mul; - assign decode.signed_mul = insn `FIELD_MUL_SIGNED; - assign decode.r_add_lo = rn; - assign decode.r_add_hi = short_rd; - - assign long_mul = insn `FIELD_MUL_LONG; - assign short_rd = insn `FIELD_MUL_RD; - assign rn = insn `FIELD_MUL_RN; - -endmodule diff --git a/rtl/core/decode/mul_dec.sv b/rtl/core/decode/mul_dec.sv new file mode 100644 index 0000000..114b65b --- /dev/null +++ b/rtl/core/decode/mul_dec.sv @@ -0,0 +1,33 @@ +`include "core/decode/isa.sv" +`include "core/uarch.sv" + +module core_decode_mul +( + input word insn, + + output mul_decode decode, + output reg_num rd, + rs, + rm, + output logic update_flags +); + + logic long_mul; + reg_num short_rd, rn; + + assign rd = long_mul ? rn : short_rd; + assign rs = insn `FIELD_MUL_RS; + assign rm = insn `FIELD_MUL_RM; + assign update_flags = insn `FIELD_MUL_S; + + assign decode.add = insn `FIELD_MUL_ACC; + assign decode.long_mul = long_mul; + assign decode.signed_mul = insn `FIELD_MUL_SIGNED; + assign decode.r_add_lo = rn; + assign decode.r_add_hi = short_rd; + + assign long_mul = insn `FIELD_MUL_LONG; + assign short_rd = insn `FIELD_MUL_RD; + assign rn = insn `FIELD_MUL_RN; + +endmodule -- cgit v1.2.3