2 Comments

In the widening operations, the result is double the size of sources. Does that mean we need to use a 16-Bit ALU for 8-Bit Operations. Or is it just the zero/sign extension of result from 8-bit operation.

Expand full comment

It is somewhere in the middle. Widening operations often use a wide operand and smaller (single-width) operations at the same time, so they might not be as large as a full wide ALU but not as small as a short ALU either. For example vwadd.vv corresponds to the short case you listed (widening result of SEW-wide operation) but vwadd.wv corresponds to adding a SEW-wide value to a (2*SEW)-wide, which could be implemented by extending the shorter operand, or more efficiently by splitting the addition is two SEW halves and only doing conditional increment of the upper part bases on the carry out of the lower halves (which could be done through a carry-select adder for example).

Depending on how they are implemented, sharing resources with the wider ALU might be the best way to go (that will add some logic levels to extend the inputs and a multiplexer level to select the extended inputs).

Expand full comment