soc.git
2 years agocore tidyup
Luke Kenneth Casson Leighton [Wed, 1 Dec 2021 12:04:03 +0000 (12:04 +0000)]
core tidyup

2 years agoadd Regspecs get_io_spec function
Luke Kenneth Casson Leighton [Wed, 1 Dec 2021 11:53:27 +0000 (11:53 +0000)]
add Regspecs get_io_spec function

2 years agostart allocating more FUs (more ReservationStations)
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 18:29:41 +0000 (18:29 +0000)]
start allocating more FUs (more ReservationStations)

2 years agorandom loadstore1 test: readback written data
Tobias Platen [Tue, 30 Nov 2021 17:52:10 +0000 (18:52 +0100)]
random loadstore1 test: readback written data

2 years agoreenable dcbz test case
Tobias Platen [Tue, 30 Nov 2021 17:29:58 +0000 (18:29 +0100)]
reenable dcbz test case

2 years agoreturn correct data from microwatt
Tobias Platen [Tue, 30 Nov 2021 17:29:27 +0000 (18:29 +0100)]
return correct data from microwatt

2 years agocleanup test_loadstore1.py
Tobias Platen [Tue, 30 Nov 2021 17:22:16 +0000 (18:22 +0100)]
cleanup test_loadstore1.py

2 years agoloadstore: add done_delay
Tobias Platen [Tue, 30 Nov 2021 16:56:45 +0000 (17:56 +0100)]
loadstore: add done_delay

2 years agoMerge branch 'master' of ssh://git.libre-riscv.org:922/soc
Tobias Platen [Tue, 30 Nov 2021 16:52:40 +0000 (17:52 +0100)]
Merge branch 'master' of ssh://git.libre-riscv.org:922/soc

2 years agoadd LogicalTestCases back in to test_core.py (pass)
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 16:25:45 +0000 (16:25 +0000)]
add LogicalTestCases back in to test_core.py (pass)

2 years agolet PowerDecode2 decide which operand class to use in test_core.py
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 16:23:43 +0000 (16:23 +0000)]
let PowerDecode2 decide which operand class to use in test_core.py
this gets it to pick *all* fields

2 years agouse latched readflag (recspec_decode_read "ok") instead of global one
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 16:12:31 +0000 (16:12 +0000)]
use latched readflag (recspec_decode_read "ok") instead of global one

2 years agotidyup on read-flag latches
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 16:11:58 +0000 (16:11 +0000)]
tidyup on read-flag latches

2 years agofix read-decode information by latching not just the read reg number
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 14:05:38 +0000 (14:05 +0000)]
fix read-decode information by latching not just the read reg number
but *whether it is valid or not*.
not only the register *number* from regspec_decode_read() needs to
be captured but its ok (valid) flag as well

this error only showed up when a mul (2-operand) was followed by addi
(1-operand).  the mul had its 2nd operand dropped on the floor because
the *addi* only has one operand.

2 years agofix write-after-write hazard checking
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 13:21:29 +0000 (13:21 +0000)]
fix write-after-write hazard checking

2 years agoallow busy to settle before checking state in test_core.py
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 12:11:45 +0000 (12:11 +0000)]
allow busy to settle before checking state in test_core.py

2 years agoonly check regs right at the end in test_core.py overlap mode
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 12:03:29 +0000 (12:03 +0000)]
only check regs right at the end in test_core.py overlap mode

2 years agomove sim call before core run in test_core.py
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 11:49:33 +0000 (11:49 +0000)]
move sim call before core run in test_core.py
to give PC a chance to settle in regfile

2 years agogetting formerly unused test_core.py operational
Luke Kenneth Casson Leighton [Tue, 30 Nov 2021 11:13:24 +0000 (11:13 +0000)]
getting formerly unused test_core.py operational

2 years agowhoops missed make_hazard_vec test
Luke Kenneth Casson Leighton [Mon, 29 Nov 2021 16:41:00 +0000 (16:41 +0000)]
whoops missed make_hazard_vec test

2 years agowhoops do the set/get of the write-vector at a single access point
Luke Kenneth Casson Leighton [Mon, 29 Nov 2021 15:50:26 +0000 (15:50 +0000)]
whoops do the set/get of the write-vector at a single access point
for example: INT o, INT o2 is *two* write ports.  therefore,
previously, there was a comb += wvint bitvector for o, which was
then OVERWRITTEN by a second comb += wvint bitvector for o2

instead, return the wvset/wvclr requests to connect_wrport, which
collates by regfile name and performs an additional or-tree-reduce
on the requests to set/get

2 years agoalways set fwd_bus_mode=False on regfiles
Luke Kenneth Casson Leighton [Mon, 29 Nov 2021 13:43:36 +0000 (13:43 +0000)]
always set fwd_bus_mode=False on regfiles

2 years agoadd MMU and SPR to list of FUs that must report "busy" i.e. block
Luke Kenneth Casson Leighton [Mon, 29 Nov 2021 13:19:45 +0000 (13:19 +0000)]
add MMU and SPR to list of FUs that must report "busy" i.e. block

2 years agodisallow overlap in core on LDST, Branch, and Trap.
Luke Kenneth Casson Leighton [Mon, 29 Nov 2021 10:26:35 +0000 (10:26 +0000)]
disallow overlap in core on LDST, Branch, and Trap.
these are all the ones that could cause exceptions or mess with ordering

2 years agouse dict style not setattr on submodules
Luke Kenneth Casson Leighton [Mon, 29 Nov 2021 10:22:09 +0000 (10:22 +0000)]
use dict style not setattr on submodules

2 years agoupdate loadstore1 testcase
Tobias Platen [Sun, 28 Nov 2021 13:54:32 +0000 (14:54 +0100)]
update loadstore1 testcase

2 years agocode-comments
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 14:32:21 +0000 (14:32 +0000)]
code-comments

2 years agofix instructions of the type "read-reg-is-same-as-write"
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 14:11:23 +0000 (14:11 +0000)]
fix instructions of the type "read-reg-is-same-as-write"
this then caused write-after-write detection to go into a combinatorial
loop, which was fixed by not checking fu.issue_i but instead using
fu_enable (fu_bitdict[FU])

2 years agoloadstore testcase: read at random addresses
Tobias Platen [Sat, 27 Nov 2021 12:54:22 +0000 (13:54 +0100)]
loadstore testcase: read at random addresses

2 years agoFU-Regs matrix tidyup and comments
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 12:51:52 +0000 (12:51 +0000)]
FU-Regs matrix tidyup and comments

2 years agominor tidyup on FU-Regs Matrix
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 12:33:02 +0000 (12:33 +0000)]
minor tidyup on FU-Regs Matrix

2 years agoupdate FURegDepMatrix to multi-dest
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 12:20:33 +0000 (12:20 +0000)]
update FURegDepMatrix to multi-dest

2 years agoupdate naming on Reg_Rsv signals
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 12:19:57 +0000 (12:19 +0000)]
update naming on Reg_Rsv signals

2 years agoadd copyright and attribution notices
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 11:54:37 +0000 (11:54 +0000)]
add copyright and attribution notices
update Reg_Rsv to multi-dest

2 years agoupdate FU_RW_Pending vectors to multi-dest
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 11:44:07 +0000 (11:44 +0000)]
update FU_RW_Pending vectors to multi-dest
update Copyright and Attribution notices

2 years agoconvert DependencyRow to multiple destination latches
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 11:19:57 +0000 (11:19 +0000)]
convert DependencyRow to multiple destination latches

2 years agoadd copyright and attribution notices to dependence_cell.py
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 10:40:47 +0000 (10:40 +0000)]
add copyright and attribution notices to dependence_cell.py

2 years agoupdate license and attribution in fu_reg_matrix.py
Luke Kenneth Casson Leighton [Sat, 27 Nov 2021 10:36:30 +0000 (10:36 +0000)]
update license and attribution in fu_reg_matrix.py

2 years agoconvert score6600_multi over to using RegSpecs (in a fake way)
Luke Kenneth Casson Leighton [Fri, 26 Nov 2021 16:45:23 +0000 (16:45 +0000)]
convert score6600_multi over to using RegSpecs (in a fake way)
which by slow code-morphing the entire score6600_multi code can be
converted to be like core.py

2 years agoearly use of Array unnecessarily (all uses are static references
Luke Kenneth Casson Leighton [Fri, 26 Nov 2021 15:23:40 +0000 (15:23 +0000)]
early use of Array unnecessarily (all uses are static references
not dynamic indexing: no pmux created or needed)

2 years agoearly use of Array unnecessarily (all uses are static references
Luke Kenneth Casson Leighton [Fri, 26 Nov 2021 15:19:19 +0000 (15:19 +0000)]
early use of Array unnecessarily (all uses are static references
not dynamic indexing: no pmux created or needed)

2 years agoget score6600_multi operational again
Luke Kenneth Casson Leighton [Thu, 25 Nov 2021 21:41:04 +0000 (21:41 +0000)]
get score6600_multi operational again
main thing was a "delay" on go_read_i due to regfile read results being
one clock cycle behind.

2 years agoadd debug prints in old simulator
Luke Kenneth Casson Leighton [Thu, 25 Nov 2021 21:38:54 +0000 (21:38 +0000)]
add debug prints in old simulator

2 years agoadd debug prints in old simulator
Luke Kenneth Casson Leighton [Thu, 25 Nov 2021 21:38:42 +0000 (21:38 +0000)]
add debug prints in old simulator

2 years agoseperate invalid test case from other test cases
Tobias Platen [Thu, 25 Nov 2021 17:54:21 +0000 (18:54 +0100)]
seperate invalid test case from other test cases

2 years agommu: add debug output
Tobias Platen [Thu, 25 Nov 2021 16:53:42 +0000 (17:53 +0100)]
mmu: add debug output

2 years agoadd testcase for invalid pagetable
Tobias Platen [Thu, 25 Nov 2021 16:07:05 +0000 (17:07 +0100)]
add testcase for invalid pagetable

2 years agopimem: reset on exception
Tobias Platen [Thu, 25 Nov 2021 16:05:25 +0000 (17:05 +0100)]
pimem: reset on exception

2 years agoremove unuses dsisr signal
Tobias Platen [Thu, 25 Nov 2021 15:49:06 +0000 (16:49 +0100)]
remove unuses dsisr signal

2 years agoreset state to idle on exception
Tobias Platen [Thu, 25 Nov 2021 15:45:10 +0000 (16:45 +0100)]
reset state to idle on exception

2 years agomore sorting scoremulti
Luke Kenneth Casson Leighton [Thu, 25 Nov 2021 09:43:14 +0000 (09:43 +0000)]
more sorting scoremulti

2 years agomore sorting out scoremulti
Luke Kenneth Casson Leighton [Thu, 25 Nov 2021 09:28:35 +0000 (09:28 +0000)]
more sorting out scoremulti

2 years agoadd test pspec for scoremulti to work
Luke Kenneth Casson Leighton [Thu, 25 Nov 2021 09:16:54 +0000 (09:16 +0000)]
add test pspec for scoremulti to work

2 years agoconvert hazard bitvectors to Reset-Priority SRLatch from nmutil
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 22:46:04 +0000 (22:46 +0000)]
convert hazard bitvectors to Reset-Priority SRLatch from nmutil

the read/write port were seriously getting in the way, by way of the
operand forwarding etc. etc. need instead to get either the immediate-latched
value (combinatorial) or the sync-delayed one, depending on circumstances.

2 years agofix exception handling in pi_ld
Tobias Platen [Wed, 24 Nov 2021 18:50:05 +0000 (19:50 +0100)]
fix exception handling in pi_ld

2 years agoMerge branch 'master' of ssh://git.libre-riscv.org:922/soc
Tobias Platen [Wed, 24 Nov 2021 18:30:44 +0000 (19:30 +0100)]
Merge branch 'master' of ssh://git.libre-riscv.org:922/soc

2 years agoimprove debug output in mmu.py
Tobias Platen [Wed, 24 Nov 2021 18:30:25 +0000 (19:30 +0100)]
improve debug output in mmu.py

2 years agofix write-after-write hazard detection
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 17:48:32 +0000 (17:48 +0000)]
fix write-after-write hazard detection

2 years agowhen allow_overlap enabled do a manual wait until all FUs have
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 17:44:36 +0000 (17:44 +0000)]
when allow_overlap enabled do a manual wait until all FUs have
entirely finished befor going on to read the regfile state
this really should be done with the DMI interface, which needs updating

2 years agocode-comments
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 16:24:03 +0000 (16:24 +0000)]
code-comments

2 years agoadd write-after-write hazard detection
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 16:06:26 +0000 (16:06 +0000)]
add write-after-write hazard detection
stall if a WaW hazard is detected, continuing to assert the main decoder
so that the relevant bits of the write-vector can be read.  these
bits are read *one clock behind* which is perfectly fine

2 years agoadd 2nd hazard bitvector port for write-after-write
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 15:18:08 +0000 (15:18 +0000)]
add 2nd hazard bitvector port for write-after-write
hazard detection

2 years agowhoops merged the two write-ports for RT and RA-with-update
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 12:31:52 +0000 (12:31 +0000)]
whoops merged the two write-ports for RT and RA-with-update

2 years agodisable hazard vectors when overlap is not requested in core.py
Luke Kenneth Casson Leighton [Wed, 24 Nov 2021 11:55:14 +0000 (11:55 +0000)]
disable hazard vectors when overlap is not requested in core.py

2 years agoupdate submodules
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 22:45:03 +0000 (22:45 +0000)]
update submodules

2 years agomore comments
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 22:44:55 +0000 (22:44 +0000)]
more comments

2 years agopimem changes for st exception handling
Tobias Platen [Tue, 23 Nov 2021 18:12:10 +0000 (19:12 +0100)]
pimem changes for st exception handling

2 years agofix test_loadstore1.py
Tobias Platen [Tue, 23 Nov 2021 17:42:22 +0000 (18:42 +0100)]
fix test_loadstore1.py

2 years agoadd FU write-after-write hazard detection Signal (dummy so far)
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 15:53:35 +0000 (15:53 +0000)]
add FU write-after-write hazard detection Signal (dummy so far)

this has to be set up in the connect_write section but then
*used* in connect_rdport in order to stop reading from happening

strictly speaking it should actually stop issue, but we already
established that that way lies madness (combinatorial loops).

this may turn out to be a bit more complex than initially planned
due to some instructions potentially not having read at all
(only write)

2 years agoadd code-comments, link to in-order core
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 15:21:15 +0000 (15:21 +0000)]
add code-comments, link to in-order core

2 years agomore use of namedtuples in core.py for clarity
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 15:03:09 +0000 (15:03 +0000)]
more use of namedtuples in core.py for clarity

2 years agostart some use of namedtuples in core.py
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 12:21:36 +0000 (12:21 +0000)]
start some use of namedtuples in core.py

2 years agouse some namedtuples to make things clearer in core.py
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 12:11:49 +0000 (12:11 +0000)]
use some namedtuples to make things clearer in core.py

2 years agouse fascinating trick of defaultdict-of-defaultdicts
Luke Kenneth Casson Leighton [Tue, 23 Nov 2021 12:03:19 +0000 (12:03 +0000)]
use fascinating trick of defaultdict-of-defaultdicts

2 years agoadd store testcase
Tobias Platen [Mon, 22 Nov 2021 18:35:53 +0000 (19:35 +0100)]
add store testcase

2 years agofix fast exception handling for pi_st
Tobias Platen [Mon, 22 Nov 2021 17:57:54 +0000 (18:57 +0100)]
fix fast exception handling for pi_st

2 years agomake FetchFSM take PC as an input in its ispec
Luke Kenneth Casson Leighton [Mon, 22 Nov 2021 14:51:02 +0000 (14:51 +0000)]
make FetchFSM take PC as an input in its ispec

2 years agolocal variable rename in FetchFSM
Luke Kenneth Casson Leighton [Mon, 22 Nov 2021 14:41:25 +0000 (14:41 +0000)]
local variable rename in FetchFSM

2 years agosplit out FetchFSM into separate module
Luke Kenneth Casson Leighton [Mon, 22 Nov 2021 14:37:37 +0000 (14:37 +0000)]
split out FetchFSM into separate module
there are DriverConflicts which result in the FetchFSM being merged
into TestIssuerInternal but that is actually ok for now

2 years agowhoops accidentally committed commented-out test for overlap
Luke Kenneth Casson Leighton [Mon, 22 Nov 2021 11:59:19 +0000 (11:59 +0000)]
whoops accidentally committed commented-out test for overlap
in test_runner.py

2 years agoreset execute back to ISSUE_START if at INSN_WAIT and
Luke Kenneth Casson Leighton [Sun, 21 Nov 2021 22:57:35 +0000 (22:57 +0000)]
reset execute back to ISSUE_START if at INSN_WAIT and
stopping was requested.

2 years agorestrict (refine) hazard selection to the one being picked for this port
Luke Kenneth Casson Leighton [Sun, 21 Nov 2021 22:44:42 +0000 (22:44 +0000)]
restrict (refine) hazard selection to the one being picked for this port

2 years agoblock picker hazard on input to PriorityPicker rather than output
Luke Kenneth Casson Leighton [Sun, 21 Nov 2021 22:21:52 +0000 (22:21 +0000)]
block picker hazard on input to PriorityPicker rather than output
reason: another register could be picked if the input is blocked
but if the output is masked out, the picker will sit there with the
highest priority port stopping all others

2 years agoparse test_issuer args allow option "allow-overlap" to be optional
Luke Kenneth Casson Leighton [Sun, 21 Nov 2021 21:12:14 +0000 (21:12 +0000)]
parse test_issuer args allow option "allow-overlap" to be optional

2 years agocomplex. TestRunner now does not work properly unless recognising
Luke Kenneth Casson Leighton [Sun, 21 Nov 2021 21:10:47 +0000 (21:10 +0000)]
complex.  TestRunner now does not work properly unless recognising
that first, instructions can complete out-of-order from which they were
issued, and second, that just because the Function Unit has said it
accepted the instruction does not mean it has actually completed.

TestRunner therefore needed quite a bit of sorting out

2 years agofixed issue with hazard dependencies, read will nott
Luke Kenneth Casson Leighton [Sun, 21 Nov 2021 21:09:09 +0000 (21:09 +0000)]
fixed issue with hazard dependencies, read will nott
take place until write dependencies are clear.  currently extremely
draconian "ban" on entire FU progressing, actually probably all FUs
progressing, until write-hazards are clear.  can sort out later

2 years agoadd testcase for fast exceptions on store
Tobias Platen [Sun, 21 Nov 2021 15:37:11 +0000 (16:37 +0100)]
add testcase for fast exceptions on store

2 years agofix pi_ld testcase
Tobias Platen [Sat, 20 Nov 2021 15:16:37 +0000 (16:16 +0100)]
fix pi_ld testcase

2 years agoadd both bitdict and selected args to connect_rd/wrport
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 19:20:13 +0000 (19:20 +0000)]
add both bitdict and selected args to connect_rd/wrport

2 years agosorting out issue hazard conflicts in core.
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 17:56:23 +0000 (17:56 +0000)]
sorting out issue hazard conflicts in core.

2 years agodebug and cleanup
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 17:41:25 +0000 (17:41 +0000)]
debug and cleanup

2 years agorename instruction_active to instr_active in core
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 16:23:12 +0000 (16:23 +0000)]
rename instruction_active to instr_active in core

2 years agoread latch on regfile ports was fine, the combinatorial loop
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 16:22:18 +0000 (16:22 +0000)]
read latch on regfile ports was fine, the combinatorial loop
is in the hazard detection on instruction issue

2 years agoMerge branch 'master' of ssh://git.libre-riscv.org:922/soc
Tobias Platen [Fri, 19 Nov 2021 16:13:04 +0000 (17:13 +0100)]
Merge branch 'master' of ssh://git.libre-riscv.org:922/soc

2 years agolatch copy of read register numbers, not in use due to combinatorial loop
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 15:33:58 +0000 (15:33 +0000)]
latch copy of read register numbers, not in use due to combinatorial loop
of some kind

2 years agouse read spec in connect_rdport rather than list of reads
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 14:49:41 +0000 (14:49 +0000)]
use read spec in connect_rdport rather than list of reads

2 years agocapture write regfile numbers into write latches in core
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 14:47:54 +0000 (14:47 +0000)]
capture write regfile numbers into write latches in core

2 years agocode tidyup / comments, and use defaultdict
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 14:12:34 +0000 (14:12 +0000)]
code tidyup / comments, and use defaultdict

2 years agocreate lists of latches in each FU, to record the read/write register
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 13:59:38 +0000 (13:59 +0000)]
create lists of latches in each FU, to record the read/write register
numbers required by the FU to read/write to regfiles.

previously, in the FSM-only version, these read/write regnums were
held (globally) by TestIssuer, and because only one instruction was
active, it did not matter.

now with the possibility of multiple instructions being run, it matters
(a lot)

2 years agofor some reason DMI CTRL returns status of 0x6 not 0x0
Luke Kenneth Casson Leighton [Fri, 19 Nov 2021 13:22:05 +0000 (13:22 +0000)]
for some reason DMI CTRL returns status of 0x6 not 0x0