[Libre-soc-bugs] [Bug 737] in-order single-issue Power ISA 3.0 core

bugzilla-daemon at libre-soc.org bugzilla-daemon at libre-soc.org
Sat Nov 20 23:45:21 GMT 2021


https://bugs.libre-soc.org/show_bug.cgi?id=737

--- Comment #23 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---
the integration of bitvectors went perfectly right up to the moment when
a combinatorial loop was detected.  the loop is as follows:

* bitvector regfiles were set to a combinatorial variant on operand
  forwarding.
* this so that set/clear of writes could be detected immediately by
  the read hazard, in the *current* cycle
* this so that issue could be held until the instruction was ready

unfortunately the actual setting/clearing is gated by FU issue/busy
which is also combinatorial which results in the read of the bitvector
being dependent on setting/clearing which then gates issue and hence
there's a loop.

the solution - which occurred to me just now - is this:

* make the bitvector regfiles a sync (one-clock delay)
* request the read of the bitvector at issue time (bear in mind
  it will arrive 1 clock late but that's ok because...)
* once issue is set, only on the *next* clock will the read-requests
  be set, at which point...
* the bitvector hazard read will also arrive and...
* if any bit is set, the read-requests can be gated out (prevented)

the irony is that this is *exactly* and i do mean exactly the job of
a FU-Regs Dependency Matrix

-- 
You are receiving this mail because:
You are on the CC list for the bug.


More information about the libre-soc-bugs mailing list