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

 
 
> Плохие slack-и в IOE на Cyclone5 при тактировании через PLL, проблемы при тестировании простого примера
vlso
сообщение Feb 21 2014, 15:41
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 22-06-11
Из: Екатеринбург
Пользователь №: 65 833



Доброго времени суток !

Прошу совета опытных разработчиков, знатоков Altera TimeQuest Analyzer.
Не могу понять особенностей работы FPLL в Cyclone5.

Quartus 13.1 Web Edition, FPGA Cyclone 5 GT - 5CGTFD5C5F23C7
Исследую особенности нового для себя семейства Cyclone5 GT.

Создал маленький тестовый проект на AHDL.
Все входы и выходы LVTTL 3.3v. Потом сделал 2.5v - разницы почти нет.
Имеется глобальный сигнал тактовой частоты 100 MHz, подаваемый на вход GCLK.
Имеются два входа и два выхода (можно и по одному - просто два для
более достоверной статистики и сравнения между собой).
Имеются две независимых группы триггеров по три триггера в каждой группе
с общим сигналом тактовой частоты.
Первый триггер захлопывает данные с входа, второй захлопывает первый,
а третий захлопывает второй и соединен с выходом.
В общем простейшая цепочка триггеров с входа на выход.
Крайние триггеры нужны, чтобы их запихать в IOE.
Средние триггеры так, для порядка (привычка с семейства ACEX). sm.gif

Первый этап - проверка входных цепей (setup, hold). Пока на нём и застрял...
В .sdc файле TimeQuest Analyzer указал, что входной сигнал валиден
за 3 нс до положительного фронта тактовой частоты и 0 нс после.
TimeQuest Analyzer выдал 0.629ns setup slack и 0.973 ns hold slack.
Cуммарный slack примерно 1.6ns для самого тяжелого варианта
использования (Slow 1100mV 85C). Не густо, но терпимо.
То есть окно валидных данных на входном триггере
за счет особенностей FPGA уменьшилось на 1.4 ns.

Решил проверить работу FPLL. Создал мегавизардом вариацию,
которая ничего не делает с входной тактовой частотой (PLL в NORMAL mode)
в плане частоты и фазы. Просто умножает на 3, а потом делит на 3,
сохраняя фазу (подстраиваясь к входной тактовой частоте).
Подал тактовую частоту с выхода FPLL на входа всех триггеров.
Входные триггеры разумеется разместил в IOEs. По идее, за счёт PLL,
тактовая частота на портах .clk первого триггера практически
приближается по фазе к искомой, что на пине.
В .sdc файле соответственно добавил в группу тактовую частоту FPLL.
Почему-то ожидал соизмеримых slack-ов, а получил печальную картину.
Setup slack 0.042 ns, hold slack 0.4 ns.
Долго колупался. Перепробовал все мыслимые и немыслимые настройки,
пробовал все 13-ые версии Quartus, но значимо изменить
суммарный slack, относительно выходной тактовой частоты PLL
на .clk входе триггера, не получилось.

Заметил, что если подавать тактовую частоту на другие шарики GCLK,
то суммарный slack немного вырастает примерно до 0.85 ns.
Видно зависит от того, через какой именно CLKCTRL будет выход PLL пропущен.

А теперь самое интересное. Если проект компилировать под Cyclone4,
то суммарный slack с этой же схемой с PLL и аналогичным .sdc файлом около 1.8 ns !
Неужели так всё ухудшили в Cyclone 5...

Сравнил отчеты cyclone4 и cyclone5. Время компенсации GCLK для PLL
при расчете setup почти такое же, как и для HOLD. Соответственно
и задержки в CLKCTRL то же. А вот для Cyclone5 они уже начинают
разбегаться заметнее.

Думал дело в кривости новой мегафункции altera_pll вместо altpll.
Проверил. Компилировал с altpll. Quartus успешно скомпилировал altpll
для cyclone5, но slack-и от этого ничуть не выросли.

Подскажите в чем я заблуждаюсь.
Может в .sdc файле что не то сделал, но ведь в cyclone4 были те же .sdc
Идеи уже почти кончились.
Ниже привожу исходники, а также весь проект в аттаче.

include "FPLL.inc";

SUBDESIGN main
(
clk : input; -- 100Mhz core clock from external PLL chip
reset : input;

ina : input;
outa : output;

inb : input;
outb : output;

locked : output;
)

VARIABLE

inaL : dff;
midaL : dff;
outaL : dff;

inbL : dff;
midbL : dff;
outbL : dff;

FPLLM : FPLL;

BEGIN

FPLLM.refclk=clk;
FPLLM.rst=!reset;
-->FPLLM.outclk_0
-->FPLLM.locked
locked=FPLLM.locked;


inaL.clk=FPLLM.outclk_0;
inaL=ina;

midaL.clk=FPLLM.outclk_0;
midaL=inaL;

outaL.clk=FPLLM.outclk_0;
outaL=midaL;
outa=outaL;


inbL.clk=FPLLM.outclk_0;
inbL=inb;

midbL.clk=FPLLM.outclk_0;
midbL=inbL;

outbL.clk=FPLLM.outclk_0;
outbL=midbL;
outb=outbL;

END;


main.sdc файл:

set_time_format -unit ns -decimal_places 3

create_clock -name {clk} -period 10.000 -waveform { 0.000 5.000 } [get_ports {clk}]
derive_pll_clocks -create_base_clocks
derive_clock_uncertainty

set_clock_groups -exclusive -group {clk FPLLM|fpll_inst|altera_pll_i|general[0].gpll~PLL_OUTPUT_COUNTER|divclk}

# delay calculation: x=period-Tsu
set_input_delay -clock "clk" -max 7ns [get_ports {ina}]
set_input_delay -clock "clk" -max 7ns [get_ports {inb}]

# delay calculation: x=Th
set_input_delay -clock "clk" -min 0ns [get_ports {ina}]
set_input_delay -clock "clk" -min 0ns [get_ports {inb}]


и .qsf настройки:
set_global_assignment -name FAMILY "Cyclone V"
set_global_assignment -name DEVICE 5CGTFD5C5F23C7
set_global_assignment -name TOP_LEVEL_ENTITY main
set_global_assignment -name ORIGINAL_QUARTUS_VERSION "13.0 SP1"
set_global_assignment -name PROJECT_CREATION_TIME_DATE "14:54:42 FEBRUARY 13, 2014"
set_global_assignment -name LAST_QUARTUS_VERSION 13.1
set_global_assignment -name PROJECT_OUTPUT_DIRECTORY output_files
set_global_assignment -name PARTITION_NETLIST_TYPE SOURCE -section_id Top
set_global_assignment -name PARTITION_FITTER_PRESERVATION_LEVEL PLACEMENT_AND_ROUTING -section_id Top
set_global_assignment -name PARTITION_COLOR 16764057 -section_id Top
set_global_assignment -name MIN_CORE_JUNCTION_TEMP 0
set_global_assignment -name MAX_CORE_JUNCTION_TEMP 85
set_global_assignment -name STRATIXV_CONFIGURATION_SCHEME "ACTIVE SERIAL X1"
set_global_assignment -name USE_CONFIGURATION_DEVICE ON
set_global_assignment -name STRATIXII_CONFIGURATION_DEVICE EPCS64
set_global_assignment -name GENERATE_TTF_FILE ON
set_global_assignment -name GENERATE_RBF_FILE ON
set_global_assignment -name CRC_ERROR_OPEN_DRAIN OFF
set_global_assignment -name ON_CHIP_BITSTREAM_DECOMPRESSION OFF
set_global_assignment -name STRATIX_DEVICE_IO_STANDARD "2.5 V"
set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -rise
set_global_assignment -name OUTPUT_IO_TIMING_NEAR_END_VMEAS "HALF VCCIO" -fall
set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -rise
set_global_assignment -name OUTPUT_IO_TIMING_FAR_END_VMEAS "HALF SIGNAL SWING" -fall
set_global_assignment -name ACTIVE_SERIAL_CLOCK FREQ_50MHZ
set_global_assignment -name TIMEQUEST_DO_REPORT_TIMING ON
set_global_assignment -name TIMEQUEST_DO_CCPP_REMOVAL ON
set_global_assignment -name POWER_PRESET_COOLING_SOLUTION "NO HEAT SINK WITH STILL AIR"
set_global_assignment -name POWER_BOARD_THERMAL_MODEL "NONE (CONSERVATIVE)"
set_global_assignment -name SYNTH_TIMING_DRIVEN_SYNTHESIS ON
set_global_assignment -name ROUTER_TIMING_OPTIMIZATION_LEVEL NORMAL

set_location_assignment PIN_E10 -to clk
set_location_assignment PIN_A5 -to ina
set_location_assignment PIN_A12 -to inb
set_global_assignment -name SDC_FILE main.sdc
set_global_assignment -name AHDL_FILE main.tdf
set_global_assignment -name QIP_FILE FPLL.qip
set_global_assignment -name SIP_FILE FPLL.sip
set_global_assignment -name OPTIMIZATION_TECHNIQUE SPEED
set_global_assignment -name OPTIMIZE_HOLD_TIMING "ALL PATHS"
set_global_assignment -name OPTIMIZE_MULTI_CORNER_TIMING ON
set_global_assignment -name FITTER_EFFORT "STANDARD FIT"
set_instance_assignment -name FAST_INPUT_REGISTER ON -to ina
set_instance_assignment -name FAST_INPUT_REGISTER ON -to inb
set_instance_assignment -name PLL_FEEDBACK_CLOCK_SIGNAL "GLOBAL CLOCK" -to "*FPLL_0002*|altera_pll:altera_pll_i*|*outclk_wire[0]"
set_instance_assignment -name PARTITION_HIERARCHY root_partition -to | -section_id Top

Прикрепленные файлы
Прикрепленный файл  Test.zip ( 23.74 килобайт ) Кол-во скачиваний: 13
 
Go to the top of the page
 
+Quote Post



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

 


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


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