Apa itu kemiringan jam, dan mengapa itu bisa negatif?

10

Kompiler HDL saya (Quartus II) menghasilkan laporan waktu. Di dalamnya, node memiliki kolom "skew clock". Satu-satunya definisi kemiringan jam yang saya temukan adalah dalam dokumentasi TimeQuest (lihat halaman 7-24):

Untuk secara manual menentukan ketidakpastian jam, atau condong, untuk transfer jam ke jam, gunakan set_clock_uncertaintyperintah.

Jadi jika condong adalah "ketidakpastian", mengapa beberapa jam saya condong negatif (misalnya -0,048)? Apa sebenarnya kemiringan jam?

Randomblue
sumber

Jawaban:

8

Dari Wikipedia :

Dalam skew jam sirkuit sinkron ( ) adalah perbedaan waktu kedatangan antara dua register yang berdekatan secara berurutan. Diberikan dua register yang berdekatan secara berurutan, dan dengan waktu kedatangan jam pada pin pin register masing-masing sebagai dan , maka kemiringan jam dapat didefinisikan sebagai: R i R j T C i T C jTSkewRiRjTCiTCj

TSkewi,j=TCiTCj

Kemiringan jam bisa positif atau negatif. Jika sinyal jam dalam sinkronisasi lengkap, maka kemiringan jam yang diamati pada register ini adalah nol.

Jadi jumlah kemiringan jam pada satu register relatif terhadap register lainnya. Karena itu relatif, itu bisa positif atau negatif.

Beberapa ilustrasi:

condong positif / negatif condong mengarah / tertinggal

Ambil contoh transfer intraclock seperti yang didefinisikan dalam dokumen TimeQuest yang Anda berikan:

Transfer intraclock terjadi ketika transfer register-ke-register terjadi di inti perangkat dan jam sumber dan tujuan berasal dari pin output atau port jam PLL yang sama.

Jadi jika register tujuan secara fisik lebih dekat dengan sirkuit penghasil clock, maka jam mungkin akan tiba di register tujuan sebelum tiba di register sumber, menghasilkan kemiringan jam terkemuka yang sebenarnya positif. Jika register tujuan menerima tepi jam setelah register sumber, kemiringan jam akan tertinggal atau negatif.

Dengan kata lain, kemiringan jam adalah ketidakpastian tentang seberapa dekat waktu dalam ujung jam akan mencapai dua register terpisah yang diberikan dalam satuan waktu sehubungan dengan register sumber dalam transfer register-ke-register.

Memperluas difintion itu untuk memasukkan transfer antar- waktu dan pengaturan serta waktu penahanan menjadi sedikit berantakan. Jadi mungkin lebih mudah untuk menganggapnya sebagai "seberapa sinkron" tepi atau waktu penahanan antara dua register. Kita cenderung menganggap "sinkron" sebagai "terjadi pada saat yang sama". Tetapi hal-hal jarang terjadi pada saat yang sama persis. Jadi kita perlu memberi toleransi pada waktu itu. Dan toleransi sering dinyatakan dalam hal positif dan negatif (yaitu ±).

tertanam.kyle
sumber
10

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_uncertaintyperintah - mengapa saya ingin "secara manual menentukan" condong?

(*) Satu pengecualian: sistem asinkron .

davidcary
sumber
Saya percaya ide di balik menambahkan penundaan untuk meminimalkan kemiringan jam kadang-kadang bisa melibatkan penundaan jam dengan siklus hampir penuh. Setelah jam aktif dan berjalan, Anda dapat mengaturnya sehingga flip flop A melihat tepi jam 1 pada waktu yang tepat flip flop B melihat edge clock 2. Dari tampilan eksternal, mereka berbeda edge, tetapi sirkuit tidak tidak peduli asalkan ujungnya benar-benar sejajar.
ajs410
1

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

pengguna12108
sumber