Komparator nieco zliczania (BCC), to układ logiczny, który wykonuje pewną liczbę wejścia licznika A1, A2, A3, ..., An
, a także wejść B1, B2, B4, B8, ...
reprezentujących liczbę. Zwraca wtedy 1
, gdy całkowita liczba A
dane wejściowe na jest większa niż ilość reprezentowana w binarnym przez B
wejściowych (na przykład B1
, B2
i B8
może sprawić, że wiele 11
), oraz 0
w inny sposób.
Na przykład, dla komparatora zliczania bitów, które ma 5
wejścia, z których A2
, A4
, A5
i B2
są ustawione na 1
powróci 1
ponieważ istnieją 3 A
dane wejściowe są włączone, który jest większy niż 2
(numer reprezentowany przez tylko B2
jest on).
Twoim zadaniem jest stworzenie komparatora zliczającego bity, który pobierze w sumie 16 A
wejść i 4 B
wejścia (reprezentujące bity od 1
do 8
), używając tylko dwuwejściowych bramek NAND i używając jak najmniejszej liczby bramek NAND. Aby uprościć rzeczy, możesz użyć bramek AND, OR, NOT i XOR na diagramie z następującymi odpowiednimi wynikami:
NOT: 1
AND: 2
OR: 3
XOR: 4
Każda z tych ocen odpowiada liczbie bramek NAND potrzebnych do zbudowania odpowiedniej bramki.
Wygrywa obwód logiczny, który używa najmniejszej liczby bramek NAND do uzyskania prawidłowej konstrukcji.
źródło
AND
== twoNAND
Odpowiedzi:
169 nands
Dodaje A do A {1,2,4,8,16}. Następnie wykonuje binarne porównanie z Bs.
Używam jeszcze kilku elementów:
Sumatory pół i pełne mają 2 wyjścia - wyróżniają się r dla wyniku i c dla przeniesienia.
A {1,2,4,8,16} to dane wyjściowe z sumatorów połówkowych.
źródło
751 bramek
To nie jest jeszcze w pełni gra w golfa. Odpowiedziałem w Verilog, ponieważ w ten sposób mogłem napisać program do wyświetlania każdej sekcji. Jeśli odpowiedź na diagramie jest obowiązkowa, daj mi znać. Są równoważne.
&
jest i~
nie|
jest i jest lub.Moja strategia:
A
i umieść wszystkie1
s na niskich liczbach, zapisz wis
. (jest to większość programu)B
i rozpakuj do 16 bitów (nazwałem toeB
rozszerzonymB
)źródło