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.
Jawaban:
Contoh ilustrasi atau dua dapat membantu di sini. Lihatlah rangkaian hipotetis berikut:
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:
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.
sumber
Saya merasa banyak jawaban ini tidak tepat mengenai pertanyaan inti. Kontroler mikro memiliki jam hanya karena mengeksekusi (dan didorong oleh) logika sekuensial .
Demikian juga:
sumber
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 ...
sumber
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.
sumber
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.
sumber
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.
sumber
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
sumber
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.
sumber