This shows you the differences between two versions of the page.
soc:laboratoare:07:recap [2024/02/29 14:37] 127.0.0.1 external edit |
soc:laboratoare:07:recap [2024/03/26 20:25] (current) stefan.maruntis |
||
---|---|---|---|
Line 1: | Line 1: | ||
==== a. Sumatoare multi-bit ==== | ==== a. Sumatoare multi-bit ==== | ||
- | În viața reală noi lucrăm cu numere reprezentabile pe mai mulți biți. Totuși, sumatoarele de tip Half-Adder și Full-Adder pot aduca cel mult un bit. Pentru depășirea acestei limitări, laboratorul [[soc:laboratoare:06|trecut]] am implementat un circuit capabil să facă suma numerelor reprezentate pe mai mulți biți. | + | În viața reală noi lucrăm cu numere reprezentabile pe mai mulți biți. Totuși, sumatoarele de tip Half-Adder și Full-Adder pot aduna cel mult un bit. Pentru depășirea acestei limitări, laboratorul [[soc:laboratoare:06|trecut]] am implementat un circuit capabil să facă suma numerelor reprezentate pe mai mulți biți. |
=== Sumatorul Ripple-Carry === | === Sumatorul Ripple-Carry === | ||
Line 13: | Line 13: | ||
=== Limitări === | === Limitări === | ||
- | Implementarea acestuia este facilă, însă performanța acestuia este scăzută. **De ce?** Deoarece transportul de intrare pentru fiecare sumator complet este dependent de semnalul carry-out din full-adder-ul anterior. Prin structura sa internă: modulul de rang //i// trebuie să aştepte modulul de rang //i-1// sa îşi termine execuția pentru a afla cât este C<sub>in_i</sub>. | + | Implementarea acestuia este facilă, însă performanța este scăzută. **De ce?** Deoarece transportul de intrare pentru fiecare sumator complet este dependent de semnalul carry-out din full-adder-ul anterior. Prin structura sa internă: modulul de rang //i// trebuie să aştepte modulul de rang //i-1// sa îşi termine execuția pentru a afla cât este C<sub>in_i</sub>. |
=== Îmbunătățiri === | === Îmbunătățiri === | ||
Line 29: | Line 29: | ||
| 1 | 1 | 1 | 1 | | | 1 | 1 | 1 | 1 | | ||
+ | Scriem expresia logică corespunzătoare liniilor din tabel pentru care C<sub>1</sub> are valoarea 1: | ||
* C<sub>1</sub> = A<sub>0</sub> * B<sub>0</sub> * C<sub>0</sub> + A<sub>0</sub> * B<sub>0</sub> * ~C<sub>0</sub> + ~A<sub>0</sub> * B<sub>0</sub> * C<sub>0</sub> + A<sub>0</sub> * ~B<sub>0</sub> * C<sub>0</sub> | * C<sub>1</sub> = A<sub>0</sub> * B<sub>0</sub> * C<sub>0</sub> + A<sub>0</sub> * B<sub>0</sub> * ~C<sub>0</sub> + ~A<sub>0</sub> * B<sub>0</sub> * C<sub>0</sub> + A<sub>0</sub> * ~B<sub>0</sub> * C<sub>0</sub> | ||
Line 34: | Line 35: | ||
* C<sub>1</sub> = A<sub>0</sub> * B<sub>0</sub> + C<sub>0</sub> * (A<sub>0</sub> ⊕ B<sub>0</sub>) | * C<sub>1</sub> = A<sub>0</sub> * B<sub>0</sub> + C<sub>0</sub> * (A<sub>0</sub> ⊕ B<sub>0</sub>) | ||
- | Dacă generalizăm formula, pentru //i = 0//: | + | Dacă generalizăm formula: |
* C<sub>i+1</sub> = A<sub>i</sub> * B<sub>i</sub> + C<sub>i</sub> * (A<sub>i</sub> ⊕ B<sub>i</sub>) | * C<sub>i+1</sub> = A<sub>i</sub> * B<sub>i</sub> + C<sub>i</sub> * (A<sub>i</sub> ⊕ B<sub>i</sub>) | ||
Prin urmare, pentru fiecare modul de full-adder, am putea calcula bitul carry de intrare cu cost constant egal cu 1, fără să mai așteptăm propagarea acestuia prin toate celelalte full-adder-e de rang mai mic. | Prin urmare, pentru fiecare modul de full-adder, am putea calcula bitul carry de intrare cu cost constant egal cu 1, fără să mai așteptăm propagarea acestuia prin toate celelalte full-adder-e de rang mai mic. | ||
* C<sub>out</sub> = //Generează_biții_carry? **SAU** Propagă_bitul_de_carry_de_la_rangul_inferior_dacă_nu_e_generat?// | * C<sub>out</sub> = //Generează_biții_carry? **SAU** Propagă_bitul_de_carry_de_la_rangul_inferior_dacă_nu_e_generat?// |