Quartus II. Часть4. Елементи комбінованої логіки. Лічильник.
Історично склалося так, що для опису цифрових схем використовуються деякі
елементи, що містять в собі відразу обидва типи логіки, і комбінаторних, і реєстрову.
Тому добре-б, з одного боку, знати їх функціональність, з іншого, знати у що вони будуть відкомпільовані Квартус.
Розглянемо простий приклад, синхронний "SR" -тригер описуваний примітивом "SRFF":
При наявності активного сигналу на вході "S". на виході. по фронту клок, буде встановлена "1".
При наявності активного сигналу на вході "R", на виході. по фронту клок, буде встановлено "0".
При наявності одночасно двох сигналів. по кожному клок, тригер буде змінювати свій стан на протилежне. При відсутності обох сигналів, стан на виході тригера мінятися не буде.
Приблизно така ж комбінаторна логіка і для такої-ж мети (ситуаційна установка регістра в певний стан) буде додана компілятором в мегафункцію "LPM_DFF", якщо у властивостях елементу додати входи "sset" і "sclr" (синхронна установка і синхронний скидання):
При наявності сигналу на вході "sset". все тригера. по фронту клок, буде встановлено в "1".
При наявності сигналу на вході "sclr". все тригера. по фронту клок, буде встановлено в "0".
При відсутності обох сигналів в регістр будуть фіксуватися вхідні дані.
При наявності одночасно двох сигналів "sset" і "sclr", на відміну від примітиву "SRFF",
пріоритет має "sclr", і все тригера буде встановлено в "0".
Ще один приклад комбінованої логіки - лічильник.
Якщо використовувати вже знайомі нам конструкції. простий чотирьохрозрядний
лічильник можна зобразити так:
Як видно зі схеми, працює він у такий спосіб, функція "LPM_ADD_SUB" до наявного на виході регістра "LPM_DFF" числа додає константу "1". Таким чином, по кожному клок тактової частоти, в регістр "LPM_DFF" буде заноситися значення, на 1 перевищує попереднє. Тобто, буде обчислюватися кількість Клоков. Реалізувати точно-таку ж функціональність можна за допомогою мегафункціі "LPM_COUNTER":
Оскільки лічильник - дуже часто використовуваний елемент, опишу деякі властивості
мегафункціі "LPM_COUNTER" більш детально:
входи:
- "Sset" і "sclr" мають таке- ж дію, як і в випадку "LPM_DFF". тобто установка або скидання всіх тригерів.
- "Sload" використовується разом з "data []" і встановлює все тригера в стан, наявне на вході "data []". (Якщо вхід "data []" відсутній, то по "sload" будуть завантажуватися "0"). З цих трьох входів максимальний пріоритет має "sclr", потім "sload", мінімальний - "sset".
- "Updown" - управління напрямком рахунки. У разі якщо "updown" - "1", то по кожному счетному циклу значення лічильника буде збільшуватися. якщо "0" - зменшуватися. Якщо цей вхід відсутній, напрямок рахунку можна задати в параметрі "LPM_DIRECTION" (за замовчуванням - "UP").
- "Clk_en" дозвіл клок. Відсутність активного сигналу на цьому вході забороняє будь-які операції з тригерами.
- "Cnt_en" і "cin" рівноцінні входи. Керують тільки рахунковими циклами і не впливають на операції "sload", "sset" і "sclr".
- Виходи "q []" - власне. біти лічильника. Їх кількість (розрядність) вказується в "LPM_WIDTH"
- Вихід "cout" - перенесення. У разі якщо параметр "LPM_MODULUS" відсутня або дорівнює "0", сигнал "cout" буде активний, якщо на виході лічильника все "1".
Якщо параметр "LPM_MODULUS" має якесь значення, то "cout" буде активний при досягненні лічильником значення на 1 менше ніж в "LPM_MODULUS" і на наступному рахунковому циклі в лічильник буде завантажений "0".
У висновку хочу сказати, що, на мій погляд, інформації, що міститься в цьому невеликому циклі статей досить для реалізації будь-якого проекту для плати Марсохід.
Як за допомогою ПЛІС можна розширити імпульс?
Є 1кГц 2мкс, потрібно 1кГц 50мкс.
не впевнений, що можна дати хороший відповідь на це питання, тому що не цілком ясна задача.
Найпростіший спосіб - це "опитувати" ваш сигнал з дуже високою частотою. Так можна виявити фронт з деякою погрішністю, потім відрахувати заданий число тактів про [censored] й високої частоти і це буде кінець широкого імпульсу. При такому методі, звичайно фаза вихідного широкого імпульсу буде трохи тремтіти щодо вихідного. Зробити розширювач імпульсу зі збереженням фази не просто, якщо взагалі можливо.
Як за допомогою ПЛІС можна розширити імпульс?
Є 1кГц 2мкс, потрібно 1кГц 50мкс.