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

spectr

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

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

  • Посещение

Репутация

0 Обычный

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

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

Контакты

  • Сайт
    http://google.com
  • ICQ
    0

Информация

  • Город
    Earth

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

3 364 просмотра профиля
  1. А DSP Builder установлен? По-моему она сидит в нём.
  2. Что случилось с Компелом?

    Китайцы, кстати, последнее время держат цены почти вровень с нашими магазинами. С доставкой может получиться и дороже, причем некоторые даже торговаться не хотят. П.С. по Китаю можете писать в личку.
  3. Ситуация разрешилась, всё заработало. У трансивера нужно было настроить следующие параметры: - Data rate = 622.08 (не изменилось) - TX local clock division factor = 2 (раньше было =1) - всё остальное без изменения С толку сбивает следующий пункт, который вычисляется автоматически - TX PLL base data rate, он почему-то равен 1244.16. Что это за параметр? Внятного описания в документации - нет. У меня вообще ощущение что это должен быть результатом деления 622.08 на 2, а не умножения как сейчас. Нет ли тут ошибки?
  4. В результате ряда экспериментов на serial loopback'e выяснилось что на tx_std_clkout выходит частота вдвое большая, чем надо. Ожидается 77.76, а выходит 155.52. Скорость передачи 622.08 Мбит/с, TX FPLL настроена корректно: - частота 311.04, параметры трансивера тоже: - Data rate = 622.08 - TX local clock division factor = 1 - PCS width = 8 bits Что интересно, RX часть трансивера работает отлично - CDR лочится и выдает ожидаемую 77.76 (ширина шины после десереализации - 8 бит). Теперь понятно почему RX не видит TX :)))) Но вот почему частоты приемного и передающего каналов различаются - ума не приложу пока.
  5. Цитата(DeadMazay @ May 11 2018, 13:13) Не понял вопроса. Он всё-таки передаёт, или не передаёт? Заворот post-CDR работает? Если включить заворот post-CDR, то да, работает. Но в этом случае работает только PMA-часть трансивера, PCS не задействуется. Если же заворот выключить и руками завернуть параллельные шинки rx на tx (ну или просто подать константу), то не работает - на выходе ничего нет. Кстати, а какой частотой (каким значением) должен тактироваться передающий тракт (tx_coreclkin)? Такой же, которую выдает CDR после восстановления? Как-то не очень ясен этот момент. Есть подозрение что проблема в этом.
  6. Снова дошли руки до этого проекта. И возникла очередная заминка. С приёмом данных всё в порядке - поток приходит, разворачивается в байты и всё хорошо. Проблема с передачей - передатчик вообще ничего не передаёт. Совсем. Если включить pre- и post-CDR завороты, то на передающие пины данные выводятся, что говорит о том что уровень PMA работает нормально и проблема где-то выше - в PCS части. Измерительный прибор данные видит и успешно восстанавливает частоту. Но если завернуть поток на уровне PCS - после десериализации (ну например, соединить rx_parallel_data b tx_parallel_data), то на выходных пинах - тишина. TX часть не висит в сбросе - все сигналы индицируют что передатчик откалибровался и готов работать. Я перепробовал, пожалуй, все возможные варианты и ничего пока не помогает: - передавать биты задом наперед - двигать биты сигналом tx_bitslip - инвертировать полярность - крутить настройки TXPLL, integer, fractional режим - тактировать tx разными клоками И всё равно на выходе - 0. У кого это хозяйство работает - что вы делали для передачи?
  7. Цитата(dxp @ Apr 28 2018, 07:34) Это одна из проблем систем управления версий с центральным репозиторием. У систем с распределённым репозиторием главный реп - это ваш локальный и никто в него просто так не влезет. Всё, что туда попадает, вы контролируете, а чтобы не смешивалось, рулят ветки, которые, например, в git, реализованы очень эффективно. Вы пришли с утра на работу и, по-хорошему, вам надо запуллиться, дабы иметь актуальные исходники. И тут вдруг выясняется что ваш controller.v ночью подправил Вася Пупкин. Далее есть два варианта: 1. Если у Вас просто система контроля версий и всё. Вы злитесь и идете бить лицо Василию, попутно ломая ноги PM-у. Утрированно, конечно, но смысл в том что вы не будете знать причину изменений в коде и потратите время на пересогласование актуального сорца. Это, хотя и выстреливает очень редко, но методически - крайне плохо. 2. У Вас система контроля версий, которая не дает сделать коммит без подписи (возможно, содержащей определенные теги-метки). Вася Пупкин, после правки вашего controller.v вынужден описать в коммите что он там наделал. Вы получаете уведомляшку, после этого автоматом создается тикет в code-review и команда (Вы в том числе) смотрит чо он там понаписал посреди ночи. И уже после этого PM или тимлид подтверждает коммит, перекидывая его в рабочую ветку. Примерно так. Это, пожалуй, самый корректный вариант. Но он да, требует затрат на обучение всем этим CVS-ным штукам. Зато потом в репе всегда будет гарантированно собирающийся корректный актуальный проект. Итого, у систем контроля версий проблемы конечно есть, но то что описали Вы - имхо, чисто методологическая проблема на уровне организации работы команды.
  8. Вот здесь всё подробно расписано: https://www.altera.com/en_US/pdfs/literatur...ts_qii53009.pdf Цитата(justontime @ Feb 24 2018, 18:52) А нужно, чтобы по определенному событию каждый раз запускалась запись на некоторое время, а потом останавливалась, и так пока буфер не закончится. Причем устраивает период записи задавать как в количестве тактов, так могу и сигналы выдавать для начала/окончания записи. Вроде Storage Qualifier предназначены как раз для этого, но, как уже сказал, они работают вообще непонятно, а не логично (для меня)... Вам нужен триггер типа Start/Stop. А Storate Qualifier работает так: по наступлению события запоминает одно состояние всех вытащенных в него сигналов. По следующему наступлению события - снова запоминает. И так, пока не заполнится весь буфер. Самый простой пример - захватить данные с SPI-АЦП, когда событием для захвата данных является сигнал того что сэмпл прочитан. В итоге получите форму АЦПированного сигнала, можно даже график построить там же.
  9. Привет! Такой вопрос - как можно в сигналтапе сделать триггер, который бы срабатывал если сигнал не меняется в течение какого-то времени? Мне надо отловить ситуацию когда сигнал (значение на шине) впервые становится отрицательным в течение, допустим, 5 тактов. Что-то я не нашел возможности проверить средствами сигналтапа значение предыдущего сэмпла (ни в advanced mode, ни в state machine mode). Единственный возможный вариант вижу - использовать конечный автомат с 5-ю состояниями, где в каждом состоянии проверять значение сэмпла и если он подходит условиям триггера - сохранять значения в режиме storage qualifier и переходить в следующее, а в противном случае сбрасывать очередь и уходить в начало автомата. Но получается что-то не то всё равно... Спасибо.
  10. Как раз сегодня ночью меня тоже осенило что возможно нужно питать трансиверные триплеты отдельными PLL-ками. В-общем, после ряда экспериментов оно наконец-то собралось - все 9 трансиверов в дуплексном двухскоростном режиме с поддержкой реконфигурации! То что мне и нужно! Структура проекта получилась следующая: 3 блока, каждый состоящий из: - FPLL с частотой 311.04 - PLL Reconfiguration controller - Трансивер в дуплексном режиме (External PLL - 2 штуки, TXPLL0=622.08, TXPLL1=2488.32, у обоих TXPLL - Bonding x1) 1 общий блок Transceiver Reconfiguration Controller (9 каналов, сгруппированные в 3 группы по 3 канала) FPLL питаются двумя клоками - один питает одну, второй клок питает оставшиеся две FPLL (а каждая FPLL в свою очередь питает по 3 канала каждого трансивера (точнее 6 каналов, т.к. 3 канала по 2 скорости)). Опорный клок для RXCDR - один общий. Клок/ресет для всех реконфигураторов - один общий. Что стоит отметить отдельно: 1. Я сначала пошел по простому пути и просто скопировал (копипастнул) трансивер с FPLL три раза. И оно не собралось. После тушения жопы и подключения мозгов оказалось что ему необходимо иметь не просто разные инстансы трансиверов, а именно разно созданные ядра, пусть и с одинаковыми в моем случае настройками. 2. FPLL тоже нужны в виде именно отдельно созданных IP-ядер. 3. Реконфигуратор трансивера допускается только одним инстансом (но в настройках можно разбить каналы на группы как нужно). Несколько реконфигураторов (например, 3 по 3 канала) - не собирает. 4. Реконфигуратор для FPLL можно использовать в виде одного ядра, просто скопипащенного 3 несколько раз. 5. Запитать 3 FPLL от одного клока не получилось - пришлось задействовать две клоковые ножки. Хочу отдельной строкой сказать спасибо DeadMazay за помощь!
  11. Убрал ресеты, и ресет-контроллер вообще из проекта - ничего не изменилось, ошибки остались те же. Пробовал ставить ALTCLKCTRL перед FPLL - не помогает. После FPLL - не дает, т.к. хочет чтобы клок в трансивер шел с PLL напрямую. Попробовал использовать Transceiver PLL - тоже не помогает, ошибки те же. Есть идеи?
  12. Итак, чего удалось добиться. Проект состоит из: - Ресет-контроллер. - Отдельная FPLL со своим реконфигуратором. - Трансивер в режиме внешней PLL (для двух скоростей использую две TXPLL). - Базовая скорость трансивера 622.08 (и 322.04 у FPLL соответственно). - Реконфигуратор трансивера (количество его каналов тоже меняется в соответствии с трансивером, включен режим MIF). Что получается: При количестве каналов от 1 до 6 - всё собирается отлично. При количестве каналов от 7 до 8 получаю ошибку фиттера: КодInfo (170193): Fitter routing operations beginning Error (170084): Can't route signal "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.int_wire_clk[0]" to atom "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[6].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_cgb" Error (170084): Can't route signal "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.int_wire_clk[0]" to atom "xcvr:inst3|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[6].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[0].av_tx_pma_ch_inst|tx_pma_ch.tx_cgb" Info (170194): Fitter routing operations ending: elapsed time is 00:00:01 В целом уже лучше ))
  13. DeadMazay, спасибо за советы. Пробую потихонечку различные варианты, пока глухо. Протокол STM-4/16 (622.08/2488.32), соответственно мне нужен режим LTD (LTR и оверсемплинг, получается, что не подходит). От трансивера нужно только принять/передать байты - вся протокольная логика делается дальше за его пределами. Вот такой эксперимент сделал. Один инстанс трансивера, один ресет контроллер, внешняя fpll, реконфигуратор: КодПопытка 1:   - 1..7 каналов   - 1 скорость 622.08   - Bonding xN   - TX FPLL (311.04)   - реконфигуратор (1 интерфейс) Результат: ОК Попытка 2:   - 8-9 каналов   - 1 скорость 622.08   - Bonding xN   - TX FPLL (311.04)   - реконфигуратор (1 интерфейс) Результат: ошибка на фиттере Error (14996): The Fitter failed to find a legal placement for all periphery components     Info (14987): The following components had the most difficulty being legally placed:         Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[6].inst_av_pcs_ch|av_hssi_tx_pld_pcs_interface_rbc:inst_av_hssi_tx_pld_pcs_interface|pld8gtxclkout~CLKENA0 (13%)         Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[6].inst_av_pcs_ch|av_hssi_rx_pld_pcs_interface_rbc:inst_av_hssi_rx_pld_pcs_interface|pld8grxclkout~CLKENA0 (13%)         Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[5].inst_av_pcs_ch|av_hssi_tx_pld_pcs_interface_rbc:inst_av_hssi_tx_pld_pcs_interface|pld8gtxclkout~CLKENA0 (13%)         Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[5].inst_av_pcs_ch|av_hssi_rx_pld_pcs_interface_rbc:inst_av_hssi_rx_pld_pcs_interface|pld8grxclkout~CLKENA0 (13%)         Info (175029): Transmitter channel for I/O xcvr_tx[6] (13%)         Info (175029): Transmitter channel for I/O xcvr_tx[5] (9%)         Info (175029): Transmitter channel for I/O xcvr_tx[7] (7%)         Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[4].inst_av_pcs_ch|av_hssi_tx_pld_pcs_interface_rbc:inst_av_hssi_tx_pld_pcs_interface|pld8gtxclkout~CLKENA0 (5%)         Info (175029): auto-promoted clock driver xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pcs:inst_av_pcs|av_pcs_ch:ch[4].inst_av_pcs_ch|av_hssi_rx_pld_pcs_interface_rbc:inst_av_hssi_rx_pld_pcs_interface|pld8grxclkout~CLKENA0 (5%)         Info (175029): Transmitter channel for I/O xcvr_tx[4] (3%)     Error (14986): After placing as many components as possible, the following errors remain:         Error (175001): Could not place 1 HSSI AVMM Interface, which is within Cyclone V Transceiver Native PHY xcvr             Info (14596): Information about the failing component(s):                 Info (175028): The HSSI AVMM Interface name(s): xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[7].av_hssi_avmm_interface_inst             Error (16234): No legal location could be found out of 3 considered location(s).  Reasons why each location could not be used are summarized below:                 Error (178013): Node is not compatible with other nodes placed at the same location either because there are too few available HSSI AVMM Interface locations, or the nodes belong to different transceiver reconfiguration groups, or both. (1 location affected)                     Info (175029): HSSIAVMMINTERFACE_X0_Y35_N86. Already placed at this location: HSSI AVMM Interface xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_xcvr_avmm:inst_av_xcvr_avmm|avmm_interface_insts[0].av_hssi_avmm_interface_inst                 Error (175006): Could not find path between the HSSI AVMM Interface and destination HSSI PMA TX Buffer                     Info (175027): Destination: HSSI PMA TX Buffer xcvr:xcvr|altera_xcvr_native_av:xcvr_inst|av_xcvr_native:gen_native_inst.av_xcvr_native_insts[0].gen_bonded_group_native.av_xcvr_native_inst|av_pma:inst_av_pma|av_tx_pma:av_tx_pma|av_tx_pma_ch:tx_pma_insts[7].av_tx_pma_ch_inst|tx_pma_ch.tx_pma_buf.tx_pma_buf                     Error (175022): The HSSI AVMM Interface could not be placed in any location to satisfy its connectivity requirements                     Info (175021): The HSSI PMA TX Buffer was placed in location HSSIPMATXBUF_X0_Y43_N34                     Info (175029): 2 locations affected                         Info (175029): HSSIAVMMINTERFACE_X0_Y11_N86. 3 other HSSI AVMM Interfaces are being routed to this region.                         Info (175029): HSSIAVMMINTERFACE_X0_Y23_N86. 3 other HSSI AVMM Interfaces are being routed to this region. Картинка с фиттера с удачной компиляции 7 каналов: [attachment=110438:1.PNG] Как видите, есть полностью свободные два блока. Почему он их не хочет задействовать? Насколько я понимаю из ошибок, он не может подцепить реконфигуратор. Но тогда как? Я вот сейчас попробовал сделать два отдельных 3-канальных инстанса с отдельными реконфигураторами (ну чтобы всё по-честному - один реконфигуратор на один триплет) - так он и их не хочет собирать.
  14. Так удалось кому-нибудь в итоге сделать двухскоростные трансиверы? Да так чтобы все задействовались. Я много чего попробовал, но - безрезультатно. А как-то сообщество молчит. То ли никто этого не делал, то все шифруются )) https://electronix.ru/forum/index.php?showt...=140385&hl= https://www.alteraforum.com/forum/showthrea...&highlight=