Berdasarkan pertanyaan saya sebelumnya dari jenis yang sama, Bangun mesin tambah menggunakan gerbang logika NAND , kali ini Anda diminta untuk mengalikan bukan menambah.
Membangun diagram gerbang (dua-kawat) NAND logika yang akan membawa kabel masukan A1
, A2
, A4
, B1
, B2
, B4
, yang mewakili dua angka biner A
untuk B
0-7, dan kembali nilai-nilai pada kabel keluaran C1
, C2
, C4
, C8
, C16
, dan C32
, yang mewakili C
, yang merupakan produk dari A
dan B
.
Skor Anda ditentukan oleh jumlah gerbang NAND yang Anda gunakan (1 poin per gerbang). Untuk menyederhanakan banyak hal, Anda dapat menggunakan gerbang AND, OR, NOT, dan XOR dalam diagram Anda, dengan skor terkait berikut:
NOT: 1
AND: 2
OR: 3
XOR: 4
Masing-masing skor ini sesuai dengan jumlah gerbang NAND yang diperlukan untuk membangun gerbang yang sesuai.
Skor terendah menang.
sumber
Jawaban:
60 55 5048 gerbangAsli (60 gerbang) adalah pendekatan sistematis - gandakan setiap digit dengan masing-masing, dan kemudian jumlahkan semuanya. Yaitu, lihat pohon Wallace dan pohon Dadda
Bagian atas adalah jaringan perkalian - gandakan setiap digit dengan masing-masing, dan kelompokkan digit keluaran dengan bobot yang sama. Beberapa bit dibiarkan terbalik untuk menyelamatkan gerbang.
Bagian kedua adalah jaringan adder. Setiap kotak mewakili satu penambah - baik penambah setengah (5 gerbang - 1x XOR dan inverter), atau penambah penuh (9 gerbang - 2x XOR dan NAND bit pembawa yang terbalik). Atas adalah input, output bawah adalah jumlah, output kiri adalah pelaksanaan. lihat tantangan sebelumnya
Pengganda 2x2 kemudian dioptimalkan dengan tangan ke jaringan 13-gerbang yang dibuat khusus, yang merupakan ukuran optimal seperti yang ditemukan oleh @boothby . Terima kasih!
Menempelnya ke sudut bit-rendah dan mengoptimalkan kembali pohon penambah menyimpan lima gerbang (lihat revisi # 2). Menempelkannya ke sudut bit tinggi juga menghasilkan tumpang tindih. Sedikit matematika memberi tahu kita, bahwa menjatuhkan bit-rendah dari pengali tinggi memecahkan tumpang tindih dan apa yang tersisa untuk dilakukan adalah menambahkan dua bit yang tersisa dan meringkas hal-hal.
Sayangnya, ini saja, tidak memberikan penghematan apa pun, tetapi membuka dua optimisasi. Pertama, dua pengganda memiliki dua gerbang yang sama, dan dapat digabungkan bersama. Pada titik ini, kita kembali ke 55. Kedua, di jaringan tambahan, kita tidak perlu setengah-penambah karena kita tahu carry-nya akan nol. Kita bisa menggantinya dengan OR. OR adalah NAND dengan inputnya terbalik. Ini menghasilkan kita dengan dua rantai TIDAK pada masing-masing cabang, yang kemudian dapat dihilangkan, untuk penghematan total lima gerbang. Sayangnya, setengah penambah di C16 masih membawa, jadi kita tidak bisa melakukan hal yang sama di sana. Ketiga, penambah lengkap memiliki properti yang berguna: jika Anda membalikkan input dan outputnya, ia tetap berperilaku sama. Karena semua inputnya sudah terbalik, kita bisa juga memindahkan inverter di belakangnya. Dua kali. Kita bisa melakukan hal yang sama di aslinya, tetapi ... Baiklah. Kami masih memiliki setengah penambah dengan dua input terbalik. Saya ingin lebih mengoptimalkan bagian ini, tetapi saya ragu saya bisa.
Karena kita mengeluarkan BUKAN dari dalam suatu komponen, kita harus menandakannya entah bagaimana. Kami telah memperoleh setengah penambah dengan carry terbalik (AKA mengetuk XOR) dengan biaya empat gerbang.
Sementara itu, kami juga telah menggambar ulang diagram secara signifikan.
sumber
39 gerbang
Saya cukup yakin tidak ada desain yang lebih sederhana dari saya di sini. Sangat sulit dibuat. Saya membuat sirkuit minimal lainnya juga.
Penundaan transmisi ditunjukkan oleh posisi ke bawah dari setiap gerbang NAND pada lembar.
Kode dan pengujian Verilog:
Kim Øyhus
sumber