Mengapa Microcontrollers membutuhkan Jam

31

Mengapa instruksi perlu diproses pada interval waktu yang telah ditentukan (yaitu dengan menggunakan jam)? Tidak bisakah mereka dieksekusi secara berurutan - segera setelah instruksi sebelumnya selesai?

Sebuah analogi tentang perlunya jam dalam mikrokontroler akan terbukti sangat berguna.

BAPAK
sumber
6
Ada prosesor asinkron.
Leon Heller
6
Bagaimana Anda menentukan "kapan instruksi sebelumnya selesai"? Jika Anda memikirkannya, Anda harus tahu kapan "Apakah instruksi sebelumnya selesai?" perhitungan telah selesai, dan ketika "Sudahkah" Apakah instruksi sebelumnya selesai? "perhitungan" telah selesai, dan ........ Lebih mudah untuk hanya mengatakan "Dibutuhkan 0,4 nanodetik untuk menyelesaikan instruksi".
user253751
4
Gerbang logika tidak mengatakan kapan mereka selesai. Sinyal hanya tak tentu untuk beberapa periode waktu sebelum menetap pada nilai yang stabil. Intinya jam memungkinkan desain untuk mengetahui kapan logika telah menentukan nilai yang benar. Strategi lanjutan seperti microinstructions membantu dengan memecah instruksi mesin menjadi potongan-potongan yang lebih kecil, sehingga ADD dapat mengambil kutu 4 jam, sementara akses memori mungkin membutuhkan ratusan kutu.

Jawaban:

31

Contoh ilustrasi atau dua dapat membantu di sini. Lihatlah rangkaian hipotetis berikut:

skema

mensimulasikan rangkaian ini - Skema dibuat menggunakan CircuitLab

Misalkan memulai baik A dan B tinggi (1). Output dari AND adalah 1, dan karena kedua input ke XOR adalah 1, outputnya adalah 0.

Elemen logika tidak mengubah keadaannya secara instan - ada penundaan propagasi yang kecil namun signifikan karena perubahan input ditangani. Misalkan B menjadi rendah (0). XOR melihat status baru pada input kedua secara instan, tetapi input pertama masih melihat 'basi' 1 dari gerbang AND. Akibatnya, output sebentar menjadi tinggi - tetapi hanya sampai sinyal merambat melalui gerbang AND, membuat kedua input ke XOR rendah, dan menyebabkan output menjadi rendah lagi.

Glitch bukan bagian yang diinginkan dari operasi rangkaian, tetapi gangguan seperti itu akan terjadi setiap kali ada perbedaan dalam kecepatan propagasi melalui berbagai bagian sirkuit, karena jumlah logika, atau bahkan hanya panjang kabel .

Salah satu cara yang sangat mudah untuk mengatasinya adalah dengan meletakkan flipflop yang dipicu tepi pada output dari logika kombinatorial Anda, seperti ini:

skema

mensimulasikan rangkaian ini

Sekarang, setiap gangguan yang terjadi disembunyikan dari sisa rangkaian oleh flipflop, yang hanya memperbarui statusnya ketika jam beralih dari 0 ke 1. Selama interval antara naiknya tepi jam cukup lama bagi sinyal untuk menyebarkan semua jalan melalui rantai logika kombinatorial, hasilnya akan menjadi deterministik andal, dan bebas kesalahan.

Nick Johnson
sumber
6
Terima kasih telah benar-benar menyebutkan penundaan propagasi segera, itu mungkin 99% dari jawabannya.
1
Contoh kerja dari tindakan ini dapat diamati pada mikrokontroler digital I / O mikrochip (dan lainnya). Jika Anda menggunakan register PORT untuk memperbarui output (daripada LATCH) menggunakan instruksi Read-Modify-Write yang berurutan, dimungkinkan untuk membaca status pin saat sedang berubah status. Lihat bagian 10.2.2 dari dokumentasi dsPIC33E / 24E untuk detail lebih lanjut.
Evil Dog Pie
Apakah saya memahaminya dengan benar bahwa rangkaian sekuensial sangat membutuhkan pencatatan jam kerja bukan hanya karena mereka akan mendapatkan gangguan, tetapi juga karena, karena kesalahan ini, beberapa flip-flop mungkin pada akhirnya menyimpan nilai yang salah?
lakesare
20

Saya merasa banyak jawaban ini tidak tepat mengenai pertanyaan inti. Kontroler mikro memiliki jam hanya karena mengeksekusi (dan didorong oleh) logika sekuensial .

Dalam teori sirkuit digital, logika sekuensial adalah jenis sirkuit logika yang outputnya tidak hanya bergantung pada nilai sekarang dari sinyal inputnya tetapi pada urutan input masa lalu, sejarah input. Ini berbeda dengan logika kombinasional, yang outputnya adalah fungsi dari hanya input yang ada. Artinya, logika sekuensial memiliki status (memori) sedangkan logika kombinasional tidak. Atau, dengan kata lain, logika sekuensial adalah logika kombinasional dengan memori.

Demikian juga:

Keuntungan utama dari logika sinkron adalah kesederhanaannya. Gerbang logika yang melakukan operasi pada data memerlukan waktu yang terbatas untuk menanggapi perubahan input mereka. Ini disebut penundaan propagasi. Interval antara pulsa clock harus cukup lama sehingga semua gerbang logika punya waktu untuk menanggapi perubahan dan outputnya "menetap" ke nilai logika stabil, sebelum pulsa clock berikutnya terjadi. Selama kondisi ini terpenuhi (mengabaikan detail tertentu lainnya) sirkuit dijamin stabil dan dapat diandalkan. Ini menentukan kecepatan operasi maksimum dari sebuah sirkuit sinkron.

Peter
sumber
15

Jawaban singkat: manajer menginginkan BUKTI fungsi yang sederhana, dapat diuji, sebelum memberikan jutaan (atau lebih) dolar ke suatu desain. Alat saat ini, hanya saja jangan memberikan desain asinkron jawaban itu.

Mikrokomputer dan mikrokontroler biasanya menggunakan skema pencatatan jam kerja untuk memastikan kontrol waktu. Semua sudut proses harus mempertahankan pengaturan waktu di semua tegangan, suhu, proses, dll. Efek pada kecepatan rambat sinyal. Tidak ada gerbang logika saat ini yang berubah secara instan: setiap gerbang beralih tergantung pada tegangan yang diberikan, drive yang didapat, beban yang dikendarainya, dan ukuran perangkat yang digunakan untuk membuatnya, (dan tentu saja simpul proses (ukuran perangkat) itu dibuat, dan seberapa cepat proses ITU benar-benar melakukan --- INI melewati fab). Untuk beralih ke "instan", Anda harus menggunakan logika kuantum, dan itu mengasumsikan bahwa perangkat kuantum dapat beralih secara instan; (Saya tidak yakin).

Logika clocked MENYEDIAKAN bahwa pengaturan waktu di seluruh prosesor, bekerja melintasi tegangan, suhu, dan variabel pemrosesan yang diharapkan. Ada banyak perangkat lunak yang tersedia yang membantu mengukur waktu ini, dan proses internet disebut "penutupan waktu". Clocking dapat (dan, menurut pengalaman saya, memang ) memakan waktu antara 1/3 hingga 1/2 dari daya yang digunakan dalam mikroprosesor.

Jadi, mengapa desainnya tidak sinkron? Ada beberapa, jika ada, alat penutupan waktu untuk mendukung gaya desain ini. Ada beberapa, jika ada, alat tempat dan rute otomatis yang dapat menangani, dan mengelola, desain asinkron yang besar. Jika tidak ada yang lain, manajer TIDAK menyetujui apa pun yang tidak memiliki BUKTI fungsionalitas langsung yang dihasilkan komputer.

Komentar bahwa desain asinkron membutuhkan "satu ton" sinyal sinkronisasi, yang membutuhkan "lebih banyak transistor", mengabaikan biaya routing dan sinkronisasi jam global, dan biaya semua sandal jepit yang dibutuhkan sistem clocking. Desain asinkron adalah, (atau seharusnya), lebih kecil dan lebih cepat daripada rekan-rekan clocked mereka. (Satu hanya mengambil SATU jalur sinyal paling lambat, dan menggunakannya untuk memberi makan kembali sinyal "siap" ke logika sebelumnya).

Logika asinkron lebih cepat, karena tidak pernah harus menunggu jam yang harus diperpanjang untuk blok lain di tempat lain. Ini terutama benar dalam fungsi register-to-logic-to-register. Logika asinkron tidak memiliki banyak masalah "pengaturan" dan "tahan", karena hanya struktur wastafel akhir (register) yang memiliki masalah tersebut, sebagai lawan dari rangkaian logika pipa dengan sandal jepit diselingi dengan ruang penundaan propagasi logika untuk pencatatan jam kerja batas-batas.

Bisakah itu dilakukan? Tentu saja, bahkan pada desain miliar transistor. Apakah ini lebih sulit? Ya, tetapi hanya karena MENYEDIAKAN bahwa ia bekerja di seluruh chip (atau bahkan sistem), jauh lebih terlibat. Mendapatkan waktu di atas kertas cukup langsung untuk setiap satu blok atau sub-sistem. Mendapatkan pengaturan waktu yang dikendalikan di tempat dan sistem rute otomatis, jauh lebih sulit, karena perkakas TIDAK diatur untuk menangani potensi kendala pengaturan waktu yang jauh lebih besar.

Microcontrollers juga memiliki satu set yang berpotensi besar lainnya blok yang antarmuka ke (relatif) sinyal eksternal lambat, ditambahkan ke semua kompleksitas sebuah mikroprosesor. Itu membuat waktu sedikit lebih terlibat, tetapi tidak banyak.

Mencapai mekanisme sinyal "kunci pertama" "penguncian" pertama adalah masalah desain sirkuit, dan ada cara yang diketahui untuk mengatasinya. Kondisi lomba adalah tanda 1). praktik desain yang buruk; atau 2). sinyal eksternal masuk ke prosesor. Clocking sebenarnya memperkenalkan kondisi perlombaan signal-vs-clock yang terkait dengan pelanggaran "set-up" dan "hold".

Saya, secara pribadi, tidak mengerti bagaimana desain asynchronous bisa masuk ke, atau macet lainnya kondisi lomba. Itu mungkin menjadi batasan saya , tetapi kecuali itu terjadi pada data yang masuk ke dalam prosesor, itu TIDAK PERNAH mungkin dalam sistem logika yang dirancang dengan baik, dan bahkan kemudian, karena itu dapat terjadi ketika sinyal masuk, Anda merancang untuk menghadapinya.

(Saya harap ini membantu).

Semua yang dikatakan, jika Anda punya uang ...

John Beck
sumber
Tentu saja, itu tergantung pada chip yang Anda buat - misalnya, perangkat keras jaringan saraf cenderung tidak sinkron, karena itu sebenarnya hal yang paling mudah - hal yang mereka tiru adalah tidak sinkron . Kami sebagian besar membangun perangkat keras berurutan sinkron, karena perangkat lunak / firmware sebagian besar juga sinkron dan berurutan (terutama pada bagian "berurutan" - kode asinkron lebih sering digunakan). Bahkan, jauh lebih mudah untuk membungkus kepala Anda di sekitar sistem sekuensial, sinkron, terutama ketika sebagian besar pemrograman dilakukan dalam bahasa yang mendorong kode sekuensial.
Luaan
Peristiwa di dunia nyata terjadi pada waktu yang tidak terduga. Jika suatu perangkat memiliki tombol, dan seharusnya mengeksekusi satu jalur kode jika ditekan "segera" dan mengeksekusi jalur kode lain jika tidak, maka tanpa adanya batasan kuantum-mekanis, antara saat menekan tombol di mana suatu pencet tombol akan terjadi segera untuk memicu jalur kode alternatif, dan suatu saat ketika pencet tombol akan "terlambat", akan ada saat yang tepat di mana pencet tombol akan menyebabkan beberapa perilaku "antara" keduanya (mis. menyebabkan beberapa bit dari penghitung program diubah ...
supercat
... tapi tidak yang lain). Dengan tidak adanya batasan kuantum-mekanis, waktu antara saat-saat terakhir ketika dorongan akan menyebabkan cabang, dan momen pertama ketika sebuah dorongan akan gagal melakukannya, dapat dibuat secara sewenang-wenang kecil tetapi tidak dikurangi menjadi nol. Batas mekanis kuantum dapat membuat kemungkinan bahwa setiap penekanan tombol akan terjadi baik cukup awal untuk mendaftar atau cukup terlambat untuk gagal dengan bersih, tetapi membuktikan bahwa tidak akan pernah ada keadaan kuantum yang akan memungkinkan penekanan tombol dalam waktu menengah yang mematikan umumnya akan menjadi tidak layak.
supercat
Menggunakan logika sinkron sangat menyederhanakan analisis situasi di mana sistem perlu merespons peristiwa yang benar-benar tidak sinkron dengan memastikan bahwa kondisi balapan akan memiliki probabilitas yang sangat rendah untuk lolos dari bagian yang sangat kecil dari keseluruhan perangkat. Menganalisis bahwa sebagian kecil dari perangkat untuk memastikan bahwa kondisi balapan tidak mungkin untuk melarikan diri cenderung menjadi masalah yang jauh lebih mudah ditelusuri daripada membiarkan kondisi balapan terjadi hampir di mana saja dan mencoba menganalisis efeknya untuk membuktikan bahwa kemungkinan diterima tidak akan menimbulkan masalah.
supercat
10

Mikrokontroler perlu menggunakan jam karena mereka harus mampu merespons peristiwa yang dapat terjadi kapan saja, termasuk hampir bersamaan dengan peristiwa eksternal lain atau peristiwa yang dihasilkan oleh pengontrol itu sendiri, dan seringkali akan memiliki beberapa sirkuit yang perlu mengetahui apakah satu peristiwa X mendahului peristiwa lain Y. Mungkin tidak masalah apakah semua sirkuit seperti itu memutuskan bahwa X mendahului Y, atau semua sirkuit seperti itu memutuskan bahwa X tidak mendahului Y, tetapi akan sering menjadi kritis bahwa jika salah satu sirkuit memutuskan bahwa X mendahului Y, maka semua harus melakukannya. Sayangnya, sulit untuk memastikan bahwa sirkuit akan dalam batas waktu mencapai konsensus yang dijamin, apakah X mendahului Y, atau bahkan mencapai konsensus apakah mereka telah mencapai konsensus atau tidak. Logika sinkron dapat sangat membantu dengan itu.

Menambahkan jam ke sirkuit memungkinkan untuk memastikan bahwa suatu subsistem tidak akan mengalami kondisi balapan apa pun kecuali input ke sistem berubah dalam jendela yang sangat kecil relatif terhadap jam, dan juga menjamin jika output dari satu perangkat dimasukkan ke perangkat lain. , output perangkat pertama tidak akan berubah di jendela kritis perangkat kedua kecuali jika input ke perangkat pertama berubah dalam jendela kritis yang lebih kecil. Menambahkan perangkat lain sebelum perangkat pertama akan memastikan bahwa input ke perangkat pertama tidak akan berubah di jendela kecil itu kecuali jika input ke perangkat baru berubah dalam jendela yang sangat kecil. Dari perspektif praktis, kecuali seseorang dengan sengaja berusaha menyebabkan kegagalan konsensus,

Tentu saja mungkin untuk merancang sistem sepenuhnya asinkron yang menjalankan "secepat mungkin", tetapi kecuali suatu sistem sangat sederhana, akan sulit untuk menghindari desain yang tersandung oleh kondisi balapan. Meskipun ada cara untuk menyelesaikan kondisi balapan tanpa memerlukan jam, kondisi balapan seringkali dapat diselesaikan dengan lebih cepat dan mudah dengan menggunakan jam daripada yang akan terjadi tanpanya. Meskipun logika asinkron sering kali dapat menyelesaikan kondisi balapan lebih cepat daripada logika clocked, kejadian di mana ia tidak dapat melakukannya menimbulkan masalah besar, terutama mengingat sulitnya bagian sistem mencapai konsensus apakah mereka telah mencapai konsensus atau tidak.. Suatu sistem yang secara konsisten dapat menjalankan satu juta instruksi per bagian pada umumnya akan lebih bermanfaat daripada yang kadang-kadang menjalankan empat juta instruksi per detik, tetapi berpotensi dapat terhenti selama milecond (atau lebih lama) pada suatu waktu karena kondisi balapan.

supercat
sumber
Perlu dicatat bahwa keadaan yang diputuskan dapat sama-sama internal - seperti hasil operasi aritmatika. Penundaan karena panjang garis dapat mengakibatkan satu bagian MCU melihat hasilnya - dan, tanpa jam, bertindak di atasnya - sebelum bagian lain.
Nick Johnson
@NickJohnson: Jika urutan di mana operasi dilakukan tidak pernah bergantung pada hal-hal yang belum dihitung, masalah-masalah tersebut dapat diselesaikan tanpa kesulitan jika setiap bagian seperti ALU memiliki input "valid" dan output "valid", dan hal-hal dapat diatur sehingga terjadi dalam urutan deterministik. Di mana roda jatuh adalah ketika urutan di mana operasi terjadi harus tergantung pada waktu (misalnya jika seseorang memiliki sejumlah operasi paralel yang perlu menggunakan bus memori bersama dan dua di antaranya mengeluarkan permintaan simultan, arbitrase yang mana harus pergi dulu ...
supercat
... dan yang mana yang harus menunggu mungkin tidak dapat dipecahkan. Jika seseorang memutuskan sebelumnya mana yang akan pergi pertama, masalah seperti itu dapat dihindari, tetapi jika ternyata unit yang ditunjuk untuk pergi pertama tidak siap sampai lama setelah yang lain, kinerja mungkin sangat menderita sebagai hasilnya .
supercat
Inilah sebabnya mengapa pergi ke luar angkasa sangat sulit, probabilitasnya berubah dengan buruk.
Asap Ajaib
6

MCU hanyalah satu contoh yang sangat kompleks dari rangkaian logika sekuensial sinkron. Bentuk paling sederhana mungkin adalah clock-D-flip-flop (D-FF), yaitu elemen memori 1 bit yang sinkron.

Ada elemen memori yang tidak sinkron, misalnya kait-D, yang (dalam arti) setara dengan sinkron D-FF. MCU tidak lebih dari sekelompok jutaan elemen memori dasar (D-FF) yang direkatkan bersama berton-ton gerbang logika (saya terlalu menyederhanakan).

Sekarang mari kita langsung ke intinya: mengapa MCU menggunakan D-FF bukan D-latch sebagai elemen memori secara internal? Ini pada dasarnya untuk keandalan dan kemudahan desain: D-latch bereaksi segera setelah inputnya berubah dan outputnya diperbarui secepat mungkin. Hal ini memungkinkan untuk interaksi yang tidak diinginkan yang tidak diinginkan antara berbagai bagian dari rangkaian logika (loop dan balapan umpan balik yang tidak diinginkan). Merancang rangkaian sekuensial kompleks menggunakan blok bangunan asinkron secara inheren lebih sulit dan rawan kesalahan. Sirkuit sinkron menghindari jebakan seperti itu dengan membatasi operasi blok bangunan ke instants waktu ketika tepi jam terdeteksi. Ketika tepi tiba sirkuit logika sinkron memperoleh data pada inputnya, tetapi belum memperbarui outputnya. Segera setelah input diperoleh, output diperbarui. Ini menghindari risiko bahwa sinyal output diumpankan kembali ke input yang belum sepenuhnya diperoleh dan mengacaukan segalanya (kata sederhana).

Strategi "decoupling" input data akuisisi dari pembaruan output memungkinkan teknik desain yang lebih sederhana, yang diterjemahkan dalam sistem yang lebih kompleks untuk upaya desain yang diberikan.

Lorenzo Donati mendukung Monica
sumber
5

Apa yang Anda gambarkan disebut logika asinkron . Itu bisa bekerja, dan ketika itu sering kali lebih cepat dan menggunakan lebih sedikit daya daripada logika sinkron (clocked). Sayangnya, logika asinkron memiliki beberapa masalah yang mencegahnya digunakan secara luas. Yang utama yang saya lihat adalah dibutuhkan lebih banyak transistor untuk diimplementasikan, karena Anda memerlukan satu ton sinyal sinkronisasi independen. (Mikrokontroler melakukan banyak pekerjaan secara paralel, seperti halnya CPU.) Itu akan menaikkan biaya. Kurangnya alat desain yang baik adalah hambatan besar di muka.

Mikrokontroler mungkin akan selalu membutuhkan jam karena periferal mereka biasanya perlu mengukur waktu. Pengatur waktu dan PWM bekerja pada interval waktu yang tetap, laju pengambilan sampel ADC memengaruhi bandwidth mereka, dan protokol komunikasi asinkron seperti CAN dan USB memerlukan jam referensi untuk pemulihan jam. Kami biasanya ingin CPU berjalan secepat mungkin, tetapi itu tidak selalu berlaku untuk sistem digital lainnya.

Adam Haun
sumber
3

Sebenarnya Anda melihat MCU sebagai unit yang lengkap, tetapi sebenarnya itu sendiri terbuat dari gerbang yang berbeda dan logika TTL dan RTL, sering array FF, semua memerlukan sinyal jam secara individual,

Untuk lebih spesifik berpikir tentang hanya mengakses alamat dari memori, tugas sederhana ini sendiri dapat melibatkan beberapa operasi seperti membuat BUS tersedia untuk jalur data dan jalur alamat.
Cara terbaik untuk mengatakan adalah, instruksi itu sendiri terjadi pada unit-unit kecil dari operasi yang membutuhkan siklus clock, ini dikombinasikan untuk siklus mesin , yang memperhitungkan berbagai properti MCU seperti kecepatan (FLOPS ** di rumit MCU), pipa lapisan dll

Respon untuk Komentar OP

Untuk lebih tepatnya, saya memberi Anda contoh ada chip yang disebut ALE(Address latch enable) biasanya untuk tujuan multiplexing bus alamat yang lebih rendah untuk mentransmisikan alamat dan data pada pin yang sama, kami menggunakan osilator (intel 8051 menggunakan osilator lokal 11.059MHz sebagai jam) untuk mengambil alamat dan kemudian data.

Seperti yang Anda ketahui bahwa bagian dasar MCU adalah CPU, ALU dan register internal dan seterusnya, CPU (pengontrol s / g) mengirimkan alamat ke semua pin alamat 16 dalam kasus 8051, ini terjadi pada waktu instan T1 dan setelah alamatnya adalah matriks penyimpanan kapasitor yang sesuai (diisi sebagai sinyal) ( * pemetaan memori * ) diaktifkan dan dipilih.

Setelah pemilihan sinyal ALE diaktifkan yaitu pin ALE dibuat tinggi pada jam berikutnya mengatakan T2 ( biasanya sinyal tinggi tetapi berubah sesuai desain unit pemrosesan ), setelah ini bus alamat bawah bertindak seperti garis data, dan data ditulis atau dibaca (tergantung pada output di pin RD / WR dari MCU).
Anda dapat dengan jelas melihat bahwa semua acara berurutan tepat waktu

Apa yang akan terjadi jika kita tidak menggunakan jam Kemudian kita harus menggunakan metode clocking asinkron ASQC ini kemudian akan membuat masing-masing gerbang bergantung pada yang lain dan dapat mengakibatkan kegagalan perangkat keras, Juga ini membuat pipa-saluran instruksi mustahil, Long Dependent dan tidak teratur waktu untuk menyelesaikan tugas.
Jadi itu adalah sesuatu yang tidak diinginkan

MaMba
sumber
Itu masuk akal. Tetapi mengapa berbagai kompartemen MCU ini membutuhkan sinyal clock untuk beroperasi? Apa yang secara teoritis akan terjadi jika mereka tidak menggunakan jam?
MR
1
@ Martin, gerbang logika segera berubah status saat inputnya berubah. Clocked, logic sequential hanya mengevaluasi inputnya selama acara clock. Ini adalah prinsip dasar yang menggerakkan sirkuit memori digital. Ini memberi kita kemampuan untuk secara selektif memindahkan data dari satu tempat ke tempat lain dengan kontrol absolut, memungkinkan pembuatan perangkat keras tujuan umum yang dapat diprogram melalui perangkat lunak untuk melakukan - yah, apa saja.
Sean Boddy
3
@SeanBoddy: Gerbang logika tidak langsung menyatakan keadaan, ada jeda pendek yang dapat dilihat pada osiloskop. Jika kami tidak menggunakan jam, perbedaan waktu antara komponen ini dapat menyebabkan kondisi balapan menghasilkan hasil yang salah.
BlueRaja - Danny Pflughoeft
@ BlueRaja - permen karet yang bagus, bagaimana dengan itu. Mungkin saya akan kembali melalui 4 tahun catatan elektronik kekuatan dan 8 tahun pelatihan angkatan laut untuk mencari tahu di mana saya melewatkan satu hal itu.
Sean Boddy
2

Masalah mendasar yang dipecahkan oleh clock adalah transistor bukan perangkat digital: mereka menggunakan level tegangan analog pada input untuk menentukan output dan membutuhkan waktu yang lama untuk mengubah keadaan. Kecuali, seperti yang telah disebutkan dalam jawaban lain, Anda masuk ke perangkat kuantum, akan ada periode waktu di mana input transisi dari satu keadaan ke yang lain. Waktu yang diperlukan dipengaruhi oleh pemuatan kapasitif, yang akan berbeda dari satu perangkat ke perangkat lainnya. Ini berarti bahwa tranisistor berbeda yang membentuk masing-masing gerbang logika akan merespons pada waktu yang sedikit berbeda. Jam digunakan untuk 'mengunci' keluaran perangkat komponen begitu semuanya sudah stabil.

Sebagai analogi, pertimbangkan lapisan transport komunikasi SPI (Serial Peripheral Interface). Implementasi khas ini akan menggunakan tiga baris: Data Masuk, Data Keluar dan Jam. Untuk mengirim byte di atas lapisan transport ini, master akan mengatur jalur Data Out dan menegaskan garis Clock untuk menunjukkan bahwa jalur Data Out memiliki nilai yang valid. Perangkat budak akan mengambil sampel Data In line hanya ketika diinstruksikan untuk melakukannya oleh sinyal Clock. Jika tidak ada sinyal clock, bagaimana budak tahu kapan harus mengambil sampel jalur Data In? Itu bisa sampel sebelum garis ditetapkan oleh master atau selama transisi antar negara. Protokol asinkron, seperti CAN, RS485, RS422, RS232, dll. Menyelesaikan ini dengan menggunakan waktu sampling yang telah ditentukan sebelumnya, laju bit tetap dan bit framing (overhead).

Dengan kata lain, ada beberapa jenis Pengetahuan Umum yang diperlukan untuk menentukan kapan semua transistor dalam satu set gerbang telah mencapai kondisi akhir dan instruksi telah selesai. Dalam (100 mata biru) teka-teki yang dinyatakan dalam tautan di atas, dan menjelaskan secara terperinci dalam pertanyaan ini di Maths Stack Exchange, 'oracle' berperan sebagai jam bagi orang-orang di pulau itu.

Pai Anjing Jahat
sumber