Un sommatore parallelo è composto da un certo numero di Full-Adder, ad esempio per un sommatore a 4 bit:
Ogni Full-Adder è composto da 2 Half-Adder:
Vogliamo simulare la struttura e il funzionamento di un sommatore parallelo a 8 bit, per questo dovrai creare le classi seguenti:
HalfAdder
Simula il comportamento di un semi-sommatore, esegue la somma binaria dei 2 bit in ingresso (A e B) e produce in uscita la somma (S) e il riporto (C):
A | B | S | C |
---|---|---|---|
0 | 0 | 0 | 0 |
0 | 1 | 1 | 0 |
1 | 0 | 1 | 0 |
1 | 1 | 0 | 1 |
La classe possiede il costruttore vuoto e i metodi:
public boolean getSum(boolean a, boolean b)
public boolean getCarry(boolean a, boolean b)
FullAdder
Simula il comportamento di un sommatore completo, è composto da 2 HalfAdder
ed esegue la somma binaria dei 2 bit in ingresso (An e Bn) e del bit di riporto della colonna precedente (Cn-1)e produce in uscita la somma (Sn) e il riporto (Cn):
An | Bn | Cn-1 | Sn | Cn |
---|---|---|---|---|
0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 0 |
0 | 1 | 0 | 1 | 0 |
0 | 1 | 1 | 0 | 1 |
1 | 0 | 0 | 1 | 0 |
1 | 0 | 1 | 0 | 1 |
1 | 1 | 0 | 0 | 1 |
1 | 1 | 1 | 1 | 1 |
La classe possiede il costruttore vuoto e i metodi:
public boolean getSum(boolean a, boolean b, boolean carryIn)
public boolean getCarry(boolean a, boolean b, boolean carryIn)
Calculator
È un calcolatore binario a 8 bit composto da 8 FullAdder
e implementa, oltre al costruttore vuoto, i metodi utili per sommare e sottrarre due numeri da 8 bit:
public byte add(byte a, byte b)
public byte sub(byte a, byte b)
HalfAdder
, FullAdder
e Calculator
Considera la classe JKFlipFlop
che simula il funzionamento di un flip-flop JK edge-triggered.
L’interazione con gli ingressi J
e K
del flip-flop avviene tramite i metodi:
public void setJ(boolean j)
public void setK(boolean k)
Il triggering del flip-flop è prodotto dal metodo che simula un impulso di clock:
public void clock()
Lo stato del flip-flop è accessibile attraverso il metodo:
public boolean getQ()
La logica di funzionamento del FF JK é riassunta nella seguente tabella:
J | K | C | Q | |
---|---|---|---|---|
0 | 0 | ↑ | Q0 | NC |
0 | 1 | ↑ | 0 | RESET |
1 | 0 | ↑ | 1 | SET |
1 | 1 | ↑ | !Q0 | TOGGLE |
L’istanziazione dei flip-flop è possibile esclusivamente tramite il costruttore vuoto; inizialmente i flip-flop si trovano nello stato RESET (Q=0).
Dovrai:
JKFlipFlop
, per ognuno di essi dovrai fornire:
JKFlipFlop
JKFlipFlop
utilizzando il framework JUnit
in modo appropriato