David Anderson
79b54ca86f
vram/MemArbiter: add a granted_port method to make downstream wiring easier
...
To implement the mux tree that feeds into RAM ports, we need to know the
port index of the grantee to be able to wire it up. In theory we could
dispense with the per-port grant signal, but keeping it around allows
each client to deal with local concerns separate from the port routing.
2024-09-08 23:16:49 -07:00
David Anderson
2ebf399d62
vram/MemArbiter: remove MemArbiterClient, not needed right now
2024-09-08 22:44:39 -07:00
David Anderson
eca95e0fb6
vram/VRAMCore: correct exports of the vram types
2024-09-08 15:37:47 -07:00
David Anderson
e5aabcbf4a
vram/MemArbiter: remove unnecessary wires and fields
...
While iterating many redundant bits were added. This removes them again,
keeping just (I think) the minimum necessary for the arbitrators to work.
2024-09-08 15:13:47 -07:00
David Anderson
519eddc552
vram/MemArbiter: fix bug with write conflict avoidance
...
Now that all arbiter ports can request to write, arbitration must check
both (write, read) and (read, write) conflicts, not just (write, read).
2024-09-08 15:02:55 -07:00
David Anderson
191cd1bfa2
vram: document MemArbiter, fix round-robin ordering bug
2024-09-08 14:10:52 -07:00
David Anderson
f31f64f5a2
vram: refactor MemArbiter into separate arbiters
...
Rather than hardcode one architecture for GARY, the arbiters
are now split and can be allocated per-port. The arbiter interface
includes plumbing so that one arbiter can propagate a write conflict
to another, so it can still implement multi-port arbitration as long
as every client is statically allocated to one port.
2024-09-08 13:26:25 -07:00
David Anderson
2760bad965
vram: move VRAM to VRAMCore, in prep for arbitrated VRAM
2024-09-08 09:28:28 -07:00
David Anderson
69b7ce7f9e
vram: adjust the MemoryArbiterClient interface a little
2024-09-08 09:27:25 -07:00
David Anderson
81e5264d22
vram: make arbiter clients and servers connectable
2024-09-07 19:49:43 -07:00
David Anderson
aa048537ef
vram/MemArbiter: rewrite to use client/server idioms
...
In preparation for making the two Connectable and defining an
arbitrated memory client/server for VRAM access.
2024-09-07 16:58:11 -07:00
David Anderson
b2b2c14009
vram/VRAM: finish the top-level VRAM module
...
Well, for now at least. It can build 112KiB and 128KiB memories that
seem to synthesize to something reasonable.
2024-09-07 16:04:21 -07:00
David Anderson
f7cb4b6ba2
vram/VRAM: early VRAM implementation
...
Only checked up to mkByteRAMArray, main VRAM still WIP
2024-09-06 16:11:55 -07:00
David Anderson
ab20db44f4
vram: rename MemoryArbiter to something shorter
...
As I implement the whole transaction-level modeling thing with
arbitration, the interface names are getting longer and longer.
2024-09-06 10:04:20 -07:00
David Anderson
7f10694371
vram: get rid of old commented code
2024-09-06 00:13:42 -07:00
David Anderson
f010693b9b
vram: compact the test output even more
2024-09-06 00:08:14 -07:00
David Anderson
71f422b8c1
vram: fix up documentation for MemoryArbiterWriter
2024-09-06 00:02:23 -07:00
David Anderson
e0d156cdd1
vram: a little more formatting of the vram test
...
Make it a bit more compact, for large test runs
2024-09-06 00:00:25 -07:00
David Anderson
d41ca7daae
vram: tidy up formatting
2024-09-05 23:51:21 -07:00
David Anderson
60348fefd2
vram: one more arbiter test for port conflicts
2024-09-05 23:46:01 -07:00
David Anderson
5e22d03e15
vram: implement a MemoryArbiter for VRAM
2024-09-05 23:39:21 -07:00