È possibile definire tutti gli operatori bit a bit usando una 'n bit a bit' simile a come tutta la logica booleana può essere costruita usando solo 'n booleana'?


9

Nand è noto come un gate logico 'universale', perché consente di definire tutte le altre porte logiche booleane:

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

Questo è noto come nand-logic ed è comunemente usato nei computer moderni perché un transistor può essere fatto per comportarsi proprio come un nand-gate.

Mi chiedo se sia possibile fare qualcosa di simile con le operazioni bit per bit. Può un esempio bit a bit NAND (bnand) da utilizzare per definire bnot, bor, band, bnor, bxor? Esiste un'operazione universale bit per bit?

Risposte:


13

A livello hardware non c'è differenza tra bit a bit e logico. Quindi sì. Un'operazione logica è solo un'operazione bit a bit su un singolo bit.


2

Sulla maggior parte dei microprocessori moderni le operazioni bit per bit sono implementate in modo nativo, quindi non vi è alcun vantaggio di avere un'operazione NAND.

Ad esempio il set di istruzioni x86 ha: AND , OR , XOR , NOT . Tutti questi sono eseguiti in un unico ciclo, per quanto ne so, in modo che non ci sarebbe alcun vantaggio sostituendoli con diverse operazioni NAND. Ha anche ANDN che è equivalente a ((NOT x) AND y)quello che potrebbe essere generato da un compilatore di ottimizzazione intelligente per ottenere un ciclo.

Il movimento RISC ha cercato di promuovere un set di istruzioni ridotto per un'architettura più semplice e più performante. L'idea era che i compilatori avrebbero dovuto combinare istruzioni più semplici e veloci. Sembra tuttavia che, a parte alcuni processori sperimentali o di insegnamento, la maggior parte fornisca nativamente NAND e le solite operazioni bit per bit (ad esempio PowerPC o ARM ).


Non sono sinceramente sicuro di come gli operatori booleani siano implementati nelle CPU in questi giorni, ma era abbastanza comune usare un mux da 4 a 1, inserendo la "tabella della verità" come i 4 input, quindi usare i due bit per operare come selettore per l'uscita. Ti dà un singolo circuito che può essere utilizzato per tutte le 16 funzioni booleane a due operandi.
Vatine,

2
Il fatto che OR, XOR e NOT siano implementati "in modo nativo" e non richiedono più di un singolo ciclo di clock non dice nulla sul fatto che siano costruiti usando solo circuiti NAND o nor. Ho il sospetto che vengano costruiti utilizzando solo NAND in questi giorni perché i transistor sono davvero economici e molto veloci. Il metodo 4-a-1 di Vatine è ottimizzato per l'utilizzo di un piccolo numero di transistor, che è inutile nell'era dei nanometri.
Martin Maat,

Il RISC è stato reso insignificante dal tempo. Quando è emerso, le istruzioni complesse tipiche hanno richiesto più cicli di clock, come circa 10. E non si trattava di OR / AND / NOT, erano già veloci e considerati "semplici" ed essenziali per qualsiasi CPU, quindi non sarebbero stati eliminati da un processore RISC. Oggi, istruzioni complesse richiedono meno di un ciclo di clock (a causa di pipeline e multi-thread / multi-core.
Martin Maat
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.