Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Как на ПЛИС сделать регулируемую линию задержки?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
ANT
Хочу сделать 5-канальную программируемую ЛЗ для импульсов с частотой следования до 20МГц. Задержка должна программироваться от 0 до 400 нс с шагом в несколько нс. Для этого есть специальные микросхемы у MAXIM, DATADELAY. Например 8-битная с шагом 2нс или 6-битная с шагом 6нс. Обе подходят. Схему уже набросал на MAXIMе, пока не выяснил насчёт доставабельности. Но возник вопрос: поскольку в проекте всё равно уже использую ПЛИС для управления ЛЗ, нельзя ли сделать на какой-нибудь ПЛИС или FPGA эти задержки, например с помощью строенных FIFO?
iosifk
Цитата(ANT @ Mar 1 2006, 14:56) *
Хочу сделать 5-канальную программируемую ЛЗ для импульсов с частотой следования до 20МГц. Задержка должна программироваться от 0 до 400 нс с шагом в несколько нс. Для этого есть специальные микросхемы у MAXIM, DATADELAY. Например 8-битная с шагом 2нс или 6-битная с шагом 6нс. Обе подходят. Схему уже набросал на MAXIMе, пока не выяснил насчёт доставабельности. Но возник вопрос: поскольку в проекте всё равно уже использую ПЛИС для управления ЛЗ, нельзя ли сделать на какой-нибудь ПЛИС или FPGA эти задержки, например с помощью строенных FIFO?


Посмотрите описание блоков DCM - у Ксайлинкса и PLL у Альтеры.
А что такое строенные FIFO?
ANT
Опечатка sad.gif встроенные.
Gate
Не думаю, что встроенное фифо удобно использовать - вам ведь нужно будет менять его глубину. Поскольку вход однобитный, то imho ставите сдвиговый регистр на 100-200 разрядов, тактируете его 300-500 Мгц (циклон или лучше циклон2), на вход - ваш сигнал, а выход снимаете с нужного вам разряда. Единственная проблема - мультиплексор 200-в-1 не вытянет за 1 такт при 300 Мгц - тогда разбиваете его на группы и делаете конвеер (это добавит фикс. задержку в несколько клоков, кот. вам надо учесть).
Gate
Подумал немного, и понял, что поторопился - как я советовал сделать легко, но ресурсов в кристалле это займет излишне много.
Второй путь - использовать встроенную память (но ограничение по частоте - 250 мгц на циклоне). Насколько я помню, fifo с управляемой глубиной в библиотеке нет, так что надо просто взять блок однобитной памяти и написать к нему контроллер.
Еще насколько помню, блоки памяти в циклоне можно конфигурировать как сдвиговый регистр, но можно ли динамически менять его длину не знаю, никогда не пользовался. По крайней мере, всегда можно собрать регистр переменной длины из нескольких кусков фиксированой длины (сделанных из памяти) и регистра перем. длины (собраного из триггеров).
ANT
Ну, а если взять тактовую 167,7Мгц(6нс) и 64 в 1, или 200МГц(5нс) и 80->1 , то вытянет? Допустим, если вытянет, то 5 таких каналов поместится в одном чипе?
Krys
Цитата(ANT @ Mar 1 2006, 17:56) *
возник вопрос: поскольку в проекте всё равно уже использую ПЛИС для управления ЛЗ, нельзя ли сделать на какой-нибудь ПЛИС или FPGA эти задержки, например с помощью строенных FIFO?
А какая у вас ПЛИС? Сделать ЛЗ в ПЛИС можно. Но для её стабильности необходимо подать внешнюю тактовую частоту с периодом, равным шагу ваших задержек. Ну а дальше - счётчик и одновибратор на выходе, задающий требуемую длительность импульса. Либо сдвиговый регистр.
ANT
Пока ПЛИС простенькая - XC95108-10. Её хватает только на организацию интерфейса VME - линии задержки. Но можно взять и другую. А задержка на одновибраторе не подходит: работает только по переднему фронту сигнала и режет информацию о длительности входного импульса.
Krys
Сделайте аналогичную цепь и для заднего фронта! smile.gif)
Либо через сдвиговый регистр, как писали
Tosha
Проще всего думаю будет сделать все-таки на двухпортовой памяти. Ставите счетчик на входной поток, это будет адрес записи. Отнимаете от него величину задержки - получаете адрес чтения. Таким образом получаете в памяти сохраненннный сигнал и считываете с нужной задержкой. Если задержка для всех каналов одинаковая, то можно увеличить разрядность памяти.
Krys
Учтите, что недостаток ЛЗ в ПЛИС по сравнению со специализированной микросхемой - у ЛЗ будет джиттер, соизмеримый с тактовой частотой сдвигового регистра или счётчика, т.е. несколько наносекунд. А у спец. микросхемы такого не будет.
ANT
Цитата(Tosha @ Mar 3 2006, 12:22) *
Проще всего думаю будет сделать все-таки на двухпортовой памяти. Ставите счетчик на входной поток, это будет адрес записи. Отнимаете от него величину задержки - получаете адрес чтения. Таким образом получаете в памяти сохраненннный сигнал и считываете с нужной задержкой. Если задержка для всех каналов одинаковая, то можно увеличить разрядность памяти.

Каналы - независимые. Получается, что для записи входного 5-битового потока можно использовать общий счётчик адреса, а для чтения - индивидуальные? Какой чип годится для организации пяти каналов двухпортовой однобитной памяти глубиной порядка 100 бит и частотой записи/чтения порядка 200 МГц?
Tosha
Да реализация именно такая.
Любой Cyclone или Cyclone2 имеет нужное количество блоков. А по быстродействию смотреть нужно. Судя по документации Cyclone надо брать -6, а Cyclone2 любой пойдет. По Xilinx не подскажу.
xyzzy
У Xilinx есть несколько App Notes где используются линии задержки с шагом порядка десятков пикосекунд с использованием стандартных блоков (buffer, carry chain)

http://www.xilinx.com/bvdocs/appnotes/xapp700.pdf
http://direct.xilinx.com/bvdocs/appnotes/xapp697.pdf

Знаю, что это работает в Virtex-2 и Virtex-4.

Есть еще у ксилинкса вариант с использованием блока IDELAY в Virtex-4. Применяется в высокоскоростных интерфейсах.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.