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

Использование BUFGMUX

Приветствую.

Есть такая задача - нужен контроллер памяти SSRAM. Рабочая частота - до 200 МГц.

Режим работы памяти - пишем отсчеты сигнала с АЦП(работает в зависимости от режима на частотах 150-200МГц), затем медленно сливаем их контроллеру USB, который работает на 50 МГц. Но желательно обеспечить возможность писать в память по тактам usb или читать по тактам АЦП. Схематический набросок решения можно посмотреть во вложении.

Тактовую частоту работы памяти выбираю с помощью BUFGMUX. Регистры на схеме - некоторая абстракция. По такой схеме идет обмен данными между доменами adcClockDomain, memClockDomain и usbClockDomain. Захватываю данные по падающему клоку, т.к. задержка тактового сигнала при переходе через bufgmux, как мне кажется может испортить сигнал при передаче его из adcClockDomain в memClockDomain. Написал констрейны на тактовые сигналы, на задержки распространения из adcClockDomain в memClockDomain (from-to 2.5ns) и обратно. Аналогично с usbClockDomain и memClockDomain.

 

Теперь со всей этой фигней на борту пытаемся взлететь.(с)

1) Работает сие чудо довольно нестабильно. Бывают пропуски отсчетов. Timing Analyzer ругается на цепи (сигналы статуса, не данные), которые идут из memClkDomain к adcClockDomain. Может я какие-нибудь констрейнты упустил из внимания? До сих пор вообще временными ограничениями на дизайн не пользовался, т.к. проекты были сравнительно низкочастотными и хватало area-констрейнтов, так то просьба сильно не пинать и если нужно, ткнуть мордой в полезную для образовательных целей инфу.

2) Можно ли поставить на выход bufgmux dcm/pmc и передавать данные между adc и mem доменами строго по возходящему фронту тактового сигнала и аналогично между mem и usb доменами? Т.е. привязать по фазе такты adc и mem во время работы с памятью из домена adc и аналогично с usb и mem. Если можно, то как?

 

Дополнительные сведения: девайс - xilinx virtex4 vsx55, синтезатор - Leonardo, MAP-PAR - ISE.

post-29374-1233657394_thumb.jpg

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


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

Приветствую!

 

Самое правильное решене использовать FIFO на запись и чтение в память.

Тесть память работает всегда на фиксированной максимальной частоте, clock domain правильно развязаны - фигня летит :rolleyes:

 

В вашем же случае уберите инверсию после BUFGMUX, а входы BUFGMUX подключите к НЕ к глобальным клокам adcClockDomain, usbClockDomain, а к входам соответствующих глобальных буферов. Тогда задержки BUFGMUX не будут влиять.

 

Успехов! Rob.

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


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

Спасибо за ответ. Идея подключить BUFGMUX напрямую к буферам интересная. По крайней мере Timing Analyzer больше не ругается. Может, конечно, будут косяки с тактированием из разных источников - часть схемы от BUFG, другая - от BUFGMUX при передаче данных между этими доменами? В крайнем случае перейду на фифо.

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


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

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

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

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

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

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

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

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

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

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