Quartus II
Результати роботи логічних функцій, вхідні чи кінцеві дані потрібно десь зберігати — загалом потрібні регістри.
Якщо провести аналогію роботи нашого чіпа з кухнею, то, наприклад, чищення картоплі, наливання в каструлю води тощо. - Логічні функції. А каструля, тарілки, ложки тощо – засоби зберігання проміжних чи кінцевих результатів роботи цих функцій.
Як уже було сказано у попередній статті, для реалізації реєстрової логіки в кожному "LE" (логічному елементі) є D-тригер. Він має один вихід і три входи - вхід даних (data), клок (clk) і дозвіл запису (enable).
Працює він в такий спосіб. Якщо є сигнал дозволу записи, то фронту клоку, вхідні дані з'являються на виході і далі залишатимуться незмінними до наступного фронту клоку (тобто. зберігатися).
За відсутності дозволу запису дані на виході не змінюватимуться. Це, власне, і є регістр на 1 біт.
Для реалізації в схемотехнічному дизайні в середовищі Altera Quartus II можна використовувати примітив "DFFE", або його окремий випадок (коли запис дозволено завжди) "DFF":
Так само, як і у всіх попередніх випадках, щоб не займатися вимальовуванням кожного тригера окремо, можна використовувати мегафункції.
Мегафункція LPM_DFF - паралельний регістр:

Мегафункція LPM_SHIFTREG - зсувний (послідовний) регістр:

На відміну від паралельного регістру, тут "shiftin" є входом для наймолодшого тригера, а вихід цього тригера є входом для наступного і т.д. Сигнали клаку та дозволу запису, так само як і в паралельному регістрі, длявсіх тригерів загальні.
Ну і далі деякі рекомендації (на цей раз - настійні):
- Не використовуйте як клаптик вихід комбінаторної логіки. Якою б простою не була функція, що реалізується цією логікою, на її виконання необхідно якийсь час, протягом якого на виході буде невизначений стан і може статися хибне спрацювання тригера. Клок можна взяти з вхідного піна (якщо до нього ззовні підключений тактовий генератор), з тактового внутрішнього генератора або з виходу якогось іншого тригера.
- Не використовуйте в проектах асинхронні сигнали (на примітивах це входи з кружальцями згори і знизу, а на мегафункціях сигнали "aclr" і "aset"), за одним винятком, на якому я хочу зупинитися докладніше. Наш чіп (так, мабуть, і всі інші ПЛІС), крім самої програмованої логіки, містять ще ряд службових функцій. Одна з них "Power-On Reset". Докладно про все це написано в документації, а тут хочу зазначити, що одна з дій, які ця функція виконує - встановлення всіх тригерів програмованої логіки в один початковий стан ("0"). Тому хочу особливо відзначити, що стартувати ваш проект, після включення харчування, завжди буде з "нульовим" початковим станом всіх регістрів. Для коректного старту вашого проекту потрібно обов'язково враховувати. Бувають випадки, коли проект (або якийсь його фрагмент) розробляється для подальшого використання, наприклад, в ASIC або взагалі не відомо де, а ПЛІС використовується тільки для його налагодження. У цьому випадку, подбати про початковий стан регістрів потрібно у самому проекті. Зазвичай це реалізується об'єднанням асинхронних скидів всіх триггерів проекту на один загальний сигнал, який-небудь " GLOBAL_RESET " .
У наступній статті – Частина4.Елементи комбінованої логіки Лічильник.