"Засувка" відрізняється від "перекидання" тим, що FF змінює свій вихід лише у відповідь на кромку годинника. Засувка може змінити свій вихід у відповідь на щось інше, ніж годинник. Наприклад, SR-засувка має набір входів і скидання, і якщо будь-який з них активний, вихід може змінюватися. Якщо SR-FF реагує на набір або скидання лише тоді, коли також є кромка годинника.
У FPGA ви хочете, щоб ваша логіка була повністю синхронною. Це означає, що всі елементи зберігання (на зразок FF) збираються з одного джерела годин. До всього, що є асинхронним для цього годинника, потрібно ставитися дуже обережно, інакше трапляться помилки в синхронізації.
Засувка - це в основному асинхронний елемент зберігання. У нього немає тактового входу, і тому його не можна синхронізувати з будь-яким годинником. Слід зазначити, що є FF з асинхронним входом для скидання та скидання, і до них слід ставитися так само, як і до звичайних засувок.
Вивчення всіх проблем із тимчасовим терміном, які можуть викликати засувки, є набагато вищим за те, що тут можна висвітлити, але дозвольте навести один приклад:
Скажімо, у вас SR-засувка, і ви хочете, щоб вона встановлювалася щоразу, коли 8-бітний лічильник досягає певного значення. Я не впевнений, яким би був код Verilog, але у VHDL код: set <= '1', коли count = "11010010" else '0'; Цей заданий сигнал надходить на встановлений вхід нашої SR-засувки.
Логіка, яка породжується, є суто комбінаторною; суміш і-воріт, або-воріт, і інверторів (або LUT). Але сигнальні шляхи через цю комбінаторну логіку не завжди є ідеальними, і сигнал "встановлений" міг би мати збої на ньому. Шлях сигналу через певну групу воріт може зайняти більше часу, ніж інша група, внаслідок чого заданий вихід активізується на короткий момент, перш ніж вихід осідає в кінцевий стан.
Цей вихідний глюк може призвести до встановлення нашого SR-засувки, навіть якщо цього не передбачалося. Якщо ми переключимося з SR-засувки на SR-FF, тактовуючи той же годинник, що і лічильник, то SR-FF буде чекати один цілий тактовий цикл перед зміною стану. По суті, він буде чекати, коли заданий сигнал встигне, перш ніж його подивитися.
Якщо шляхи комбінаторної логіки для заданого сигналу просто прокладені по-різному (спричиняючи різні затримки), поведінка глюка також зміниться. Логіка може спрацювати нормально, але тоді, коли ви змінили щось зовсім не пов'язане, ця логіка спрямовується інакше, і тому помилка спливає. Температура і напруга також змінять час сигналу, і, таким чином, можуть змінити поведінку збою.
Це непевно в часі, тому вам слід уникати засувок у вашій логіці. FF набагато безпечніше використовувати. Ось чому ваш компілятор попереджає про засувки, оскільки помилково зробити засувку легко, і ви, ймовірно, не хочете її там все одно.
Звичайно, іноді потрібні засувки. Ви просто повинні їх використовувати дуже рідко, лише коли це абсолютно потрібно, і тоді ви повинні правильно розробити логіку, щоб не було можливих збоїв.