"Kait" berbeda dari "Flip-Flop" di mana FF hanya mengubah outputnya sebagai respons terhadap tepi jam. Sebuah kait dapat mengubah outputnya sebagai respons terhadap sesuatu selain jam. Sebagai contoh, SR-Latch memiliki set dan input reset dan jika salah satu dari mereka aktif maka output dapat berubah. Dimana sebagai SR-FF hanya merespon satu set atau reset ketika ada juga tepi jam.
Dalam FPGA, Anda ingin logika Anda sepenuhnya sinkron. Berarti bahwa semua elemen penyimpanan (seperti FF) semuanya di-clock dari satu sumber clock tunggal. Apa pun yang tidak sinkron dengan jam itu perlu diperlakukan dengan sangat hati-hati jika tidak, kesalahan waktu akan terjadi.
Sebuah kait pada dasarnya adalah elemen penyimpanan yang tidak sinkron. Ia tidak memiliki input jam, dan karenanya tidak dapat disinkronkan dengan jam apa pun. Saya harus mencatat bahwa ada FF dengan reset dan reset input asynchronous, dan ini harus diperlakukan dengan perawatan yang sama seperti kait normal.
Mengalami semua masalah waktu yang dapat disebabkan oleh kait adalah jauh melampaui apa yang dapat dibahas di sini, tetapi izinkan saya memberi Anda satu contoh:
Katakanlah Anda memiliki SR-Latch, dan Anda ingin mengaturnya setiap kali penghitung 8-bit mencapai nilai tertentu. Saya tidak yakin kode Verilog akan seperti apa, tetapi dalam VHDL kodenya adalah: set <= '1' saat hitung = "11010010" else '0'; Sinyal set tersebut masuk ke input yang ditetapkan pada SR-Latch kami.
Logika yang dihasilkan adalah murni kombinatorial; campuran dan-gerbang, atau-gerbang, dan inverter (Atau LUT). Tetapi jalur sinyal melalui logika kombinatorial tidak selalu sempurna dan sinyal "set" dapat memiliki gangguan di dalamnya. Jalur sinyal melalui kelompok gerbang tertentu bisa memakan waktu lebih lama dari kelompok lain, menyebabkan output yang disetel aktif sejenak sebelum output menetap ke keadaan akhir.
Kesalahan output ini dapat menyebabkan SR-Latch kami diatur, meskipun tidak seharusnya. Jika kita beralih dari SR-Latch ke SR-FF, clock dari jam yang sama dengan penghitungnya, maka SR-FF akan menunggu satu siklus clock penuh sebelum mengubah keadaan. Intinya ia akan menunggu sinyal yang disetel menetap sebelum melihatnya.
Jika jalur melalui logika kombinatorial untuk sinyal yang disetel hanya dialihkan secara berbeda (menyebabkan penundaan yang berbeda), maka perilaku kesalahan juga akan berubah. Logikanya mungkin bekerja dengan baik, tetapi kemudian karena Anda mengubah sesuatu yang sama sekali tidak berhubungan, logika ini dirutekan secara berbeda sehingga bug muncul. Suhu dan tegangan juga akan mengubah timing sinyal, dan dengan demikian dapat mengubah perilaku kesalahan.
Ketidakpastian dalam waktu ini adalah mengapa Anda harus menghindari kait dalam logika Anda. FF jauh lebih aman untuk digunakan. Inilah sebabnya mengapa kompiler Anda memperingatkan Anda tentang kait, karena mudah untuk keliru membuat kait dan Anda mungkin tidak menginginkannya di sana.
Tentu saja, kadang-kadang kait diperlukan. Anda hanya perlu menggunakannya sangat jarang, hanya ketika benar-benar diperlukan, dan kemudian Anda harus merancang logika dengan benar sehingga tidak ada gangguan yang mungkin terjadi.