Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: как повысить быстродействие?
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Работаем с ПЛИС, области применения, выбор
_Anatoliy
Доброго времени суток.Квартус 8.0,Циклон3.На ЦАП нужно выводить отсчёты 12 бит со скоростью 220Msps.STA сообщает что Fmax = 178МГц и соответственно выводит картинку:
Нажмите для просмотра прикрепленного файла
Slack минусовый.
Видно что довольно большое время занимает Clock delay, вот бы его уменьшить...Как? wink.gif

В файле .sdc клок описал.Фаст аутпут применил(без него вообще было Fmax 90МГц).
set_output_delay 1.00 -clock [get_clocks ClockDac] [get_ports DataDac[*]]

Коллеги,можете что посоветовать?

Интересно,у кого какие результаты были по максимальной выходной скорости.
murmel1
Я немного отстаю от прогресса и до Квартуса 8 (у самого 7.2 sp3) еще не добрался. STA тоже пока пользоваться не умею, но кое-чем поделюсь.
На циклоне 3 можно запросто и 400 мегабит в секунду получить, а 240 я получал еще на первых циклонах (ПЛИС->ПЛИС), правда это потребовало некоторого изучения вопроса. Вот мои наблюдения:
1) Управление настройками выходных буферов и подобными вещами - вобще не стоит трогать, пока 100% не будете знать, что они вам нужны. Пусть Fitter разбирается с столь низкоуровневыми вещами. Ручной перебор их неактуален - ждешь полчаса результаты компиляции, а включение режимов может и не исправить ситуации.
2) У Вас, однозначно, проблема не в Fmax, а в том что Tco передатчика (ПЛИС) не соответствует Tsu приемника
3) Самое главное для достижения нужных Tsu, Tco, Th - это посчитать какие времена нужны и установить их в assigment editor. Не забудьте так же Minimal Tsu, Th, Tco. Фиттер запросто крутит их в пределах примерно 10 нс. Только в сложных условиях (многобитные шины, особенно раскиданые по банкам) ему не удается достигать заданных требований.

В вашем случае, если я правильно понял картинку, tsu у приемника 1 нс, а период - 4,62 нс. В этом случае вам максимальное tco (или просто tco) нужно не больше 3,62 нс. Делаем запас 0,5 нс, получаем, что необходимо задать assigment "tco" 3,12 нс. Зададим еще minimum tco, чтобы данные не менялись слишком быстро после тактового фронта. Minimum tco должно быть больше Th приемника, но какое оно по картинке не ясно. Обычно я ставлю окно порядка 25% периода. Если ставить слишком маленькое окно фиттер слишком долго мучается а потом говорит, что не удалось выполнить требования.
Итого:
tco - 3,12 нс,
Minimum Tco - 2,12 нс.

В некоторых случаях, особенно быстрых требований можно ставить tco "через период". То есть, в данном случае поставить 3,12 + 4,62 = 7,74 нс. Но это так, для информации, должно работать и так.

Еще для скоростей больше 200 МГц можно использовать режим DDR (функции ALT_DDIO мегавизарда)

А как задать эти времена для анализа в STA я не знаю (еще не сталкивался), читайте мануалы !
slawikg
Цитата(_Anatoliy @ Dec 20 2008, 17:50) *
Доброго времени суток.Квартус 8.0,Циклон3.На ЦАП нужно выводить отсчёты 12 бит со скоростью 220Msps.STA сообщает что Fmax = 178МГц и соответственно выводит картинку:
Нажмите для просмотра прикрепленного файла
Slack минусовый.
Видно что довольно большое время занимает Clock delay, вот бы его уменьшить...Как? wink.gif

В файле .sdc клок описал.Фаст аутпут применил(без него вообще было Fmax 90МГц).
set_output_delay 1.00 -clock [get_clocks ClockDac] [get_ports DataDac[*]]

Коллеги,можете что посоветовать?

Интересно,у кого какие результаты были по максимальной выходной скорости.


Вам нкжно либо в таймквесте зедавать set_output_delay, либо вручную добавить после set_output_delay
-add_delay чтобы учесть задержки внутри микросхемы.
des00
Цитата(_Anatoliy @ Dec 20 2008, 09:50) *
Коллеги,можете что посоветовать?


ко всему вышесказанному добавлю :

1. Судя по изображению не понятно откуда у вас, по мнению тайм квеста, идет клок на цап.
Это клок с генератора стоящего вне фпга и заходящего на цап и фпга? Если да выровнен ли он по фазе с клоком в фпга? в курсе ли таймквест соотношения фаз клоков фпга и цапа?

Или это клок идущий с фпга? Описан ли этот выходной клок в таймквесте ?

Лечение в этих случаях разное.

2. Вы не сказали находятся ли у вас выходные регистры в IO ячейках или нет.

3. Насчет таймквеста. У вас есть документ mnl_timequest_cookbook.pdf вы смотрели раздел I/O Constraints пример Example 1–11. Input and Output Delays Referencing a Virtual Clock ?

В примере приведен полный расчет необходимых времен. В задании set_output_delay нужно учесть 1. Tco фпга, Tsu/Th цапа, TBDmin/TBDmax по данным, TBD_CLKmin/TBD_CLKmax по клоку. (BD - Board Delay).

Просто вколотить туда какую нить цифирь от балды не совсем корректно %)

PS. совсем забыл, по разведенному нетлисту можно менять параметры IO буферов без переразводки проекта. Заходите в чип эдитор и делаете правки. Например можно уменьшить задержку на выходных буферах, если она была включена %)
_Anatoliy
Цитата(murmel1 @ Dec 20 2008, 22:00) *
3) Самое главное для достижения нужных Tsu, Tco, Th - это посчитать какие времена нужны и установить их в assigment editor.


Спасибо!Честно говоря не понял.Ну изменяю я параметры Tsu, Tco, Th - на картинке они меняются,но от этого не легче т.к. время задержки 5.6нс между Launch Clock и Data Arrival не изменяется.

Цитата(slawikg @ Dec 20 2008, 22:00) *


Спасибо.Добавление -add_delay никак не сказалось на результате.

Цитата(des00 @ Dec 20 2008, 22:00) *

Спасибо!
Да,ошибся я малость с Tsu,нужно не 1нс а 2нс.
Клок ClockDac формируется в ЦАПе(это не совсем ЦАП,а up-converter) и подаётся на вход ПЛИС.


Цитата(des00 @ Dec 20 2008, 22:00) *
2. Вы не сказали находятся ли у вас выходные регистры в IO ячейках или нет.

Сказал,возможно криво.(Фаст аутпут применил(без него вообще было Fmax 90МГц))
Попробовал добавить строки:
вместо #set_output_delay 2.00 -add_delay -clock [get_clocks ClockDac] [get_ports DataDac[*]]
написал
#specify the maximum external clock delay to the FPGA
set CLKs_max 0.200
#specify the minimum external clock delay to the FPGA
set CLKs_min 0.100
#specify the maximum external clock delay to the external device
set CLKd_max 0.200
#specify the minimum external clock delay to the external device
set CLKd_min 0.100
#specify the maximum setup time of the external device
set tSU 2.500
#specify the minimum setup time of the external device
set tH 2.000
#specify the maximum board delay
set BD_max 0.180
#specify the minimum board delay
set BD_min 0.120
#create the associated virtual input clock
create_clock -period 4.620 -name virt_sys_clk
set_output_delay -clock virt_sys_clk \
-max [expr $CLKs_max + $BD_max - $tSU - $CLKd_min] [get_ports {DataDac[*]}]
set_output_delay -clock virt_sys_clk \
-min [expr $CLKs_min + $BD_min - $tH - $CLKd_max] \
[get_ports {DataDac[*]}]
а так же
# Apply a 2ns max delay for an output port (TCO)
set_max_delay -from [get_registers *] -to [get_ports DataDac[*]] 2.000

картинка получилась такой:
Нажмите для просмотра прикрепленного файла

Стало ещё непонятней,а Data Arrival не изменилось.
des00
Цитата(_Anatoliy @ Dec 22 2008, 03:46) *
Стало ещё непонятней,а Data Arrival не изменилось.


такс, отставить панику, надо разложить все по полочкам.

Про регистры понятно, не заметил %)

Судя по вашим констрейнам вы используете схему запитки DAC клоком как в Figure 1–9. Chip-to-Chip Design, выше указанного документа. Это так ?

Кстати в этом документе есть ошибка я о ней уже писал, вы ее тоже совершили smile.gif http://electronix.ru/forum/index.php?act=S...f=5&t=52323 см. пост #12

Клок логики выходного сигнала на DAC пропущен через PLL ? Если да то в каком режиме стоит PLL? дает ли она сдвиг по фазе ?

Что именно у вас падает Tsu/Th ? приведите на картинке WaveForm и отчеты Path для обоих случаев. Хочется посмотреть через что у вас идет сигнал.
_Anatoliy
Цитата(des00 @ Dec 22 2008, 11:16) *
Судя по вашим констрейнам вы используете схему запитки DAC клоком как в Figure 1–9. Chip-to-Chip Design, выше указанного документа. Это так ?


Не понял, о каком документе речь.В mnl-sdctmq.pdf фигур нет.

Цитата(des00 @ Dec 22 2008, 11:16) *
Кстати в этом документе есть ошибка я о ней уже писал, вы ее тоже совершили smile.gif http://electronix.ru/forum/index.php?act=S...f=5&t=52323 см. пост #12


Понял,спасибо исправил.Копи-паст подводит...

Цитата(des00 @ Dec 22 2008, 11:16) *
Клок логики выходного сигнала на DAC пропущен через PLL ? Если да то в каком режиме стоит PLL? дает ли она сдвиг по фазе ?

Нет,ФАПЧ не задействуется,прямо с входной ножки используется.
Цитата(des00 @ Dec 22 2008, 11:16) *
Что именно у вас падает Tsu/Th ? приведите на картинке WaveForm и отчеты Path для обоих случаев. Хочется посмотреть через что у вас идет сигнал.


Падает Tsu. С Th всё в норме.
После корректировки по пост #12 слак увеличился: wacko.gif
Нажмите для просмотра прикрепленного файла
Нажмите для просмотра прикрепленного файла
des00
Цитата(_Anatoliy @ Dec 22 2008, 04:40) *
Не понял, о каком документе речь.В mnl-sdctmq.pdf фигур нет.


речь идет о документе Quartus II TimeQuest Timing Analyzer Cookbook, там приведены 2 схемы запитки тактовой частотой, 1. от внешнего генератора и 2. от самой фпга.

В общем так, вырежте секретное из проекта, оставьте на цап какой нить счетчик на частоте 250МГц и с описанием ваших времянок киньте мне ваш проект на мыло. Мой адрес у вас вроде бы есть

РЗ. Кстати времянки могут и не выполняться %) тогда нужно будет двигать фазу клока %)
_Anatoliy
Цитата(des00 @ Dec 22 2008, 12:09) *
речь идет о документе Quartus II TimeQuest Timing Analyzer Cookbook, там приведены 2 схемы запитки тактовой частотой, 1. от внешнего генератора и 2. от самой фпга.

В общем так, вырежте секретное из проекта, оставьте на цап какой нить счетчик на частоте 250МГц и с описанием ваших времянок киньте мне ваш проект на мыло. Мой адрес у вас вроде бы есть

РЗ. Кстати времянки могут и не выполняться %) тогда нужно будет двигать фазу клока %)


Спасибо!Отправил на диод.
А зачем нужно вводить виртуальный клок?Разве нельзя описать относительно физического?Если нельзя то в каких случаях нужно создавать виртуальный?

Цитата(_Anatoliy @ Dec 22 2008, 13:03) *
Спасибо!Отправил на диод.
А зачем нужно вводить виртуальный клок?Разве нельзя описать относительно физического?Если нельзя то в каких случаях нужно создавать виртуальный?


С виртуальным клоком вроде прояснилось.
Цитата
All input and output delays should reference a virtual clock so that the TimeQuest Timing Analyzer can derive and apply the correct clock uncertainty values when the derive_clock_uncertainty command is used. If the input and output delays reference base clocks or PLL clocks and not virtual clocks, the intra- and inter-clock transfer clock uncertainties, determined by derive_clock_uncertainty, are incorrectly applied to the I/O ports. Also, with virtual clocks, additional external clock uncertainties can be applied independent of the clock uncertainties determined by derive_clock_uncertainty.The properties of the virtual clock should be identical to the original clock used to clock either the input (input delay) or output (output delay) ports.
des00
Цитата(_Anatoliy @ Dec 22 2008, 06:51) *
Спасибо!Отправил на диод.


ндя, пока проект моделировался, покопался, занятная вешь. И ведь все по даташиту %))

не будет у вас времянка сходиться, как ни пишите %)

Дело вот в чем, смотрим документ Cyclone III Device Handbook, Table 1–65. EP3C25 Column I/O Pin Output Timing Parameters for Single-Ended I/O Standards (у меня страница 401). Затем смотрим ваш проект там стоит CycloneIII C8, 2.5V, 8мА. Смотрим табличку для этого режима GCLK tCO 5.384 ns/GCLK PLL tCO 3.620 ns. Теперь смотрим ваш проект и видим что в пути от выходного триггера до пада стоит задержка порядка 3.8нс. Прям даже лучше чем по даташиту %)).

Так что все нормально, никаких чудес. Рисует TimeQuest все правильно, при перекосе клоков около 3 нс и tco около 4х ну никак не влезть в 2.5нс tsu цапа за один такт %))

Вариантов решения 2 :
1. Воспользоваться мультициклом

Код
set_multicycle_path -from [get_clocks {ClockDac}] -to [get_clocks {virt_dac_clk}] -setup -end 3
set_multicycle_path -from [get_clocks {ClockDac}] -to [get_clocks {virt_dac_clk}] -hold -end 1


2. Подкрутить фазу на PLL.


ЗЫ. не забудьте для более точного анализа

Код
create_clock -name {ClockDac}     -period 4.620 [get_ports {ClockDac}]
create_clock -name virt_dac_clk -period 4.620

set_clock_uncertainty -from { virt_dac_clk } -setup 0.25
derive_clock_uncertainty



ЗЗЫ. для экспериментов сделайте назначение пинов, так по идее будет более правильно.

Удачи !!
_Anatoliy
Цитата(des00 @ Dec 22 2008, 16:33) *


Спасибо!Да уж,поторопился я...
Строчки с мультициклами проверил,компилятся,но эффекта на картинке нет.А каким боком здесь мультициклы?Ведь частота клока на входе и данных на выходе одинакова.
А Фапчи все уже заняты.

А если такой вариант:
set CLKdac 4.620
set_output_delay [expr 1-$CLKdac] -add_delay -clock [get_clocks ClockDac] [get_ports DataDac[*]]

Тогда получим задержку на 1 такт.Но это не важно.Главное чтобы все биты шины переключались внутри одного тактового интервала,тогда Tsu и Th выполнятся,но в другом такте.
Нажмите для просмотра прикрепленного файла
des00
Цитата(_Anatoliy @ Dec 22 2008, 11:14) *
Строчки с мультициклами проверил,компилятся,но эффекта на картинке нет.А каким боком здесь мультициклы?Ведь частота клока на входе и данных на выходе одинакова.

А если такой вариант:

Тогда получим задержку на 1 такт.Но это не важно.Главное чтобы все биты шины переключались внутри одного тактового интервала,тогда Tsu и Th выполнятся,но в другом такте.


дык это и есть мультицикл, в том смысле в котором он вводится в тайм квесте, т.е. анализировать валидные данные на втором/третьем и т.д. тактовом интервале smile.gif

Еще как вариант, правда со своими последствиями это сделать system synchronus output систему. т.е. кинуть клок на цап с фпга.

Ну в общем проблема ясна, все остальное это варианты ее решения %)
_Anatoliy
Цитата(des00 @ Dec 22 2008, 18:36) *
дык это и есть мультицикл, в том смысле в котором он вводится в тайм квесте, т.е. анализировать валидные данные на втором/третьем и т.д. тактовом интервале smile.gif

Еще как вариант, правда со своими последствиями это сделать system synchronus output систему. т.е. кинуть клок на цап с фпга.

Ну в общем проблема ясна, все остальное это варианты ее решения %)


А,ну да. Спасибо,мультициклы уже проверил,тоже нормально.Там только имя клока нужно заменить.
des00
Цитата(_Anatoliy @ Dec 22 2008, 11:48) *
А,ну да. Спасибо,мультициклы уже проверил,тоже нормально.Там только имя клока нужно заменить.


я тут подумал вобще то цап какой то не сильно вам подходящий. ну смотрите tsu/th = 2.5/2нc. Т.е. предельный период обновления данных, в идеальном случае выравнивания это 4.5нс. Вы заводите его на 4.62нс. Т.е. запас на разброс выравнивания у вас всего 0.12 нс. В вашей схеме, в температуре это может вылезти боком. ИМХО если есть возможность я бы подобрал другой цап.
_Anatoliy
Цитата(des00 @ Dec 23 2008, 05:51) *
я тут подумал вобще то цап какой то не сильно вам подходящий. ну смотрите tsu/th = 2.5/2нc. Т.е. предельный период обновления данных, в идеальном случае выравнивания это 4.5нс. Вы заводите его на 4.62нс. Т.е. запас на разброс выравнивания у вас всего 0.12 нс. В вашей схеме, в температуре это может вылезти боком. ИМХО если есть возможность я бы подобрал другой цап.


#specify the maximum setup time of the external device
set tSU 2.500
#specify the minimum setup time of the external device
set tH 2.000

Сейчас заметил противоречие: в комментарии описан сетап,а значение присваивается как холд.Ох уж эти примеры... Это я 2нс это я задавал как minimum setup.А tsu/th для этого цапа равны 2/1нс.Вроде жить можно.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.