diff options
Diffstat (limited to 'rtl')
| -rw-r--r-- | rtl/core/arm810.sv | 7 | ||||
| -rw-r--r-- | rtl/core/control/control.sv | 9 | ||||
| -rw-r--r-- | rtl/core/decode/decode.sv | 32 | ||||
| -rw-r--r-- | rtl/core/uarch.sv | 6 |
4 files changed, 29 insertions, 25 deletions
diff --git a/rtl/core/arm810.sv b/rtl/core/arm810.sv index 6d4880f..c0d5750 100644 --- a/rtl/core/arm810.sv +++ b/rtl/core/arm810.sv @@ -29,12 +29,12 @@ module arm810 .* ); - ptr dec_branch_offset; + branch_decode dec_branch; snd_decode dec_snd; data_decode dec_data; ldst_decode dec_ldst; logic dec_execute, dec_conditional, dec_undefined, dec_writeback, - dec_branch, dec_update_flags, dec_uses_rn; + dec_update_flags, dec_uses_rn; core_decode decode ( @@ -43,9 +43,8 @@ module arm810 .undefined(dec_undefined), .writeback(dec_writeback), .uses_rn(dec_uses_rn), - .branch(dec_branch), .update_flags(dec_update_flags), - .branch_offset(dec_branch_offset), + .branch_ctrl(dec_branch), .snd_ctrl(dec_snd), .data_ctrl(dec_data), .ldst_ctrl(dec_ldst), diff --git a/rtl/core/control/control.sv b/rtl/core/control/control.sv index 0f5b067..81e7257 100644 --- a/rtl/core/control/control.sv +++ b/rtl/core/control/control.sv @@ -7,12 +7,11 @@ module core_control dec_undefined, dec_conditional, dec_uses_rn, - dec_branch, dec_writeback, dec_update_flags, - input ptr dec_branch_offset, - input snd_decode dec_snd, + input branch_decode dec_branch, input data_decode dec_data, + input snd_decode dec_snd, input ldst_decode dec_ldst, input ptr fetch_insn_pc, input psr_flags flags, @@ -178,8 +177,8 @@ module core_control bubble <= next_bubble; if(dec_execute & ~next_bubble) begin - branch <= dec_branch; - branch_target <= next_pc_visible + dec_branch_offset; + branch <= dec_branch.branch; + branch_target <= next_pc_visible + dec_branch.offset; alu <= dec_data.op; ra <= dec_data.rn; diff --git a/rtl/core/decode/decode.sv b/rtl/core/decode/decode.sv index 9367e6d..cd3ee53 100644 --- a/rtl/core/decode/decode.sv +++ b/rtl/core/decode/decode.sv @@ -3,20 +3,19 @@ module core_decode ( - input word insn, - input psr_flags flags, - - output logic execute, - conditional, - undefined, - writeback, - update_flags, - uses_rn, - branch, - output ptr branch_offset, - output snd_decode snd_ctrl, - output data_decode data_ctrl, - output ldst_decode ldst_ctrl + input word insn, + input psr_flags flags, + + output logic execute, + conditional, + undefined, + writeback, + update_flags, + uses_rn, + output branch_decode branch_ctrl, + output snd_decode snd_ctrl, + output data_decode data_ctrl, + output ldst_decode ldst_ctrl ); //TODO @@ -45,12 +44,13 @@ module core_decode .* ); - logic branch_link; + logic branch, branch_link; + assign branch_ctrl.branch = branch; core_decode_branch group_branch ( .link(branch_link), - .offset(branch_offset), + .offset(branch_ctrl.offset), .* ); diff --git a/rtl/core/uarch.sv b/rtl/core/uarch.sv index 5b4183c..1574895 100644 --- a/rtl/core/uarch.sv +++ b/rtl/core/uarch.sv @@ -66,6 +66,12 @@ typedef struct packed typedef struct packed { + logic branch; + ptr offset; +} branch_decode; + +typedef struct packed +{ reg_num r, r_shift; logic shift_by_reg, |
