Newsgroup: it.hobby.elettronica.digitale
Titolo: Aiuto MACCHINE ARITMETICHE

Scusate un problema di macchine aritmetiche dice :
Progettare un addizionatore modulo 12 avendo a disposizione  addizionatori
modulo 16 e porte logiche AND , OR e NOT.
Deve essere
S = (A+B+C_entrante) mod 12
C_uscente = (A+B+C_entrante) >= 12
con A e B i 2 numeri da sommare e C_entrante e C_uscente rispettivamente
riporti entranti e uscenti
Vi prego aiutatemi per piacere non so proprio dove devo mettere le mani
--
------
Bye
StEvE_VaI_FaN
Remove NOSPAM for private reply

 modulo 16 e porte logiche AND , OR e NOT.
Prendi l'addizionatore modulo 16 e nei due ingressi A e B (costituiti
ciascuno da 16 fili : a0_a15 , b0_b15) mandi rispettivamente i 12 fili degli
ingressi dell'addizionatore che devi costruire, e i restanti 4 fili che
restano "liberi" li metti a 0. (in sostanza, se gli ingressi per il mod12
sono C (c0_c11) e D (d0_d11) otterrai:
a[0..15]={c[0..11],0000}
b[0..15]={d[0..11],0000}
Il CARRY_IN lo colleghi semplicemente all'addizionatore, come faresti
normalmente.
A questo punto in uscita otterrai il risultato esatto (per forza, perchè usi
un addizionatore da 16 bit per sommare due numeri da 12 bit... ed
eventualmente un carry).
Adesso bisogna pensare all'uscita (supponiamo che si chiami S ... s0_s16).
Dunque: ciò che ci interessa sono solamente i primi 13 fili dell'uscita
(poichè sommando due numeri da 12 bit il risultato al massimo starà su 13
bit)... e di questi, ovviamente, i primi 12 (s0_s11) saranno quelli del
risultato da fornire, mentre il 13° filo (s12) sarà il CARRY_OUT.
Credo che sia così, poi ovviamente controlla... ho dato reti logiche già da
un paio d'anni e potrei aver preso qualche granchio.
Ciao!
-
paperog@

Ti ringrazio moltissimo penso che dovrebbe funzionare bene
--
------
Bye
StEvE_VaI_FaN

 b[0..15]={d[0..11],0000}
Non mi torna. Un addizionatore a una cifra modulo 16 non dovrebbe avere 4
piedini (bit) per ognuno dei due ingressi A e B?
Se fosse così io risolverei il problema in questo modo: faccio lavorare
normalmente l'addizionatore modulo 16, poi la conversione la faccio
sul'uscita S[0..3] lavorando con le porte logiche.
Il riporto in uscita si verifica o quando la somma non è rappresentabile
modulo 16 (e qui puoi usare il carry_out che hai già) o quando non è
rappresentabile modulo 12 (basta un AND tra S[2] e S[3]). Metti il carry_out
originale e l'uscita della porta AND che hai appena fatto su una porta OR,
l'uscita di quest'ultima sarà il carry_out' dell'addizionatore modulo 12.
Poi per ottenere l'uscita S' dell'addizionatore modulo 12 fai questo
ragionamento: se carry_out'=0 l'uscita S' coincide con S (la somma era <12),
altrimenti vuol dire che la somma era compresa tra 12 e 22 (dando per
ipotesi che su A e B arrivino cifre <12, trattandosi di un addizionatore
modulo 12). In questo caso se hai una numero x, 12<=x<=22, puoi verificare
che x mod(12) = x+4 mod(16), quindi usa un'altro addizionatore mod 16, usa S
(del primo addizionatore) come A (del secondo) e 4 (costante) come B (del
secondo) e usa l'uscita del secondo addizionatore come S'.  In altre parole:
fai coincidere sempre S' con l'uscita S del secondo addizionatore, e metti
tutti i piedini di ingresso B di quest'ultimo a massa tranne B[2] che
collegherai a carry_out' (se questo è 0, B=0 altrimenti B=4).
Non so se funziona, prova e fammi sapere.
Ciao!

 piedini (bit) per ognuno dei due ingressi A e B?
Ovviamente ;o)
Chiedo scusa, ma ho preso un GRANCHIO ENORME... ero alzato da poco (da
un'oretta... ma per me č poco :) ... )... si parlava di modulo 16
(giustamente come tu dici a 4 bit) ed io in testa mi immaginavo un contatore
a 16 bit (cioč 65536!).
La prossima volta scrivo a mezzogiorno... magari sono piů lucido :o) ...
Ciao!
-
paperog@