Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Остановка счетчика
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
all505
Не получается остановить счётчик после тога как он досчитает до 320!
В других симуляторах все работает, но в quatus-e ни в какую не хочет…
Плюс еще появляется не понятные провалы при переходе счётчика с 255>256?
iosifk
Цитата(all505 @ Aug 11 2014, 18:10) *
Не получается остановить счётчик после тога как он досчитает до 320!
В других симуляторах все работает, но в quatus-e ни в какую не хочет…
Плюс еще появляется не понятные провалы при переходе счётчика с 255>256?

Беда вовсе не в Квартусе... А догадайтесь в ком?
Это абсолютно неправильный путь и он называется асинхронное проектирование.
Если хотите подробнее, то могу по скайпу рассказать...
all505
Сильно не ругать т.к. опыта программирования fpga очень мало.
Если в двух словах как правильнее?
Кстати это же схема в 3032 работала нормально.
Jackov
Цитата(all505 @ Aug 11 2014, 17:44) *
Если в двух словах как правильнее?

Как правильно смотреть тут.
http://youtu.be/ZKpz9PFFh4Y
all505
Попробовал такой вариант – работает!
Но правильный ли он?
Пошел смотреть видео…
iosifk
Цитата(Jackov @ Aug 11 2014, 19:00) *
Как правильно смотреть тут.
http://youtu.be/ZKpz9PFFh4Y

Нет, это старая технология для рассыпухи... Это не для ПЛИС!
Смотреть сюда:
http://habrahabr.ru/post/137643/

Или у меня на сайте "Краткий Курс"...
Jackov
Цитата(all505 @ Aug 11 2014, 18:09) *
Но правильный ли он?
Пошел смотреть видео…

Тоже нет.
Про правила проектирования цифровых синхронных схем смотреть тут с 14:40
http://www.youtube.com/watch?v=uW8DPE6TRxM...etailpage#t=877

Ошибочка вышла, первая видюшка про счётчики тут
http://youtu.be/XzkkSdmNszs

Цитата(iosifk @ Aug 11 2014, 18:15) *
Нет, это старая технология для рассыпухи... Это не для ПЛИС!

Раскройте, пожалуйста. Чем для ПЛИС не годится, тем что не HDL?
Ну так для начинающего в самый раз, суть происходящего как она есть, без замыливания HDL-кодом.
count_enable
Если очень вкратце, то внутри плис не суповой набор из логических элементов, а сложная структура, которая может эмулировать логические схемы. При этом она эмулирует не абстрактные матмодели, поэтому у нее есть временные характеристики, ограничения и т.д. К счастью софт для синтеза очень умный и учитывает все эти показатели. Поэтому в 99% случаев он синтезирует схемы гораздо лучше и производительнее чем ручная отрисовка. Не говоря уж о том что работать с кодом в проектах сложнее счётчика значительно легче.
eugen_pcad_ru
Выход счетчика звенит, что Вы и наблюдаете. Поставьте по выходу регистр.
P.S.: То, что годилось для россыпи, для ПЛИС обычно не подходит. И дело тут в том, что логика на россыпи работала с учетом "размывания" фронтов в связи в физическими резистивно-емкостными характеристиками выводов микросхем, печатных дорожек и т.п. И всё замечательно работало. А вот когда возникает желание впихнуть всё в один корпус, часто возникают проблемы, аналогичные Вашим.
Jackov
Цитата(count_enable @ Aug 11 2014, 19:07) *
Если очень вкратце, то внутри плис не суповой набор из логических элементов, а сложная структура, которая может эмулировать логические схемы. При этом она эмулирует не абстрактные матмодели, поэтому у нее есть временные характеристики, ограничения и т.д. К счастью софт для синтеза очень умный и учитывает все эти показатели. Поэтому в 99% случаев он синтезирует схемы гораздо лучше и производительнее чем ручная отрисовка. Не говоря уж о том что работать с кодом в проектах сложнее счётчика значительно легче.

Это всё понятно. В данном случае есть затруднения с синхронным проектированием, а это основа основ, и при не понимании этих базовых понятий как-то странно предлагать начинающему разбираться в HDL.
Кроме того, если не представлять как схема может выглядеть на рассыпухе сложно написать качественный код, имхо.
count_enable
В рассыпухе свои законы. Первооснова это булева алгебра и абстрактная цифровая логика. Не имею ничего прочив лабораторных на 74 серии, они очень наглядны и полезны, но копировать схемы с рассыпухи в плис не стоит.

Кстати, очень советую превосходную всеобьемлюющую книгу "Digital Design and Computer Architecture". В ней есть темы от двоичной арифметики и до написания полноценного процессора на HDL.
Jackov
Цитата(count_enable @ Aug 11 2014, 19:23) *
но копировать схемы с рассыпухи в плис не стоит.

Но почему не стоит, если данная "рассыпуха" не противоречит законам построения схем на плисах? Лишь только потому-что это дольше по времени чем HDL-код?
all505
В общем, посмотрел видео: везде намек на синхронность, но не пойму где у меня не синхронность? Сам счетчик?
Пока остановился на таком варианте – судя по симулятору, работает правильно?
Плисина оказалась сложнее, чем я думал.
Jackov
Цитата(all505 @ Aug 11 2014, 19:37) *
В общем, посмотрел видео: везде намек на синхронность, но не пойму где у меня не синхронность? Сам счетчик?

В данном случае комбинационная схема на тактовом входе. А это недопустимо.
all505
Т.е. счетчик нужно останавливать другими путями, но только не разрывая тактовый сигнал?
count_enable
Вместо комб. схем на клоке, сделайте вход CE и управляйте через него.
all505
А если мне нужно: досчитать до 320, остановить счетчик и сбросить, переключить вход “clock” счетчика к другому тактовому генератору (медленному). Как поступить?
Jackov
Цитата(all505 @ Aug 11 2014, 19:43) *
Т.е. счетчик нужно останавливать другими путями, но только не разрывая тактовый сигнал?

Да, на тактовый вход сигнал должен идти с генератора (или от куда он там у Вас идёт) напрямую.

Цитата(count_enable @ Aug 11 2014, 19:44) *
Вместо комб. схем на клоке, сделайте вход CE и управляйте через него.

Вот эта галка
Нажмите для просмотра прикрепленного файла
all505
Со счетчиком вроде разобрался.
Последний вопрос: как правильнее или на чем организовать делитель тактовой частоты?
Что бы можно было управлять скоростью счётчика!
Jackov
Цитата(all505 @ Aug 11 2014, 20:10) *
Последний вопрос: как правильнее или на чем организовать делитель тактовой частоты?
Что бы можно было управлять скоростью счётчика!

Вообще так делать не рекомендуется, поскольку счётчик он же не сам по себе, он чем-то управляет, и наверняка он управляет какими-то регистровыми устройствами.
Если Вы переключите счётчик он у Вас начнёт работать асинхронно с устройствами которыми он управляет, их тоже надо переключать. Короче куча проблем возникает.
Меня могут заругать, ну да ладно...
Сигнал С - искомый изменяемый тактовый сигнал.
Мультиплексор переключать синхронно сигналу CLK.
Схему не проверял, но должна работать.
А вообще, на сколько я знаю, существует специальная мегафункция переключающая клоки корректно, но не во всех плисинах такие есть, сам ни когда не использовал.
Нажмите для просмотра прикрепленного файла
all505
А если так?
Jackov
Цитата(all505 @ Aug 11 2014, 20:54) *
А если так?

непонятно чё такое MR, и что это за элемент с Y.
Если Y выход, то как он может объединятся Q0?
И самое главное если элемент с Y - комбинационная схема, то не годится.
У Вас практическая задача, или академическая?
iosifk
Цитата(Jackov @ Aug 11 2014, 19:40) *
Ошибочка вышла, первая видюшка про счётчики тут
http://youtu.be/XzkkSdmNszs

Раскройте, пожалуйста. Чем для ПЛИС не годится, тем что не HDL?
Ну так для начинающего в самый раз, суть происходящего как она есть, без замыливания HDL-кодом.


Еще раз! То, что годится для рассыпухи не работает в ПЛИС, так что не надо нагружать ТС ненужными примерами.
И дело не в HDL, дело совсем в другом.
Есть понятие клокового дерева. Это значит, что по этому дереву разветвляются тактовые и они идут с минимальным разбегом.
И реальных клоковых деревьев в кристалле мало, потому они ценный ресурс и его надо беречь. А нужна "другая" частота - делите сигнал разрешения и триггер будет работать только в нужное время...
Поэтому на ПЛИС - только синхронное проектирование, и коммутация клока - это повод для увольнения...
А на рассыпухе выход одного триггера подается на вход другого. И организуются асинхронные цепи... Поэтому нельзя смотреть на рассыпуху и бездумно переносить ее в ПЛИС...
Да еще и компилятор добавит забот. Часть счетчиков он сделает быстрыми, а может и сделать медленными... И тогда - "не получается"....

Я веду занятия со студентами и эта тема - одна из важнейших. Так что если хотите присоединиться - пишите.
all505
Немного неправильно нарисовал.
Слева счетчик (MR – сброс), справа мультиплексор
Задача практическая.

Цитата
И самое главное если элемент с Y - комбинационная схема, то не годится.

Буду тогда пробовать ваш вариант
iosifk
Цитата(all505 @ Aug 11 2014, 22:31) *
Немного неправильно нарисовал.
Слева счетчик (MR – сброс), справа мультиплексор
Задача практическая.


Буду тогда пробовать ваш вариант

Упорный в нежелании учиться...
Больше сюда писать не буду...
all505
Цитата
Упорный в нежелании учиться...

У меня просто идеи закончились!
Хотя вы уже подкинули идею с сигналом разрешения…
Jackov
Цитата(iosifk @ Aug 11 2014, 21:25) *
Поэтому на ПЛИС - только синхронное проектирование, и коммутация клока - это повод для увольнения...

А где Вы видели в тех видюшках коммутацию клока?
Цитата(iosifk @ Aug 11 2014, 21:25) *
А на рассыпухе выход одного триггера подается на вход другого. И организуются асинхронные цепи...

Выход Q одного триггера подан на вход D другого триггера, оба тактируются одним сигналом, где здесь асинхронные цепи?
all505
Все последняя попытка… rolleyes.gif
canny
Цитата(iosifk @ Aug 11 2014, 21:25) *
И реальных клоковых деревьев в кристалле мало, потому они ценный ресурс и его надо беречь. А нужна "другая" частота - делите сигнал разрешения и триггер будет работать только в нужное время...


Тогда для примера.

Есть частота 50 МГц. И нужно тактировать схему на кратной частоте. Например, 12,5 МГц. Т.е. поделенной на 4. Правильно заводить на тактовый вход сигнал 50 МГц, а на вход разрешения - сигнал clk25 МГц AND clk12,5 МГц?

Тогда на рисунке будет срабатывать триггер только по фронту в 50 нс.

Правильно?

toshas
Забудьте про смешивание синхро-сигнала с чем-то еще!

Сделайте счетчик до 4х и на 4м такте ставьте Clock Enable (CE) на триггер.

Входные частоты и счетчика и триггера остаются неизменными - 50 Мгц, но срабатывает он только каждый 4х такт.

Если далее идет сложная схема, с большим временем распростанения сигнала (много уровеней логики) и она не укладывается во временные ограничения 50 Мгц, надо использовать multi-cycle path ограничения.
SM
Цитата(toshas @ Aug 13 2014, 00:13) *
Забудьте про смешивание синхро-сигнала с чем-то еще!


Ну не надо так категорически.... Есть случаи (не тот, что у ТС, когда клоки кратные, от одного источника и блок мелкий), когда без этого не обойтись. Например, если этот тактовый сигнал надо вывести наружу ПЛИС, или он тактирует ОЧЕНЬ большой блок (например, ядро процессора), или это прототип ASIC, где clock gating это совершенно обычное явление. Если соблюдать определенные правила, зная, что делаешь, то никаких проблем от этого не будет. Просто надо изучить все вопросы, связанные с построением безглитчевых коммутаторов тактовых сигналов, и все будет ОК.

PS
Повторюсь еще раз для всяких троллей, что это не для данного конкретного случая, где надо сформировать правильный сигнал разрешения счета, а "вообще", то есть, что не надо "забывать про смешивание". Каждому случаю - свое оптимальное решение.
vadimp61
Цитата(iosifk @ Aug 11 2014, 22:25) *
Еще раз! То, что годится для рассыпухи не работает в ПЛИС, так что не надо нагружать ТС ненужными примерами.
И дело не в HDL, дело совсем в другом.
Есть понятие клокового дерева. Это значит, что по этому дереву разветвляются тактовые и они идут с минимальным разбегом.
И реальных клоковых деревьев в кристалле мало, потому они ценный ресурс и его надо беречь. А нужна "другая" частота - делите сигнал разрешения и триггер будет работать только в нужное время...
Поэтому на ПЛИС - только синхронное проектирование, и коммутация клока - это повод для увольнения...
А на рассыпухе выход одного триггера подается на вход другого. И организуются асинхронные цепи... Поэтому нельзя смотреть на рассыпуху и бездумно переносить ее в ПЛИС...
Да еще и компилятор добавит забот. Часть счетчиков он сделает быстрыми, а может и сделать медленными... И тогда - "не получается"....

Я веду занятия со студентами и эта тема - одна из важнейших. Так что если хотите присоединиться - пишите.

В приложении схема реализованная на рассыпухе в 2002 году, когда про язык VHDL знали только в IEEE Std 1076-2002.
Схема рабочая, использовалась в сериях MAX3000,MAX7000,ACEX 1K, Cyclone1,2 ну и щас будем пробовать в четвертом.
Тестировалась еще в MAX Baseline, а про квартус слышали только в америке.
ЗЫ. Это работало и на 555-й серии.
ЗЫ.ЗЫ про синхронность полностью согласен. На всю схему только один клок! Дешифрируйте предыдующую кодовую комбинацию и сдвигайте по выходу сначала задним а потом передним фронтом тактовой.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.