Ini adalah pertanyaan langsung dengan jawaban yang sangat kompleks.
Pertama, beberapa latar belakang.
Desain VLSI dunia nyata adalah bidang yang sangat teknis yang menampilkan keseimbangan pertukaran yang terus berubah. Waktu yang dibutuhkan suatu rangkaian untuk menghitung jawaban jarang merupakan satu-satunya faktor penting. Ada juga power draw dan area fisik, ditambah banyak faktor yang mengungkapkan bahwa rangkaian yang Anda desain sebenarnya analog (misalnya resistansi kawat, kapasitansi parasit). Semua ini penting dalam rangkaian nyata dan dapat memengaruhi desain mana yang dipilih.
Kedua, Anda harus mempertimbangkan seluruh siklus hidup suatu proyek. Adder yang sesuai untuk realisasi VLSI mungkin tidak sesuai untuk realisasi FPGA. Jika desain akan melalui fase yang sedang diuji pada FPGA ... Anda mendapatkan gambar.
Ketiga, tidak setiap penambah dibuat sama. Pada CPU tipikal, ada banyak adders nongkrong yang melakukan tugas yang berbeda; mungkin ada beberapa bilangan bulat ALU, sebuah floating point mantissa adder, sebuah adder yang melakukan perhitungan alamat, sebuah adder yang menghitung target cabang, dan sebagainya. Itu tidak termasuk penambahan carry-save yang Anda temukan di unit multiplikasi modern. Masing-masing memiliki kekhasan dan kendala tersendiri.
Perhitungan target cabang, misalnya, biasanya melibatkan penambahan konstanta kecil ke kata penuh, yang menyarankan desain penambah yang berbeda dari yang menambahkan dua kata penuh secara bersamaan. Demikian pula, penambahan floating point membutuhkan langkah pembulatan pasca-penambahan yang mungkin membutuhkan waktu kurang dari satu siklus, jadi tidak ada alasan mengapa Anda tidak bisa mencuri sisa siklus untuk menyelesaikan penambahan.
Terakhir, dan mungkin yang paling penting, para pemain besar (misalnya Intel, AMD, NVIDIA) cukup bungkam tentang detail implementasi tingkat rendah untuk alasan yang jelas, kecuali mereka berpikir mereka bisa mendapatkan kertas dan / atau paten dari itu. Meski begitu, Anda sering tidak dapat memastikan apa yang sebenarnya mereka lakukan tanpa rekayasa balik.
Karena itu, ada beberapa hal yang kita tahu.
Hal utama yang perlu Anda sadari adalah bahwa metode carry-lookahead adalah blok bangunan, dan belum tentu metode itu sendiri. Sebuah analogi mungkin ada di sini.
Jika Anda berpikir tentang kelas algoritme, Anda mungkin mempelajari banyak algoritma penyortiran seperti penyortiran cepat, penggabungan penggabungan, penyisipan, dan sebagainya. Di dunia nyata, jika penyortiran adalah hambatan kinerja, setiap insinyur yang baik akan menganggap ini sebagai blok bangunan primitif yang darinya penyortiran "nyata" dapat dibangun.
Algoritma pengurutan dari pustaka standar GNU C ++, misalnya, menggunakan pengurutan cepat, menggunakan pengurutan penyisipan ketika intervalnya cukup kecil. Namun, jika setelah beberapa melewati sepertinya semacam partisi cepat telah mengenai perilaku patologis, itu kembali ke tumpukan tumpukan. Itulah tiga algoritma pengurutan yang berbeda untuk membuat satu jenis kekuatan industri.
Hal yang sama berlaku untuk sirkuit adder. Diketahui, misalnya, bahwa unit integer Pentium 4 menggunakan penambah Han-Carlson, yang merupakan campuran dari Kogge-Stone dan Brent-Kung. (Han-Carlson sangat menarik, karena ini merupakan "sweet spot" dalam pertukaran antara penundaan propagasi dan area mati yang juga cukup hemat daya.) Sering kali membayar untuk menggunakan campuran beberapa metode.
Adders carry-lookahead "Murni" masih merupakan norma di sirkuit yang disintesis (misalnya jika Anda memberi makan operator Verilog "+" ke Cadence atau Synopsys), ketika datang ke desain tangan, CPU modern kelas atas dengan superscalar out- mesin eksekusi pesanan tampaknya bergerak ke arah desain yang sedikit berbeda untuk unit integer mereka.
Adder spekulatif adalah sirkuit yang memiliki keterlambatan propagasi sangat rendah, tetapi hanya berfungsi dengan benar pada beberapa waktu (95% dari waktu adalah tipikal), dan dimungkinkan untuk mengetahui dengan logika yang sangat sedikit apakah spekulan adder mengembalikan hasil yang benar atau tidak. Jadi idenya adalah melakukan penambahan spekulatif dan setengah dari penambahan carry-lookahead secara paralel, dalam satu siklus. Jika spekulan penambah mengembalikan jawaban yang benar, instruksi dilakukan. Jika tidak, hentikan jalur pipa dan lakukan separuh tambahan yang akurat.
Karena Anda tahu bahwa jalan lambat akan membutuhkan dua siklus, perancang dapat menggunakan metode yang lebih hemat ruang dan hemat daya meskipun itu akan terlalu lambat untuk penggunaan umum.