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

Как правильно писать в регистр

Добрый день.

Собираю на ПЛИС Cyclone V E схему, которая измеряет разность времен прихода двух импульсов А и B. Длительность импульсов около 200 мкс, частота 1 Гц.

Время измеряется в единицах опорной частоты 100 МГц, подаваемой на счетчик. Схема приведена на рисунке.

 

 

Drawing1.png

 

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

Вопрос как это сделать?

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

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


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

Ну как минимум, не стоит подобным образом баловать с тактовой сетью. На таковой цепи должны быть лишь такты - лучше это правило не нарушать. Думою Вам сперва сюда http://fpgacenter.com/examples/basic/edge_detector.php надо глянуть.

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


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

А Вы сделайте импульсы, которые измеряете не входами синхронизации, а входами разрешения работы, предварирельно пропустив эти сигналы через 2-3 разрядный сдвиговый регистр для избавления от метастабильности. Тогда проект серьёзно упрощается.

 

 

Ну как минимум, не стоит подобным образом баловать с тактовой сетью. На таковой цепи должны быть лишь такты - лучше это правило не нарушать. Думою Вам сперва сюда http://fpgacenter.com/examples/basic/edge_detector.php надо глянуть.

Вот я постоянно, слышу про то, что не стоит заводить такие сигналы в тактовую сеть. Но никак не могу найти причину почему так делать нельзя. Нет ли у вас ссылки на эту информацию ?

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


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

Здесь нужен счетчик с разрешением счета и сбросом. Условие счета и условие сброса формируются из входных импульсов. К примеру A&!B - счет, !A&!B - сброс, A&B - сохранение результата в регистре.

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


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

Вот я постоянно, слышу про то, что не стоит заводить такие сигналы в тактовую сеть. Но никак не могу найти причину почему так делать нельзя. Нет ли у вас ссылки на эту информацию ?

Ну прям ссылку я сейчас не найду, но эта фраза взята из апноутов (как альтеры так и ксайлинкса). Причина здесь вообщем то очевидна. При изменении условий работы кристалла (изменение температуры или напряжения питания) нестабильность такого "клока" будет весьма трудно предсказать особенно если он проходит на своём пути комбинационную логику. А вообще данный способ не запрещён и в ряде случаев его можно использовать, но опять таки не желательно. Это и логично, ПЛИС всё же универсальный инструмент.

P.S. Забыл упомянуть, все тактовые буферы так же согласованы со специальными тактовыми ногами и самой линией, а вы туда такую рассогласованность пихаете триггером...

Изменено пользователем Грендайзер

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


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

Спасибо, а если увеличить число измеряемых импульсов до восьми?

В общем случае кажется нужно прописать некий констрейн.

 

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


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

Констрйн Вам надо прописать лишь для тактового сигнала, а вот схему стоит изменить, т.к. в данном случае, Вам синтезатору придётся ещё дополнительными констрейнами объяснять, что у Вас на пустом месте ещё один тактовый домен появился...

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


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

Констрйн Вам надо прописать лишь для тактового сигнала, а вот схему стоит изменить, т.к. в данном случае, Вам синтезатору придётся ещё дополнительными констрейнами объяснять, что у Вас на пустом месте ещё один тактовый домен появился...

 

Для количества измеряемых импульсов больше двух в голову приходит только такая схема:

И счетчик и регистры получают на синхронизацию один и тот же тактовый сигнал,

регистры имеют вход разрешения работы на который поступает сформированный по предложенной Вами схеме edge detector сигнал, правда схема edge detector немного изменена (добавлен второй триггер перед инвертором)

 

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


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

Если изменить структурную схему:

Сигналы А и б являются сигналами старт/стоп и формируют временное окно,

которое поступает на вход енабле счетчика. Опорная частота 100Мнц на тактовый вход счетчика.

Выходы счетчика есть результат- разница по времени между импульсами А и Б

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


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

Если изменить структурную схему:

Сигналы А и б являются сигналами старт/стоп и формируют временное окно,

которое поступает на вход енабле счетчика. Опорная частота 100Мнц на тактовый вход счетчика.

Выходы счетчика есть результат- разница по времени между импульсами А и Б

 

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

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

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


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

Может, сделать просто один общий сквозной счетчик, а его значения сохранять в восемь регистров по фронту соответствующего импульса? Для каждого из регистров потом выставлять флаг готовности, а когда "И" от всех даст 1, можно забирать результаты.

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


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

Как здесь звучало-

сделать 8 front edge detector, которые поступают на вход enable

соответствующего регистра. Опорная частота 100Мнц поступает на счетчик и все регистры.

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


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

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

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


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

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

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

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

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

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

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

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

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

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