diff options
Diffstat (limited to 'rtl/core/fetch')
| -rw-r--r-- | rtl/core/fetch/fetch.sv | 6 | ||||
| -rw-r--r-- | rtl/core/fetch/prefetch.sv | 6 |
2 files changed, 8 insertions, 4 deletions
diff --git a/rtl/core/fetch/fetch.sv b/rtl/core/fetch/fetch.sv index acc8e9d..c024e7d 100644 --- a/rtl/core/fetch/fetch.sv +++ b/rtl/core/fetch/fetch.sv @@ -11,18 +11,20 @@ module core_fetch wr_pc, prefetch_flush, input ptr branch_target, + porch_insn_pc, input word wr_current, fetch_data, output logic fetch, flush, + nop, output word insn, output ptr insn_pc, addr, fetch_head ); - ptr next_pc, hold_addr, target; + ptr hold_addr, target; logic branch, prefetch_ready, fetched_valid, discard, pending, next_pending; assign fetch = prefetch_ready && !discard; @@ -44,7 +46,7 @@ module core_fetch if(branch) fetch_head = target; else if(prefetch_flush) - fetch_head = next_pc; + fetch_head = porch_insn_pc; else fetch_head = {30{1'bx}}; diff --git a/rtl/core/fetch/prefetch.sv b/rtl/core/fetch/prefetch.sv index 2f0a866..1b5a4c5 100644 --- a/rtl/core/fetch/prefetch.sv +++ b/rtl/core/fetch/prefetch.sv @@ -13,15 +13,17 @@ module core_prefetch output word insn, output ptr insn_pc, - next_pc, - output logic fetch + output logic fetch, + nop ); localparam SIZE = (1 << ORDER) - 1; + ptr next_pc; logic[31:0] prefetch[SIZE]; logic[ORDER - 1:0] valid; + assign nop = flush ? 1 : ~|valid; assign insn = flush ? `NOP : prefetch[0]; assign next_pc = ~stall & |valid ? insn_pc + 1 : insn_pc; assign fetch = !stall || ~&valid; |
