This shows you the differences between two versions of the page.
soc:laboratoare:07:overview [2024/02/29 14:37] 127.0.0.1 external edit |
soc:laboratoare:07:overview [2024/04/16 23:50] (current) stefan.maruntis |
||
---|---|---|---|
Line 9: | Line 9: | ||
generează un semnal **G**, înseamnă că acești biți generează un bit de carry, iar în cazul unui semnal **P**, bitul de carry de la **n-1** (dacă există) este **propagat** de către biții **n** pe poziția **n+1**. | generează un semnal **G**, înseamnă că acești biți generează un bit de carry, iar în cazul unui semnal **P**, bitul de carry de la **n-1** (dacă există) este **propagat** de către biții **n** pe poziția **n+1**. | ||
- | Pornind de la un sumator **ripple-carry**, unde pentru fiecare full-adder (i), semnalul carry-out, c(i+1), este setat la 1 dacă una dintre următoarele condiții este adevărată: | + | Pornind de la un sumator **ripple-carry**, pentru fiecare full-adder (i), semnalul carry-out, c(i+1), este setat la 1 dacă una dintre următoarele condiții este adevărată: |
* A<sub>i</sub> = 1 AND B<sub>i</sub> = 1 | * A<sub>i</sub> = 1 AND B<sub>i</sub> = 1 | ||
sau | sau | ||
Line 22: | Line 22: | ||
* **P<sub>i</sub>(A<sub>i</sub>, B<sub>i</sub>) = A<sub>i</sub> | B<sub>i</sub>** | * **P<sub>i</sub>(A<sub>i</sub>, B<sub>i</sub>) = A<sub>i</sub> | B<sub>i</sub>** | ||
- | Uneori (dar nu și in laboratorul de față) se folosește și o altă definiție a propagării. Conform acesteia, A<sub>i</sub> + B<sub>i</sub> va propaga dacă există carry anterior, dar nu va propaga dacă nu există acest carry. Astfel, propagagarea o putem exprima: | + | <spoiler Implementarea bitului de propagare cu XOR> |
+ | |||
+ | Uneori (dar nu și în laboratorul de față) se folosește și o altă definiție a propagării. Exprimarea lui P<sub>i</sub> = A<sub>i</sub> + B<sub>i</sub> va propaga carry-ul (dacă numai unul dintre A<sub>i</sub> și B<sub>i</sub> este 1), dar va propaga și atunci când sumatorul **generează** carry (A<sub>i</sub> și B<sub>i</sub> sunt ambele 1). Rezultatul final este corect oricum, însă preferăm să nu propagăm atunci când generăm carry. Astfel, putem folosi operatorul XOR, pentru a propaga carry-ul atunci când numai unul dintre biții A<sub>i</sub> și B<sub>i</sub> este 1, dar nu ambii: | ||
* P'<sub>i</sub>(A<sub>i</sub>, B<sub>i</sub>) = A<sub>i</sub> ⊕ B<sub>i</sub> | * P'<sub>i</sub>(A<sub>i</sub>, B<sub>i</sub>) = A<sub>i</sub> ⊕ B<sub>i</sub> | ||
Desi OR(prima variantă) e mai rapid decât XOR(a doua variantă), pentru un sumator carry-lookahead pe mai multe nivele e mai avantajos să folosim P'<sub>i</sub>(A<sub>i</sub>, B<sub>i</sub>). | Desi OR(prima variantă) e mai rapid decât XOR(a doua variantă), pentru un sumator carry-lookahead pe mai multe nivele e mai avantajos să folosim P'<sub>i</sub>(A<sub>i</sub>, B<sub>i</sub>). | ||
+ | |||
+ | </spoiler> | ||
Rescriind ecuația (1) cu P<sub>i</sub> si G<sub>i</sub>, rezultă: | Rescriind ecuația (1) cu P<sub>i</sub> si G<sub>i</sub>, rezultă: | ||
* **c<sub>i+1</sub> = G<sub>i</sub> | P<sub>i</sub> & c<sub>i</sub>** | * **c<sub>i+1</sub> = G<sub>i</sub> | P<sub>i</sub> & c<sub>i</sub>** | ||
+ | <note> | ||
Pentru o comparație mai tangibilă a întârzierilor celor 2 sumatoare (ripple-carry și carry-lookahead), puteți folosi aceste 2 simulatoare cu întârziere setabilă pentru porțile folosite (se pot observa întârzieri semnificative ale lui ripple-carry față de carry-lookahead pentru numere reprezentabile pe 32 de biți): | Pentru o comparație mai tangibilă a întârzierilor celor 2 sumatoare (ripple-carry și carry-lookahead), puteți folosi aceste 2 simulatoare cu întârziere setabilă pentru porțile folosite (se pot observa întârzieri semnificative ale lui ripple-carry față de carry-lookahead pentru numere reprezentabile pe 32 de biți): | ||
* [[http://www.ecs.umass.edu/ece/koren/arith/simulator/Add/ripple/ripple.html|Ripple-carry]] | * [[http://www.ecs.umass.edu/ece/koren/arith/simulator/Add/ripple/ripple.html|Ripple-carry]] | ||
- | * [[http://www.ecs.umass.edu/ece/koren/arith/simulator/Add/lookahead/|Carry-lookahead]] | + | * [[http://www.ecs.umass.edu/ece/koren/arith/simulator/Add/lookahead/|Carry-lookahead]] |
+ | </note> |