summaryrefslogtreecommitdiff
path: root/rtl/core/control/ldst
diff options
context:
space:
mode:
authorAlejandro Soto <alejandro@34project.org>2022-11-13 05:22:23 -0600
committerAlejandro Soto <alejandro@34project.org>2022-11-13 05:54:44 -0600
commitd463acba5f9589085afb3dcc4058d82908ff90f2 (patch)
treee4ba47f2f9daa8e25b5c244f7af934ff18b54cbc /rtl/core/control/ldst
parent6cb000adf57d7af2ec4aac8fd93d12f09cc63556 (diff)
Convert core state machines to Quartus-inferring RTL
Diffstat (limited to 'rtl/core/control/ldst')
-rw-r--r--rtl/core/control/ldst/ldst.sv19
1 files changed, 9 insertions, 10 deletions
diff --git a/rtl/core/control/ldst/ldst.sv b/rtl/core/control/ldst/ldst.sv
index ef91775..cc52864 100644
--- a/rtl/core/control/ldst/ldst.sv
+++ b/rtl/core/control/ldst/ldst.sv
@@ -56,8 +56,10 @@ module core_control_ldst
mem_write <= 0;
mem_start <= 0;
mem_offset <= 0;
- end else unique case(next_cycle)
- ISSUE: begin
+ end else begin
+ mem_start <= 0;
+
+ if(next_cycle.issue) begin
// TODO: dec.ldst.unprivileged/user_regs
// TODO: byte/halfword sizes
if(issue)
@@ -69,21 +71,18 @@ module core_control_ldst
mem_regs <= dec.ldst.regs;
mem_write <= !dec.ldst.load;
- end
-
- TRANSFER: begin
- if(cycle != TRANSFER) begin
+ end else if(next_cycle.transfer) begin
+ if(!cycle.transfer) begin
ldst <= 0;
mem_offset <= alu_b;
end
- if(cycle != TRANSFER || mem_ready) begin
+ if(!cycle.transfer || mem_ready) begin
mem_regs <= ldst_increment ? next_regs_lower : next_regs_upper;
mem_addr <= ldst_pre ? q_alu[31:2] : alu_a[31:2];
end
- mem_start <= cycle != TRANSFER || (mem_ready && pop_valid);
+ mem_start <= !cycle.transfer || (mem_ready && pop_valid);
end
- endcase
-
+ end
endmodule