Perangkat logika digital modern biasanya (*) dirancang dengan "praktik desain sinkron": gaya desain register-transfer register-transfer (RTL) yang dipicu secara sinkron secara global: Semua sirkuit berurutan dipecah menjadi register yang dipicu oleh tepi yang terhubung ke sinyal clock global CLK dan logika kombinasional murni.
Gaya desain itu memungkinkan orang untuk cepat merancang sistem logika digital tanpa memperhatikan waktu. Sistem mereka akan "hanya bekerja" selama ada cukup waktu dari satu tepi clock ke yang berikutnya untuk diselesaikan oleh keadaan internal.
Dengan gaya desain ini, kemiringan jam dan masalah terkait waktu lainnya tidak relevan, kecuali untuk mencari tahu "Berapa laju jam maksimum untuk sistem ini?".
Apa sebenarnya kemiringan jam?
Sebagai contoh:
...
R1 - register 1 R3
+-+
->| |------>( combinational ) +-+
...->| |------>( logic )->| |--...
->|^|------>( )->|^|
+-+ ( ) +-+
| +--->( ) |
CLK | +->( ) CLK
| |
R2: | |
+-+ | |
...->| |->+ |
->|^|->--+
+-+
|
CLK
Dalam hardware nyata, "CLK" sinyal tidak pernah benar-benar beralih persis bersamaan di setiap mendaftar. The jam condong Tskew adalah keterlambatan jam hilir relatif terhadap jam hulu ( a ):
Tskew (sumber, tujuan) = destination_time - source_time
di mana source_time adalah waktu dari tepi jam aktif di register sumber hulu (dalam hal ini, R1 atau R2), dan destination_time adalah waktu dari tepi jam aktif "yang sama" di beberapa register tujuan hilir (dalam kasus ini, R3) .
- condong jam negatif: CLK at R3 beralih sebelum jam di R1.
- kemiringan jam positif: CLK at R3 beralih setelah jam di R1.
Apa efek kemiringan jam?
(mungkin diagram waktu di sini akan membuat ini lebih jelas)
Agar semuanya berfungsi dengan baik, bahkan dalam kasus terburuk, input R3 tidak boleh berubah selama waktu pengaturan R3 atau waktu tunggu. Lebih buruk lagi, agar hal-hal berfungsi dengan baik, kita harus merancang hal-hal sedemikian rupa sehingga:
Tskew (R1, R3) <Tco - Th.
Tclk_min = Tco + Tcalc + Tsu - Tskew (R1, R3).
dimana:
- Tcalc adalah waktu penyelesaian maksimum kasus terburuk dari semua blok logika kombinasional di mana saja dalam sistem. (Kadang-kadang kita dapat mendesain ulang blok logika kombinasional yang ada di jalur kritis, mendorong bagian hulu atau hilir, atau memasukkan tahap pipelining lainnya, sehingga desain baru memiliki Tcalc yang lebih kecil, yang memungkinkan kita untuk meningkatkan laju jam) .
- Tclk_min adalah periode waktu minimum dari satu tepi jam aktif ke tepi jam aktif berikutnya. Kami menghitungnya dari persamaan di atas.
- Tsu adalah waktu setup register. Pabrikan register berharap kita menggunakan jam yang cukup lambat untuk selalu memenuhi persyaratan ini.
- Ini adalah waktu penahanan register. Pabrikan register mengharapkan kita mengontrol kemiringan jam yang cukup untuk selalu memenuhi persyaratan ini.
- Tco adalah penundaan clock-to-output (waktu propagasi). Setelah setiap clock edge aktif, R1 dan R2 terus mengarahkan nilai-nilai lama ke logika kombinasional untuk Tco waktu singkat sebelum beralih ke nilai-nilai baru. Ini diatur oleh perangkat keras dan dijamin oleh pabrikan, tetapi hanya selama kita memenuhi Tsu dan Th dan persyaratan lain yang ditentukan pabrikan untuk operasi normal.
Kecenderungan positif yang terlalu banyak adalah bencana yang tak terselesaikan. Terlalu banyak kemiringan positif dapat (dengan beberapa kombinasi data) menyebabkan "jalur menyelinap" sedemikian rupa, alih-alih R3 mengaitkan "data yang benar" pada jam N + 1 (fungsi deterministik dari data yang sebelumnya dikaitkan ke R1 dan R2 pada jam N) , data baru yang terkunci pada R1 dan R2 pada jam N +1 dapat bocor, mengacaukan logika kombinasional, dan menyebabkan data yang salah dimasukkan ke R3 pada "sama" clock edge N +1.
Jumlah kemiringan negatif apa pun dapat "diperbaiki" dengan memperlambat laju jam. Ini hanya "buruk" dalam arti bahwa itu memaksa kita untuk menjalankan sistem pada laju jam lebih lambat, untuk memberikan input waktu R3 untuk menyelesaikan setelah R1 dan R2 latch data baru di tepi jam N, dan kemudian R3 mengunci hasilnya di "the next" clock edge N +1.
Banyak sistem menggunakan jaringan distribusi jam yang mencoba mengurangi kemiringan menjadi nol. Counter-intuitif, dengan hati-hati menambahkan penundaan di sepanjang jalur jam - jalur dari generator jam ke input CLK masing-masing register - dimungkinkan untuk meningkatkan kecepatan nyata bahwa wavefront edge-clock secara fisik bergerak dari input CLK satu register ke input masukan CLK register berikutnya lebih cepat dari pada kecepatan cahaya.
The dokumentasi Altera menyebutkan
"Hindari menggunakan logika kombinasional dalam jalur jam karena ini berkontribusi pada kemiringan jam."
Ini merujuk pada fakta bahwa banyak orang menulis HDL yang dikompilasi ke FPGA dengan cara yang entah bagaimana menyebabkan sesuatu selain sinyal CLK global untuk mendorong input CLK lokal dari beberapa register. (Ini mungkin logika "clock gating" sehingga nilai-nilai baru dimuat ke dalam register hanya ketika kondisi tertentu terpenuhi; atau logika "clock divider" yang hanya membiarkan 1 dari N melewati, atau lain-lain). CLK lokal itu biasanya berasal dari CLK global, entah bagaimana - CLK global, dan kemudian CLK lokal tidak berubah, atau (penundaan singkat setelah CLK global agar sinyal menyebar melalui "sesuatu yang lain") CLK lokal berubah sekali.
Ketika "sesuatu yang lain" itu mendorong CLK dari register hilir (R3), itu membuat condong lebih positif. Ketika "sesuatu yang lain" itu mendorong CLK dari register hulu (R1 atau R2), itu membuat condong lebih negatif. Kadang-kadang, apa pun yang mendorong CLK register upstream dan apa pun yang mendorong CLK register downstream praktis memiliki penundaan yang sama, membuat kemiringan di antara mereka praktis nol.
Jaringan distribusi jam di dalam beberapa ASIC sengaja dirancang dengan sejumlah kecil kemiringan jam positif pada beberapa register, yang memberikan logika kombinasional ke atas sedikit lebih banyak waktu untuk menyelesaikannya sehingga seluruh sistem dapat dijalankan pada laju jam yang lebih cepat. Ini disebut "optimasi kemiringan jam" atau "penjadwalan kemiringan jam", dan terkait dengan " retiming ".
Saya masih bingung dengan set_clock_uncertainty
perintah - mengapa saya ingin "secara manual menentukan" condong?
(*) Satu pengecualian:
sistem asinkron .
kemiringan jam adalah ketika jam tiba di titik yang berbeda dari sirkuit pada waktu yang berbeda karena jarak, kapasitansi dll yang dapat menyebabkan kegagalan fungsi. Saya pikir negatif harus ketika jam sampai ke titik itu sebelum sampai ke referensi
sumber