Commit Graph

222 Commits

Author SHA1 Message Date
Luke Wren 5819f8eb7e Remove wrong/useless mxr logic in PMP 2022-08-08 18:45:37 +01:00
Luke Wren 92ebbbe95f Add pmpcfgm0 register: make regions M-mode without locking them 2022-08-08 18:34:55 +01:00
Luke Wren 65e3d1c48b Fix bad IRQ_IMPL_MASK indexing in meipra write 2022-08-08 18:15:38 +01:00
Luke Wren ef927d0d23 Dumb typo 2022-08-08 10:26:36 +01:00
Luke Wren ad5fd24772 - Fix signal named priority, which is a keyword in SV
- Fix incorrect HIGHEST_WINS behaviour in one-hot selector
- Add test for asserting 32 IRQs at 16 priorities at once
- Add an entry counter to the soft dispatch code so tests can check
  the number of times hardware entered the vector
2022-08-07 23:17:03 +01:00
Luke Wren 5e72ec8941 Fix a couple of bugs in preemption priority update, add simple IRQ preemption test 2022-08-07 22:04:42 +01:00
Luke Wren 15cb21ae43 First pass at implementing the new IRQ controls. Works well enough that the old tests pass :) 2022-08-07 20:51:12 +01:00
Luke Wren cc12b586ca Fix implicit net in cpu_1port, this yosys bug is a pain in the ass 2022-08-07 20:30:26 +01:00
Luke Wren 185194973f Add a custom instruction (bextm/bextmi: 1 to 8-bit version of bext/bexti from Zbs) for fooling around with toolchains 2022-08-06 23:02:08 +01:00
Luke Wren 797bff81ab DM: fix any/allnonexistent going low when hasel is set. The hart array mask is in addition to the hart selected by hartsel. 2022-07-30 19:55:22 +01:00
Luke Wren 9787c604ad Add missing ebreaku field to dcsr (U-mode counterpart to ebreakm) 2022-07-30 17:31:53 +01:00
Luke Wren 0567c2c9fe Two minor DM bugs:
- Writes to dmcontrol.resumereq should be ignored if dmcontrol.haltreq is also set
- aarsize and regno should be ignored when command.transfer is not set
2022-07-30 17:22:46 +01:00
Luke Wren add19506a5 Oops, bad if block nesting in PMP 2022-07-25 13:09:03 +01:00
Luke Wren b7d9defcf2 Add MUL_FASTER option to retire fast mul to stage 2 instead of stage 3 2022-07-05 03:37:19 +01:00
Luke Wren 254350d300 Clean up tie-off of hardwired PMP registers 2022-07-04 14:31:42 +01:00
Luke Wren 6e80492723 Typo 2022-07-04 12:09:21 +01:00
Luke Wren cac98568e6 Ignore read data from failed SBA accesses 2022-07-03 20:58:01 +01:00
Luke Wren c7a32c4d00 SBA: fix alignment check using a stale address when the trigger is an sbaddress write. Fix new transfers being allowed to start when sberror or sbbusyerror are set. 2022-07-03 19:02:30 +01:00
Luke Wren ae11d04b10 Add HMASTER output to processor wrappers, to indicate when the bus cycle is driven by SBA rather than the core 2022-07-03 18:02:47 +01:00
Luke Wren b1225c386c Add missing 1port SBA change, and update example soc and bus compliance tb to reflect 2022-07-03 17:57:03 +01:00
Luke Wren 9e15cd3485 Add standalone SBA-to-AHB shim, and make SBA off by default in the DM 2022-07-03 15:30:33 +01:00
Luke Wren d5cd3e0681 Add SBA patch-through to 1-core wrapper.
Add SBA properties to bus compliance checks.
Hook up SBA in dual-core single-port debug tb.
2022-07-03 15:17:44 +01:00
Luke Wren d6bef56788 Fix missing byte picking/replication in non-word-aligned SBA transfers 2022-07-03 14:22:12 +01:00
Luke Wren 51bc26f8ac First pass at adding system bus access to DM. Currently only the 2-port processor supports SBA patchthrough. 2022-07-03 00:25:47 +01:00
Luke Wren 36cee73d1f Fix acmd FSM not selecting the correct hart signal for its state transitions, and make flush take precedence over debug injection in frontend. (Changes from aborted abstract access memory implementation, see abstract-access-memory branch) 2022-07-02 22:46:20 +01:00
Luke Wren edfe7f601e Clear local monitor on non-debug trap entry/exit 2022-06-26 21:55:51 +01:00
Luke Wren c2756e79fc Fix misreading of spec: hartsel hart is selected in addition to those bits set in hart array mask, when hasel is set. 2022-06-26 19:58:01 +01:00
Luke Wren fb15894731 Hopefully fix case where we jump to the address immediately after a
halfword-sized word-aligned predicted-taken branch, and an
address-phase hold causes the jump target to go to the fetch address
counter, causing a spurious BTB match on the branch.
2022-06-26 15:28:08 +01:00
Luke Wren 33cec49952 Fix bad predbranch tracking on a jump to a predicted-taken non-taken
branch which is halfword-sized and halfword-aligned, causing CIR
and PC to diverge.
2022-06-26 15:26:04 +01:00
Luke Wren 5455349961 Add menvcfg CSR, and comment explaining why we don't have mseccfg CSR 2022-06-26 01:25:48 +01:00
Luke Wren ad8f883406 First pass at hart array mask register in DM 2022-06-25 20:34:53 +01:00
Luke Wren 5193dfe477 Add separate define HAZARD3_ASSERTIONS for enabling internal assertions,
and enable it only on the bus compliance model checks. Trying to make
the solver's life easier in instruction_fetch_match.
2022-06-25 20:08:40 +01:00
Luke Wren 173f5dba9d Fix jump target being unstable during a CIR-locked branch-to-self on a partial predicted branch match, due to the addr_is_regoffs decode not being tied off. 2022-06-25 20:07:43 +01:00
Luke Wren 8ef9d77be8 Add 'everything but MHARTID' option to config_inst, to allow its reuse in multicore instantiations.
Use this to fix the multicore tb not instantiating cores with all parameters correct (e.g. U_MODE)
2022-06-25 13:11:40 +01:00
Luke Wren 31efd07042 Fix incorrect tracking of predictedness of fetch data phase. Fixes performance regression in RV32IMC CoreMark (now runs faster, as it should.) 2022-06-25 11:32:56 +01:00
Luke Wren 979e80be99 Attempt to fix fetch mismatch caused by jumping halfway into a 32-bit
instruction that precedes a taken branch.

The bookkeeping in the frontend has been tightened up so that the entire
branch instruction, and nothing but the branch instruction, is marked as a
taken branch. This required some extra state, e.g. remembering the size of
the taken branch instruction, but saved an incrementer on the BTB source
address value.
2022-06-24 19:58:21 +01:00
Luke Wren d9389fb23e Fix a half-valid valid address phase being left behind when taking a new path with the jump going straight to the bus. If left in place, this causes the next-next fetch to be marked as half valid, corrupting fetch data. 2022-06-16 01:42:28 +01:00
Luke Wren f8aad6d2f3 Fix some bugs, too tired to list them, look at the diff 2022-06-15 04:05:31 +01:00
Luke Wren 0766ec6f8a First pass at adding branch prediction 2022-06-15 02:05:46 +01:00
Luke Wren 3703b1fc4c Allow use of cir_flush_behind in frontend_match formal tb 2022-06-13 20:36:15 +01:00
Luke Wren e68d8a6cd6 Fix two frontend bugs: possibility for fetch to be blocked at CIR whilst also not going to FIFO (fixed by making those signals the complement of each other) and typo in the shift value for shifting into a CIR with 32 bits of contents, which is only reachable via a CIR-locked branch to an unaligned address. 2022-06-13 01:23:32 +01:00
Luke Wren 26d54d0023 Re-rewrite frontend to track the halfword-validity of in-flight transfers, and clean up the old cir_lock mechanism to be a modified flush 2022-06-12 21:01:39 +01:00
Luke Wren e3da922f8b Revert previous frontend changes. Seemed promising but is a dead end for area.
The original frontend design can probably be tweaked to support predictions.
2022-06-12 16:25:42 +01:00
Luke Wren 940b7e4009 Actually still need 7 halfwords for full throughput in the case of sequential word-sized halfword-aligned instructions 2022-06-12 16:21:56 +01:00
Luke Wren 8458dff083 Fix bus errors not being applied in frontend 2022-06-12 05:28:21 +01:00
Luke Wren 23b4dbe7f3 Redesign fetch queue: 2x32 + 3x16 -> 6x16.
Should make it easier to support finer-grained flushing,
and handle predicted branches cleanly.
2022-06-12 02:44:08 +01:00
Luke Wren d5a202e4a5 Add standalone frontend formal tb 2022-06-11 20:14:24 +01:00
Luke Wren 3b5879da66 Small code cleanup in frontend. The address phase alignment state no longer needs to be tracked, since we just generate word accesses always, for simplicity. 2022-06-11 14:27:59 +01:00
Luke Wren de9b51b787 Remove default zeroing of fetch address when no fetch is asserted -- this puts LUTs on a critical path and arguably causes more toggling than asserting the sequentially next address by default. 2022-06-11 14:26:40 +01:00
Luke Wren 11596a5bd7 Remove unused/untested RISC-V timer implementation 2022-06-09 00:12:26 +01:00