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

novartis

Свой
  • Публикаций

    375
  • Зарегистрирован

  • Посещение

Репутация

0 Обычный

Информация о novartis

  • Звание
    Местный

Информация

  • Город
    Свердловский регион

Посетители профиля

5 423 просмотра профиля
  1. Два трансивера, больше не предвидится. По документации на чип - имеется 32 глобальных линии клока, 16 региональных, 384 Small periphery clock, 24 Large periphery clock (думаю это как раз мои клоки из трансиверов). Так что пару глобальных линий можно и потратить. это комбинаторика, это я по быстрому сообщение писал, не подумал, так то конечно квартус выкинет. altclkctrl я ставил, там в настройках ядра указывается для какой цели задается клок - ставил for global cljck. Даже ничего в sdc прописывать не надо. На тот момент я сделал глобальным клок для всей логики, от этого констрейны для параллельных данных от трансиверов перестали выполняться. Сейчас пытаюсь собрать проект, в котором часть логики (предварительная обработка параллельных данных из трансиверов) тактируется клоками из трансиверов (периферийными клоками), а уже дальнейшая логика тактируется клоками из pll, сгенеренными от тех же кварцев, что используются для трансиверов. С переходом через двухклоковое фифо.
  2. Да не то чтобы неожиданностью, раньше не задумывался над этим, мне было всё равно, как там всё разлеглось, если констрейны выполнились. Логика, которая плохо разводится, тактируется клоками из трансиверов, эти клоки - периферийные. Я пробовал сделать эти клоки глобальными, в итоге разводится равномерно, где то по середине между pcie и трансиверами, но при этом появляются отрицательные слаки в путях параллельных данных от трансиваеров. Сейчас поступил так: разделил проект на две части, одну часть тактирую клоками из трансивера, эти клоки периферийные, здесь происходит первоначальная обработка параллельных данных; другую часть тактирую клоком из pll (глобальный клок), здесь уже следующая стадия обработки параллельных данных. Переход между клоковыми доменами сделал через двухклоковое фифо. Все разводится отлично, констрейны выполнены. Но мне надо избавиться от фифо. По идеи, есть rx_clk0 из трансивера, это периферийный клок. Можно как то создать другой клок gl_clk0 на основе rx_clk0, назначить его глобальным, и сделать переход от клокового домена rx_clk0 в клоковый домен gl_clk0 просто путем задержки на один такт? gl_clk0 <= rx_clk0; -- rx_clk0 останется периферийным, gl_clk0 - в sdc файле назначу глобальным process (rx_clk0) begin if (rising_edge(rx_clk0)) then data <= ....; -- эти данные тактируются rx_clk0 end if; end process; process (gl_clk0) begin if (rising_edge(gl_clk0)) then data_new <= data; -- эти данные уже тактируются глобальным клоком gl_clk0 end if; end process; Вот такой вариант будет корректно работать? Я конечно сам попробую так сделать, но уже завтра только смогу проверить.
  3. Нагуглил, где можно посмотреть список глобальных, региональных клоков: Fitter > Resource Section > Global & Other fast signals Получается, что клок из трансивера - периферийный.
  4. Ну вот я хочу добавить еще модулей для работы с данными на этих частотах, квартус туда же все пихает и констрейны перестают выполняться.
  5. Есть проект под Аррию 10. Данные в плис поступают через два трансивера, задействованы Altera Native Phy ядра. Так же задействовано ip ядро pcie. После компиляции проекта наблюдаю в Chip Planner, что логика в основном сосредоточена в одной области, четко видны границы сверху и снизу. Я так понимаю, что это области "действия" клоков трансиверов. И та логика, что крутится на частотах из трансиверов, размещается квартусом именно в эти области. Хотелось бы указать квартусу использовать весь кристалл для разводки логики, как это сделать? И еще вопрос, ядро Altera Transceiver Native Phy выдает клок rx_pma_clkout, как то можно узнать, какой это клок - глобальный, региональный...?
  6. Нашел у себя ошибку в формировании сигнала tx_st_empty для pcie ядра альтеры. Исправил, теперь pcie не отваливается. Использую только tx_st_ready, а с tx_cred так и не разобрался.
  7. Прислали ответ из саппорта альтеры: ЦитатаThanks for using Intel MySupport. This may be one of known issue from what I found out in our database. According to that communication, it should have been fixed in Quartus Pro and not propagated to Standard. Are you going to migrate your design to Pro? Or you may try out to disable the following QSF in Standard to avoid the occurrence of IE: set_global_assignment -name SPECTRAQ_PHYSICAL_SYNTHESIS OFF Let me know if it is working on your design. В Standard версии выключил SPECTRAQ_PHYSICAL_SYNTHESIS, проблема исчезла, за пять компиляций ни разу не падал. И время компиляции уменьшилось, было ~60 минут, стало ~45.
  8. ЦитатаЕсть сигналы готовности rx_st_ready и tx_st_ready, их и используйте. Разумеется я их использую... Запускаю пересылку данных по pcie, нагрузка порядка 20 Гигабит/с. Частая запись со стороны ПЛИС и чуть пореже чтение из памяти ПК. Сигнал tx_st_ready иногда перещелкивается в 0, в такие моменты за два такта (как рекомендует альтера) прекращаю посылку пакетов в tx линию. Через какое то время (может 10 минут, может 30 минут) сигнал tx_st_ready падает навсегда. Пересматриваю последние транзакции, никакого криминала не вижу, все формирую в соответствии со стандартом. Из-за чего то же падает корка, вот и решил разобраться с tx_cred, может я лимиты превысил...
  9. У Pci Express IP Core у Альтеры есть сигналы tx_cred для шести типов буферов: posted header, posted data, non-posted header, non-posted data, completion header, completion data. Я использую только запись и чтение, поэтому для меня Posted header и posted data - это Memory Write Request Non-posted header - это Memory Read Request Так вот вопрос, что за цифры в сигналах tx_cred? Они постоянно увеличиваются. Посылаю Memory Write - tx_cred Posted header и posted data увеличиваются. Посылаю Memory Read - tx_cred Non-posted увеличивается. Сигнал header имеет ширину 8 бит, до 255 доходит и перепрыгивает на 0. Я понять не могу, что это за кредиты такие и как их учитывать у себя в Application Level? Сначала думал, что это заполненность фифо, но оно ж не уменьшается... Использую Аррию 10, непосредственно картинка с сигналтапа: [attachment=110847:Scr0047.jpg] Здесь вообще странно, по линии rx приходят запросы на запись и на чтение. В ответ на чтение я в линию tx возвращаю пакеты completion. Все пять пакетов по линии tx на картинке - это ответы на чтение. (Для completion пакетов у меня бесконечные кредиты) В линию tx я запросы на запись и запросы на чтение не посылаю, но при этом i_tx_cred_posted_header и i_tx_cred_posted_data увеличиваются. Разъясните пожалуйста что это за кредиты такие))
  10. Тест памяти и снос винды - пока это будет план Б). Я пишу на vhdl, sv не использую, но в проекте есть корки от Альтеры (pcie, трансиверы), а там sv присутствует. Пользуюсь квартусом 17.0.2, на другом квартусе проверить можно, но надо для этого перегенерить корки... Падает на одном конкретном проекте, я в принципе только им и занимаюсь. Еще в проекте созданы partition designs, а в краш репорте упомянуто oterms are in different partitions (atom: -1). Может из-за этого.... PS: удалил половину design partitions, проект не чистил - в результате скомпилилось .
  11. Очень часто падает квартус при компиляции одного проекта в начале стадии Fiitter. Чтобы скомпилить проект с первого раза, делаю очистку проекта, чаще всего это помогает. Сегодня что то никак не компилится. Последние сообщения в квартусе: КодInfo (14951): The Fitter is using Advanced Physical Optimization. Info (170190): Fitter placement preparation operations ending: elapsed time is 00:02:39 Info (11888): Total time spent on timing analysis during Global Placement is 43.63 seconds. Info (18258): Fitter Spectra-Q Physical Synthesis operations beginning И репорт из краш репорта: КодProblem Details Error: Internal Error: Sub-system: AMM, File: /quartus/db/amm/amm_atom_mod_util_impl.cpp, Line: 4729 oterms are in different partitions (atom: -1) Stack Trace:     0x310c9: AMM_ATOM_MOD_UTILITY_IMPL::should_return + 0x109 (db_amm)     0x22a59: AMM_ATOM_MOD_UTILITY_IMPL::change_iterms_source_legacy + 0x799 (db_amm)     0x3930a: BSYN_AMU::change_iterms_source_nt + 0xca (fitter_bsyn)     0x98695: BSYN_RETIME::MoveBack + 0xa45 (fitter_bsyn)     0x91c61: BSYN_RETIME::BackwardRetimeComb + 0x961 (fitter_bsyn)     0x9c0d4: BSYN_RETIME::Run + 0x384 (fitter_bsyn)     0x2f2a5: BSYN_ALGORITHM_BASE::Execute + 0x25 (fitter_bsyn)     0x3014f: BSYN_STRATEGY::Run + 0x4f (fitter_bsyn)     0x2f73a: BSYN::bsyn + 0x10a (fitter_bsyn)     0x2f5e9: bsyn + 0x89 (fitter_bsyn)    0x89c206: bi_run_bsyn + 0x136 (fitter_vpr20kmain)    0x89c3e2: bi_bsyn + 0x42 (fitter_vpr20kmain)    0x5738d5: VPR_QI_FACADE::bsyn + 0x85 (fitter_vpr20kmain)    0x57360e: VPR_QI_FACADE::vpr_apl_bsyn_flow + 0x5e (fitter_vpr20kmain)     0x2cb66: FDRGN_EXPERT::run_vpr + 0x196 (fitter_fdrgn)     0x2883b: FDRGN_EXPERT::place + 0x3b (fitter_fdrgn)     0x143cb: fit2_fit_place_auto + 0x20b (comp_fit2)     0x161e2: TclNRRunCallbacks + 0x62 (tcl86)      0x3c4a: fit2_fit_place + 0x2fa (comp_fit2)     0x161e2: TclNRRunCallbacks + 0x62 (tcl86)     0x17a65: TclEvalEx + 0xa65 (tcl86)     0xa6f8b: Tcl_FSEvalFileEx + 0x22b (tcl86)     0xa5646: Tcl_EvalFile + 0x36 (tcl86)     0x12606: qexe_evaluate_tcl_script + 0x376 (comp_qexe)     0x11864: qexe_do_tcl + 0x334 (comp_qexe)     0x16755: qexe_run_tcl_option + 0x585 (comp_qexe)     0x380c3: qcu_run_tcl_option + 0x1003 (comp_qcu)     0x160aa: qexe_run + 0x39a (comp_qexe)     0x16e51: qexe_standard_main + 0xc1 (comp_qexe)      0x2233: qfit2_main + 0x73 (quartus_fit)     0x12d68: msg_main_thread + 0x18 (CCL_MSG)     0x1454e: msg_thread_wrapper + 0x6e (CCL_MSG)     0x15b00: mem_thread_wrapper + 0x70 (ccl_mem)     0x12631: msg_exe_main + 0xa1 (CCL_MSG)      0x287e: __tmainCRTStartup + 0x10e (quartus_fit)     0x159cc: BaseThreadInitThunk + 0xc (kernel32)     0x2a560: RtlUserThreadStart + 0x20 (ntdll) End-trace Executable: quartus_fit Comment: None System Information Platform: windows64 OS name: Windows 7 OS version: 6.1 Quartus Prime Information Address bits: 64 Version: 17.0.2 Build: 602 Edition: Standard Edition Может кто знает решение....
  12. У меня в проекте для симуляции один из эзернет пакетов расписан так, может поможет: Код    arr_pckt(IND_TCP_1)(0)        <= "01" & X"000000000000001E";     arr_pckt(IND_TCP_1)(1)        <= "01" & X"D555555555555578";     arr_pckt(IND_TCP_1)(2)        <= "10" & X"52f401000000cccc";    -- | Source MAC HIGH     | Dest MAC LOW        | Dest MAC HIGH                             |     arr_pckt(IND_TCP_1)(3)        <= "10" & X"00450008c0a95e14";    -- | T. of S. | Vers| IHL| ETHER  TYPE         | Source MAC LOW                            |     arr_pckt(IND_TCP_1)(4)        <= "10" & X"0680004033192900";    -- | Protocol | Time Live| Fragment Off | Flags| Identification      | Total Length        |     arr_pckt(IND_TCP_1)(5)        <= "10" & X"a8c00501a8c0a55d";    -- | Dest Address HIGH   | Source Address LOW  | Source Address HIGH | Header Checksum     |     arr_pckt(IND_TCP_1)(6)        <= "10" & X"9997bbbb8869a101";    -- |_Sequence_Number_HIGH|______Dest_Port______|______Source_Port____| Dest Address LOW    |     arr_pckt(IND_TCP_1)(7)        <= "10" & X"185001100000dd0c";    -- |_L_HDR|_R_|_Flags____|_ACK_Number_LOW______|_ACK_Number_HIGH_____|_Sequence_Num ber_LOW_|     arr_pckt(IND_TCP_1)(8)        <= "10" & X"00390000a81970ff";    -- |..........| DATA=0x39|  Указатель важности |_Cheksum_____________|_WINDOW______________|  Cheksum = 0x19a8     arr_pckt(IND_TCP_1)(9)        <= "10" & X"32D3872700000000";    -- 64 Byte     arr_pckt(IND_TCP_1)(10)        <= "01" & X"0000000000000087";     arr_pckt(IND_TCP_1)(11)        <= "01" & X"000000000000001E"; здесь заданы: Dest MAC = cccc00000001 Source MAC = f452145ea9c0
  13. Цитата(rfm389 @ Oct 15 2017, 23:30) Зачем это Вам нужно? С SR-IOV разобрался. Задача в двух словах такая. На плате с ПЛИС два эзернет порта, данные с эзернет портов нужно передать на комп как два независимых потока данных. Программист написал драйвер, ставим этот драйвер на каждое pcie устройство. У каждого из них свои адресные пространства, свои прерывания. Ну вроде так и логичнее получается.
  14. ПЛИС Аррия 10. Режим SR-IOV упоминается и для Stratix V (только там всего 2 физических функции можно сделать, а в арии 10 - целых четыре) А в стратиксе 4 точно есть в настройках корки виртуальные каналы, до двух штук, никогда ими не пользовался. Вот скрин настроек корки аррии 10, когда выбрал режим SR-IOV. Надо вникать... [attachment=108908:Scr0023.jpg]