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

как повысить быстродействие?

Доброго времени суток.Квартус 8.0,Циклон3.На ЦАП нужно выводить отсчёты 12 бит со скоростью 220Msps.STA сообщает что Fmax = 178МГц и соответственно выводит картинку:

post-18832-1229783841_thumb.jpg

Slack минусовый.

Видно что довольно большое время занимает Clock delay, вот бы его уменьшить...Как? ;)

 

В файле .sdc клок описал.Фаст аутпут применил(без него вообще было Fmax 90МГц).

set_output_delay 1.00 -clock [get_clocks ClockDac] [get_ports DataDac[*]]

 

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

 

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

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


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

Я немного отстаю от прогресса и до Квартуса 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 я не знаю (еще не сталкивался), читайте мануалы !

Изменено пользователем murmel1

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


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

Доброго времени суток.Квартус 8.0,Циклон3.На ЦАП нужно выводить отсчёты 12 бит со скоростью 220Msps.STA сообщает что Fmax = 178МГц и соответственно выводит картинку:

post-18832-1229783841_thumb.jpg

Slack минусовый.

Видно что довольно большое время занимает Clock delay, вот бы его уменьшить...Как? ;)

 

В файле .sdc клок описал.Фаст аутпут применил(без него вообще было Fmax 90МГц).

set_output_delay 1.00 -clock [get_clocks ClockDac] [get_ports DataDac[*]]

 

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

 

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

 

Вам нкжно либо в таймквесте зедавать set_output_delay, либо вручную добавить после set_output_delay

-add_delay чтобы учесть задержки внутри микросхемы.

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


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

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

 

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

 

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 буферов без переразводки проекта. Заходите в чип эдитор и делаете правки. Например можно уменьшить задержку на выходных буферах, если она была включена %)

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


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

3) Самое главное для достижения нужных Tsu, Tco, Th - это посчитать какие времена нужны и установить их в assigment editor.

 

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

 

 

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

 

Спасибо!

Да,ошибся я малость с Tsu,нужно не 1нс а 2нс.

Клок ClockDac формируется в ЦАПе(это не совсем ЦАП,а up-converter) и подаётся на вход ПЛИС.

 

 

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

 

картинка получилась такой:

post-18832-1229935236_thumb.jpg

 

Стало ещё непонятней,а Data Arrival не изменилось.

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


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

Стало ещё непонятней,а Data Arrival не изменилось.

 

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

 

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

 

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

 

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

 

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

 

Что именно у вас падает Tsu/Th ? приведите на картинке WaveForm и отчеты Path для обоих случаев. Хочется посмотреть через что у вас идет сигнал.

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


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

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

 

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

 

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

 

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

 

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

Нет,ФАПЧ не задействуется,прямо с входной ножки используется.

Что именно у вас падает Tsu/Th ? приведите на картинке WaveForm и отчеты Path для обоих случаев. Хочется посмотреть через что у вас идет сигнал.

 

Падает Tsu. С Th всё в норме.

После корректировки по пост #12 слак увеличился: :wacko:

post-18832-1229938702_thumb.jpg

post-18832-1229938717_thumb.jpg

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


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

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

 

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

 

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

 

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

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


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

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

 

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

 

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

 

Спасибо!Отправил на диод.

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

 

Спасибо!Отправил на диод.

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

 

С виртуальным клоком вроде прояснилось.

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.

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


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

Спасибо!Отправил на диод.

 

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

 

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

 

Дело вот в чем, смотрим документ 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

 

 

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

 

Удачи !!

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


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

 

Спасибо!Да уж,поторопился я...

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

А Фапчи все уже заняты.

 

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

set CLKdac 4.620

set_output_delay [expr 1-$CLKdac] -add_delay -clock [get_clocks ClockDac] [get_ports DataDac[*]]

 

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

post-18832-1229962391_thumb.jpg

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


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

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

 

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

 

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

 

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

 

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

 

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

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


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

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

 

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

 

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

 

А,ну да. Спасибо,мультициклы уже проверил,тоже нормально.Там только имя клока нужно заменить.

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


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

А,ну да. Спасибо,мультициклы уже проверил,тоже нормально.Там только имя клока нужно заменить.

 

я тут подумал вобще то цап какой то не сильно вам подходящий. ну смотрите tsu/th = 2.5/2нc. Т.е. предельный период обновления данных, в идеальном случае выравнивания это 4.5нс. Вы заводите его на 4.62нс. Т.е. запас на разброс выравнивания у вас всего 0.12 нс. В вашей схеме, в температуре это может вылезти боком. ИМХО если есть возможность я бы подобрал другой цап.

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


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

я тут подумал вобще то цап какой то не сильно вам подходящий. ну смотрите 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нс.Вроде жить можно.

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


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

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

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

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

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

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

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

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

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

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