МАРСОХОД

Open Source Hardware Project

Quartus II. Часть3. Регистровая логика.

Altera Quartus II

Результаты работы логических функций, входные или конечные данные нужно где-то хранить — в общем нужны регистры.

Если провести аналогию работы нашего чипа с кухней, то, например, чистка картошки, наливание в кастрюлю воды и т.д. - логические функции. А  кастрюля, тарелки, ложки и т.д - средства хранения промежуточных или конечных результатов работы этих функций.

Как уже было сказано в предыдущей статье, для реализации регистровой логики в каждом "LE" (логическом элементе) есть D-триггер. Он имеет один выход и три входа - вход данных (data), клок (clk) и разрешение записи (enable).

Работает он следующим образом. Если присутствует сигнал разрешения записи, то по фронту клока,  входные данные появляются на выходе и далее будут оставаться неизменными до следующего фронта клока (т.е. храниться).

При отсутствии разрешения записи данные на выходе меняться не будут. Это, собственно , и есть регистр на 1 бит.

Для реализации в схемотехническом дизайне в среде Altera Quartus II можно использовать примитив "DFFE", или его частный случай (когда запись разрешена всегда) "DFF":

Тригер в схеме Altera Quartus II

Так же, как и во всех предыдущих случаях, чтобы не заниматься вырисовыванием каждого триггера в отдельности, можно использовать мегафункции.

Мегафункция LPM_DFF - параллельный регистр:
Мегафункция параллельного регистра
Здесь "data[]" - входы всех триггеров, "q[]" их выходы, а сигналы клока и разрешения записи для всех триггеров общие.

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

Мегафункция сдвигового регистра

В отличие от параллельного регистра , здесь "shiftin" является входом для самого младшего триггера, а выход этого триггера является входом для следующего и т.д. Сигналы клока и разрешения записи, так-же как и в параллельном регистре, для всех триггеров общие.

Ну и далее , некоторые рекомендации (на этот раз - настоятельные):

  • Не используйте в качестве клока выход комбинаторной логики. Какой-бы простой не была функция, реализуемая этой логикой, на ее выполнение необходимо какое-то время, в течении которого на выходе будет неопределенное состояние и может произойти ложное срабатывание триггера. Клок можно взять с входного пина (если к нему с наружи подключен тактовый генератор), с внутреннего тактового генератора или с выхода какого-то другого триггера.
  • Не используйте в проектах асинхронные сигналы (на примитивах это входы с кружочками сверху и с низу, а на мегафункциях сигналы "aclr" и "aset"), за одним исключением, на котором я хочу остановиться подробнее.
    Наш чип ( да, наверное, и  все другие ПЛИС ), кроме самой программируемой логики, содержат в себе еще ряд служебных функций. Одна из них "Power-On Reset". Подробно обо всем этом написано в документации, а здесь хочу отметить, что одно из действий, которые эта функция выполняет - установка всех триггеров программируемой логики в одно начальное состояние(в "0"). Поэтому, хочу особо отметить, что стартовать ваш проект, после включения питания, всегда будет с "нулевым" начальным  состоянием всех регистров. Для корректного старта вашего проекта это нужно обязательно учитывать. Бывают случаи, когда проект ( или какой-то его фрагмент ) разрабатывается для дальнейшего использования, например , в ASIC или вообще не известно где, а  ПЛИС используется только для его отладки. В этом случае, позаботится о начальном состоянии  регистров нужно в самом проекте. Обычно это реализуется объединением асинхронных сбросов всех тригеров проекта в один общий сигнал, какой-нибудь "GLOBAL_RESET".

В следующей статье - Часть4. Элементы комбинированной логики. Счетчик.

 

Комментарии  

0 #10 Ю р и й 22.07.2016 06:56
В 13м еще был визард, но уже небыло "LPM_DFF", ставьте просто "dff", только следите за тем, что-бы разрядность
шины на входе и выходе была одинаковой.
0 #9 Antonio 21.07.2016 13:48
Самое ужасное, что у меня в 13м квартусе меню IP Catalog отсутствует(еще раньше пытался найти его) :sad:
0 #8 Ю р и й 21.07.2016 12:31
Мегафункции в новом квартусе ставятся через "IP Catalog" в меню "Tools", но какраз "LPM_DFF" там почему-то нет :-|
0 #7 Antonio 21.07.2016 11:38
Добрый день! Подскажите что делать если "отвалился" мегавизард?! В схематике выбираю элемент LPM_DFF, раньше открывался мегавизард, теперь галочку в меню не установить, а элемент можно поставить только целиком(как у вас в статье чуть выше)...ПС можно жить и так, но для наглядности лишнее не нужно! :sigh:
0 #6 Дмитрий2 19.10.2014 11:53
Цитирую nckm:
(ИМХО - это баг квартуса).

Ок, спасибо, помогло, а я думал это я что-то не то делаю.
Значит клок подключаем к любой ножке выделенной для клок(обозначени е в пин планер в виде меандра в квадрате), при этом не использованные ножки ввода тактовой частоты можем использовать как обычные ин-ауты?
0 #5 nckm 19.10.2014 03:32
Цитирую Дмитрий2:
Объясните пожалуйста поподробнее, как в схему включаются сигналы клок, глобал ресет, и прочие, а то в меню выбора, ин, аут, бидирекшен и всё... :sad:
А заодно как в этом графическом дизайне назначить подключение входов-выходов к конкретным ножкам микросхемы...
Спасибо.


Назначения выводов к конкретным ножкам микросхемы делаются в меню Assignments => Assignment Editor. В графическом редакторе можно сделать клик правой кнопкой мыши на выводе, в выпадающем меню Locate => Locate in Assignment Editor. Если пункт меню не доступен - сперва откомпилируйте проект (ИМХО - это баг квартуса).
0 #4 Дмитрий2 18.10.2014 20:38
Объясните пожалуйста поподробнее, как в схему включаются сигналы клок, глобал ресет, и прочие, а то в меню выбора, ин, аут, бидирекшен и всё... :sad:
А заодно как в этом графическом дизайне назначить подключение входов-выходов к конкретным ножкам микросхемы...
Спасибо.
+2 #3 Petr 29.03.2011 12:23
Как же хорошо, что я учусь на ВТ =)
В нашем предмете "Теория автоматов" многие моменты были рассмотрены... И триггеры, и асинхронная логика, и всякие там счетчики-регист ры и прочие "ужасы" аля автомат Мура =)
Спасибо сайту =) Это он дал мне пинок к моему дальнейшему изучению данной темы =) Я-то думал, что этот предмет достаточно бесполезный для меня, однако, попробовав поработать с ПЛИС, понял, что на самом деле без него никуда =)
0 #2 Ю р и й 28.03.2011 14:02
Цитирую Константин:
А почему вы не рекомендуете использовать асинхронные сигналы. Кстати, что именно вы имеете в виду под асинхронными сигналами? Асинхронные входы триггеров или сигналы, которые выходят из LUT минуя триггер?

Вы правы, я как-то невнятно выразился, конечно я имел ввиду асинхронные входы триггеров.
А по теме - в среде разработчиков ПЛИС бытует понятие "синхронный дизайн". Что это
такое , что в нем можно , а что нельзя и почему - тема отдельной ( и не маленькой ) статьи.
А поскольку данный цикл статей "для начинающих" то к "синхронному дизайну" следует
привыкать "с детства".
0 #1 Константин 28.03.2011 09:09
А почему вы не рекомендуете использовать асинхронные сигналы. Кстати, что именно вы имеете в виду под асинхронными сигналами? Асинхронные входы триггеров или сигналы, которые выходят из LUT минуя триггер?

Добавить комментарий


Защитный код
Обновить


GitHub YouTube Twitter
Вы здесь: Начало Статьи о разном Quartus II. Часть3. Регистровая логика.