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

E-mail Печать PDF

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. Элементы комбинированной логики. Счетчик.

 

Tags:
 

Комментарии 

 
+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

Подписка RSS

marsohod.org - лента

Последние комментарии: