RobFPGA 27 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба Приветствую! 8 minutes ago, MrGalaxy said: Коллеги, вы отвлеклись. Расскажите лучше, плз., про особенности тактирования двух независимых счётчиков передним и задним фронтом одного и того же сигнала. Это одно и тоже - только в этом случае вы "задерживаете" клок на половину такта :) И при этом вы должны асинхронный входной сигнал перевести в два клоковых домена для управления счетчиками. А счет разными счетчиками по разным фронтам особенностей не имеет. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 28 минут назад, blackfin сказал: можно предположить, что суммарное время "setup"+"hold" для каждого триггера больше времени периода клока. Время установления выходных данных, судя по симуляции, около 14 ns, период 50 MHz такта 20 ns. 32 минуты назад, blackfin сказал: со сдвинутым на 90 град. на 180 :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба 1 minute ago, MrGalaxy said: на 180 :) Да, виноват.. Поправил.. В голове уже крутились XAPP523 и XAPP585.. :) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 23 февраля, 2020 Опубликовано 23 февраля, 2020 · Жалоба Приветствую! Кстати, если считать только по двум фронтам одного клока то достаточно 1 счетчика и несколько триггеров которые еще и как CDC работать будут, типа ... always_ff @(negedge clk) begin din_f <= pulse_in; end always_ff @(posedge clk) begin din_r <= pulse_in; din_fr <= din_f; // negedge -> posedge timing! din_fq <= din_fr; din_rq <= din_r; din_en <= din_rq | din_fq; case ({din_en, din_rq, din_fq}) 3'b001: cnt <= 1; 3'b010: cnt <= 1; 3'b011: cnt <= 2; 3'b111: cnt <= cnt+2; 3'b101: cnt <= cnt+1; 3'b100: out <= cnt; endcase end Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 24 февраля, 2020 Опубликовано 24 февраля, 2020 (изменено) · Жалоба Доброе утро! RobFPGA, так делать нельзя, код ПЛИС - это не программирование. Операции присвоения сигналам выполняются параллельно. Цитата reg_r <= pulse_in; din_fr <= din_f; // negedge -> posedge timing! din_fq <= din_fr; din_rq <= din_r; din_en <= din_rq | din_fq; Встречаю такие ошибки не только на форуме, на работе тоже бывает вижу. Поначалу спорят, говорю: запустите симулятор и посмотрите фронты. Запускают, убеждаются. Изменено 24 февраля, 2020 пользователем MrGalaxy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 24 февраля, 2020 Опубликовано 24 февраля, 2020 · Жалоба 15 minutes ago, MrGalaxy said: Встречаю такие ошибки не только на форуме, на работе тоже бывает вижу. А где тут ошибки? Я что-то не вижу.. ;) 15 minutes ago, MrGalaxy said: Поначалу спорят, говорю: запустите симулятор и посмотрите фронты. Запускают, убеждаются. Аналогичный вопрос: вы уже запускали этот код в симуляторе? Видели ошибки фронтов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 24 февраля, 2020 Опубликовано 24 февраля, 2020 · Жалоба 6 минут назад, blackfin сказал: А где тут ошибки? Я что-то не вижу.. ;) 1. Сигналу din_fq присваивается присваивается значение сигнала din_fr, которое присваивается в этом же процессе. 2. Сигнал din_en зависит от сигналов din_fq и din_rq, значения которым также присваивается в этом процессе. 13 минут назад, blackfin сказал: Аналогичный вопрос: вы уже запускали этот код в симуляторе? Видели ошибки фронтов? И не собираюсь. Потому что уже видел и знаю. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
blackfin 16 24 февраля, 2020 Опубликовано 24 февраля, 2020 · Жалоба 2 hours ago, MrGalaxy said: 1. Сигналу din_fq присваивается значение сигнала din_fr, которое присваивается в этом же процессе. 2. Сигнал din_en зависит от сигналов din_fq и din_rq, значения которым также присваивается в этом процессе. И что с того? Там везде используются неблокирующие присваивания. То есть, справа от знака <= указаны текущие значения регистров, слева от знака <= указаны значения регистров в следующем такте клока. Так что все в порядке.. :) 2 hours ago, MrGalaxy said: И не собираюсь. Потому что уже видел и знаю. Ну и зря.. Полагаю, вас бы ждал сюрприз.. ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 24 февраля, 2020 Опубликовано 24 февраля, 2020 · Жалоба Приветствую! 3 hours ago, MrGalaxy said: RobFPGA, так делать нельзя, код ПЛИС - это не программирование. Операции присвоения сигналам выполняются параллельно. Не знал этого, не знал Давно уже не знал 3 hours ago, MrGalaxy said: И не собираюсь. Потому что уже видел и знаю. "Не смотрел, но осуждаю!" Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 февраля, 2020 Опубликовано 25 февраля, 2020 · Жалоба вообще в вашем случае, лучше 4 счетчика на 4-х фазах частоты, потом комбайнер, который их обьединит) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
MrGalaxy 9 25 февраля, 2020 Опубликовано 25 февраля, 2020 (изменено) · Жалоба 1 час назад, des00 сказал: вообще в вашем случае, лучше 4 счетчика на 4-х фазах частоты, потом комбайнер, который их обьединит) Т.е. проблемы, о которой писал Lmx2315, не существует? Точности при двух фазах мне хватит, а для формирования 4-х надо иметь удвоенную частоту, внешние дискретные триггеры, что не хотелось бы. Изменено 25 февраля, 2020 пользователем MrGalaxy Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 февраля, 2020 Опубликовано 25 февраля, 2020 · Жалоба 15 minutes ago, MrGalaxy said: Т.е. проблемы, о которой писал Lmx2315, не существует? если про метастабильность, то конечно существует. ЕМНИП при стандартном измерении длительности интервалов асинхронных сигналов, методом выделения фронта и запуска счетчика, максимальная погрешность измерения будет 2*T, ее можно снизить до T, где то видел эту информацию в книгах, но надо искать. Ну и чем меньше вы сделате T, тем вам будет лучше. ЗЫ. Там по сути ставится 4.8 счетчиков, на 4-х тактовых со сдвигом 90/45 градусов + по обоим фронтам. Они все работают классически, потом стоит логика пересчета результатов в конечный результат. ЗЗЫ. Если ваша ПЛИС позволяет, лучше поднять частот до 200-300МГц. Пересчитывать 2 счетчика, проще чем 4-8 ;) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Neekeetos 0 25 февраля, 2020 Опубликовано 25 февраля, 2020 · Жалоба 2 hours ago, des00 said: ЗЫ. Там по сути ставится 4.8 счетчиков, на 4-х тактовых со сдвигом 90/45 градусов + по обоим фронтам. Они все работают классически, потом стоит логика пересчета результатов в конечный результат. ЗЗЫ. Если ваша ПЛИС позволяет, лучше поднять частот до 200-300МГц. Пересчитывать 2 счетчика, проще чем 4-8 ;) Реально сложный вариант, проще организовать линию задержки и захватить одним клоком (или несколькими фазами одного клока) фронт входного сигнала. Затем перевести линейный код в число дискрет которого будет равен времени задержки одного элемента лз. Соотв для того чтобы это сделать есть несколько вариантов, самый простой это то что я описал, есть нониус , когда клоковый сигнал тоже проходит через лз и задержаные фазы клока используются для захвата данных лз входного сигнала. Еще есть вариант на ring oscilator , который разновидность нониуса, поскольку два генератора с близкой частотой стартуют в моменты прихода фронта входного сигнала и фронта клока плис . Момент совпадения фазы соотв зависит от временного расположения этих событий. К первому варианту возможно пригородить встроеные mgt или serdes тогда эффективное разрешение будет равно периоду частоты тактирования сериализатора, но она обычно ограничена 1-5ггц. Из этих вариантов по моим изысканиям наиболее хорошо на плис ложится самый первый. Тк кольцевые генераторы внутри плис (сайлинкс в моем случае), очень шумные и не позволяют получить разрешение лучше чем 100пс без усложнения схемы. Делать линию задержки клока и затем распределять это по ячейкам плис вообще нереально тк клоки в плис имеют собственные ресурсы которых мало (либо реализация на латчах что само по себе забавно). Кроме того линии тактирования проще забить несколькими фазами с плл. Эффект тот же что и от лз только предсказуемость выше. ЗЫ Вообще много информации доступно в гугле по ключевым словам TDC FPGA благодаря физикам, которые регистрируют частицы. Я прикрепил несколько статей high resolution tdc in fpga.pdf low resource fpga based tdc.pdf TimingWorkshopClermont-girerd.pdf Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 25 февраля, 2020 Опубликовано 25 февраля, 2020 · Жалоба Приветствую! 3 hours ago, Neekeetos said: Реально сложный вариант, проще организовать линию задержки и захватить одним клоком Ну так о чем я и писал еще в самом начале. Самый простой и проверенный вариант. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Neekeetos 0 25 февраля, 2020 Опубликовано 25 февраля, 2020 · Жалоба 2 hours ago, RobFPGA said: Самый простой и проверенный вариант. Ну да, только реальных примеров реализации мало. Научные статьи немного зажимают нюансы :). Вот сваял сейчас линию задержки длиной 2.45нс судя по расчетам. Схема эксперимента такова, есть плис с клоком на 150мгц, есть входной сигнал на 50мгц, который поступает на лз из 128 тапов (7бит), где и оцифровывается(два 128битных регистра друг за другом). Затем декодируется из линейного кода в номер отсчета где обнаружился фронт. Поскольку линия задержки короче периода (2,45нс против 6,(6)нс ) то события регистрируются не всегда а только когда фронт проходит. График поэтому выглядит так, примерно 2/3 времени дедтайм. По горизонтали такты плис, по вертикали номер отвода лз где был зарегистрирован фронт: Увеличение, видно что особо метастабильности не наблюдается, как и шума. Один тап в среднем получается 19пикосекунд как можно посчитать, понятно что есть нелинейность, но это такой плис. ЗЫ плис спартан6 - xc6slx16-2 , думаю на более крутых плис будет веселее. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться