Apakah 32-bit ALU benar-benar hanya 32 ALU 1-bit dalam keadaan paralel?

8

Saya sedang membaca teks yang sangat terhormat Organisasi Komputer tempat gambar ini ditemukan yang seharusnya mewakili ALU 32-bit: masukkan deskripsi gambar di sini

Apakah teknologi ini benar-benar cara melakukannya, hanya banyak ALU 1-bit, jadi 64 bit ALU hanya akan menjadi 64 1-bit ALU secara paralel? Entah bagaimana saya ragu bahwa ini adalah bagaimana CPU dibangun dalam praktiknya, dapatkah Anda mengkonfirmasi atau memberi tahu saya lebih banyak?

Niklas
sumber
1
ini disebut riak-penambah kan?
eggie5
2
@ eggie5 Seorang Adder baru saja menambahkan inputnya. Sebuah Logic Unit Aritmatika (ALU) dapat melakukan berbagai aritmatika (menambah, mengurangi, multiply, dll) dan logika (AND, OR, XOR, dll) operasi pada input. Untuk itulah sinyal "Operasi" biru ekstra untuk. Seorang penambah tidak akan memiliki ini karena ini adalah operasi tunggal. Tetapi diagram memang menunjukkan topologi riak-bawa.
embedded.kyle

Jawaban:

8

Pada dasarnya itu. Teknik ini disebut bit-slicing :

Mengiris bit adalah teknik untuk membangun prosesor dari modul dengan lebar bit yang lebih kecil. Masing-masing komponen ini memproses satu bidang bit atau "irisan" dari operan. Komponen pemrosesan yang dikelompokkan kemudian akan memiliki kemampuan untuk memproses panjang kata yang dipilih penuh dari desain perangkat lunak tertentu.

Prosesor bit slice biasanya terdiri dari unit logika aritmatika (ALU) dari 1, 2, 4 atau 8 bit dan garis kontrol (termasuk sinyal carry atau overflow yang internal ke prosesor dalam desain non-bitliced).

Sebagai contoh, dua ALU 4-bit dapat diatur berdampingan, dengan garis kontrol di antara mereka, untuk membentuk CPU 8-bit, dengan empat irisan CPU 16-bit dapat dibangun, dan dibutuhkan 8 irisan 4 bit untuk 32-bit word CPU (sehingga perancang dapat menambahkan irisan sebanyak yang diperlukan untuk memanipulasi panjang kata yang semakin panjang).

Dalam tulisan ini mereka menggunakan tiga blok ALU TI SN74S181 4-bit untuk membuat ALU 8-bit:

8-bit ALU dibentuk dengan menggabungkan tiga 4-bit ALU dengan 5 multiplexer seperti yang ditunjukkan pada Gambar 2. Desain 8-bit ALU didasarkan pada penggunaan garis pilih carry. Empat bit terendah dari input dimasukkan ke dalam salah satu dari 4 bit ALU. Garis pelaksanaan dari ALU ini digunakan untuk memilih output dari salah satu dari dua ALU yang tersisa. Jika melaksanakan dinyatakan maka ALU dengan carry in true terikat dipilih. Jika pelaksanaan tidak ditegaskan maka ALU dengan carry in tied false dipilih. Keluaran dari ALU yang dapat dipilih adalah multiplexing bersama membentuk 4 bit atas dan bawah, dan melakukan untuk ALU 8 Bit.

Dalam kebanyakan kasus, ini mengambil bentuk menggabungkan blok ALU 4-bit dan melihat ke depan membawa generator seperti SN74S182 . Dari halaman Wikipedia di 74181 :

The 74181 melakukan operasi ini pada dua operan empat bit menghasilkan hasil empat bit dengan membawa dalam 22 nanodetik. The 74S181 melakukan operasi yang sama dalam 11 nanodetik, sedangkan 74F181 melakukan operasi dalam 7 nanodetik (khas).

Beberapa 'irisan' dapat digabungkan untuk ukuran kata yang besar dan sewenang-wenang. Sebagai contoh, enam belas 74S181 dan lima 74S182 lihat ke depan membawa generator dapat digabungkan untuk melakukan operasi yang sama pada operan 64-bit dalam 28 nanodetik.

Alasan penambahan generator lihat ke depan adalah untuk meniadakan waktu tunda yang disebabkan oleh ripple carry yang diperkenalkan menggunakan arsitektur yang ditunjukkan pada diagram Anda.

Makalah ini tentang Desain Komputer Menggunakan Teknologi Bit-Slice berjalan melalui desain komputer menggunakan AMD AM2902 ALU (yang AMD sebut "Microprocessor Slice") dan AMD AM2902 mengusung generator generator. Dalam Bagian 5.6 ini melakukan pekerjaan yang cukup baik untuk menjelaskan efek dari riak carry dan cara meniadakannya. Namun, ini PDF yang dilindungi dan ejaan dan tata bahasa kurang dari ideal jadi saya akan parafrase:

Salah satu masalah dengan perangkat ALU mengalir adalah bahwa output dari sistem tergantung pada operasi total semua perangkat. Alasannya adalah bahwa selama operasi aritmatika, output dari setiap bit tidak hanya bergantung pada input (operan) tetapi juga pada hasil operasi pada semua bit yang kurang signifikan. Bayangkan sebuah 32 bit adder dibentuk oleh cascading delapan ALU. Untuk mendapatkan hasil, kita perlu menunggu perangkat yang paling tidak signifikan untuk menghasilkan hasilnya. Carry perangkat ini diterapkan pada operasi bit paling signifikan berikutnya. Kemudian kita menunggu perangkat ini untuk menghasilkan output dan seterusnya dengan cara ini sampai semua perangkat menghasilkan output yang valid. Ini disebut riak pembawa karena membawa riak melalui semua perangkat sampai mencapai yang paling signifikan. Hanya setelah itu hasilnya valid. Jika kami menganggap bahwa keterlambatan dari alamat memori untuk membawa output adalah 59 ns dan bahwa dari carry input untuk membawa output adalah 20 ns, seluruh operasi membutuhkan 59 + 7 * 20 = 199 ns.

Saat menggunakan kata-kata besar, waktu yang diperlukan untuk melakukan operasi aritmatika dengan carry riak terlalu lama. Namun, solusi untuk masalah ini cukup sederhana. Idenya adalah menggunakan prosedur membawa lihat ke depan. Dimungkinkan untuk menghitung seperti apa operasi operasi empat bit tanpa menunggu akhir operasi. Dalam kata yang lebih besar, kita membagi kata menjadi nibbles dan menghitung P (carry propagate bit) dan G (carry generate bit) dan, dengan menggabungkannya, kita dapat menghasilkan carry final dan semua intermediate dengan delay yang sangat rendah sementara perangkat lain menghitung jumlah atau perbedaannya.

Tetapi jika Anda melihat datasheet untuk SN74S181, Anda akan melihat bahwa itu hanya menggunakan ALU satu bit. Jadi, sementara ada beberapa sirkuit tambahan untuk mempercepat perhitungan ketika beroperasi pada kata-kata yang lebih besar, itu benar-benar turun ke banyak operasi bit tunggal.

Diagram logika SN74S181

Untuk bersenang-senang, jika Anda tidak memiliki akses ke perangkat lunak simulasi, Anda selalu dapat membuat dan membuat ALU di Minecraft :

minecraft ALU

tertanam.kyle
sumber
1
Catatan: Jika Anda melihat sirkuit FPGA, mereka terkadang menggunakan sirkuit penambah tunggal, dan siklus 32 (atau apa pun) bit melalui. Ini membuat sirkuit yang lebih sederhana, lebih kecil dengan mengorbankan berjalan lebih lambat.
Alan Campbell
5

Tergantung, tetapi biasanya tidak, karena carry 64 bit propagation carry akan terlalu lambat dalam banyak kasus. Lebih umum menggunakan tabel pencarian untuk mengimplementasikan penambah yang lebih luas daripada 1-bit atau penerapan langsung penambah yang lebih besar dalam logika boolean, dan menyatukannya bersama dengan propagasi carry. Hal ini terutama berlaku bukan untuk ALU, yang mungkin memiliki banyak waktu untuk menunggu riak, tetapi di semua adders yang terjadi di seluruh tempat di seluruh prosesor untuk hal-hal seperti offset alamat dan sebagainya.

acjay
sumber
2
Saya benar-benar tidak berpikir ALU memiliki "banyak waktu" relatif terhadap penambah lain dalam chip. Mereka umumnya ingin semuanya selesai dalam satu siklus clock.
Dave Tweed
3
Tidak, apa yang saya katakan adalah bahwa jika semua yang Anda ingin lakukan adalah menambahkan dua angka 64-bit, akan ada banyak waktu untuk riak dibandingkan dengan beberapa instruksi ALU lainnya. Namun jelas pada kenyataannya, adders adalah komponen dasar dalam fungsionalitas instruksi yang lebih rumit, dan di situlah Anda akan benar-benar kacau dengan menggunakan tumpukan adders 1-bit.
acjay