Close

A new unit : the decoder

A project log for YGREC8

A byte-wide stripped-down version of the YGREC16 architecture

yann-guidon-ygdesYann Guidon / YGDES 03/29/2019 at 07:030 Comments

I'm starting to update and refine the architecture of the Y8, by making a separate unit, that will hopefully be more flexible.

Uusally, each unit will receive the required parts of the instruction word and decode the necessary signals. This is very easy with a clean RISC processor, which could be described as a "distributed decoding" architecture.

In practice, there are other constraints as well. 

That last argument convinced me about this new unit because optimising toggles requires a global perspective that each individual unit can't have. The current instruction word also needs to be latched for the multi-cycles operations (such as LDCx).

The decoder is a strip of logic gates that propagates bits from the instruction word, parallel to the bitslices, and decodes and spreads control signals in a "fishbone" pattern (perpendicular to the bitslices).

This increases the complexity of the clock and timing because performance dictates that the units must get their respective instruction bits directly from the program memory.

One solution though is to store the last instruction and combine it with the new instruction with one or two logic layers at most. It might not work for most control signals and it could generate some spikes, which I'm indeed trying to avoid (because they eat power).

I'm also considering adding transparent latches at the data inputs of the ALU.

But before I can add the latches, I have to take the control logic out of the units.


20190330 : I think I've found the trick, using simple RS latches...

Discussions