Bagaimana berbagai fungsi (mis. Menambah, mengurangi, dan, dll) diimplementasikan di ALU?

9

Saya bertanya-tanya karena ada begitu banyak fungsi yang perlu dilakukan ALU, bagaimana mungkin saya mulai mengimplementasikannya (pekerjaan rumah di mana saya seharusnya menerapkan sistem MIPS dengan Logisim, menggunakan Gates dasar, Flip-flop dll).

Bagian yang saya bingung adalah bagaimana saya bisa mengimplementasikan ALU yang dapat melakukan fungsi yang berbeda seperti Tambah / Kurangi / DAN / ATAU / dll. Apakah saya perlu lebih banyak mengontrol logika (lihat kanan atas dalam "tugas sebelumnya" di bawah).

Dalam tugas sebelumnya, saya menerapkan ALU yang dapat melakukan Tambah / Kurangi / Negasi. Sekarang saya pikir ALU harus dapat melakukan fungsi seperti

Tugas saya sebelumnya

Jiew Meng
sumber

Jawaban:

7

Meskipun secara internal menghitung semua jawaban, dan kemudian menggunakan mux untuk memilih di antara mereka akan berhasil, itu tentu saja bukan desain yang minimal.

Pertimbangkan bahwa Anda dapat mengiris masalahnya; alih-alih satu blok logika dengan dua input 8 bit, Anda dapat mempartisi ini sebagai dua bagian 4-bit, selama Anda dapat menautkannya untuk mendapatkan hasil keseluruhan yang benar. Untungnya, menautkan irisan tidak lebih buruk dari satu bit, yang dalam kasus penambahan mewakili bit carry. Jadi setiap irisan 4-bit memiliki bit carry-in dan bit carry-out. (Perhatikan bahwa logika seperti AND dan NOR bahkan tidak akan membutuhkan ini, meskipun jika nanti Anda menerapkan shift kiri / kanan, bit ini dengan mudah bertujuan ulang).

Dibawa ke ekstrim Anda bisa menggunakan 8 iris masing-masing 1-bit. Sangat berguna untuk memikirkan irisan 1-bit, karena membuatnya lebih mudah untuk berpikir tentang pendekatan yang meningkatkan kembali ke irisan yang lebih besar. Jadi dengan irisan 1-bit, Anda hanya memiliki 7 input: kode fungsi 4 bit, sedikit dari input A, sedikit dari input B, dan bit carry-in. Anda juga hanya memiliki dua output: berfungsi, dan dijalankan. Jadi sekarang Anda dapat menulis dua fungsi output dalam hal hanya 7 input, yang berada dalam ranah kemampuan manusia untuk mengurangi secara wajar. Anda akan berakhir dengan segelintir gerbang yang tidak selalu selalu menghitung semua fungsi, tetapi tidak masalah apa yang terjadi di dalam slice, hanya saja ia menghasilkan hasil yang benar bila dilihat dari luar.

Sekarang Anda bisa melakukan beberapa cara. Salah satu caranya adalah dengan menggunakan 8 dari irisan 1-bit ini dan Anda selesai. Cara lain adalah dengan membuat irisan yang lebih besar dan kemudian menggunakannya. Pergi dari 1-bit ke 2-bit, persamaan pergi dari 7 input ke 9, dan 4-bit akan membutuhkan fungsi 13 input. Ini tidak selalu mudah, tetapi akan memberikan hasil yang lebih kompak daripada pendekatan compute-everything-then-mux. Selain itu, jika Anda melihat bagian dalam irisan ALU 74-bit 4-bit, Anda tidak akan melihat mux di sana.

JustJeff
sumber
Saya menargetkan jawaban saya lebih pada "mudah untuk memulai dengan" spektrum, tapi terima kasih telah menunjukkan kemungkinan (perangkat keras) yang lebih optimal.
Martin Thompson
5

Ya, Anda perlu lebih banyak kontrol logika.

Tugas Anda sebelumnya adalah murni aritmatika (apakah itu sebuah kata?), Sehingga Anda dapat menggunakan satu penambah dan memijat input menggunakan sinyal kontrol untuk membuat fungsi yang Anda inginkan

Fungsi baru Anda logis , jadi Anda perlu blok lain untuk melakukan operasi logis. Sinyal kontrol akan mengubah fungsi blok ini.

Kemudian di bagian bawah diagram Anda, Anda akan memerlukan multiplexer (kadang-kadang disebut 'mux') yang digerakkan oleh sinyal kontrol untuk memilih jawaban mana yang akan Anda output (satu dari penambah dan rangkaian "input memijat" atau yang dari operator logika).

Jika Anda dapat memilih penyandian baru untuk jalur kontrol ALU Anda, saya mungkin tergoda untuk menggunakan MSB sebagai "aritmatika / logika" pilih, dan yang lain untuk memilih "subfungsi" jika itu masuk akal, karena menyederhanakan decode untuk mux akhir.

Martin Thompson
sumber
Ya, aritmatika adalah sebuah kata :)
Majenko
1
Menurut saya aritmatika adalah kata yang Anda inginkan. Perhatikan kata ini memiliki aksen pada suku kata ketiga. Dengan aksen pada suku kata kedua itu kata yang berbeda merujuk pada mekanisme melakukan operaion numerik dasar seperti yang Anda pelajari di sekolah dasar.
Olin Lathrop
1

Salah satu pendekatan yang bagus untuk menangani operasi logis adalah memiliki bit dari dua operan yang berfungsi sebagai input pemilih ke multiplexer 4-input, dan mengumpankan input "data" dari multiplexer pola empat-bit yang sesuai dengan operasi yang diinginkan (biasanya di 8-bit ALU, akan ada delapan multiplexer - satu untuk setiap bit - dan input "data" dari semua 8 multiplexer akan diikat menjadi satu).

supercat
sumber
semacam menggunakan multiplexer sebagai ROM yang sangat kecil - dan itu cara lain untuk menggunakan ROM aktual.
JustJeff
ROM Nx1-bit adalah multiplexer yang input "datanya" terprogram. Dalam skenario yang saya jelaskan, input "data" dari multiplexer akan menjadi operator-pilih. Dalam praktiknya, seseorang mungkin akan menggunakan ROM kecil untuk memilih beberapa dari 16 operasi logis yang mungkin, ditambah beberapa operasi lainnya, dari opcode 3 atau 4 bit (seseorang dapat, jika diinginkan, meneruskan opcode langsung melalui ke unit logis, tetapi gunakan multiplexer lain untuk memilih operasi lain dalam kasus di mana opcode tidak akan menghasilkan operasi logis yang berguna).
supercat