Ultimo passo, croce e fatica è l’implementazione della circuiteria che genera i segnali di controllo. È vero che si tratta di poco più che ricavare dei circuiti a partire da delle tabelle della verità, ma si tratta di una procedura importante perché ci permette anche di capire come estendere il processore, cioè come aggiungere nuove funzionalità a ciò che già abbiamo. Detto tra parentesi, “ultimo” non è del tutto esatto. Anzi, è una spudorata menzogna. Con quello che vi diremo oggi, potrete andare in giro a vantarvi di aver progettato un processore funzionante, ma sappiate: il vostro processore fa schifo. Al di là delle funzionalità implementate, è lento. Molto lento. E a nessuno piacciono i processori lenti. L’ottimizzazione, si sa, è il calvario di ogni progetto, ma si tratta della storia di un altro giorno: il viaggio non finisce qui.
METTIAMO IL GUINZAGLIO
A nessuno (o quasi) piace complicarsi la vita e agli ingegneri ancora meno che a chiunque altro. E’ questo uno dei motivi per cui agli ingegneri piacciono tanto gli schemi a blocchi e progetti fatti tirando linee qua e là per interconnettere i vari pezzi, e notando come questo segnale qua diventi uno e forzi la lettura della memoria, che a sua volta farà commutare quella porta là e via dicendo via dicendo via dicendo. Ma un circuito non è semplicemente una serie di scatolini collegati tra loro e che funzionano come dice la testa dell’ingegnere. Un circuito è un insieme di componenti collegati tra loro e che funzionano come dicono le leggi della fisica. Una volta buttato giù lo schema a blocchi, bisogna anche dare un contenuto agli scatolini, altrimenti il circuito rimarrà solo un disegno il più delle volte nemmeno artistico.
L’ultima volta abbiamo descritto il funzionamento del nostro processore con una serie di scatolini, e abbiamo detto cosa va messo dentro ad essi tranne che per lo scatolino che generava i segnali di controllo. Quest’ultimo scatolino l’avevamo descritto mediante la tabella 1.
Per passare dalla testa dell’ingegnere (io) al mondo della fisica, dobbiamo trasformare questa tabella in circuito. Come al solito, ci sono due modi per farlo: quello semplice e inefficiente, e quello difficile ed efficiente. Prima di occuparcene, però, ci serve un’altra tabella (2), quella che descrive le linee ALUFN a seconda dell’opcode.
Diamo un’occhiata alle nostre istruzioni. I primi due bit dell’opcode distinguono il tipo di operazione (confronto, aritmetica, booleana o shift), quindi possiamo usarli direttamente come ingresso di selezione per il mux all’interno della ALU. Questo mux è controllato dai bit 5 e 4 di ALUFN, il che ci permette di dire che i bit ALUFN[5:4] saranno sempre uguali ai bit 3 e 2 dell’opcode. [...]
ATTENZIONE: quello che hai appena letto è solo un estratto, l'Articolo Tecnico completo è composto da ben 2917 parole ed è riservato agli ABBONATI. Con l'Abbonamento avrai anche accesso a tutti gli altri Articoli Tecnici che potrai leggere in formato PDF per un anno. ABBONATI ORA, è semplice e sicuro.