Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Снова про констрейны
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
карамболь
Снова возникли проблемы с времянками. До последнего момента Ниос работал на 75 МГц, но после добавления в систему SRAM, CFI и еще кое чего по мелочи, при компиляции ругается -

Type : Clock Setup: 'altpll0:inst1|altpll:altpll_component|altpll_5pj2:auto_generated|clk[0]'
Slack : -0.802 ns
Required Time : 75.00 MHz ( period = 13.333 ns )
Actual Time : 70.75 MHz ( period = 14.135 ns )
From : nios_test1:sopc_system_inst|cpu_0:the_cpu_0|A_mem_baddr[27]
To : nios_test1:sopc_system_inst|onchip_memory2_0:the_onchip_memory2_0|altsyncram:the
_altsyncram|altsyncram_2bc1:auto_generated|ram_block1a149~porta_we_reg

From Clock : altpll0:inst1|altpll:altpll_component|altpll_5pj2:auto_generated|clk[0]
To Clock : altpll0:inst1|altpll:altpll_component|altpll_5pj2:auto_generated|clk[0]
Failed Paths : 2205


Пока в SDC файле присустствует только это (это только то, что касается тактовой, )

create_clock -period 20.00 -name clk_50 [ get_ports clk_50 ]
create_clock -period 8.00 -name clk_125 [ get_ports clk_125 ]

# Deriving PLL Clocks
derive_pll_clocks

# Providing easier to use clock names
#set System_Clock {enet_pll_inst|altpll_component|auto_generated|pll1|clk[0]}
set clk_75 {inst1|altpll_component|auto_generated|pll1|clk[0]}
set clk1_125 {inst1|altpll_component|auto_generated|pll1|clk[1]}
set clk2_125 {inst1|altpll_component|auto_generated|pll1|clk[2]}

Пока пользовался SDC файлом любезно предоставленным vadimuzzz, но в нем нет констрейнов для тактовой процессора.

Читал "Таймквест для чайников", пытался сделать констрейны по аналогии, но видимо неудачно.

PLL в моей системе является внешней для СОПЦа. На входе PLL clk_50, выход clk_75 завожу на клок Ниоса

Прошу помощи у специалистов.

vadimuzzz
это:
Код
create_clock -period 20.00 -name clk_50  [ get_ports clk_50  ]

+ это:
Код
derive_pll_clocks

задают все клоки, в т.ч. тактовую для процессора.
картина далека от ясности, но есть подозрение, что много всего навешали (особенно SRAM и CFI большой разрядности), а бриджами как следует не развязали, вот тактовая и просела. картинку из билдера покажите, еще можно html файлик с названием системы, что билдер генерит, там хорошее summary.
карамболь
SRAM 32 разрядов
CFI 16 разрядов


vadimuzzz
да, вроде похоже на то, о чем я говорил. тогда курите 4-й том квартус хендбука, глава 11 про
Avalon-MM Pipeline Bridge. он определенно должен помочь поднять тактовую ценой увеличения латентности,
проблема только в том, что решение не единственное. что точно стоит сделать - отрезать таким мостом
периферию типа UART, PIO (на них одного моста хватит). а вот с памятью надо разные варианты
попробовать, с разным количеством мостов, поиграть с топологией.
карамболь
спасибо.
У меня еще такая проблема с платой Altera Cyclon III DevBoard, постоянно приходится передергивать JTAG, иначе он отваливается и невозможно записать SOF в FPGA, регулярно при перетыкании вылезает сообщение, что обнаружено неизвестное устройство и с ним какие то проблемы. Это виндовские глюки ? Известно как с этим бороться ? Иногда SOF грузится нормально, но происходят проблемы при загрузке софта для Ниоса
vadimuzzz
может кабель или разъемы хреновые, посмотрите сигналы осциллографом
карамболь
развязал периферию (rs232, timer, PIO) через pipeline bridge, также добавил отдельный tristate bridge для флешки, пересобрал систему - Fmax не увеличилась. Что еще можно предпринять ?
vadimuzzz
ну, самая жирная шина у SRAM, отрежьте ее мостом (pipeline). потом FLASH и т.д. следите не только за Fmax (она по наихудшему сигналу измеряется), но и за количеством сигналов, не уложившихся в констрейны. в общем, поиграйтесь с мостами (можно тупо систему только проц + SRAM взять, замерить Fmax, добавить мост, замерить с ним).
карамболь
Цитата(vadimuzzz @ Dec 9 2010, 16:22) *
ну, самая жирная шина у SRAM, отрежьте ее мостом (pipeline). потом FLASH и т.д. следите не только за Fmax (она по наихудшему сигналу измеряется), но и за количеством сигналов, не уложившихся в констрейны. в общем, поиграйтесь с мостами (можно тупо систему только проц + SRAM взять, замерить Fmax, добавить мост, замерить с ним).


простите, не совсем понял. Нужно поставить pipeline бридж между ЦПУ и Tristate бриджем SRAM (у меня в данный момент 2 Tristate бриджа, отдельно для SRAM и флешки)?
vadimuzzz
Цитата(карамболь @ Dec 9 2010, 19:34) *
простите, не совсем понял. Нужно поставить pipeline бридж между ЦПУ и Tristate бриджем SRAM (у меня в данный момент 2 Tristate бриджа, отдельно для SRAM и флешки)?

да, м.б. получится одним обойтись, но надо пробовать разные варианты. смысла в 2 tristate мостах нет, там регистрятся только входы.
карамболь
установка pipeline бриджа позволила увеличить частоту на 10 МГц, т.е. в требуемые 75 МГЦ я вписался, но хочется большего, тем более, что у многих
Ниос на 120 МГц работает.
Тут еще такая бяка вылезла -
Type : Clock Setup: 'altpll0:inst1|altpll:altpll_component|altpll_5pj2:auto_generated|clk[2]'

Slack : -2.737 ns

Required Time : 125.00 MHz ( period = 8.000 ns )

Actual Time : N/A

From : nios_test1:sopc_system_inst|triple_speed_ethernet_0:the_triple_speed_ethernet_0|
altera_tse_mac:altera_tse_mac_inst|altera_tse_top_gen_host:top_gen_host_inst|alte
ra_tse_mac_control:U_MAC_CONTROL|altera_tse_register_map:U_REG|command_config[9]

To : nios_test1:sopc_system_inst|triple_speed_ethernet_0:the_triple_speed_ethernet_0|
altera_tse_mac:altera_tse_mac_inst|altera_tse_top_gen_host:top_gen_host_inst|alte
ra_tse_top_w_fifo_10_100_1000:U_MAC_TOP|altera_tse_top_w_fifo:U_MAC|altera_tse_to
p_1geth:U_GETH|altera_tse_mac_tx:U_TX|rd_3[3]

From Clock : clk_50

To Clock : altpll0:inst1|altpll:altpll_component|altpll_5pj2:auto_generated|clk[2]

Failed Paths : 90


Это уже слаки по 125 МГц, от которых тактируется передатчик МАС гигабитный, при это он работает, ставил заглушку, чего передаю, то и принимаю, ошибок не обнаружил, но боюсь на предельных температурах могу поиметь с этими слаками неприятности.
vadimuzzz
по поводу Fmax - я никогда не гоняюсь за тактовой, прирост производительности от ее увеличения небольшой, на
FPGA есть другие пути. 120МГц - это для простенькой системы с памятью DDR, при этом сильно не факт, что она реально
быстрее, скажем, системы из SRAM и ниос на 75МГц (сравнение теплого с мягким в общем-то). и в любом случае, имейте в
виду, что увеличение Fmax идет за счет латентности, так что на произвольном доступе идет даже потеря в скорости.
задайте другой критерий, на всю систему в целом. например, пропускная способность TCP/IP - хороший критерий, и для
увеличения ее не надо гнать частоту (вернее, можно, но есть и другие способы).
например (делал недавно), система на 85МГц (неточно, м.б. и меньше) без особого
напряга и оптимизаций "прокачивала" по UDP ~600Мбит.

что касается клоков, то забейте их как false path, т.к. в MAC`е стоят двухклоковые FIFO в обе стороны,
анализировать их не надо.
карамболь
большое спасибо. Хочу добавить, что SRAM SRAMу рознь, на альтеровской плате стоит память на 70 нсек, с такой большой производительности не добиться.
А флешка у меня вообще не работает, 100 раз уже все сигналы проверил, все вроде правильно, но не работает, даже LED Flash Active не мигает, SRAM запустилась с полпинка, куда копать ума не приложу. Еще вопрос по поводу паралельной загрузки, насколько я понял у каждой ПЛИС есть определенный набор ног для подключения CFI, нашел в сети документ ep3c120.xls (Pin Information for the Cyclone® III EP3C120 Device), но информация по ножкам в этом документе не стреляет с разводкой на плате Altera Cyclon III DevBoard ? Не подскажите как называется дока, в которой описано куда цеплять загрузочную CFI Flash, я планирую хранить в ней прошивку для FPGA и грузить с нее софт Ниоса в он-чип память.
vadimuzzz
ну, в доках на борду посмотрите, там есть схематик. еще там есть qsf-файлик с распиновкой, добавляете его
в qsf проекта (
Код
source cycloneIII_3c120_dev_golden_top.qsf
) и все (только ноги должны называться как в qsf). приложил в аттач.

вообще, для вашей платы есть хорошие примеры. вот, например: http://nioswiki.com/ExampleDesigns/Nios_II..._Design_Example
карамболь
за совет спасибо, правда все не так просто оказалось -
мало добавить - source cycloneIII_3c120_dev_golden_top.qsf

нужно еще править сам файл cycloneIII_3c120_dev_golden_top.qsf

пришлось вставить в строке - set_global_assignment -name TOP_LEVEL_ENTITY golden_top
название своего TOP_LEVEL_ENTITY и еще удалить строки -
set_global_assignment -name VERILOG_FILE golden_top.v
set_global_assignment -name TEXT_FILE backup.txt

зато все пины автоматом определились )

Но все же вопрос распиновки флешки остался открытым, что если я решу в своем железе использовать другую FPGA, в какой доке брать распиновку для CFI или EPCS ?



vadimuzzz
Цитата(карамболь @ Dec 10 2010, 18:06) *
Но все же вопрос распиновки флешки остался открытым, что если я решу в своем железе использовать другую FPGA, в какой доке брать распиновку для CFI или EPCS ?

а в чем вопрос-то? смотрите хендбук на циклон-3, там все схемы есть. самый простой вариант и самый дешевый - SPI флешки
(Numonyx, например), там всего 4 ноги подключить, объемы есть всякие за копейки. нужна быстрая загрузка - P30 (Intel) или P33(Numonyx), цепляются на выделенную шину. режим через MSEL выставляется.
карамболь
для меня главное, чтобы прошивка ПЛИС и программа для НИОСа влезла. Сейчас мой POF весит около 60Мбайт, сколько места он займет в EPCS ?
vadimuzzz
какой у вас циклон? 120-й? тогда максимум 28,6 Мбит, видимо в pof избыточность внесена. SPI-флешка на 128 Мбит 4-5 баксов
карамболь
спасибо. Думаю, EPCS на 128 Мбит мне хватит с запасом.
vadimuzzz
Цитата(карамболь @ Dec 11 2010, 16:52) *
спасибо. Думаю, EPCS на 128 Мбит мне хватит с запасом.

главное, альтеровские флешки не берите, у них ценник невменяемый. Spansion, Numonyx - наше всё.
карамболь
а заливка конфигурации FPGA и софта через JTAG ? Или понадобится дополнительный костыль типа SFL ? Спасибо.
vadimuzzz
найдите в хендбуке на циклон Combining JTAG and AS Configuration Schemes,
при отладке используется JTAG, если надо конфигурацию сохранить в памяти -
используется nios2-flash-programmer или jic (если ниоса в системе нет)
карамболь
спасибо
Fynjisx
Цитата(vadimuzzz @ Dec 8 2010, 18:38) *
это:
Код
create_clock -period 20.00 -name clk_50 [ get_ports clk_50 ]
create_clock -period 8.00 -name clk_125 [ get_ports clk_125 ]

# Deriving PLL Clocks
derive_pll_clocks

# Providing easier to use clock names
#set System_Clock {enet_pll_inst|altpll_component|auto_generated|pll1|clk[0]}
set clk_75 {inst1|altpll_component|auto_generated|pll1|clk[0]}
set clk1_125 {inst1|altpll_component|auto_generated|pll1|clk[1]}
set clk2_125 {inst1|altpll_component|auto_generated|pll1|clk[2]}

задают все клоки, в т.ч. тактовую для процессора.
картина далека от ясности, но есть подозрение, что много всего навешали (особенно SRAM и CFI большой разрядности), а бриджами как следует не развязали, вот тактовая и просела. картинку из билдера покажите, еще можно html файлик с названием системы, что билдер генерит, там хорошее summary.

Скажите вот приведенные выше строки надо добавить в автоматически сгенерированный SOOPC'ом файл "processor_name.sdc"??? Или его не трогат а создать свой собственный и через Setting на него указать?
Fynjisx
Цитата(vadimuzzz @ Dec 8 2010, 18:38) *
это:
Код
create_clock -period 20.00 -name clk_50  [ get_ports clk_50  ]

+ это:
Код
derive_pll_clocks

задают все клоки, в т.ч. тактовую для процессора.
картина далека от ясности, но есть подозрение, что много всего навешали (особенно SRAM и CFI большой разрядности), а бриджами как следует не развязали, вот тактовая и просела. картинку из билдера покажите, еще можно html файлик с названием системы, что билдер генерит, там хорошее summary.

У меня подобная проблема. Что-тоне могу сообразить насчет вот чего -максимальный отрицательный слак у 66 элементов по hold = -0.032 с выхода pll 50MHz. Т.е уже не порядок. Какими способами это корректится? А то что-то у меня с 50 и уже такие проблемы))). Пока ограничения стоят только по тактовой в системе, как и у автора данного топика.
Orochi
Цитата(Fynjisx @ Feb 15 2012, 11:51) *
Скажите вот приведенные выше строки надо добавить в автоматически сгенерированный SOOPC'ом файл "processor_name.sdc"??? Или его не трогат а создать свой собственный и через Setting на него указать?


Вопрос остался пока не раскрыт. Если кто-нибудь может кратко описать как работать с этими констрейнами буду благодарен.
Что не понятно:
1. Создание - самому файл создавать или он должен генерироваться квартусом. Нигде не могу найти. Надо ли его добавлять в проект.
2. Содержание - про констрейны информация размазана по Quartus II Handbook на столько что незнаю с чего начать. Про скрипты тоже самое. Может посоветуете откуда начать изучение (пока интересуют констрейны и всё что там можно заскриптовать и описание синтаксиса).


Немного с констрейнами разобрался, но не понятен вопрос такой:

как я понял для Top-level создаётся файл констрейнов с общими ограничениями, для low-level (для каждого) создаёься файл с "уточнёнными" констрейнами, так вот вопрос: Как я должен указывать какой файл констрейнов относится к какому суб-модулю?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.