Podczas gdy wewnętrzne obliczanie wszystkich odpowiedzi, a następnie używanie multipleksera do wyboru spośród nich będzie działać, z pewnością nie jest to minimalny projekt.
Pomyśl, że możesz pokroić bit na problem; zamiast jednego bloku logiki z dwoma 8-bitowymi wejściami, możesz podzielić to na dwie 4-bitowe sekcje, o ile możesz je połączyć, aby uzyskać poprawny ogólny wynik. Na szczęście łączenie plasterków nie jest gorsze niż pojedynczy bit, który w przypadku dodania reprezentuje bit przeniesienia. Zatem każdy 4-bitowy wycinek ma bit przeniesienia i bit przeniesienia. (Zauważ, że logiki takie jak AND i NOR nawet tego nie potrzebują, chociaż jeśli później zaimplementujesz przesunięcia w lewo / w prawo, ten bit można łatwo zmienić).
Doprowadzony do skrajności, możesz użyć 8 kawałków 1-bitowych każdy. Warto pomyśleć o 1-bitowych odcinkach, ponieważ łatwiej jest pomyśleć o podejściu, które skaluje się z powrotem do większych wycinków. Tak więc z 1-bitowym wycięciem masz tylko 7 wejść: 4-bitowy kod funkcji, trochę z wejścia A, trochę z wejścia B i bit przeniesienia. Masz również tylko dwa wyjścia: funkcjonuj i przeprowadzaj. Teraz możesz napisać dwie funkcje wyjściowe w kategoriach zaledwie 7 danych wejściowych, co mieści się w zakresie ludzkiej możliwości rozsądnego ograniczenia. Skończysz z garstką bramek, które niekoniecznie zawsze obliczą wszystkie funkcje, ale nie ma znaczenia, co dzieje się w wycinku, tylko że daje prawidłowy wynik, gdy patrzysz z zewnątrz.
Teraz możesz przejść na kilka sposobów. Jednym ze sposobów jest po prostu użycie 8 z tych 1-bitowych plasterków i gotowe. Innym sposobem jest utworzenie większych plasterków, a następnie ich użycie. Przechodząc od 1-bitowego do 2-bitowego, równania zmieniają się z 7 wejść na 9, a 4 bity będą wymagały funkcji 13 wejść. Niekoniecznie jest to łatwe, ale daje bardziej kompaktowe wyniki niż podejście obliczania-wszystko-wtedy-multiplekser. Poza tym, jeśli spojrzysz na wnętrze 418-bitowego wycinka ALU 74181, nie zobaczysz w nim multipleksera.
Tak, potrzebujesz więcej logiki kontroli.
Twoje poprzednie zadanie było czysto arytmetyczne (czy to słowo?), Więc możesz użyć jednego sumatora i masować wejścia za pomocą sygnałów sterujących, aby stworzyć funkcje, które chcesz
Nowe funkcje są logiczne , dlatego do wykonania operacji logicznych potrzebny jest inny blok. Sygnały sterujące zmienią funkcjonalność tego bloku.
Następnie na dole diagramu potrzebujesz multipleksera (czasami nazywanego „multiplekserem”) sterowanego przez sygnały sterujące, aby wybrać odpowiedzi, które chcesz wysłać (tę z sumatora i jej obwód „masowania wejściowego”) lub ten od operatora logicznego).
Jeśli możesz wybrać nowe kodowanie linii kontrolnych ALU, może mnie kusić użycie MSB jako „arytmetyki / logiki”, a inne do wybrania „podfunkcji”, jeśli ma to sens, ponieważ upraszcza to dekodowanie końcowy multiplekser.
źródło
Jednym z ładnych podejść do obsługi operacji logicznych jest to, że bity dwóch operandów służą jako wejścia selektora do multipleksera 4-wejściowego i zasilają wejścia „danych” multipleksera czterobitowym wzorem odpowiadającym pożądanej operacji (zwykle w 8-bitowy ALU, byłoby osiem multiplekserów - po jednym dla każdego bitu - a wejścia „danych” wszystkich 8 multiplekserów byłyby powiązane).
źródło