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

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

Всем привет!

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

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
Вы сделали такие счётчики и они у вас не завелись на 100 Мгц?

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


Ссылка на сообщение
Поделиться на другие сайты
Делал недавно на похожей частоте на Воронежской плисине таймер, с времянкой проблемы были. Пришлось бить на несколько последовательных, суть следующая - при достижении максимального значения на первом формируется сигнал CE, записываемый в регистр, который служит разрешением счета для следующего.Таким образом, вместо одного счетчика разрядностью N соединяются последовательно два счетчика разрядностью N/2. Надеюсь суть описал понятно, кода под рукой нет.
PS/ Вспомнил - у des00 в статье было sm.gif http://embedders.org/content/timequest-dly...-litsom-k-litsu

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(nice_vladi @ Dec 14 2017, 15:06) <{POST_SNAPBACK}>
Нужно отмерить промежуток времени от события А до события Б с большой точностью (допустим, с точностью 100 МГц-го клока). Время между событиями составляет 500 000 +- 10 000 тактов 100 МГц. Получается счетчик на 3 байта.
Вроде не много, но если надо посчитать несколько таких отрезков времени независимо, да потом как-то обработать данные - выливается в кучу логики.

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

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

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

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


Ссылка на сообщение
Поделиться на другие сайты
Одним таймером на 32 разряда считайте. А время измеряйте по захватам состояния таймера.

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(bogaev_roman @ Dec 14 2017, 15:21) <{POST_SNAPBACK}>
Делал недавно на похожей частоте на Воронежской плисине таймер, с времянкой проблемы были. Пришлось бить на несколько последовательных, суть следующая - при достижении максимального значения на первом формируется сигнал CE, записываемый в регистр, который служит разрешением счета для следующего.Таким образом, вместо одного счетчика разрядностью N соединяются последовательно два счетчика разрядностью N/2. Надеюсь суть описал понятно, кода под рукой нет.

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

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Tpeck @ Dec 14 2017, 17:14) <{POST_SNAPBACK}>
Использовать умножители.

Поясните пожалуйста....
Или пример дайте...

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(Tpeck @ Dec 15 2017, 11:30) <{POST_SNAPBACK}>
В каких кристаллах?

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

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



Поэтому:

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

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


Ссылка на сообщение
Поделиться на другие сайты
Цитата(blackfin @ Dec 15 2017, 11:58) <{POST_SNAPBACK}>
Вы что, никогда не видели внутренности DSP48? biggrin.gif

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



Поэтому:

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


Я с этим утверждением и не спорю. Просто может есть умножители без блока add/subtract/accumulate engine и люди их используют, а я об этом не знаю sm.gif
Мне всегда казалось, если есть умножители => есть сумматоры большой разрядности для интегрирования => можно подать 1 на интегратор и получить счетчик.

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация