Nie rozumiem, dlaczego 74181 działa tak, jak działa. zapewniają pełny zestaw funkcji logicznych (AND, NAND, OR, NOR, XOR, shift), ale jego funkcje arytmetyczne nie są tak jasne. Na przykład nie zawiera A - B
i A + B
w tym samym trybie.
Czy mógłbyś podać trochę historii na temat tego, jak został zaprojektowany?
Komentarze
- dobre pytanie, ale nie ' nie sądzę, aby którykolwiek z nas, użytkowników chiphackerów, znał jakiekolwiek motywy TI poza tym, co jest w arkuszu danych lub na Wikipedii en.wikipedia.org/wiki/74181
- @Jason: dziękuję za komentarz. W takim razie gdzie jest dobre miejsce na to pytanie?
- nie jestem pewien … skonsultuj się z przedstawicielem handlowym TI? być może mogliby skontaktować Cię z jednym ze starych pracowników, którzy pracowali nad 74181 w 1970 roku ' s.
Odpowiedź
Wiem, że to stare pytanie, ale niedawno odtworzyłem kod 74181 i mogę szczegółowo wyjaśnić, dlaczego ma funkcje tak.
74181 to 4-bitowy układ ALU, który zapewnia 16 funkcji logicznych i 16 funkcji arytmetycznych na operandach A i B. Wiele funkcji logicznych jest tym, czego można się spodziewać (AND, OR, XOR), ale są też takie niezwykłe, jak A OR NOT B. Funkcje arytmetyczne są jeszcze dziwniejsze. Chociaż masz A PLUS B i A MINUS B, niektóre, takie jak (A OR B) PLUS (A AND NOT B), wydają się dość przypadkowe.
Tak naprawdę istnieje powód tego zestawu operacji. Funkcje logiczne dostarczają wszystkich 16 funkcji boolowskich f (A, B). Wszystkie funkcje arytmetyczne sprowadzają się do A PLUS f (A, B) PLUS przeniesienia.
Cofnij się i zobacz, dlaczego jest ich 16 Jeśli masz funkcję boolowską f (A, B) na jednobitowych wejściach, to w tabeli prawdy są 4 wiersze. Każdy wiersz może wyprowadzać 0 lub 1. Więc są 2 ^ 4 = 16 możliwych funkcji. do 4 bitów, a to jest dokładnie 16 funkcji logicznych 74181, od trywialnych 0 i 1 do logiki oczekiwanej, takiej jak A AND B, do operacji wymyślonych, takich jak NOT A AND B.
Funkcje arytmetyczne to po prostu te 16 funkcji dodanych do A z dodanym przeniesieniem. Na przykład, jeśli f (A, B) = B, otrzymasz przeniesienie A PLUS B PLUS. Jeśli f (A, B) = NOT B, otrzymasz A PLUS NOT B PLUS carry-in, które w logice dwóch „s-dopełnień zamienia się w A MINUS B MINUS 1 PLUS carry-in.
Inne arytmetyczne fu Funkcje wymagają nieco więcej analizy. Załóżmy, że f (A, B) = NIE (A LUB B). Wtedy każdy bit A PLUS f (A, B) będzie zawsze równy 1, z wyjątkiem przypadku, gdy A wynosi 0, a B wynosi 1. Więc wynikiem jest A LUB NIE B. Nawet jeśli robisz dodawanie, wynikiem jest funkcja logiczna. Inne dziwne funkcje arytmetyczne można wyjaśnić w podobny sposób.
Jedną rzeczą wartą uwagi jest to, że A PLUS A daje ci przesunięcie w lewo, ale nie ma sposobu, aby zrobić przesunięcie w prawo na 74181.
W swojej implementacji 74181 ma cztery linie wyboru, które wybierają, która z 16 funkcji f (A, B) jest używana. Pierwsza połowa obwodu chipa oblicza cztery 1-bitowe sumy A z f (A, B). (W szczególności tworzy sygnały Generuj i Propaguj, które są używane przez carry lookahead . Pozwala to 74181 pracować równolegle, zamiast używać ripple carry.) Druga połowa obwodów chipa generuje wszystkie przeniesienia równolegle i oblicza ostateczną sumę.
Wewnętrznie funkcje logiczne są implementowane przez wykonanie dodawania z wewnętrznymi przenoszeniami wymuszonymi przez linię M: A PLUS f (A, B) ze wszystkimi przeniesieniami. Łatwo zauważyć, że to nadal generuje 16 unikalnych funkcji logicznych. Jednak zmienia kolejność, dlatego jeśli spojrzysz na arkusz danych, nie ma oczywistego związku między funkcjami logicznymi a funkcjami arytmetycznymi.
Jeśli chcesz zrozumieć funkcje wewnętrzne 74181, najpierw spójrz na 7483 4-bitowy dodatek, który pojawił się dwa lata wcześniej. te same techniki obliczania przenoszenia, ale jest łatwiejsze do zrozumienia, ponieważ zapewnia jedną funkcję, a nie 32. Możesz myśleć o 74181 jako uogólnieniu 7483.
Odpowiedź
A minus B minus 1
służy do odejmowania, a uzupełnienie flagi przeniesienia może być postrzegane jako flaga wypożyczenia.
Komentarze
- W rzeczywistości nawet amplitunery AVR tego używają – nie mają instrukcji dodawania natychmiastowych (tylko natychmiastowe odejmowanie), ponieważ można łatwo przekonwertować jedną na drugą. Jeśli obie wartości pochodzą z rejestrów wtedy oba su b i add są ładne i szybkie, ale jedno nadal nie jest bezwzględnie konieczne.
- Tak, zobacz stackoverflow.com/questions/1337831/…