summaryrefslogtreecommitdiff
path: root/rtl
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-10-23 23:27:51 -0600
committerAlejandro Soto <alejandro@34project.org>2022-10-23 23:27:51 -0600
commit1e17c6994897bc2edbde3b52db6a1e39d9a20f03 (patch)
tree7fdb115cb159eaa7231739073c24215f84550732 /rtl
parent1ad7b946c13493a19fcebb0d1d1e1c4397f476e8 (diff)
Move branch control signals to struct branch_decode
Diffstat (limited to 'rtl')
-rw-r--r--rtl/core/arm810.sv7
-rw-r--r--rtl/core/control/control.sv9
-rw-r--r--rtl/core/decode/decode.sv32
-rw-r--r--rtl/core/uarch.sv6
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,