Terinspirasi oleh popularitas nandgame di TNB, dan tantangan saya sebelumnya .
Latar Belakang
Desimal padat dikemas (DPD) adalah cara untuk secara efisien menyimpan angka desimal dalam biner. Ini menyimpan tiga angka desimal (000 hingga 999) dalam 10 bit, yang jauh lebih efisien daripada BCD naif (yang menyimpan satu digit dalam 4 bit).
Tabel konversi
DPD dirancang untuk dengan mudah mengkonversi antara bit dan digit dengan pencocokan pola sederhana dari atas ke bawah. Setiap pola bit menentukan berapa banyak digit tinggi (8-9) yang dimiliki angka, di mana angka itu, dan cara memindahkan bit untuk membentuk representasi desimal.
Berikut ini adalah tabel konversi dari 10 bit DPD ke tiga angka desimal. Setiap digit desimal direpresentasikan sebagai biner 4-bit (BCD). Kedua belah pihak ditulis dari kiri ke kanan dari digit paling signifikan ke yang terkecil.
Bits => Decimal (Digit range)
a b c d e f 0 g h i => 0abc 0def 0ghi (0-7) (0-7) (0-7)
a b c d e f 1 0 0 i => 0abc 0def 100i (0–7) (0–7) (8–9)
a b c g h f 1 0 1 i => 0abc 100f 0ghi (0–7) (8–9) (0–7)
g h c d e f 1 1 0 i => 100c 0def 0ghi (8–9) (0–7) (0–7)
g h c 0 0 f 1 1 1 i => 100c 100f 0ghi (8–9) (8–9) (0–7)
d e c 0 1 f 1 1 1 i => 100c 0def 100i (8–9) (0–7) (8–9)
a b c 1 0 f 1 1 1 i => 0abc 100f 100i (0–7) (8–9) (8–9)
x x c 1 1 f 1 1 1 i => 100c 100f 100i (8–9) (8–9) (8–9)
Notasi
- Huruf kecil
a
untuki
bit yang disalin ke representasi desimal. 0
dan1
bit-bit yang tepat dalam pola bit input atau output.x
bit diabaikan dalam konversi.
Tugas
Bangun sirkuit logis menggunakan gerbang NAND dua-input untuk mengubah 10 bit DPD menjadi 12 bit BCD.
Contohnya
Bit yang ditekankan adalah bit yang cocok dengan pola.
DPD Decimal BCD
0 0 0 0 0 0 0 1 0 1 005 0000 0000 0101
^
0 0 0 1 1 0 0 0 1 1 063 0000 0110 0011
^
0 0 0 1 1 1 1 0 0 1 079 0000 0111 1001
^ ^ ^
0 0 0 0 0 1 1 0 1 0 090 0000 1001 0000
^ ^ ^
0 0 0 1 0 1 1 1 1 0 098 0000 1001 1000
^ ^ ^ ^ ^
1 0 1 0 1 1 1 0 1 0 592 0101 1001 0010
^ ^ ^
0 0 1 1 0 0 1 1 0 1 941 1001 0100 0001
^ ^ ^
1 1 0 0 1 1 1 1 1 1 879 1000 0111 1001
^ ^ ^ ^ ^
1 1 1 0 0 0 1 1 1 0 986 1001 1000 0110
^ ^ ^ ^ ^
0 0 1 1 1 1 1 1 1 1 999 1001 1001 1001
^ ^ ^ ^ ^
1 1 1 1 1 1 1 1 1 1 999 1001 1001 1001
^ ^ ^ ^ ^
Kriteria penilaian & menang
Skornya adalah jumlah gerbang NAND dua input yang digunakan di sirkuit Anda. Skor terendah menang.
Anda dapat mendefinisikan komponen kecil dalam hal gerbang NAND dua input, dan kemudian menggunakannya dalam konstruksi akhir Anda. Jika komponen X
menyertakan N
gerbang NAND dua input, setiap penggunaan X
menambah N
skor Anda. Untuk gerbang logika dasar, ini berarti:
- BUKAN: +1
- 2 input DAN: +2
- 2 input ATAU: +3
- 2-input XOR: +4
sumber
a
untuki
mean dan proses konversi. Ikuti langkah-langkahnya, daripada hanya menunjukkan contoh dan berharap kita mengerti dari itu.Jawaban:
45 NANDs (atau 43)
45 tampaknya menjadi minimum absolut, tetapi dimungkinkan untuk mencapai 43 NAND dengan trik: Dengan mengasumsikan bahwa angka terbesar dikodekan dengan benar.
888, 889, 898, 899, 988, 989, 998, 999 harus dikodekan dengan 2 MSB sebagai 00, hanya membutuhkan 43 NAND untuk decoding.
Namun, dalam spesifikasi untuk decoding, mereka ditetapkan untuk diabaikan, artinya mereka bisa apa saja. Ini adalah asumsi yang masuk akal bahwa spesifikasi yang lebih bebas ini mungkin memerlukan gerbang yang lebih sedikit, tetapi yang terjadi adalah sebaliknya. Diperlukan 45 gerbang untuk ini. Penghematan ini bisa memberi manfaat nyata bagi sirkuit nyata.
Saya juga menemukan sirkuit yang secara signifikan lebih efisien dan lebih cepat, mengandung beberapa gerbang lagi.
Tidak ada gambar pensil dari sirkuit kali ini. Mungkin nanti.
Sirkuit disajikan dalam kode Verilog yang jelas, siap untuk berjalan dengan uji yang disertakan.
Kode Verilog:
sumber
65 62 6058 NANDsMengambil input sebagai
i0
untuki9
dan output sebagaio0
untuko9, oa, ob
kitaKerangka uji python untuk memvalidasi kebenaran konstruksi.
sumber