Jak utworzyć obwód logiczny, który mnoży dwie liczby 4-bitowe, używając tylko 16 bramek 2-wejściowych i 3 sumatorów 4-bitowych?

3

„Naszkicuj układ kombinacyjny, który przyjmuje jako dane wejściowe dwie 4-bitowe liczby binarne, A3A2A1A0 i B3B2B1B0, i który wyprowadza 8-bitowy produkt P7P6P5P4P3P2P1P0. Załóżmy, że masz szesnaście bramek 2-wejściowych AND i trzy sumatory 4-bitowe. Proszę wyjaśnić powody swojego projektu. ”

Po odrobinie manipulacji zbliżyłem się do ostatniego obwodu, ale odkryłem, że trzy 4-bitowe dodatki nie wystarczą. Aby zaoszczędzić czas (i mój całkowity brak możliwości wyjaśnienia czegokolwiek), znalazłem to , co jest prawie dokładnie tym, czego potrzebuję, poza tym, że używał dwóch 4-bitowych sumatorów i jednego 6-bitowego sumatora. Chcę wiedzieć, czy jest nawet możliwe skonstruowanie obwodu, który może pomnożyć dwie liczby 4-bitowe przy użyciu bram podanych powyżej, a jeśli tak, jak można to zrobić?

Z góry dziękuję.

sa2016
źródło
jest sporo 0 wejść, które można zoptymalizować.
ratchet freak

Odpowiedzi:

0

Pierwszym krokiem jest ORAZ wszystkie kombinacje wejść, które wymagają wszystkich 16 bramek AND.

Nazwijmy te wyniki $ S_ {00} $ $ S_ {01} $ $ S_ {02} $ $ S_ {03} $ S_ {10} $ itd.

Czy aranżujemy je w sposób, w jaki musimy je dodać, otrzymujemy:

$$ start {matrix} & amp; & amp; & amp; S_ {03} & amp; S_ {02} & amp; S_ {01} & amp; S_ {00} & amp; & amp; S_ {13} & amp; S_ {12} & amp; S_ {11} & amp; S_ {10} & amp; \\ & amp; S_ {23} & amp; S_ {22} & amp; S_ {21} & amp; S_ {20} & amp; & amp; \\ S_ {33} & S_ {32} i S_ {31} & amp; S_ {30} & amp; & amp; \\ end {matrix} $$

$ S_ {00} $ jest niskim bitem wyjścia.

Następnie dodajesz 1 4-bitowy dodatek, aby dodać {0, $ S_ {03} $, $ S_ {02} $, $ S_ {01} $} i {$ S_ {13} $, $ S_ {12} $, $ S_ {11} $, $ S_ {10} $} Wynik to {$ A_c $, $ A_3 $, $ A_2 $, $ A_1 $, $ A_0 $}

Jeśli zastąpimy ten wynik w oryginalnej tabeli, zobaczymy, że powoduje to zwinięcie dwóch górnych wierszy:

$$ start {matrix} & amp; Oboz; A_3 i A_2 i A_1 i A_0 i S_ {00} & amp; S_ {23} & amp; S_ {22} & amp; S_ {21} & amp; S_ {20} & amp; & amp; \\ S_ {33} & S_ {32} i S_ {31} & amp; S_ {30} & amp; & amp; \\ end {matrix} $$

$ A_0 $ jest bitem 1 wyjścia

Następnie używasz drugiego 4-bitowego dodatku, aby dodać {$ A_c $, $ A_3 $, $ A_2 $, $ A_1 $} i {$ S_ {23} $, $ S_ {22} $, $ S_ {21} $ , $ S_ {20} $} wynik to {$ B_c $, $ B_3 $, $ B_2 $, $ B_1 $, $ B_0 $}

$$ start {matrix} B_c i B_3 i B_2 i B_1 i B_0 i A_0 i S_ {00} S_ {33} & S_ {32} i S_ {31} & amp; S_ {30} & amp; & amp; \\ end {matrix} $$

$ B_0 $ jest bitem 2 wyjścia

Następnie używasz trzeciego 4-bitowego dodatku, aby dodać {$ B_c $, $ B_3 $, $ B_2 $, $ B_1 $} i {$ S_ {33} $, $ S_ {32} $, $ S_ {31} $ , $ S_ {30} $} wynik to {$ C_c $, $ C_3 $, $ C_2 $, $ C_1 $, $ C_0 $}

Wejście przenoszenia na wszystkich 4-bitowych sumatorach wynosi 0.

Całkowity wynik to: {$ C_c $, $ C_3 $, $ C_2 $, $ C_1 $, $ C_0 $, $ B_0 $, $ A_0 $, $ S_ {00} $}

ratchet freak
źródło
Ach, dziękuję bardzo, byłem tak zafascynowany użyciem trzeciego dodatku, aby dodać wyniki pozostałych dwóch, że nawet nie pomyślałem o zrobieniu tego w ten sposób. Ma sens. Dzięki jeszcze raz. :)
sa2016