CPU v2

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.

Data pad

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.

De Hack CPU

3 fasen

Hack CPU v2

3 fasen

Controle pad

Twee belangrijke stappen om een multiplier toe te voegen zijn reeds genomen:

  1. de ontwikkeling van de hardware van een multiplier
  2. het toevoegen van deze hardware aan het bestaande data pad

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.

  • aangezien er een berekening moet gebeuren, is het logisch dat de instructie die toegevoegd moet worden een C-instructie is;
    • de eerste bit ligt dus vast
  • de constructie van de velden dest := comp; jump past ook voor de vermenigvuldiging:
    • het dest veld kan behouden blijven
    • het jump veld kan behouden blijven
  • wat er dan nog rest zijn de 2 niet-gebruikte instructie-bits en het comp veld

Bij 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:

  • de controle-bit die bepaalt van welke ALU het resultaat gebruikt wordt (X);
  • de controle-bit die bepaalt of de meest- of minst-beduidende helft van de multiplier gebruikt moet worden (Y).

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.

C instructie

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.