реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Как на ПЛИС сделать регулируемую линию задержки?, Несколько независмых каналов от 0 до 400 нс
ANT
сообщение Mar 1 2006, 11:56
Сообщение #1


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-04
Пользователь №: 127



Хочу сделать 5-канальную программируемую ЛЗ для импульсов с частотой следования до 20МГц. Задержка должна программироваться от 0 до 400 нс с шагом в несколько нс. Для этого есть специальные микросхемы у MAXIM, DATADELAY. Например 8-битная с шагом 2нс или 6-битная с шагом 6нс. Обе подходят. Схему уже набросал на MAXIMе, пока не выяснил насчёт доставабельности. Но возник вопрос: поскольку в проекте всё равно уже использую ПЛИС для управления ЛЗ, нельзя ли сделать на какой-нибудь ПЛИС или FPGA эти задержки, например с помощью строенных FIFO?
Go to the top of the page
 
+Quote Post
iosifk
сообщение Mar 1 2006, 12:14
Сообщение #2


Гуру
******

Группа: Модераторы
Сообщений: 4 011
Регистрация: 8-09-05
Из: спб
Пользователь №: 8 369



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


Посмотрите описание блоков DCM - у Ксайлинкса и PLL у Альтеры.
А что такое строенные FIFO?


--------------------
www.iosifk.narod.ru
Go to the top of the page
 
+Quote Post
ANT
сообщение Mar 1 2006, 12:38
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-04
Пользователь №: 127



Опечатка sad.gif встроенные.
Go to the top of the page
 
+Quote Post
Gate
сообщение Mar 1 2006, 13:03
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943



Не думаю, что встроенное фифо удобно использовать - вам ведь нужно будет менять его глубину. Поскольку вход однобитный, то imho ставите сдвиговый регистр на 100-200 разрядов, тактируете его 300-500 Мгц (циклон или лучше циклон2), на вход - ваш сигнал, а выход снимаете с нужного вам разряда. Единственная проблема - мультиплексор 200-в-1 не вытянет за 1 такт при 300 Мгц - тогда разбиваете его на группы и делаете конвеер (это добавит фикс. задержку в несколько клоков, кот. вам надо учесть).


--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
Go to the top of the page
 
+Quote Post
Gate
сообщение Mar 1 2006, 13:25
Сообщение #5


Знающий
****

Группа: Свой
Сообщений: 859
Регистрация: 7-04-05
Из: Санкт-Петербург
Пользователь №: 3 943



Подумал немного, и понял, что поторопился - как я советовал сделать легко, но ресурсов в кристалле это займет излишне много.
Второй путь - использовать встроенную память (но ограничение по частоте - 250 мгц на циклоне). Насколько я помню, fifo с управляемой глубиной в библиотеке нет, так что надо просто взять блок однобитной памяти и написать к нему контроллер.
Еще насколько помню, блоки памяти в циклоне можно конфигурировать как сдвиговый регистр, но можно ли динамически менять его длину не знаю, никогда не пользовался. По крайней мере, всегда можно собрать регистр переменной длины из нескольких кусков фиксированой длины (сделанных из памяти) и регистра перем. длины (собраного из триггеров).


--------------------
"Человек - это существо, которое охотнее всего рассуждает о том, в чем меньше всего разбирается." (с) С.Лем
Go to the top of the page
 
+Quote Post
ANT
сообщение Mar 1 2006, 13:26
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-04
Пользователь №: 127



Ну, а если взять тактовую 167,7Мгц(6нс) и 64 в 1, или 200МГц(5нс) и 80->1 , то вытянет? Допустим, если вытянет, то 5 таких каналов поместится в одном чипе?
Go to the top of the page
 
+Quote Post
Krys
сообщение Mar 2 2006, 03:06
Сообщение #7


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Цитата(ANT @ Mar 1 2006, 17:56) *
возник вопрос: поскольку в проекте всё равно уже использую ПЛИС для управления ЛЗ, нельзя ли сделать на какой-нибудь ПЛИС или FPGA эти задержки, например с помощью строенных FIFO?
А какая у вас ПЛИС? Сделать ЛЗ в ПЛИС можно. Но для её стабильности необходимо подать внешнюю тактовую частоту с периодом, равным шагу ваших задержек. Ну а дальше - счётчик и одновибратор на выходе, задающий требуемую длительность импульса. Либо сдвиговый регистр.
Go to the top of the page
 
+Quote Post
ANT
сообщение Mar 2 2006, 08:23
Сообщение #8


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-04
Пользователь №: 127



Пока ПЛИС простенькая - XC95108-10. Её хватает только на организацию интерфейса VME - линии задержки. Но можно взять и другую. А задержка на одновибраторе не подходит: работает только по переднему фронту сигнала и режет информацию о длительности входного импульса.
Go to the top of the page
 
+Quote Post
Krys
сообщение Mar 2 2006, 12:30
Сообщение #9


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Сделайте аналогичную цепь и для заднего фронта! smile.gif)
Либо через сдвиговый регистр, как писали


--------------------
Зная себе цену, нужно ещё и пользоваться спросом...
Go to the top of the page
 
+Quote Post
Tosha
сообщение Mar 3 2006, 09:22
Сообщение #10


Частый гость
**

Группа: Свой
Сообщений: 97
Регистрация: 10-09-04
Пользователь №: 633



Проще всего думаю будет сделать все-таки на двухпортовой памяти. Ставите счетчик на входной поток, это будет адрес записи. Отнимаете от него величину задержки - получаете адрес чтения. Таким образом получаете в памяти сохраненннный сигнал и считываете с нужной задержкой. Если задержка для всех каналов одинаковая, то можно увеличить разрядность памяти.
Go to the top of the page
 
+Quote Post
Krys
сообщение Mar 3 2006, 10:13
Сообщение #11


Гуру
******

Группа: Свой
Сообщений: 2 002
Регистрация: 17-01-06
Из: Томск, Россия
Пользователь №: 13 271



Учтите, что недостаток ЛЗ в ПЛИС по сравнению со специализированной микросхемой - у ЛЗ будет джиттер, соизмеримый с тактовой частотой сдвигового регистра или счётчика, т.е. несколько наносекунд. А у спец. микросхемы такого не будет.
Go to the top of the page
 
+Quote Post
ANT
сообщение Mar 3 2006, 13:38
Сообщение #12


Частый гость
**

Группа: Свой
Сообщений: 187
Регистрация: 22-06-04
Пользователь №: 127



Цитата(Tosha @ Mar 3 2006, 12:22) *
Проще всего думаю будет сделать все-таки на двухпортовой памяти. Ставите счетчик на входной поток, это будет адрес записи. Отнимаете от него величину задержки - получаете адрес чтения. Таким образом получаете в памяти сохраненннный сигнал и считываете с нужной задержкой. Если задержка для всех каналов одинаковая, то можно увеличить разрядность памяти.

Каналы - независимые. Получается, что для записи входного 5-битового потока можно использовать общий счётчик адреса, а для чтения - индивидуальные? Какой чип годится для организации пяти каналов двухпортовой однобитной памяти глубиной порядка 100 бит и частотой записи/чтения порядка 200 МГц?
Go to the top of the page
 
+Quote Post
Tosha
сообщение Mar 6 2006, 04:59
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 97
Регистрация: 10-09-04
Пользователь №: 633



Да реализация именно такая.
Любой Cyclone или Cyclone2 имеет нужное количество блоков. А по быстродействию смотреть нужно. Судя по документации Cyclone надо брать -6, а Cyclone2 любой пойдет. По Xilinx не подскажу.
Go to the top of the page
 
+Quote Post
xyzzy
сообщение Mar 7 2006, 05:28
Сообщение #14


Частый гость
**

Группа: Свой
Сообщений: 95
Регистрация: 10-04-05
Пользователь №: 4 003



У 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. Применяется в высокоскоростных интерфейсах.


--------------------
--xyzzy
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 18th July 2025 - 12:34
Рейтинг@Mail.ru


Страница сгенерированна за 0.01512 секунд с 7
ELECTRONIX ©2004-2016