Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как правильно писать в регистр
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
Dootch
Добрый день.
Собираю на ПЛИС Cyclone V E схему, которая измеряет разность времен прихода двух импульсов А и B. Длительность импульсов около 200 мкс, частота 1 Гц.
Время измеряется в единицах опорной частоты 100 МГц, подаваемой на счетчик. Схема приведена на рисунке.




Сигналы записи состояний счетчика в регистр я формирую синхронно с опорной частотой. Для того, чтобы состояние счетчика записывалось всегда корректно, как я понял необходимо указать компилятору что данные с счетчика на входе регистров должны быть стабильны к моменту прихода сигнала записи.
Вопрос как это сделать?
Возможно для корректной работы нужно изменить схему, но что-то никаких идей нет.
Грендайзер
Ну как минимум, не стоит подобным образом баловать с тактовой сетью. На таковой цепи должны быть лишь такты - лучше это правило не нарушать. Думою Вам сперва сюда http://fpgacenter.com/examples/basic/edge_detector.php надо глянуть.
Flip-fl0p
А Вы сделайте импульсы, которые измеряете не входами синхронизации, а входами разрешения работы, предварирельно пропустив эти сигналы через 2-3 разрядный сдвиговый регистр для избавления от метастабильности. Тогда проект серьёзно упрощается.


Цитата(Грендайзер @ Jul 18 2017, 09:23) *
Ну как минимум, не стоит подобным образом баловать с тактовой сетью. На таковой цепи должны быть лишь такты - лучше это правило не нарушать. Думою Вам сперва сюда http://fpgacenter.com/examples/basic/edge_detector.php надо глянуть.

Вот я постоянно, слышу про то, что не стоит заводить такие сигналы в тактовую сеть. Но никак не могу найти причину почему так делать нельзя. Нет ли у вас ссылки на эту информацию ?
Shivers
Здесь нужен счетчик с разрешением счета и сбросом. Условие счета и условие сброса формируются из входных импульсов. К примеру A&!B - счет, !A&!B - сброс, A&B - сохранение результата в регистре.
Грендайзер
Цитата(Flip-fl0p @ Jul 18 2017, 09:38) *
Вот я постоянно, слышу про то, что не стоит заводить такие сигналы в тактовую сеть. Но никак не могу найти причину почему так делать нельзя. Нет ли у вас ссылки на эту информацию ?

Ну прям ссылку я сейчас не найду, но эта фраза взята из апноутов (как альтеры так и ксайлинкса). Причина здесь вообщем то очевидна. При изменении условий работы кристалла (изменение температуры или напряжения питания) нестабильность такого "клока" будет весьма трудно предсказать особенно если он проходит на своём пути комбинационную логику. А вообще данный способ не запрещён и в ряде случаев его можно использовать, но опять таки не желательно. Это и логично, ПЛИС всё же универсальный инструмент.
P.S. Забыл упомянуть, все тактовые буферы так же согласованы со специальными тактовыми ногами и самой линией, а вы туда такую рассогласованность пихаете триггером...
Dootch
Спасибо, а если увеличить число измеряемых импульсов до восьми?
В общем случае кажется нужно прописать некий констрейн.
Грендайзер
Констрйн Вам надо прописать лишь для тактового сигнала, а вот схему стоит изменить, т.к. в данном случае, Вам синтезатору придётся ещё дополнительными констрейнами объяснять, что у Вас на пустом месте ещё один тактовый домен появился...
Dootch
Цитата(Грендайзер @ Jul 18 2017, 11:03) *
Констрйн Вам надо прописать лишь для тактового сигнала, а вот схему стоит изменить, т.к. в данном случае, Вам синтезатору придётся ещё дополнительными констрейнами объяснять, что у Вас на пустом месте ещё один тактовый домен появился...


Для количества измеряемых импульсов больше двух в голову приходит только такая схема:
И счетчик и регистры получают на синхронизацию один и тот же тактовый сигнал,
регистры имеют вход разрешения работы на который поступает сформированный по предложенной Вами схеме edge detector сигнал, правда схема edge detector немного изменена (добавлен второй триггер перед инвертором)
Алга
Если изменить структурную схему:
Сигналы А и б являются сигналами старт/стоп и формируют временное окно,
которое поступает на вход енабле счетчика. Опорная частота 100Мнц на тактовый вход счетчика.
Выходы счетчика есть результат- разница по времени между импульсами А и Б
Dootch
Цитата(Алга @ Jul 18 2017, 12:38) *
Если изменить структурную схему:
Сигналы А и б являются сигналами старт/стоп и формируют временное окно,
которое поступает на вход енабле счетчика. Опорная частота 100Мнц на тактовый вход счетчика.
Выходы счетчика есть результат- разница по времени между импульсами А и Б


Я в начале топика для простоты указал, что сигналов два, на самом деле их 8. Прошу прощения за неточность.
Идея в том, что счетчик крутится по кругу непрерывно, а из значений регистров вычисляется временной интервал между любой парой сигналов.
Tausinov
Может, сделать просто один общий сквозной счетчик, а его значения сохранять в восемь регистров по фронту соответствующего импульса? Для каждого из регистров потом выставлять флаг готовности, а когда "И" от всех даст 1, можно забирать результаты.
Алга
Как здесь звучало-
сделать 8 front edge detector, которые поступают на вход enable
соответствующего регистра. Опорная частота 100Мнц поступает на счетчик и все регистры.
Magnum
Ещё желательно указать вероятность неприхода одного из импульсов, дабы исключить зависание в вечном ожидании, и откуда они берутся, возможно потребуется схема подавления дребезга, если сигналы с механического замыкателя.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.