Come vengono implementate le varie funzioni (ad es. Aggiungi, sottrai, ecc.) In ALU?


9

Mi chiedo poiché ci sono così tante funzioni che una ALU deve svolgere, come potrei iniziare a implementarne una (un compito a casa in cui dovrei implementare un sistema MIPS con Logisim, usando Gates di base, Flip-flop ecc.).

La parte di cui sono confuso è come posso implementare un ALU che può fare diverse funzioni come Aggiungi / Sottrai / AND / OR / etc. Ho bisogno di più logica di controllo (vedi in alto a destra in "assegnazione precedente" di seguito).

In un compito precedente, ho implementato un ALU che può fare Aggiungi / Sottrai / Nega. Ora penso che un ALU dovrebbe essere in grado di svolgere funzioni come

Il mio incarico precedente

Risposte:


7

Pur calcolando internamente tutte le risposte, e quindi usando un mux per selezionare tra di loro funzionerà, non è certamente un design minimale.

Considera che puoi dividere il problema in bit; invece di un singolo blocco logico con due ingressi a 8 bit, è possibile partizionarlo come due sezioni a 4 bit, purché sia ​​possibile collegarli per ottenere un risultato complessivo corretto. Fortunatamente, collegare le sezioni non è peggio di un singolo bit, che in caso di aggiunta rappresenta il bit di riporto. Quindi ogni slice a 4 bit ha un bit di carry-in e un bit di carry-out. (Nota che logici come AND e NOR non ne avranno nemmeno bisogno, anche se in seguito implementerai i turni sinistro / destro, questo bit sarà facilmente riutilizzato).

Portati all'estremo, potresti usare 8 fette da 1 bit ciascuna. È utile pensare alle sezioni da 1 bit, perché rende più semplice pensare a un approccio che ridimensiona a sezioni più grandi. Quindi con uno slice da 1 bit, hai solo 7 ingressi: il codice funzione a 4 bit, un bit dall'ingresso A, un bit dall'ingresso B e un bit carry-in. Hai anche solo due uscite: funzione e realizzazione. Quindi ora puoi scrivere le due funzioni di output in termini di soli 7 input, che è nel regno della capacità umana di ridurre ragionevolmente. Ti ritroverai con una manciata di porte che non necessariamente calcoleranno sempre tutte le funzioni, ma non importa cosa succede all'interno della fetta, solo che produce il risultato corretto se visto dall'esterno.

Ora puoi andare in un paio di modi. Un modo è semplicemente usare 8 di queste sezioni da 1 bit e il gioco è fatto. Un altro modo è quello di fare fette più grandi e quindi usarle. Passando da 1 bit a 2 bit, le equazioni vanno da 7 ingressi a 9 e 4 bit richiederanno funzioni di 13 ingressi. Non è necessariamente facile, ma darà risultati più compatti rispetto all'approccio compute-everything-then-mux. Inoltre, se guardi gli interni di un slice ALU 74181 a 4 bit, non vedrai un mux lì dentro.


Stavo puntando la mia risposta più alla fine "facile da far girare la testa per iniziare", ma grazie per aver sottolineato una possibilità più ottimale (dal punto di vista hardware).
Martin Thompson,

5

Sì, hai bisogno di più logica di controllo.

Il tuo precedente incarico era puramente aritmetico (è una parola?), Quindi puoi usare un singolo sommatore e massaggiare gli input usando i segnali di controllo per creare le funzioni che desideri

Le nuove funzioni sono logiche , quindi è necessario un altro blocco per eseguire operazioni logiche. I segnali di controllo cambieranno la funzionalità di questo blocco.

Quindi nella parte inferiore del diagramma avrai bisogno di un multiplexer (a volte chiamato "mux") guidato dai segnali di controllo per scegliere quale delle risposte stai per emettere (quella dall'adder e il suo circuito di "input massaging" o quello dell'operatore logico).

Se puoi scegliere nuove codifiche per le tue linee di controllo ALU, potrei essere tentato di usare MSB come selezione "aritmetica / logica" e gli altri di selezionare la "sottofunzione" se ciò ha senso, poiché semplifica la decodifica per mux finale.


Sì, aritmetica è una parola :)
Majenko,

1
Mi sembra che l' aritmetica sia la parola che vuoi. Nota che questa parola ha l'accento sulla terza sillaba. Con l'accento sulla seconda sillaba è una parola diversa che si riferisce alla meccanica di eseguire operazioni numeriche di base come tu impari nella scuola elementare.
Olin Lathrop,

1

Un buon approccio alla gestione delle operazioni logiche consiste nel fare in modo che i bit dei due operandi fungano da input di selettore per un multiplexer a 4 input e fornire agli input "dati" del multiplexer uno schema a quattro bit corrispondente all'operazione desiderata (in genere in un ALU a 8 bit, ci sarebbero otto multiplexer - uno per ogni bit - e gli ingressi "dati" di tutti gli 8 multiplexer sarebbero collegati insieme).


una specie di utilizzo di un multiplexer come una ROM molto piccola - e questo è un altro modo di andare, per usare ROM reali.
JustJeff,

Una ROM Nx1-bit è un multiplexer i cui ingressi "dati" sono cablati. Nello scenario che ho descritto, gli input "dati" del multiplexer sarebbero stati selezionati dall'operatore. In pratica, si potrebbe probabilmente usare una piccola ROM per selezionare alcune delle 16 possibili operazioni logiche, oltre a poche altre operazioni, da un codice operativo a 3 o 4 bit (si potrebbe, se lo si desidera, passare il codice operativo direttamente al unità logica, ma utilizzare altri multiplexer per selezionare altre operazioni nei casi in cui il codice operativo non genererebbe un'operazione logica utile).
supercat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.