Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как сбросить синхронный триггер без клока?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
MegaVolt
Откуда растут ноги у столь странного вопроса:

Есть синхронный счётчик на тактовый вход которого заведена некая внешняя частота. На CE заведён импульс 1с. В результате имеем простейший частотомер. Сброс и вычитывание результата идут от опорной частоты.

Собственно в чём проблема. Сброс срабатывает только при наличии внешней частоты и не срабатывает при её отсутствии.

Как решают подобные вопросы?

Само собой можно поставить триггеры с асинхронным сбросом и не париться. Только вот очень мне понравилось делать большие счётчики на DSPэщных блочках. А они только синхронные.

Решение в лоб - подмешать во входную тактовую внутренний клок на время сброса тоже вариант. Но какой то он не очень красивый.

Собственно вопрос: как принято решать подобные проблемы?

Пока писал придумал ещё вариант: счётчик никогда не сбрасывать. А от выходного сигнала отнимать предыдущее измерение.
gerbity
Вообще говоря клоки и ресеты - это как говорится святая корова, и без серьезной необходимости (ну очень серьезной) лучше их лишний раз не модифицировать и не подмешивать. Так что в этом случае поставите уж один асинхронный триггер и не мучайте клок, а то проблем не оберетесь.
iosifk
Цитата(MegaVolt @ Nov 9 2015, 11:03) *
Откуда растут ноги у столь странного вопроса:

Есть синхронный счётчик на тактовый вход которого заведена некая внешняя частота. На CE заведён импульс 1с. В результате имеем простейший частотомер. Сброс и вычитывание результата идут от опорной частоты.

Собственно в чём проблема. Сброс срабатывает только при наличии внешней частоты и не срабатывает при её отсутствии.

Как решают подобные вопросы?

Если " некая внешняя частота" ниже чем может быть частота в кристалле, то сделайте CDC и системный клок и от него работайте...
Bad0512
Цитата(MegaVolt @ Nov 9 2015, 14:03) *
Собственно вопрос: как принято решать подобные проблемы?

Вся внутренняя работа ПЛИС должна быть от отдельного независимого клока. Входной измеряемый сигнал стробировать внутренним клоком и потом уже делать все измерения на внутренней системной частоте. Иначе - вечные глюки. При этом верхняя измеряемая частота будет не более половины от системной. Зато всё стабильно и предсказуемо.
Сброс делать так -перетактировать секундный импульс на системную частоту и выделить фронт.

Shivers
Цитата(MegaVolt @ Nov 9 2015, 11:03) *
Пока писал придумал ещё вариант: счётчик никогда не сбрасывать. А от выходного сигнала отнимать предыдущее измерение.

Нормальный вариант. Но сначала надо обязательно пересинхронизировать измеряемый сигнал двумя триггерами.
Заведите вотч дог, который следит за изменениями на выходах счетчика - если значения долго не менялись, значит значение счетчика сохраняем в константу, и затем эту константу будем вычитать в последующем измерении.
RobFPGA
Приветствую!

Цитата(MegaVolt @ Nov 9 2015, 10:03) *
Откуда растут ноги у столь странного вопроса:

Наверное частотомер ваяете.

Цитата(MegaVolt @ Nov 9 2015, 10:03) *
Само собой можно поставить триггеры с асинхронным сбросом и не париться.

Самое правильное решение

Цитата(MegaVolt @ Nov 9 2015, 10:03) *
Решение в лоб - подмешать во входную тактовую внутренний клок на время сброса тоже вариант. Но какой то он не очень красивый.

Костыль BUGCTRL - выгляди не очень - но работать будет (но опять же есть ограничения - не потанцуешь sm.gif ).

Цитата(MegaVolt @ Nov 9 2015, 10:03) *
Собственно вопрос: как принято решать подобные проблемы?
Пока писал придумал ещё вариант: счётчик никогда не сбрасывать. А от выходного сигнала отнимать предыдущее измерение.

Можно и так но тоже есть свои неудобства.

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

Если еще и частота выше системной то есть несколько вариантов счета - включая полностью асинхронный счетчик wacko.gif
В этом случае лимит только физические ограничения на макс. частоту на пин и тригер.

Успехов! Rob.



iosifk
Цитата(RobFPGA @ Nov 9 2015, 11:49) *
Если еще и частота выше системной то есть несколько вариантов счета - включая полностью асинхронный счетчик wacko.gif
В этом случае лимит только физические ограничения на макс. частоту на пин и тригер.

Сдвиговый регистр и дешифратор к нему. Это не требует переносов и может быть быстрее.
MegaVolt
Цитата(gerbity @ Nov 9 2015, 11:13) *
Так что в этом случае поставите уж один асинхронный триггер и не мучайте клок, а то проблем не оберетесь.
Если не секрет куда его поставить?


Цитата(iosifk @ Nov 9 2015, 11:18) *
Если " некая внешняя частота" ниже чем может быть частота в кристалле, то сделайте CDC и системный клок и от него работайте...
Внешняя частота выше рабочей. Плюс может отсутствовать.


Цитата(Shivers @ Nov 9 2015, 11:35) *
Нормальный вариант. Но сначала надо обязательно пересинхронизировать измеряемый сигнал двумя триггерами.
В этом нет необходимости так как циклограмма позволяет считывать данные через некоорое (большое время) после перевода CE в ноль.


Цитата(RobFPGA @ Nov 9 2015, 11:49) *
Наверное частотомер ваяете.
Простенький - простенький. Для целей индикации.
Цитата
Костыль BUGCTRL - выгляди не очень - но работать будет (но опять же есть ограничения - не потанцуешь sm.gif ).
Хватит и обычной логики. DSP блочёк имеет один клоковый пин и его можно вести как угодно. Хуже не станет sm.gif
Цитата
Если клок произвольный и может отсутствовать то только асинхронный сброс.
sm.gif)) Вот и пример того где отказаться от асинхронности нельзя.
Цитата
Если еще и частота выше системной то есть несколько вариантов счета - включая полностью асинхронный счетчик wacko.gif
В этом случае лимит только физические ограничения на макс. частоту на пин и тригер.
Классику я знаю. Хотелось обсудить альтернативные варианты.

Цитата(iosifk @ Nov 9 2015, 11:52) *
Сдвиговый регистр и дешифратор к нему. Это не требует переносов и может быть быстрее.
А можно поподробнее что это за фокус? Счётчик Джонсона? Так он же триггеры жрёт что не в себя.
gerbity
Цитата(MegaVolt @ Nov 9 2015, 12:09) *
Если не секрет куда его поставить?
Простите, два конечно же. При передачи любых сигналов (в том числе и ресетов) из одного частотного домена в другой необходимо их дважды пересинхронизировать. Это обязательно. Вот выкладываю картинку, как это сделать.

На выходе у вас получится сигнал сброса, который будет синхронизован с вашим внешним клоком. Платой за подобное использование будет задержка в два такта внешнего клока, которая может влиять на логику работы, но если это критично, то ее можно скомпенсировать. Например сбрасывать ваш счетчик не в ноль а в +2, например.

Выложу ка я пару интересных книжечек, как правильно делать всякого такого рода вещи.
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
iosifk
Цитата(MegaVolt @ Nov 9 2015, 12:09) *
А можно поподробнее что это за фокус? Счётчик Джонсона? Так он же триггеры жрёт что не в себя.

Если делаете быстрый счетчик, то там будут параллельные переносы. А они жрут много логики и интерконнектов.

Берем 2 блока. В каждом сдвиговый регистр, исходно в нем 0. В него задвигаем 1. Например 8 раз. Как только на выходе появится 1, то значит пришло 8 импульсов, которые суммируем в регистр индикации.
Один блок сдвигает, другой суммирует и обнуляется. По окончании работы в одном из блоков будет "хвост", который после обработки можно добавить к сумматору.
Преимущество в том, что сдвиг быстрее счета и там "ближние" интерконнекты, а в Ксайлинксе вообще можно взять SRL - это одна ячейка...
RobFPGA
Приветствую!

Цитата(iosifk @ Nov 10 2015, 10:14) *
Если делаете быстрый счетчик, то там будут параллельные переносы. А они жрут много логики и интерконнектов.

Берем 2 блока. В каждом сдвиговый регистр, исходно в нем 0. В него задвигаем 1. Например 8 раз. Как только на выходе появится 1, то значит пришло 8 импульсов, которые суммируем в регистр индикации.
Один блок сдвигает, другой суммирует и обнуляется. По окончании работы в одном из блоков будет "хвост", который после обработки можно добавить к сумматору.
Преимущество в том, что сдвиг быстрее счета и там "ближние" интерконнекты, а в Ксайлинксе вообще можно взять SRL - это одна ячейка...

Можно проще - входной делитель частоты на кольцевом сдвиговом регистре с бегущей 1 или инверсией. А затем уже можно и на системный клок переходить и считать в DSP sm.gif
Но увы - для регистра тут опять встает изначальный вопрос TC - все равно нужен асинхронный сброс laughing.gif

Успехов! Rob.
MegaVolt
Цитата(gerbity @ Nov 10 2015, 10:52) *
При передачи любых сигналов (в том числе и ресетов) из одного частотного домена в другой необходимо их дважды пересинхронизировать.
Это я знаю sm.gif)) Вопрос то был в том что входного клока нет. И соответственно ни синхронный ресет не сработает ни синхронизатор работать не будет. За книжечки спасибо sm.gif


Цитата(iosifk @ Nov 10 2015, 11:14) *
Если делаете быстрый счетчик, то там будут параллельные переносы. А они жрут много логики и интерконнектов.
Там не настолько большие частоты чтобы делать подобные хитрости. Плюс изначально хотел делать на DSPешном блочке. А там 48 бит на ура получаются sm.gif

Цитата(RobFPGA @ Nov 10 2015, 12:27) *
Но увы - для регистра тут опять встает изначальный вопрос TC - все равно нужен асинхронный сброс laughing.gif
Ага sm.gif
gerbity
Цитата(MegaVolt @ Nov 10 2015, 12:32) *
Это я знаю sm.gif)) Вопрос то был в том что входного клока нет. И соответственно ни синхронный ресет не сработает ни синхронизатор работать не будет.

Ну это уже зависит от логики работы устройства. Может быть и нет смысла сбрасывать счетчик, если он все равно заморожен в отсутствии клока? А при такой схеме счетчик сбросится автоматически, как только появится клок. Если логика работы противоречит такому поведению, то можно поступить как советовали выше - пересинхронизировать внешний клок на внутреннюю частоту (также через 2 триггера), и работать полностью в одном частотном домене. Тут проблем вообще не будет, но это нормально будет работать, только если внутренний клок хотя бы в несколько раз выше внешнего.
MegaVolt
Цитата(gerbity @ Nov 10 2015, 15:20) *
Ну это уже зависит от логики работы устройства. Может быть и нет смысла сбрасывать счетчик, если он все равно заморожен в отсутствии клока? А при такой схеме счетчик сбросится автоматически, как только появится клок. Если логика работы противоречит такому поведению, то можно поступить как советовали выше - пересинхронизировать внешний клок на внутреннюю частоту (также через 2 триггера), и работать полностью в одном частотном домене. Тут проблем вообще не будет, но это нормально будет работать, только если внутренний клок хотя бы в несколько раз выше внешнего.
Ага. Всё верно sm.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.