Commit Graph

84 Commits

Author SHA1 Message Date
Luke Wren ae4ddf7001 Clean up the old/unused W_COUNTER parameter, and use a cleaner tie-off style for the counter CSRs 2022-10-10 16:33:31 +01:00
Luke Wren f771a1294d Alias DPC to the real program counter, small savings overall 2022-10-10 00:28:42 +01:00
Luke Wren e6aaf4b801 Avoid IRQ to bus through-path when custom IRQs are disabled 2022-10-06 00:16:10 +01:00
Luke Wren c55d3f0d0b Make custom IRQ and PMP functionality optional. Factor out IRQ controller into separate module. 2022-10-05 23:53:04 +01:00
Luke Wren d1d70efa60 Fix some width issues introduced by last commit 2022-10-05 22:19:02 +01:00
Luke Wren 6f8b75c041 Make IRQ vectors right-sized. CXXRTL was spending > 1/3rd of its time in the CSR update. 2022-10-05 22:11:53 +01:00
Luke Wren c594ec42e9 Change style of IRQ register tie-offs as Yosys was not able to trim them for iCE40 synthesis. 2022-09-04 23:43:24 +01:00
Luke Wren 1c2249dbef Typo 2022-08-29 16:25:12 +01:00
Luke Wren 6abd93eb49 Oops, masked the wakeup-on-halt request path when I masked IRQs on WFI state. 2022-08-29 16:15:19 +01:00
Luke Wren 099f0467fb Clean up remnants of the 'wfi_is_nop' thing that seemed like a good idea at the time 2022-08-29 15:56:57 +01:00
Luke Wren 954bae5cf1 Implement block/unblock instructions, and fix questionable partial masking of sleep signals on exceptions. Add simple test for self-block/unblock with loopback in tb. 2022-08-29 14:52:01 +01:00
Luke Wren 2ae2463b97 First stab at adding wake/sleep state machine 2022-08-28 19:50:04 +01:00
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 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 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 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 bc274867c0 More width mismatch fixes 2022-08-20 15:27:14 +01:00
Luke Wren 65e3d1c48b Fix bad IRQ_IMPL_MASK indexing in meipra write 2022-08-08 18:15:38 +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 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 9787c604ad Add missing ebreaku field to dcsr (U-mode counterpart to ebreakm) 2022-07-30 17:31:53 +01:00
Luke Wren edfe7f601e Clear local monitor on non-debug trap entry/exit 2022-06-26 21:55:51 +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 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 ea2b8888a4 Update copyright years 2022-06-09 00:12:01 +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 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 f849517202 Split CSR addresses into separate header file 2022-05-23 15:54:37 +01:00
Luke Wren df0fd536eb Fix IRQ priority to match the priv spec 2022-05-23 12:56:37 +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 b80b09afe5 Typo -- fully encode all 128 possible IRQs 2022-03-15 09:01:55 +00:00
Luke Wren b0b8703ea4 Support up to 128 IRQs 2022-03-13 09:27:43 +00:00
Luke Wren 96c69d0bb0 Cut in->out paths on debug halt/resume request
Should be harmless, because in practice these should always be driven from a register
in the DM, but still better to cut the path
2022-03-01 21:14:49 +00:00
Luke Wren b0d28447ab New license headers: DWTFPL -> Apache 2.0 2021-12-13 23:23:40 +00:00
Luke Wren 25b44d04cf Add more properties wrt AMO. Fix awful bugs in interaction between AMOs and prior lr/sc, prior load/store exception, or IRQ which is asserted then deasserted. Fix sc with HRESP=1 HEXOKAY=1 not clearing the local monitor (not a bug, but unfriendly). 2021-12-12 23:24:25 +00:00
Luke Wren 8a003dbbed Make mcycle/minstret inhibited by default 2021-12-12 13:55:33 +00:00
Luke Wren 2bbc3637a2 Simplify CSR update logic. Showed promise in block synth but no difference to example soc. Still cleaner RTL. 2021-12-12 00:38:30 +00:00
Luke Wren 449348f459 Fix bug where an IRQ can fire during load/store dphase, followed by dphase bus exception.
Result was that the exception would sample the IRQ vector PC rather than the load/store instruction PC.
Fix by fencing off on in-flight dphases before asserting the IRQ. This adds a cycle of jitter
to IRQs, but is required for correct operation without adding a full exception-gathering pipeline.
2021-12-07 19:24:53 +00:00
Luke Wren 6ef3503ef5 Add A bit to MISA, update docs 2021-12-07 05:10:20 +00:00
Luke Wren 93be227d8a Add (currently failing) trap entry property. Fails when an IRQ arrives during a load/store data phase which subsequently excepts. 2021-12-06 20:12:23 +00:00