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

Счетчики с большой разрядностью

Всем привет!

 

Возник такой вопрос:

Нужно отмерить промежуток времени от события А до события Б с большой точностью (допустим, с точностью 100 МГц-го клока). Время между событиями составляет 500 000 +- 10 000 тактов 100 МГц. Получается счетчик на 3 байта.

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

 

Как можно уменьшить размеры счетчиков?

 

Самое адекватное, что приходит в голову - это завести еще один счетчик, на низкой частоте, допустим, на 1 МГц. Этот счетчик будет отсчитывать основную длительность, и в конце, где примерно ожидается событие - включается первый, на 100 МГц-ах и досчитывает точное время до события. Потом результаты счетчиков суммируются.

 

Но при таком решении все равно нужно тратить место на медленный счетчик, на суммирование и т.д. По моим соображениям выигрыша не будет, либо он будет настолько мал, что не стоит всех этих заморочек. Да и момент запуска/остановки медленного счетчика завязан на клок 1 МГц и даст огромную (по меркам 100 МГц) ошибку.

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


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

Делал недавно на похожей частоте на Воронежской плисине таймер, с времянкой проблемы были. Пришлось бить на несколько последовательных, суть следующая - при достижении максимального значения на первом формируется сигнал CE, записываемый в регистр, который служит разрешением счета для следующего.Таким образом, вместо одного счетчика разрядностью N соединяются последовательно два счетчика разрядностью N/2. Надеюсь суть описал понятно, кода под рукой нет.

PS/ Вспомнил - у des00 в статье было :) http://embedders.org/content/timequest-dly...-litsom-k-litsu

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


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

Нужно отмерить промежуток времени от события А до события Б с большой точностью (допустим, с точностью 100 МГц-го клока). Время между событиями составляет 500 000 +- 10 000 тактов 100 МГц. Получается счетчик на 3 байта.

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

 

Как можно уменьшить размеры счетчиков?

 

Самое адекватное, что приходит в голову - это завести еще один счетчик, на низкой частоте, допустим, на 1 МГц.

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

А если нет, то какая разница, где считать?

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


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

Одним таймером на 32 разряда считайте. А время измеряйте по захватам состояния таймера.

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


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

Делал недавно на похожей частоте на Воронежской плисине таймер, с времянкой проблемы были. Пришлось бить на несколько последовательных, суть следующая - при достижении максимального значения на первом формируется сигнал CE, записываемый в регистр, который служит разрешением счета для следующего.Таким образом, вместо одного счетчика разрядностью N соединяются последовательно два счетчика разрядностью N/2. Надеюсь суть описал понятно, кода под рукой нет.

Это Вы разбили счетчик, чтобы получить перенос в группе.

 

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


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

Использовать умножители.

Поясните пожалуйста....

Или пример дайте...

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


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

В каких кристаллах?

Вы что, никогда не видели внутренности DSP48? :biggrin:

 

Там внутри кроме, собсно, умножителя, есть ещё много всякого:

 

structure_dsp48.png

 

Поэтому:

 

DSP == (Pre-adder + Multiplier + Pattern Detector + add/subtract/accumulate engine) != Multiplier..

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


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

Вы что, никогда не видели внутренности DSP48? :biggrin:

 

Там внутри кроме, собсно, умножителя, есть ещё много всякого:

 

structure_dsp48.png

 

Поэтому:

 

DSP == (Pre-adder + Multiplier + Pattern Detector + add/subtract/accumulate engine) != Multiplier..

 

Я с этим утверждением и не спорю. Просто может есть умножители без блока add/subtract/accumulate engine и люди их используют, а я об этом не знаю :)

Мне всегда казалось, если есть умножители => есть сумматоры большой разрядности для интегрирования => можно подать 1 на интегратор и получить счетчик.

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


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

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

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

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

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

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

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

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

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

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