Seperti yang saya tahu, jam mengontrol semua operasi logika, tetapi juga membatasi kecepatan komputer karena gerbang harus menunggu jam berubah dari rendah ke tinggi atau tinggi ke rendah tergantung pada komponen. Jika tidak ada jam yang dimasukkan, gerbang akan berubah secepat yang mereka bisa setiap kali diberi perintah, jadi mengapa itu tidak meningkatkan kecepatan komputer dan mengapa jam digunakan?
22
Jawaban:
Jam digunakan dalam komputer untuk alasan sederhana bahwa sebagian besar atau tidak semua sirkuit adalah logika sekuensial sinkron .
Sekarang, yang mungkin tampak tidak memuaskan dan dikabulkan, Anda tentu akan bertanya "mengapa sirkuit sinkron digunakan di komputer?" tapi itu juga pertanyaan yang mudah dijawab :
Bidang penelitian yang aktif adalah komputasi asinkron di mana sebagian besar atau tidak semua sirkuit adalah logika sekuensial asinkron .
sumber
Bayangkan Anda memiliki integer 8 bit yang dikirim dari memori ke ALU untuk perhitungan dan (setidaknya untuk contoh ini) bahwa rangkaian memori memberikan sinyal pada 8 jalur data sebelum ALU membutuhkannya dan pada waktu yang sedikit berbeda.
Penggunaan jam di sini akan memastikan bahwa 8 baris data memiliki nilai yang benar untuk bilangan bulat yang diwakili untuk satu siklus clock dan bahwa ALU akan "mengumpulkan" data tersebut dalam siklus clock yang sama.
Saya menyadari bahwa itu mungkin bukan deskripsi terbaik, pada dasarnya tanpa jam memastikan konsistensi data akan jauh lebih sulit daripada peningkatan kecepatan yang mungkin akan membuatnya layak, Anda akan mengalami banyak masalah kondisi balapan.
sumber
Sirkuit seperti unit logika aritmatika akan mengambil beberapa angka sebagai input dan menghasilkan angka sebagai ouptut. Ini dapat menjamin bahwa dalam beberapa periode waktu, semua bit output akan mencapai kondisi akhir yang benar, tetapi jumlah waktu aktual untuk bit output menjadi valid dapat sangat bervariasi berdasarkan berbagai faktor.
Dimungkinkan untuk membuat ALU dengan input "valid" dan output "valid", dan menentukan bahwa jika input "valid" rendah untuk jumlah waktu yang cukup sebelum perhitungan dilakukan, dan input data berisi nilai yang diinginkan sebelum input "valid" menjadi tinggi, output "valid" tidak akan tinggi sampai bit output sebenarnya benar. Desain seperti itu mungkin akan membutuhkan sekitar dua kali lebih banyak sirkuit daripada ALU konvensional [pada dasarnya itu harus melacak apakah setiap bit "diketahui" menjadi nol atau "dikenal" menjadi satu; outputnya "valid" akan menjadi benar setelah status setiap bit output diketahui].
Lebih buruk lagi, membiarkan bagian-bagian dari CPU yang akan mampu berjalan lebih cepat untuk melakukannya hanya akan membantu jika mereka tidak menunggu sepanjang waktu untuk bagian yang lebih lambat untuk mengejar ketinggalan. Untuk mewujudkannya, harus ada logika untuk memutuskan bagian mana dari mesin "di depan" pada saat tertentu, dan memilih tindakan berdasarkan itu. Sayangnya, keputusan semacam itu adalah salah satu yang paling sulit untuk dibuat secara elektronik. Memutuskan untuk memutuskan mana dari dua peristiwa yang terjadi terlebih dahulu umumnya mudah jika seseorang dapat menjamin bahwa tidak akan ada "panggilan dekat". Misalkan sequencer memori menangani permintaan dari unit pemrosesan # 1 dan unit # 1 memiliki permintaan lain yang tertunda setelah itu. Jika unit # 2 mengirimkan permintaan sebelum permintaan pertama dari # 1 selesai, unit memori harus mengatasinya; jika tidak, harus menangani permintaan berikutnya dari unit # 1. Itu akan tampak seperti desain yang masuk akal, tetapi ternyata menjadi sangat bermasalah. Masalahnya adalah bahwa jika ada saat tertentu sehingga permintaan diterima sebelum saat itu akan segera diproses, dan permintaan yang diterima setelah itu harus menunggu, jumlah waktu yang diperlukan untuk menentukan apakah permintaan yang melampaui batas waktu akan kira-kira berbanding terbalik dengan selisih antara waktu permintaan diterima dan batas waktu. Waktu yang diperlukan untuk unit memori untuk menentukan bahwa permintaan dari # 2 mengalahkan tenggat waktu satu femptosecond mungkin secara substansial melebihi jumlah waktu yang diperlukan untuk melayani permintaan kedua dari unit # 1, tetapi unit tidak dapat melayani baik permintaan sampai memutuskan mana yang akan diperbaiki terlebih dahulu.
Setelah semuanya menjalankan jam biasa tidak hanya menghilangkan kebutuhan untuk sirkuit untuk menentukan kapan output dari suatu perhitungan valid, itu juga memungkinkan waktu "panggilan dekat" untuk dihilangkan. Jika semua yang ada di sistem menggunakan clock 100Mhz, tidak ada sinyal yang berubah sebagai respons terhadap clock hingga 1ns setelah edge clock, dan semua yang akan terjadi sebagai respons terhadap edge clock terjadi dalam 7ns, maka semua yang akan terjadi sebelum jam clock edge tertentu akan "menang" oleh setidaknya 3ns, dan segala sesuatu yang tidak akan terjadi sampai setelah clock edge akan "kalah" oleh setidaknya 1ns. Menentukan apakah peluang sinyal sebelum atau setelah jam, ketika dijamin tidak akan "ditutup", jauh lebih mudah daripada menentukan yang mana dari dua sinyal yang diatur waktunya secara acak.
sumber
Sistem digital dapat berupa sinkron atau asinkron . Pada sistem asinkron, output dapat berubah setiap saat, berbeda dari sistem sinkron, yang bergantung pada jam untuk mengubah outputnya.
Sebagian besar sistem digital bersifat sinkron (walaupun mereka dapat memiliki beberapa bagian asinkron) karena proyek dan analisis cacat dapat dilakukan dengan lebih mudah, karena output hanya dapat berubah seiring waktu.
Saya sudah cukup banyak menyalin ini dari
Digital Systems: Principles and Applications, 10th edition by R. J. Tocci et al.
sumber
Nah, jika Anda merancang sistem sinkron, Anda memiliki target laju jam, dan Anda merancang logika untuk menyelesaikan semua perhitungan selama satu siklus dalam satu periode jam. Ini juga berarti bahwa Anda perlu memasukkan margin keselamatan untuk memungkinkan berbagai kondisi, seperti tegangan catu daya rendah, suhu tinggi, dan chip "lambat". Chip sinkron dirancang sedemikian rupa sehingga jalur logika terpanjang (perhitungan paling lambat) akan selesai dalam waktu di bawah semua kondisi yang merugikan ini. Akibatnya, ketika kondisinya tidak buruk, Anda akan memiliki lebih banyak waktu / margin antara saat logika menyelesaikan operasinya dan jam berikutnya mengunci hasilnya. Karena Anda (biasanya) tidak dapat mengubah frekuensi jam Anda, Anda kehilangan kecepatan ini.
ada yang benar-benar paradigma logika asynchronous yang ada, misalnya satu yang aku akrab dengan adalah NULL konvensi logika. Dengan menggunakan garis lebar untuk menggambarkan apa yang terjadi, rangkaian logika dapat mengidentifikasi kapan perhitungan telah selesai, dan mampu secara efektif membuat sinyal "jam" sendiri. Ini memungkinkan sirkuit berjalan secepat mungkin, dan memiliki beberapa kekuatan sederhana dan manfaat EMI. Sayangnya, Anda membayar denda untuk sifat asinkron dalam hal kepadatan desain serta kinerja terbaik. Selain itu, walaupun perangkat lunak untuk desain dan validasi sinkron sudah matang, banyak desain dan validasi untuk desain asinkron masih manual, sehingga dibutuhkan upaya yang lebih besar untuk merancang dan membangun desain asinkron.
Ini juga sepenuhnya mengabaikan case yang kadang-kadang Anda memerlukan jam untuk aplikasi tertentu menjadi referensi waktu. Misalnya, kartu suara Anda tidak dapat beroperasi secara tidak sinkron karena perlu memperbarui ADC atau DAC pada laju sampel yang spesifik dan presisi atau audio akan terdistorsi.
sumber
Sederhananya: karena manusia bukanlah makhluk super-cerdas, dan harus mengambil jalan pintas untuk memungkinkan perancangan sirkuit miliar elemen.
Ketika alat berat kami naik, mereka mungkin sangat menghilangkan jam, mengatasi masalah kecil seperti membuat sirkuit yang lebih sedikit yang diproduksi di pabrik meskipun ada variasi proses, dan memanfaatkan beberapa peningkatan kecepatan.
Untuk sedikit berkembang: diskrit, hal-hal yang dapat diprediksi lebih mudah dianalisis dan disain secara rasional. Sebagai manfaat tambahan yang besar, mereka mengoreksi diri (dalam hal ini, waktunya mengoreksi diri). Inilah alasan kami menggunakan logika digital. (Demikian pula, dalam pemrograman, kita sering menggunakan integer alih-alih floating-point, struktur kontrol yang sudah dikenal alih-alih goto-spaghetti, dan bahasa dengan beberapa aturan yang jelas alih-alih bahasa yang sangat "fleksibel" di mana Anda tidak pernah yakin apa yang akan terjadi hingga kode berjalan.)
sumber