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

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

Всем привет!

 

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

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

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

о меркам 100 МГц) ошибку.

У вас 19-разрядный счетчик не работает на 100 МГц? Что это за ПЛИС такая? ИМХО это даже для воронежских поделок не должно быть проблемой.

 

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


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

.. есть умножители => есть сумматоры ..

Так и нужно было написать, что в счетчике можно использовать сумматоры входящие в состав DSP48.

 

Вы же предложили операцию суммирования выполнять с помощью операции умножения.

 

С точки зрения обычной математики это невозможно. Но, может, у вас какая-то своя математика?

 

:biggrin:

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


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

Так и нужно было написать, что в счетчике можно использовать сумматоры входящие в состав DSP48.

 

Вы же предложили операцию суммирования выполнять с помощью операции умножения.

 

С точки зрения обычной математики это невозможно. Но, может, у вас какая-то своя математика?

 

:biggrin:

Я предложил реализовать не с помощью операции умножения, а с помощью аппаратного умножителя которые есть в большинстве ПЛИС.

Мне казалось это очевидным и мне даже в голову не приходит как это можно было трактовать по другому.

Но видимо я ошибался.

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


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

ИМХО это даже для воронежских поделок не должно быть проблемой.

Ошибаетесь.

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


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

С точки зрения обычной математики это невозможно.

Так здесь и не математику обсуждаем.

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


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

Вы сделали такие счётчики и они у вас не завелись на 100 Мгц?

 

Да ну нет же) все нормально завелось. Я думаю, есть возможность как-то более изящно отсчитывать промежутки времени. Т.к при реализации на счетчиках с большой разрядностью съедается много логики (несколько счётчиков+мультиплексирование результатов)

 

 

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

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

 

Это немного не то. Повысится максимальная частота работы, но количество логики останется тем же (мб немного больше).

 

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

 

Немного не понял, можно про захват состояния тамера подробнее? Я представлял себе так: событие А начинаем считать. Событие Б забрали результат, сбросили счётчик. Ну, что-то вроде этого.

 

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


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

Немного не понял, можно про захват состояния тамера подробнее? Я представлял себе так: событие А начинаем считать. Событие Б забрали результат, сбросили счётчик. Ну, что-то вроде этого.

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

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


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

У вас 19-разрядный счетчик не работает на 100 МГц? Что это за ПЛИС такая? ИМХО это даже для воронежских поделок не должно быть проблемой.

..почти все воронежские плис до 50 Мгц , только одна какая-то под 100 Мгц , на простом счётчике.

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


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

Всем привет!

 

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

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

А давайте представим не тупой счетчик с проблемами переноса, а счетчик совсем небольшой + память + автомат + аккумулятор + флаг...

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

читает 4-6 бит ячейку памяти, делает инкремент аккумулятора и если есть флаг переполнения, то взводит флаг. результат записывает в эту ячейку, а в этот же такт в аккумулятор грузится число из другой ячейки памяти... И его содержимое инкрементирует с учетом флага...

И вот так, старшие биты обрабатываем по "микропроцессорному" за несколько тактов. И чтобы не было перерывов ровно настолько же тактов крутится счетчик. Думаю, что для автомата нужно 6-8 тактов. Аккумулятор скажем на 4 разряда. Память если на Ксайлинксе, то там есть как SRL так и распределенная память на 1 логической ячейке 32х1 (в старых было 16х1)... Так вот, 4 таких ячейки дадут 4 бита х 32 = разрядный счетчик... При этом немного экономится всего. И триггеров и межсоединений...

Причем, если надо, то к этому же автомату, если добавить память, то можно и 2 канала сделать...

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


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

А давайте представим не тупой счетчик с проблемами переноса, а счетчик совсем небольшой + память + автомат + аккумулятор + флаг...

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

читает 4-6 бит ячейку памяти, делает инкремент аккумулятора и если есть флаг переполнения, то взводит флаг. результат записывает в эту ячейку, а в этот же такт в аккумулятор грузится число из другой ячейки памяти... И его содержимое инкрементирует с учетом флага...

И вот так, старшие биты обрабатываем по "микропроцессорному" за несколько тактов. И чтобы не было перерывов ровно настолько же тактов крутится счетчик. Думаю, что для автомата нужно 6-8 тактов. Аккумулятор скажем на 4 разряда. Память если на Ксайлинксе, то там есть как SRL так и распределенная память на 1 логической ячейке 32х1 (в старых было 16х1)... Так вот, 4 таких ячейки дадут 4 бита х 32 = разрядный счетчик... При этом немного экономится всего. И триггеров и межсоединений...

Причем, если надо, то к этому же автомату, если добавить память, то можно и 2 канала сделать...

Либо даже вот так.

Делаем на SRL сдвиговый регистр. От него 4 бита переписываем в аккумулятор и инкрементируем. Результат переписываем обратно и потом регистр сдвигаем циклически. Причем сам регистр можно сдвигать на 1 бит, но писать-читать из него через 4 бита. А их как раз хватит для автомата.

Итого: SRL - 1 ячейка, аккумулятор на 4 бита, счетчик - ну скажем 5-8 разрядов, триггер разрешения счета и триггер готовности...

 

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


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

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

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

Видимо Вы не учились..... :laughing:

 

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

А в чём выигрыш-то? Ну хорошо - счётчик один, но раз автору нужно независимо друг от друга посчитать несколько таких отрезков (видимо для каждого учитываемого отрезка Oi, есть своя пара сигналов Ai и Bi, задающих начало и конец отрезка Oi, и эти отрезки O0...Oi могут по времени как угодно накладываться друг на друга).

А значит потребуется для каждого отрезка завести как минимум один регистр хранения (содержимого счётчика на момент Ai) и один сумматор в доп. коде.

А это однозначно больше чем просто один счётчик на один отрезок.

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


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

А в чём выигрыш-то?...

А это однозначно больше чем просто один счётчик на один отрезок.

Может, и нет. Смотря куда результат выдавать.

 

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

Все равно есть ограничение на длину счетчика.

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


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

Все равно есть ограничение на длину счетчика.

Ограничение в чём? В количестве входов элемента "И"?

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


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

Всё изобретено много десятилетий назад и называется схемой ускоренного (параллельного) переноса в сумматорах.

 

А значит потребуется для каждого отрезка завести как минимум один регистр хранения (содержимого счётчика на момент Ai) и один сумматор в доп. коде.

А это однозначно больше чем просто один счётчик на один отрезок.

для параллельного переноса надо задействовать довольно много интерконнектов - а это ценный ресурс.

что же касается сдвиговых регистров, то они делаются на SRL - это 16 или 32 бита, но они в одной ячейке. А так как соседние ячейки соединяются локальными интерконнектами, то там можно поднять частоту повыше...

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

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


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

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

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

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

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

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

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

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

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

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