Uiteraard is het de bedoeling dat deze multiplier gebruikt kan worden in de CPU die tot hiertoe ontwikkeld is. Voor de volledigheid moet er gezegd worden dat er hiermee buiten de scoop getreden wordt van de Hack CPU.
De eenvoudigste manier om deze extra functionaliteit toe te voegen is om een tweede ALU te maken. Zowel de x-operand als de y-operand die aan deze tweede ALU gekoppeld worden, zijn dezelfde als deze die aan de oorspronkelijke ALU gekoppeld zijn. Merk op dat beide ALU’s altijd actief zijn.
Aangezien er nu twee mogelijkheden zijn voor het resultaat, moet hier een multiplexer geplaatst worden. Indien dit niet gedaan wordt, worden er double drivers geïntroduceerd, wat ten allen tijde vermeden dient te worden.
De breedte van het resultaat van de multiplier kan het dubbele zijn van de breedte van de factoren. Om dit op te vangen, wordt er nog een multiplexer geplaatst. Deze laat toe om te kiezen of de minst-beduidende of de meest-beduidende helft van het product beschouwd wordt.
Twee belangrijke stappen om een multiplier toe te voegen zijn reeds genomen:
Wat nog rest is … het toevoegen van deze hardware aan het bestaande controle pad. Hieronder wordt de redenering achter de nieuwe instructie uit de doeken gedaan.
dest := comp; jump
past ook voor de vermenigvuldiging:
dest
veld kan behouden blijvenjump
veld kan behouden blijvencomp
veldBij een vergelijking tussen de twee versies van het datapad, is het duidelijk dat er 3 extra outputs verwacht worden van het controle path. Eén van deze outputs is de configuratie van de multiplier. De toegevoegde ALU voert echter maar 1 instructie uit (nl. de vermenigvuldiging), dus deze output valt weg. Er resten nog 2 outputs:
Als de X aanduidt dat de originele ALU gebruikt dient te worden, is de waarde van Y irrelevant. Enkel wanneer X aangeeft dat het nodig is, dient Y geïnterpreteerd te worden. In het geval dat de originele ALU gebruikt dient te worden, hebben de controlebits c1-c6 een betekenis. Wanneer de multiplier-ALU gebruikt wordt, hebben deze géén betekenis meer. Het is bijgevolg een logisch keuze om Y onder te brengen onder de c-bits en X buiten de c-bits.
Met deze aanpak kan de multiplier dus gebruikt worden. Er dient in de instructie aangegeven te worden of er interesse is de meest- of minst-beduidende helft van het produkt.