Witam.
Kod: Zaznacz cały
Zaprojektuj i zrealizuj za pomocą funktorów NAND iteracyjny układ kombinacyjny 3 - bitowego komparatora o strukturze pojedyńczego bloku. Gdy d=m=0, r=1.
Moja podpowiedź jest następująca: Jeśli mamy dwie liczby nieujemne (powiedzmy 3-cyfrowe), na razie przyjmijmy, że w układzie dziesiątkowym, to jak je porównujemy? Najpierw porównujemy cyfry setek, jeśli któraś jest większa, to już wiemy, która liczba jest większa, a jeśli są równe, to przechodzimy do porównywania cyfr dziesiątek, i postępujemy podobnie. Jeśli i tu nie stwierdzimy, która liczba jest większa, to porównujemy cyfry jedności. Jeśli i tu nie stwierdzimy, że któraś liczba jest większa, to liczby są równe. I to jest właśnie iteracyjny algorytm porównywania liczb - powtarzamy trzykrotnie (bo liczby są 3-cyfrowe) to samo działanie.
Z liczbami dwójkowymi postępujemy dokładnie tak samo, różnica jest tylko taka, że cyfry mogą być równe tylko 0 lub 1.
Zdanie "Gdy d=m=0, r=1" rozumiem jako podpowiedź, że można użyć dwóch sygnałów przenoszących informację z jednego etapu iteracji na następny: sygnału
d, który jest równy 1, gdy pierwsza liczba jest większa od drugiej (
duża), oraz sygnału
m, który jest równy 1, gdy pierwsza liczba jest
mniejsza od drugiej. Stan d=m=0 będzie oznaczał, że jak na razie nie stwierdziliśmy, żeby któraś liczba była większa, czyli że są one, póki co do tej pozycji,
równe.
Trzeba więc napisać tabele prawdy dla pojedynczego bloku iteracyjnego, który będzie miał dwa wejścia w postaci bitów obu porównywanych liczb na danej pozycji (np.
a1 i
b1, a ogólnie
ai i
bi, gdzie i=0, 1 lub 2), a także dwa wejścia
d i
m sygnałów propagujących się od bitu najstarszego do najmłodszego. Tabele te będą określały stany sygnałów wyjściowych
d' i
m', przechodzących na następny blok iteracyjny młodszej pozycji. Tabele te powinny uwzględniać, co następuje:
Gdy na wejściu
d lub
m występuje jedynka, wyjścia
d' i
m' powinny niezależnie od
ai i
bi powtarzać stan wejść
d i
m, bo to oznacza, że już okazało się, która liczba jest większa. Jeśli natomiast i
d i
m są równe zeru, to jeśli
ai>
bi, przyjmijmy, że ten stan opisujemy jako
d'=1 oraz
m'=0. Konsekwentnie musimy przyjąć, że dla
ai<
bi
d'=0 oraz
m'=1. Dla
ai=
bi (przy
d=
m=0) bloczek iteracyjny powinien odpowiadać, zgodnie z opisaną wyżej ideą, stanem
d'=
m'=0 (bo nie wiedzieliśmy, która liczba jest większa, i po porównaniu cyfr na pozycji i-tej nadal tego nie wiemy, bo cyfry na tej pozycji są równe).
W całym powyższym opisie i powinno być w indeksie, a zamiast
d i
m powinienem pisać
di i
mi (i w indeksie), oraz zamiast
d' i
m', powinienem pisać
d i
m z indeksem równym i-1. Nie robiłem tak dlatego, że nie mam do dyspozycji indeksów, a przykładowo zapis
di-1 może być mylący, bo w pierwszej chwili jest rozumiany jako odjęcie 1 od
di.
Po napisaniu tabel prawdy należy napisać siatki Karnaugha... ale to w miarę potrzeby następnym razem.
Pozdrawiam.