Перейти к содержанию
    

Как сбросить синхронный триггер без клока?

Откуда растут ноги у столь странного вопроса:

 

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

 

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

 

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

 

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

 

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

 

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

 

Пока писал придумал ещё вариант: счётчик никогда не сбрасывать. А от выходного сигнала отнимать предыдущее измерение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Изменено пользователем gerbity

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Откуда растут ноги у столь странного вопроса:

 

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

 

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

 

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

Если " некая внешняя частота" ниже чем может быть частота в кристалле, то сделайте CDC и системный клок и от него работайте...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

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

Сброс делать так -перетактировать секундный импульс на системную частоту и выделить фронт.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Пока писал придумал ещё вариант: счётчик никогда не сбрасывать. А от выходного сигнала отнимать предыдущее измерение.

Нормальный вариант. Но сначала надо обязательно пересинхронизировать измеряемый сигнал двумя триггерами.

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

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

Откуда растут ноги у столь странного вопроса:

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

 

Само собой можно поставить триггеры с асинхронным сбросом и не париться.

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

 

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

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

 

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

Пока писал придумал ещё вариант: счётчик никогда не сбрасывать. А от выходного сигнала отнимать предыдущее измерение.

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

 

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

Если клок произвольный и может отсутствовать то только асинхронный сброс.

 

Если еще и частота выше системной то есть несколько вариантов счета - включая полностью асинхронный счетчик :wacko:

В этом случае лимит только физические ограничения на макс. частоту на пин и тригер.

 

Успехов! Rob.

 

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если еще и частота выше системной то есть несколько вариантов счета - включая полностью асинхронный счетчик :wacko:

В этом случае лимит только физические ограничения на макс. частоту на пин и тригер.

Сдвиговый регистр и дешифратор к нему. Это не требует переносов и может быть быстрее.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

 

 

Если " некая внешняя частота" ниже чем может быть частота в кристалле, то сделайте CDC и системный клок и от него работайте...
Внешняя частота выше рабочей. Плюс может отсутствовать.

 

 

Нормальный вариант. Но сначала надо обязательно пересинхронизировать измеряемый сигнал двумя триггерами.
В этом нет необходимости так как циклограмма позволяет считывать данные через некоорое (большое время) после перевода CE в ноль.

 

 

Наверное частотомер ваяете.
Простенький - простенький. Для целей индикации.
Костыль BUGCTRL - выгляди не очень - но работать будет (но опять же есть ограничения - не потанцуешь :) ).
Хватит и обычной логики. DSP блочёк имеет один клоковый пин и его можно вести как угодно. Хуже не станет :)
Если клок произвольный и может отсутствовать то только асинхронный сброс.
:))) Вот и пример того где отказаться от асинхронности нельзя.
Если еще и частота выше системной то есть несколько вариантов счета - включая полностью асинхронный счетчик :wacko:

В этом случае лимит только физические ограничения на макс. частоту на пин и тригер.

Классику я знаю. Хотелось обсудить альтернативные варианты.

 

Сдвиговый регистр и дешифратор к нему. Это не требует переносов и может быть быстрее.
А можно поподробнее что это за фокус? Счётчик Джонсона? Так он же триггеры жрёт что не в себя.
Изменено пользователем MegaVolt

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если не секрет куда его поставить?
Простите, два конечно же. При передачи любых сигналов (в том числе и ресетов) из одного частотного домена в другой необходимо их дважды пересинхронизировать. Это обязательно. Вот выкладываю картинку, как это сделать.

sinc_rst.jpg

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

 

Выложу ка я пару интересных книжечек, как правильно делать всякого такого рода вещи.

CummingsSNUG2001SJ_AsyncClk.pdf

CummingsSNUG2002SJ_Resets.pdf

Изменено пользователем gerbity

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А можно поподробнее что это за фокус? Счётчик Джонсона? Так он же триггеры жрёт что не в себя.

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

 

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

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

Преимущество в том, что сдвиг быстрее счета и там "ближние" интерконнекты, а в Ксайлинксе вообще можно взять SRL - это одна ячейка...

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Приветствую!

 

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

 

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

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

Преимущество в том, что сдвиг быстрее счета и там "ближние" интерконнекты, а в Ксайлинксе вообще можно взять SRL - это одна ячейка...

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

Но увы - для регистра тут опять встает изначальный вопрос TC - все равно нужен асинхронный сброс :laughing:

 

Успехов! Rob.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

При передачи любых сигналов (в том числе и ресетов) из одного частотного домена в другой необходимо их дважды пересинхронизировать.
Это я знаю :))) Вопрос то был в том что входного клока нет. И соответственно ни синхронный ресет не сработает ни синхронизатор работать не будет. За книжечки спасибо :)

 

 

Если делаете быстрый счетчик, то там будут параллельные переносы. А они жрут много логики и интерконнектов.
Там не настолько большие частоты чтобы делать подобные хитрости. Плюс изначально хотел делать на DSPешном блочке. А там 48 бит на ура получаются :)

 

Но увы - для регистра тут опять встает изначальный вопрос TC - все равно нужен асинхронный сброс :laughing:
Ага :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это я знаю :))) Вопрос то был в том что входного клока нет. И соответственно ни синхронный ресет не сработает ни синхронизатор работать не будет.

Ну это уже зависит от логики работы устройства. Может быть и нет смысла сбрасывать счетчик, если он все равно заморожен в отсутствии клока? А при такой схеме счетчик сбросится автоматически, как только появится клок. Если логика работы противоречит такому поведению, то можно поступить как советовали выше - пересинхронизировать внешний клок на внутреннюю частоту (также через 2 триггера), и работать полностью в одном частотном домене. Тут проблем вообще не будет, но это нормально будет работать, только если внутренний клок хотя бы в несколько раз выше внешнего.

Изменено пользователем gerbity

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну это уже зависит от логики работы устройства. Может быть и нет смысла сбрасывать счетчик, если он все равно заморожен в отсутствии клока? А при такой схеме счетчик сбросится автоматически, как только появится клок. Если логика работы противоречит такому поведению, то можно поступить как советовали выше - пересинхронизировать внешний клок на внутреннюю частоту (также через 2 триггера), и работать полностью в одном частотном домене. Тут проблем вообще не будет, но это нормально будет работать, только если внутренний клок хотя бы в несколько раз выше внешнего.
Ага. Всё верно :)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...