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

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
> Проблема с LCELL, Проект не работает в зависимости от количества lcell в квартус9.1
azizcheg
сообщение Mar 18 2011, 08:59
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Здравствуйте! Проблема такая. Есть проект в квартус 9,1 под Cyclone3. Проект простой.(Ядро ниос и небольшая логика). Есть два сигнала которые нужно выравнить. Для этого необходимо чтоб один из сигналов появился на выходе с небольшой задержкой(примерно 5-7 нс). Для этого использую элемент lcell (знаю что это не самый лучший способ, но все таки). Ставлю пару этих элементов - все работает и получается некоторая задержка... изменяю количество-сигнал вообще не генерится. Изменяю количество опять-работает. Возвращаю то же количество при которм сначала не работало-теперь уже работает. Никакой закономерности или логики отследить не могу. При всем при этом ядро и все остальное работает независимо от количества lcell. Пробовал вместо lcell ставить инверторы и элемент exp. Результат тот же самый... то работает то не работает. В чем может быть ошибка?
Go to the top of the page
 
+Quote Post
vugluskr
сообщение Mar 18 2011, 09:09
Сообщение #2


High speed digital design
***

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



Цитата(azizcheg @ Mar 18 2011, 11:59) *
Здравствуйте! Проблема такая. Есть проект в квартус 9,1 под Cyclone3. Проект простой.(Ядро ниос и небольшая логика). Есть два сигнала которые нужно выравнить. Для этого необходимо чтоб один из сигналов появился на выходе с небольшой задержкой(примерно 5-7 нс). Для этого использую элемент lcell (знаю что это не самый лучший способ, но все таки). Ставлю пару этих элементов - все работает и получается некоторая задержка... изменяю количество-сигнал вообще не генерится. Изменяю количество опять-работает. Возвращаю то же количество при которм сначала не работало-теперь уже работает. Никакой закономерности или логики отследить не могу. При всем при этом ядро и все остальное работает независимо от количества lcell. Пробовал вместо lcell ставить инверторы и элемент exp. Результат тот же самый... то работает то не работает. В чем может быть ошибка?

может синтезатор при оптимизации ваши lcell выкидвает? эти элементы посли implementation остаются?


--------------------
Go to the top of the page
 
+Quote Post
azizcheg
сообщение Mar 18 2011, 09:30
Сообщение #3


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Цитата(vugluskr @ Mar 18 2011, 12:09) *
может синтезатор при оптимизации ваши lcell выкидвает? эти элементы посли implementation остаются?

Я в настройках отключил свойство ignore lcell... значит компилятор не может выкидывать их из проекта
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 18 2011, 09:32
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Я бы поискал тактовую частоту 143-200 MHz, чтобы сделать строго синхронный дизайн и озаботился констрейнами.
Это единственный путь, известный мне, радикально снижающий количество иногда работающих схем.
Go to the top of the page
 
+Quote Post
azizcheg
сообщение Mar 18 2011, 11:00
Сообщение #5


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Цитата(Shtirlits @ Mar 18 2011, 12:32) *
Я бы поискал тактовую частоту 143-200 MHz, чтобы сделать строго синхронный дизайн и озаботился констрейнами.
Это единственный путь, известный мне, радикально снижающий количество иногда работающих схем.


немного не понятно, о чем ты? wacko.gif
причем тут тактовая частота?
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 18 2011, 11:15
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Я о том, что сигнал, который вы пытаетесь задержать на 5-7 нс не нужно задерживать всякими шаманскими методами с нестабильным результатом.
Нужно подходящую тактовую частоту подать на регистр в выходной ножке, чтобы он выдавал сигнал вовремя прямо со своего выхода.
Если вы опишите задачу подробнее, то и решения будут качественнее.

PS: вопрос на понимание: по каким клокам и вообще как получаются сигналы, которые должны быть выравнены на выходе? С какой точностью?
Go to the top of the page
 
+Quote Post
azizcheg
сообщение Mar 18 2011, 12:42
Сообщение #7


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Описываю проблему более подробно.
Имеется плата с двумя ПЛИС Cyclone III и двумя DDS AD9910. Первой DDS управляет первый циклон, а второй - второй :-) Нужно засинхронизировать эти DDS. Для этого у DDS имеется вход IO-UPDATE. Для синхронизации сигнал на эти ножки DDS должен дойти одновременно. IO_UPDATE служит для того, чтобы записать значения фазы, частоты, амплитуды и все другие данные в соответствующие регистры DDS. Т.е. если я поменял значение, например, частоты, то для того, чтобы DDS сгенерировал эту частоту нужно после записи данных через SPI в DDS, дернуть ножку IO-UPDATE. Но для синхронной работы обеих DDS нужно, чтоб этот сигнал дошел и до второй DDS. Т.к. каждая DDS связана с отдельной ПЛИС, то необходимо чтобы сигнал IO-UPDATE генерировался одной ПЛИС. Т.е. если нужно дернуть IO-UPDATE на DDS, то ПЛИС дергает на "свою" DDS напрямую, а вторую DDS - через вторую ПЛИС. Из-за этого и из-за того, что проводники на плате разной длины, сигнал IO-UPDATE доходит до каждой DDS с рассогласованием в 5 нс. Кроме того, сигнал IO-UPDATE дожен генериться синхронно с сигналом SYNC-CLK, который идет от DDS (с частотай 250MHz). Он заводится на ПЛИС (на вход Т-триггера inst15). Элемент ИЛИ нужен, чтоб строб-сигнал IO-UPDATE генерился как от одной ПЛИС, так и от второй. Но этот сигнал идет на обе DDS независимо от того, какая из ПЛИС его генерирует. Для того, чтобы сигнал IO-UPDATE доходил одновременно до обоих DDS пытаюсь сделать задержку с помощью LCELL. И тут начинаются непонятные глюки, описанные выше.
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 18 2011, 13:00
Сообщение #8


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Есть вопросы: откуда клоки ходят и куда. какой клок питает логику в fpga ?
Откуда SYSCLK идет на DDS-ы ?

В общем, LCELL нужно исключить как возможный строительный материал.
Для выравнивания задержек только общий клок, PLL или изменение схемы.
Go to the top of the page
 
+Quote Post
azizcheg
сообщение Mar 18 2011, 13:28
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Цитата(Shtirlits @ Mar 18 2011, 16:00) *
Есть вопросы: откуда клоки ходят и куда. какой клок питает логику в fpga ?
Откуда SYSCLK идет на DDS-ы ?

В общем, LCELL нужно исключить как возможный строительный материал.
Для выравнивания задержек только общий клок, PLL или изменение схемы.


DDS-ки и ПЛИС тактируются от одной опоры - термостабилизированный генератор.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 18 2011, 14:23
Сообщение #10


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Предлагаю сделать синхронный обмен между ПЛИС, чтобы они договаривались между собой что и когда слать, а потом независимо, но синхронно отправляли DDS-ам управляющие сигналы, прямо из регистров в выходных ножках. Интерфейс какой удобно, клок и данные туда, клок и данные сюда. Внутри синхронизаторы даже не нужны, если частота небольшая будет в интерфейсе.
Задержку можно будет корректировать настройкой PLL и я думаю, что это будет не 5-7ns, а меньше 1 ns.
Ошибка будет минимальной, если путь будет такой:
1) генератор
2) входная ножка fpga clock input
3) pll
4) глобальная сеть клока
5) выходная ножка
6) плата
7) dds

И все равно, такой способ синхронизации мне не нравится, так как PLL и сама FPGA будут шуметь.
Предусмотренный в DDS механизм синхронизации нескольких устройств может быть задействован на плате?
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Mar 20 2011, 05:25
Сообщение #11


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Здравствуйте
А если использовать Enable на DDS, есть ли там такой? И делать разрешение генерации чего то там , уже после того , как точно оба DDS запрограммируются.

Сообщение отредактировал Kirill_Good - Mar 20 2011, 05:46
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 20 2011, 07:33
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



IO_update и есть тот самый сигнал, который актуализирует новые значения.
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Mar 20 2011, 08:02
Сообщение #13


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



Удерживать Enable на генерацию синуса в неактивном состоянии, и отпустить его одновременно на двух DDS, уверенно зная что данные через io_update загрузились.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 20 2011, 08:11
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Дело не в выборе сигнала, а в "одновременно", ведь если я правильно понял, DDS-ы подключены каждый к своей fpga.
Go to the top of the page
 
+Quote Post
Kirill_Good
сообщение Mar 20 2011, 08:37
Сообщение #15


Местный
***

Группа: Участник
Сообщений: 217
Регистрация: 10-12-10
Из: Москва
Пользователь №: 61 528



я тоже понял, что проблема в "одновременно", чтобы сигналы которые генерируют два DDS были синхронны между собой, а сихронность их сбивается из за разности по времени прихода данных для конфигурации на ногу io_update, туда наверно приходят данные о фазе, амплитуде. После чего DDS начинает генерировать синус с новыми параметрами. вот я и предположил, что есть сигнал у DDS на разрешение генерации синуса, после update.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 20 2011, 09:29
Сообщение #16


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Как мне кажется, лучшее решение задачи административное - выдать заключение (принять решение), что плата требует переделки, так как обеспечить устойчивую работу инструментами fpga-дизайнера невозможно. Будет быстрее.
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Mar 20 2011, 11:08
Сообщение #17


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(azizcheg @ Mar 18 2011, 11:59) *
Здравствуйте! Проблема такая. Есть проект в квартус 9,1 под Cyclone3. Проект простой.(Ядро ниос и небольшая логика). Есть два сигнала которые нужно выравнить. Для этого необходимо чтоб один из сигналов появился на выходе с небольшой задержкой(примерно 5-7 нс). Для этого использую элемент lcell (знаю что это не самый лучший способ, но все таки). Ставлю пару этих элементов - все работает и получается некоторая задержка... изменяю количество-сигнал вообще не генерится. Изменяю количество опять-работает. Возвращаю то же количество при которм сначала не работало-теперь уже работает. Никакой закономерности или логики отследить не могу. При всем при этом ядро и все остальное работает независимо от количества lcell. Пробовал вместо lcell ставить инверторы и элемент exp. Результат тот же самый... то работает то не работает. В чем может быть ошибка?

У Вас там на выходе схемы триггер стоит? Советую поставить еще один или несколько триггеров и получить некую задержку, скажем если первый работает на частоте 250, то добавлением триггера Вы получите задержку в 4нс. Оставшуюся задержку получите подключив программируемую задержку delay chain. Далее отделяете эту часть от основного проекта и создаете partition с определенным logic lock и получаете для этой части полностью отфиттереный кусок, который и используете далее в проекте - в нем вся времянка сохраняется и будет стабильной.
Go to the top of the page
 
+Quote Post
azizcheg
сообщение Mar 21 2011, 09:40
Сообщение #18


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Цитата
Как мне кажется, лучшее решение задачи административное - выдать заключение (принять решение), что плата требует переделки, так как обеспечить устойчивую работу инструментами fpga-дизайнера невозможно. Будет быстрее.

О переделке платы можно забыть. На это времени нет.

Цитата(bogaev_roman @ Mar 20 2011, 14:08) *
Оставшуюся задержку получите подключив программируемую задержку delay chain. Далее отделяете эту часть от основного проекта и создаете partition с определенным logic lock и получаете для этой части полностью отфиттереный кусок, который и используете далее в проекте - в нем вся времянка сохраняется и будет стабильной.


Опиши, пожалуйста, подробней этот метод. Как для начала активировать delay chain?

Сообщение отредактировал azizcheg - Mar 21 2011, 09:41
Go to the top of the page
 
+Quote Post
bogaev_roman
сообщение Mar 21 2011, 10:06
Сообщение #19


Профессионал
*****

Группа: Свой
Сообщений: 1 088
Регистрация: 20-10-09
Из: Химки
Пользователь №: 53 082



Цитата(azizcheg @ Mar 21 2011, 12:40) *
Как для начала активировать delay chain?

Не знаю конкретно для Вашего семейства и пинов, надо конкретней смотреть. Подробно описано здесь для стратикс 3: http://www.altera.com/literature/ug/ug_altiobuf.pdf, там есть примеры.
У меня стратикс 4 и я описываю в qsf файле примерно следующее:
Код
set_instance_assignment -name D6_DELAY 4 -to output_a0
set_instance_assignment -name D5_DELAY 15 -to output_a1

В моем случае между DDR регистрами и лапой есть две программируемые задержки D6 и D5 - вбивая константы меняются задержки. Точность порядка 50нс (для каждого семейства и скорости - величина разная). Сответсвенно, D5 добавляет задержку 950нс, D6 - 350нс. Вроде как при правильном описании ограничений output_delay скажем, квартус их может сам менять и подключать для "выравнивания". Я делаю все вручную вышеописанным методом, т.к. не все ограничения умею "готовить".
Go to the top of the page
 
+Quote Post
murmel1
сообщение Mar 21 2011, 20:13
Сообщение #20


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

Группа: Свой
Сообщений: 166
Регистрация: 2-11-08
Из: Ростов-на-Дону
Пользователь №: 41 331



Задайте требуемую Вам задержку в Assignment Editor и дайте Fitter всю работу сделать за Вас. Промежуточные буфера и режимы работы задержек в I/O буферах будут выбраны автоматически. Ключевые слова в Assignment Editor - tco / minimum tco.
Go to the top of the page
 
+Quote Post
Shtirlits
сообщение Mar 21 2011, 23:44
Сообщение #21


Знающий
****

Группа: Свой
Сообщений: 845
Регистрация: 18-10-04
Из: Pereslavl-Zalessky, Russian Federation
Пользователь №: 905



Хотя требований по точности синхронизации я не увидел и лишь предполагаю,
мне решение с задержками напоминает серии картинок "я починил это!" - выражаю скепсис.
Go to the top of the page
 
+Quote Post
azizcheg
сообщение Mar 22 2011, 12:03
Сообщение #22


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Цитата(murmel1 @ Mar 21 2011, 23:13) *
Задайте требуемую Вам задержку в Assignment Editor и дайте Fitter всю работу сделать за Вас. Промежуточные буфера и режимы работы задержек в I/O буферах будут выбраны автоматически. Ключевые слова в Assignment Editor - tco / minimum tco.


А как это сделать в Assignment Editor. Куда тыкать?
Go to the top of the page
 
+Quote Post
azizcheg
сообщение Mar 25 2011, 07:05
Сообщение #23


Участник
*

Группа: Участник
Сообщений: 56
Регистрация: 20-01-11
Из: Махачкала
Пользователь №: 62 364



Допустим есть выход OUT? соединенный на ножку 6. При установке в Assignment Editor'e задержки на этой ножке выход OUT теряет связь с ножкой 6.
Как сделать, чтоб он был с ней связан и установлена необходимая задержка на выходе OUT?
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 21st July 2025 - 04:11
Рейтинг@Mail.ru


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