Apakah mungkin untuk mendefinisikan semua operator bitwise menggunakan 'bitwise nand' mirip dengan bagaimana semua logika boolean dapat dibangun hanya dengan menggunakan 'boolean nand'?

9

Nand dikenal sebagai gerbang logika 'universal', karena memungkinkan Anda mendefinisikan semua gerbang logika boolean lainnya:

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

Ini dikenal sebagai logika nand , dan umumnya digunakan pada komputer modern karena transistor dapat dibuat untuk berperilaku seperti gerbang nand.

Saya bertanya-tanya apakah mungkin untuk melakukan sesuatu yang mirip dengan operasi bitwise. Bisa sebuah misalnya bitwise nand (bnand) digunakan untuk mendefinisikan bnot, bor, band, bnor, bxor? Apakah ada operasi bitwise universal?

Qqwy
sumber

Jawaban:

13

Pada tingkat perangkat keras tidak ada perbedaan antara bitwise dan logis. Jadi iya. Operasi logis hanya operasi bitwise pada bit tunggal.

Martin Maat
sumber
2

Pada kebanyakan mikroprosesor modern operasi bitwise diimplementasikan secara asli, sehingga tidak ada manfaatnya memiliki operasi NAND.

Misalnya set instruksi x86 memiliki: AND , OR , XOR , NOT . Semua ini dilakukan dalam satu siklus tunggal sejauh yang saya tahu, sehingga tidak ada manfaatnya dengan menggantinya dengan beberapa operasi NAND. Ini juga memiliki ANDN yang setara dengan ((NOT x) AND y)yang dapat dihasilkan oleh kompiler optimisasi pintar untuk mendapatkan siklus.

The RISC Gerakan mencoba untuk mempromosikan dikurangi set instruksi untuk lebih sederhana arsitektur lebih performant. Idenya adalah bahwa kompiler harus menggabungkan instruksi yang lebih sederhana dan lebih cepat. Namun demikian, terlepas dari beberapa prosesor eksperimental atau pengajaran, sebagian besar memberikan NAND asli serta operasi bitwise yang biasa (misalnya PowerPC atau ARM ).

Christophe
sumber
Saya benar-benar tidak yakin bagaimana operator boolean diimplementasikan dalam CPU hari ini, tetapi dulu cukup umum untuk menggunakan mux 4-ke-1, memasukkan "tabel kebenaran" sebagai 4 input, kemudian gunakan dua bit untuk beroperasi sebagai pemilih untuk output. Memberi Anda satu sirkuit yang dapat digunakan untuk semua 16 fungsi boolean dua-operan.
Vatine
2
Fakta bahwa ATAU, XOR, dan BUKAN diimplementasikan secara "asli" dan tidak mengambil lebih dari satu siklus clock tunggal tidak mengatakan apa-apa tentang apakah mereka dibuat hanya menggunakan sirkuit NAND atau bukan. Saya menduga mereka membangun hanya menggunakan NAND hari ini karena transistor sangat murah dan sangat cepat. Metode 4-ke-1 Vatine dioptimalkan untuk menggunakan sejumlah kecil transistor, yang tidak ada gunanya di era nanometer.
Martin Maat
RISC telah dibuat tidak berarti oleh waktu. Ketika itu muncul, instruksi kompleks yang khas mengambil beberapa siklus jam, seperti 10 atau lebih. Dan ini bukan tentang ATAU / DAN / TIDAK, ini sudah cepat dan dianggap "sederhana" dan penting untuk setiap CPU sehingga mereka tidak akan dijatuhkan oleh prosesor RISC. Hari ini, instruksi yang kompleks membutuhkan waktu kurang dari satu siklus clock (karena pipelining dan multi-threading / multi-core.
Martin Maat