[libre-riscv-dev] [Bug 101] IEEE754 pipeline "go_die" (Computation Unit Cancellation) needed

bugzilla-daemon at libre-riscv.org bugzilla-daemon at libre-riscv.org
Tue Jul 30 00:42:27 BST 2019


--- Comment #3 from Luke Kenneth Casson Leighton <lkcl at lkcl.net> ---

A new class, to replace use of SimpleHandshake, is needed. Its logic:

* a unary muxid is unconditionally propagated down the pipeline (sync).
* where the muxid is nonzero, the registers from the output are propagated
(conditionally) to the next pipe stage.
* a global unary "cancel" signal is accessible by all pipe stages.
* if a bit in the "cancel" matches in the unary muxid, the output is NOT
propagated to the next stage, and neither is the muxid.

This gives data "freezing" characteristics, reducing power consumption when a
muxid is zero.

The cancel mask is global and is NOT a pipeline staged register, it is a FULLY
GLOBAL signal that results in IMMEDIATE cancellation on a global basis of all
and any muxids set.

Thus any cancelled muxids may immediately be used on the next clock cycle.

It is potentially possible, with a lot of messing about, that the cancelled
muxid could be re-used on the same cycle that it is cancelled.

The unary muxids are unique to each ReservationStation and must NOT occur twice
in any pipeline.

This is absolutely essential. No matter how large or how many pipes there are
connected to ReservationStations, each muxid MUST occur once and only once
across all stages.

This for two reasons.

1. So that global cancellation works

2. So that on exit from the pipeline (no matter how complex the stage routing)
it is GUARANTEED that the data associated with the (unique) muxid WILL get back
to the correct ReservationStation result latch.

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

More information about the libre-riscv-dev mailing list