W jaki sposób różne funkcje (np. Dodawanie, odejmowanie i itp.) Są implementowane w ALU?

9

Zastanawiam się, ponieważ jest tak wiele funkcji, które ALU musi wykonać, jak mogę zacząć wdrażać jedną (zadanie domowe, w którym powinienem wdrożyć system MIPS z Logisim, używając podstawowych bramek, klapek itp.).

Nie jestem pewien, jak mogę zaimplementować jednostkę ALU, która może wykonywać różne funkcje, takie jak dodawanie / odejmowanie / AND / OR / itp. Czy potrzebuję więcej kontroli logiki (patrz prawy górny róg w „poprzednim zadaniu” poniżej).

W poprzednim zadaniu zaimplementowałem ALU, który potrafi dodawać / odejmować / negować. Teraz myślę, że ALU powinien móc wykonywać takie funkcje

Moje poprzednie zadanie

Jiew Meng
źródło

Odpowiedzi:

7

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.

JustJeff
źródło
Skierowałem moją odpowiedź bardziej na „łatwe załatwienie sprawy od początku”, ale dziękuję za wskazanie bardziej optymalnej (sprzętowo) możliwości.
Martin Thompson
5

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.

Martin Thompson
źródło
Tak, arytmetyka to słowo :)
Majenko
1
Wydaje mi się, że arytmetyka to słowo, które chcesz. Zauważ, że to słowo ma akcent na trzeciej sylabie. Z akcentem na drugą sylabę jest to inne słowo odnoszące się do mechaniki wykonywania podstawowych operacji numerycznych, tak jak uczysz się w szkole podstawowej.
Olin Lathrop
1

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).

supercat
źródło
rodzaj użycia multipleksera jako bardzo małej pamięci ROM - i to jest inny sposób, aby użyć rzeczywistych pamięci ROM.
JustJeff,
Nx1-bit ROM to multiplekser, którego wejścia „danych” są podłączone na stałe. W opisanym przeze mnie scenariuszu wejścia „danych” multipleksera byłyby wyborem operatora. W praktyce prawdopodobnie użyłby małej pamięci ROM do wybrania kilku z 16 możliwych operacji logicznych, a także kilku innych operacji, z 3- lub 4-bitowego kodu operacyjnego (w razie potrzeby można go przekazać bezpośrednio do jednostka logiczna, ale użyj innych multiplekserów, aby wybrać inne operacje w przypadkach, w których kod operacji nie wygeneruje użytecznej operacji logicznej).
supercat