Commit Graph

290 Commits

Author SHA1 Message Date
Luke Wren fef6d80fd4 tcontrol.mpte is not supposed to change on trap exit, unlike mstatus.mpie 2022-08-23 00:19:56 +01:00
Luke Wren 9e11c0e5a8 Fix tdata1.dmode being writable from M-mode 2022-08-23 00:08:17 +01:00
Luke Wren 04f138ae0e Fix mcontrol.execute not being writable. Enable hardware breakpoint debug tests: Hwpb1/2, JumpHBreak, TriggerExecuteInstant 2022-08-23 00:05:30 +01:00
Luke Wren 49c2edeff8 Avoid reserved keyword 2022-08-22 10:26:20 +01:00
Luke Wren 53902a901b Fix bad rdata width for tdata1 (which also caused the trigger type to appear as legacy SiFive, oops) 2022-08-22 09:47:19 +01:00
Luke Wren b90d12efed CSRs: avoid use of wdata_update in rdata for meicontext, which the SMT2 backend sees as a loop.
There is no functional loop here since this is an acyclic path between different bits of the rdata vector, but it makes sense that this would confuse tools that don't bitblast all the vectors.
2022-08-22 09:18:57 +01:00
Luke Wren ba775563d5 Fix suspicious gating of jump request 2022-08-22 09:10:12 +01:00
Luke Wren 6e3799eed0 First attempt at hacking in triggers, at least seems to have not broken other exception logic. Not yet tested. 2022-08-22 08:47:03 +01:00
Luke Wren 5d6b5a80b0 Standardise on ifndef YOSYS around default_nettype wire 2022-08-21 13:22:55 +01:00
Luke Wren 4c098d76a7 Fix some whitespace issues, and avoid redefinition of RVOPC macros 2022-08-21 13:09:28 +01:00
Luke Wren b994674c5a Cleanup to avoid negative array index (legal but causes whinging) 2022-08-20 18:13:45 +01:00
Luke Wren 3b7cd9bc96 Cleanup some unused signals 2022-08-20 16:44:39 +01:00
Luke Wren 96e55a5446 Replace localparams with defines in rv_opcodes.vh, to avoid slightly dubious localparam to casez Z-propagation 2022-08-20 16:22:04 +01:00
Luke Wren d299a3ca4e More width tweaks 2022-08-20 16:11:58 +01:00
Luke Wren bc274867c0 More width mismatch fixes 2022-08-20 15:27:14 +01:00
Luke Wren dbe9a7824a Cleanup of some width mismatches in instruction decompress 2022-08-20 14:58:41 +01:00
Luke Wren 276830ecb6 Fix missing default assignment of i_m in PMP decode 2022-08-16 09:23:42 +01:00
Luke Wren be05dc32d4 Oops, typo in update of new pmpcfg_m field 2022-08-11 20:46:32 +01:00
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
Luke Wren ea2b8888a4 Update copyright years 2022-06-09 00:12:01 +01:00
Luke Wren ae2784d0ea PMP config: separate granularity config from hardwired region config. Give correct read value for G > 1. 2022-06-03 17:09:43 +01:00
Luke Wren e0a9fb7312 Add option to hardwire PMP regions, or reduce their granularity 2022-06-03 01:19:03 +01:00
Luke Wren 66965ac073 Fix inverted sc return code (argh) and lr/sc tests which also assumed the sc code was inverted 2022-05-28 15:36:21 +01:00
Luke Wren 81aec325bb ecall from U-mode has a different mcause value than ecall from M-mode 2022-05-28 12:07:29 +01:00
Luke Wren f2876eb51f Fix bad mepc reported after branching to a branch in a no-X address range 2022-05-27 22:47:04 +01:00
Luke Wren 0e462574b2 Move declaration of x_exec_pmp_fail to before its first use 2022-05-27 15:04:43 +01:00
Luke Wren 156fbcd019 Update behaviour of mstatus.mpp and mprv on mret to match priv-1.12 spec 2022-05-26 00:42:50 +01:00
Luke Wren a17b941e38 Add U bit to misa, and fix some broken debug tests (no hazard3 bugs) 2022-05-25 23:46:23 +01:00
Luke Wren 0efcf53fe5 Fix X PMP fail not suppressing load/store address phase.
Fix PMP-failed load/store still passing on a data phase tag to stage 3.
Fix WFI still pausing the core after a PMP X fail.
2022-05-25 16:18:03 +01:00
Luke Wren e2b9a3b2f9 Fix two PMP-related bugs:
1. Generating PMP load/store exceptions when the instruction is not a load/store
2. Passing a PMP exec permission exception into M whilst the frontend is still
   starved, causing early taking of the exception and a bad mepc value.
2022-05-25 13:23:44 +01:00
Luke Wren 51750eb81d Add mstatus.tw to control U-mode WFI, and prevent mret execution in U-mode. 2022-05-24 21:12:44 +01:00
Luke Wren c93228d13e Integrate PMP, and fix a couple of PMP bugs 2022-05-24 19:57:45 +01:00
Luke Wren 4878a752d6 Plumb privilege state through to the bus ports 2022-05-24 18:24:34 +01:00
Luke Wren f033cde874 Add test for readability of CSRs in U mode. Fix readback value of mstatus.mpp 2022-05-24 17:30:24 +01:00
Luke Wren 0199f48087 Add read-only counter CSRs to readability/writability tests, and fix cycleh being unreadable when U mode is not implemented 2022-05-24 16:44:03 +01:00
Luke Wren d62861159f First pass at U-mode CSR support. Bizarrely causes CXXRTL tb to not write to stdout when invoked by subprocess.run from Python. 2022-05-24 16:17:54 +01:00
Luke Wren 2df1179994 Wire privilege through from core to bus masters. Tied off inside core. 2022-05-24 14:05:26 +01:00
Luke Wren c0b5d73cbd Typo in for loop, surprised Yosys accepted this 2022-05-23 18:15:36 +01:00
Luke Wren 5466c8131e Sketch in PMP implementation 2022-05-23 18:06:23 +01:00
Luke Wren 06647b78c6 Fix IALIGN fault to trap on the control flow instruction instead of its target 2022-05-23 16:25:43 +01:00
Luke Wren da244f54c3 Remove unused FAKE_DUALPORT option from regfile 2022-05-23 16:22:01 +01:00
Luke Wren f849517202 Split CSR addresses into separate header file 2022-05-23 15:54:37 +01:00
Luke Wren 5f4127948d Add a parameter to control register file reset, instead of the weird ifdef tree 2022-05-23 13:29:44 +01:00
Luke Wren df0fd536eb Fix IRQ priority to match the priv spec 2022-05-23 12:56:37 +01:00
Luke Wren 96a9ee18e1 Add IALIGN exception to non-RVC implementations 2022-05-23 12:47:48 +01:00
Luke Wren c4e81922da Don't store bit 1 of mepc on non-RVC implementations 2022-05-23 12:27:07 +01:00
Luke Wren 210dbeae64 Correct the name and operation of the brev8 (formerly rev.b) instruction 2022-05-20 15:28:18 +01:00
Luke Wren a2582976fc Fix opcodes for zip/unzip, which are wrong in the bitmanip copy of the Zbkb spec, but correct in the crypto copy of that spec 2022-05-20 15:15:37 +01:00
Luke Wren 43e0b1d16a Implement Zbkb (untested) 2022-05-06 17:36:25 +01:00
Luke Wren 2c8f3974d0 Correctly implement fence.i as branch-to-next. Make Zifencei optional. Tighten up decode on fence and fence.i. 2022-04-09 13:49:16 +01:00
Luke Wren 35651f52a7 Stronger property for correct predecode 2022-04-05 08:18:00 +01:00