bu-icsg / dana

Dynamically Allocated Neural Network Accelerator for the RISC-V Rocket Microprocessor in Chisel
Other
203 stars 36 forks source link

RRArbiter Unconnected X Generation #51

Open seldridge opened 5 years ago

seldridge commented 5 years ago

Under some narrow conditions, an X shows up when simulating multiple transactions that have multiple outputs that are writing to output queues at the same time:

This is because the ready line of the ioArbiter is left unconnected. This gets realized as a connection to an uninitialized flip flop. In 2-state simulation (or in an FPGA or on an ASIC) this doesn't matter, but in 4-state simulation, this starts as an X and will be used to arbitrate between the two transactions only when both transactions are both valid (this rarely happens apparently).

It's a weird situation where either one or zero is fine, but X is not. :woman_shrugging:

This should still be fixed in DANA's Transaction Table nonetheless.

This may be worth filing an issue on Chisel3 as this is really a problem if you create an RRArbiter and don't connect it's ready line. This'll work in 2-state (kind of oddly) and in taped-out designs, but will barf in 4-state. It's not clear to me if 4-state simulation is even supposed to be consistent with 2-state simulation.