Czy można zdefiniować wszystkie operatory bitowe za pomocą „bitowej nand” podobnie jak w przypadku całej logiki logicznej za pomocą „logicznej nand”?

9

Nand jest znany jako „uniwersalna” bramka logiczna, ponieważ pozwala zdefiniować wszystkie inne logiczne bramki logiczne:

not(x) = nand(x,x)
and(x, y) = not(nand(x, y))
or(x, y) = nand(not(x), not(y))
nor(x, y) = not(or(x, y))
xor(x, y) = nand(nand(a, nand(a, b)), nand(b, nand(a, b)))

Jest to znane jako logika nand i jest powszechnie stosowane we współczesnych komputerach, ponieważ tranzystor może działać tak, jak nand-gate.

Zastanawiam się, czy można zrobić coś podobnego z operacjami bitowymi. Może taka np bitowe NAND (bnand) być wykorzystane do określenia bnot, bor, band, bnor, bxor? Czy istnieje uniwersalna operacja bitowa?

Qqwy
źródło

Odpowiedzi:

13

Na poziomie sprzętowym nie ma różnicy między bitową a logiczną. Więc tak. Operacja logiczna to tylko bitowa operacja na jednym bicie.

Martin Maat
źródło
2

W większości nowoczesnych mikroprocesorów operacje bitowe są implementowane natywnie, więc nie ma korzyści z posiadania operacji NAND.

Na przykład zestaw instrukcji x86 ma: AND , OR , XOR , NOT . Wszystkie te są wykonywane w jednym cyklu, o ile mi wiadomo, tak że nie byłoby korzyści, zastępując je kilkoma operacjami NAND. Ma również ANDN, który jest odpowiednikiem ((NOT x) AND y)tego, który może być wygenerowany przez sprytny kompilator optymalizacyjny w celu uzyskania cyklu.

Ruch RISC próbował promować zredukowany zestaw instrukcji dla prostszej i wydajniejszej architektury. Pomysł polegał na tym, że kompilatory musiałyby łączyć prostsze i szybsze instrukcje. Wydaje się jednak, że oprócz niektórych procesorów eksperymentalnych lub dydaktycznych, większość zapewnia natywnie NAND, a także zwykłe operacje bitowe (np. PowerPC lub ARM ).

Christophe
źródło
Naprawdę nie jestem pewien, jak operatory boolowskie są obecnie implementowane w procesorach, ale kiedyś dość często stosowano multiplekser 4 do 1, zasilając „tabelę prawdy” jako 4 dane wejściowe, a następnie użyj dwóch bitów, aby działają jako selektor wyjścia. Daje ci pojedynczy obwód, który może być używany dla wszystkich 16 dwupłatowych funkcji logicznych.
Vatine
2
Fakt, że OR, XOR i NOT są implementowane „natywnie” i nie zajmują więcej niż jeden cykl zegara, nie mówi nic o tym, czy są budowane przy użyciu tylko obwodów NAND, czy też nie. Podejrzewam, że obecnie są budowane przy użyciu tylko NAND, ponieważ tranzystory są naprawdę tanie i bardzo szybkie. Metoda Vatine 4 do 1 jest zoptymalizowana pod kątem użycia niewielkiej liczby tranzystorów, co nie ma sensu w erze nanometrów.
Martin Maat,
Z czasem RISC stało się bez znaczenia. Kiedy się pojawiło, typowe złożone instrukcje wymagały wielu cykli zegara, na przykład około 10. I nie chodziło o OR / AND / NOT, były już szybkie i uważane za „proste” i niezbędne dla każdego procesora, więc z pewnością nie zostałyby upuszczone przez procesor RISC. Obecnie złożone instrukcje zajmują mniej niż cykl zegarowy (z uwagi na potokowanie i wielowątkowość / wielordzeniowy.
Martin Maat 1'16