Wdrażałem ALU zgodnie ze specyfikacjami podanymi w mojej książce The Elements of Computing Systems Systems. Utknąłem tylko na jednym problemie. Jak mogę sprawdzić, czy podana liczba wynosi zero, czy nie. Jedną rzeczą, którą mogę zrobić, to albo co jakiś czas w autobusie, a następnie zastosować do tego bramkę. Ale musi być jakieś inne eleganckie rozwiązanie.
16
Odpowiedzi:
Po prostu nie ma szans na obejście wszystkich bitów, choć może się to wydawać niezadowalające. Jednak nie jesteś ograniczony do dwóch bramek wejściowych w krzemie. Możesz zbudować 4-wejściową bramkę NOR w logice CMOS, umieszczając 4 tranzystory typu p w sieci pullup i 4 równoległe tranzystory typu n w rozwijanej sieci. Zmniejsza to głębokość topologii drzewa, a tym samym opóźnienie propagacji. Do tej pory można przyjąć tę teorię, zanim jednak skumulowany spadek napięcia na tranzystorach szeregowych sprawi, że podciąganie nie będzie wystarczające, aby być „1”… cztery to dobra zasada, o ile dobrze pamiętam.
źródło
Funkcją logiczną jest bramka NOR. To najprostsza z dostępnych funkcji logicznych.
źródło
Typowe rozwiązanie dla maszyn 8-bitowych polegało na tym, że ALU produkowałoby wiele „flagowych” bitów, które reprezentowałyby wynik ostatniej operacji. Chociaż można mieć dookoła dowolną liczbę bitów flagi (tzn. Możesz mieć flagę „Z” dla każdego rejestru w procesorze), zwykle jest to najbardziej interesująca rzecz, którą właśnie obliczyłeś, więc robienie tego w ten sposób ma pewien sens.
Niektóre z tych starych procesorów automatycznie ustawiałyby bity flagi dla prawie każdego przenoszenia danych, podczas gdy inne wymagałyby umieszczenia w kodzie określonej instrukcji „porównaj”, jeśli nagle trzeba by wiedzieć, czy określony rejestr ma wartość zero. I niezależnie od tego, czy zapewniasz zerowanie dla każdego rejestru, czy tylko dla tego, co właśnie zostało obliczone, tak naprawdę nie ma prostszego sposobu, aby sprawdzić „to słowo zero” niż po prostu LUB wszystkie bity razem.
źródło
Niektóre procesory, na przykład MIPS, mają rejestr, który zawsze zawiera zero, co sprawia, że testowanie innego rejestru dla zera jest bardzo szybkie.
źródło
Jestem wielkim fanem
or_reduce
- większość narzędzi do syntezy zoptymalizuje to do najlepszej implementacji, ponieważ dokładnie wiedzą, co robisz.źródło