Funzioni essenziali di una semplice ALU 8bit

Sezione dedicata ai Microcontrollori e ai Sistemi Embedded

Funzioni essenziali di una semplice ALU 8bit

Postby execute » 05 Jan 2013, 16:01

ciao,
visto che mi sto imbattendo nella realizzazione di una CPU homemade con TTL logic, sto partendo con la ALU.
secondo voi, quali dovrebbero essere le funzioni aritmetiche e booleane essenziali che dovrebbe eseguire una semplice ALU 8 bit?

ad esempio:
------------------------------
somma
sottrazione
incremento di un valore
decremento di un valore
moltiplicazione
divisione
confronto A>B, A<B, A=B
------------------------------
or
nor
and
nand
not
xor
shift sinistra, destra
------------------------------
cosa mi consigliate di aggiungere?

grazie
execute
 
Posts: 13
Joined: 19 Dec 2012, 10:07

Re: Funzioni essenziali di una semplice ALU 8bit

Postby legacy » 05 Jan 2013, 21:03

di togliere:

moltiplicazione
divisione

le fai in software, o in microcodice
e ti consiglio in software, prima
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Funzioni essenziali di una semplice ALU 8bit

Postby deluca » 06 Jan 2013, 21:35

ciao execute,
le funzioni da te elencate sono quelle di norma implementate su ALU di primo livello in grado di eseguire operazioni booleane e aritmetiche fondamentali.
Tuttavia la moltiplicazione e la divisione risultano abbastanza difficili da realizzare con logica cablata.

Per aiutarti ti propongo un circuito che ho sviluppato una quind. di anni fa, o forse più, che permette di eseguire una moltiplicazione di due valori a 4bit, il risultato chiaramente è presentato su 8bit.
Prima di realizzarlo con chip reali prova a simularlo e prova tu stesso a espanderlo a 8bit.

Moltiplicatore_4bit.jpg
Moltiplicatore_4bit.jpg (147.42 KiB) Viewed 3780 times
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Funzioni essenziali di una semplice ALU 8bit

Postby legacy » 08 Jan 2013, 11:58

Bah, le mul si portano dietro problemi
cosa succede se nel tuo circuito (unsigned) mul 4 bit fai b1111 x b1111 ????
va messo anche circuito per dire -> overflow, disastro, pasticcio
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Funzioni essenziali di una semplice ALU 8bit

Postby deluca » 08 Jan 2013, 14:23

@legacy :)

non ti sei fatto bene i conti......

1111 x 1111 = 11100001 che in decimale è uguale a 225

il moltiplicatore da me descritto sopra va benissimo per eseguire moltiplicazioni a 4 bit senza aver necessità di overflow poichè anche moltiplicando dec 10 x 10 avresti 100 che in esa diventa x64

x0A x x0A = x64 = cento (dec)

sono stato chiaro? eccoti l'esempio reale (simulato)

Moltiplicatore_FxF.jpg
Moltiplicatore_FxF.jpg (158.29 KiB) Viewed 3764 times


e qui l'esempio A x A = 64
Moltiplicatore_AxA.jpg
Moltiplicatore_AxA.jpg (156.91 KiB) Viewed 3764 times
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Funzioni essenziali di una semplice ALU 8bit

Postby legacy » 08 Jan 2013, 15:23

non ci siamo capiti

una ALU ha operandi dello stesso numero di bit del risultato, quindi se parti da 4 bit ed ottieni in uscita 8 bit non va bene
nel caso abbiamo detto bx1111 x bx1111 = bx11100001, due sorgenti operandi a 4 bit ed un risultato ad 8 bit
come propaghi quegli 8 bit nella CPU che e' a 4 bit ? a rigore non puoi, puoi soltanto propagare 4 bit, perche' tutta la CPU e' a 4bit

e nel caso di prima con soli 4 bit in uscita avresti bx0001 non e' corretto come risultato matematico perche' ti perderesti i primi bx1110
per il motivo che il risultato non ti ci sta in 4 bit: quando succede devi segnalarlo !

che soluzione proponi ? usare registro di appoggio ? con comparatore ?

esemplificando:

hai ALU a 4 bit: source1, source2, target1, appoggio, tutti e 4 registri a 4bit

{target1,appoggio}=source1 x source2
if appoggio notEq to bx0000 -> cpu.alu.flag.overflow=bx1

source1=bx1111
source2=bx1111
target1=bx0001
appoggio=bx1110
cpu.alu.flag.overflow=bx1

una roba cosi' ? dove la CPU sa che la MUL e' in overflow (cpu.alu.flag.overflow=bx1)
e leggendo il registro appoggio si recupera anche di quanto ?
Last edited by legacy on 21 Jan 2013, 11:59, edited 3 times in total.
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30

Re: Funzioni essenziali di una semplice ALU 8bit

Postby deluca » 08 Jan 2013, 20:49

Ok legacy,
nel caso che il bus dati CPU sia limitato a 4bit il registro di "appoggio" è una strada percorribile.
Cmq, il mio moltiplicatore stava solo a dimostrare la fattibilità con hw cablato,
con semplici modifiche potrebbe essere espanso a nbit con result 2nbit.
Poi decidi tu se il risultato lo vuoi caricare su registri Low e High e siringarlo sul bus in 2cicli.

ciao
Ciao
Il mio sito: http://www.delucagiovanni.com ......e la chat: chat/
User avatar
deluca
Site Admin
 
Posts: 1104
Joined: 19 Jun 2011, 10:44
Location: 95123 - Catania (Italy)

Re: Funzioni essenziali di una semplice ALU 8bit

Postby legacy » 09 Jan 2013, 12:34

Per la divisione, divisore+modulo resto, hai implementato qualcosa di simile ?
legacy
 
Posts: 862
Joined: 12 Mar 2012, 11:30


Return to Microcontrollori e microprocessori

Who is online

Users browsing this forum: No registered users and 11 guests

cron