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

Zigor

Участник
  • Публикаций

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

  • Посещение

Репутация

0 Обычный

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

  • Звание
    Участник
  1. Добрый день! Вопрос скорее про сам PCIe, но тем не менее) Запустил обмен данными по PCIe, имеется RC на Сyclone V GX и EP на Cyclone V GT. Перетащил драйвера линукса под голый NoisII, подшлифовал, система енумеруется, настраиваю устройства в EP. Nios в RC отсылает данные через порт TxS, EP ловит их BAR0. Хочу чтобы EP отсылал данные в RC самостятельно, без запросов. Для этого включаю соответствующий бит в COMMAND_REGISTER чтобы EP работал как мастер, разрешаю обращения к памяти. 1. При подключенное EP напрямую к RC данные пересылаются без проблем, корка в EP засовывает их в порт TxS, в RC получаю их с порта RxM. 2. Если подключаю EP через плату свича на XIO3130, при условии что порты XIO3130 настраиваю (командный регистр, номера шин, диапазоны адресов всего 6 параметров), то могу так же обращаться к IP ядрам в EP устанавливать и читать параметры по адресам, но данные которые шлет EP - до RC уже не доходят. Порты в RC и в XIO3130 настраиваю одинаково, диапазон адресов, биты в коммандном регистре. Спасибо!
  2. Цитата(AVR @ Dec 20 2016, 15:19) По делу подсказать, увы, не могу, однако есть ли возможность вклиниться (добавить прозрачного посредника) на шину отправки и приема сообщений, чтобы собрать какие пакеты пересылаются и принимаются? Стоит задача реализовать работу PCI-E без ОС Linux и без драйверов и тому подобного? Да, для начала надо поднять шину без ОС. Напрямую с ниоса. В принципе ничего сложного быть не должно. Т.е. читай конфиг пространство и прописывай туда индексы шин. Но при попытки прочитать что-то из ConfigSpace своего RootPort на котором сидит ниос - в ответ тишина. Через Avalon я не могу посмотреть ConfigSpace. Может надо в HIP PCIe что-то еще включить чтоб можно было отправлять и принимать TLP? Т.е. какая последовательность обращений к своему RP должна быть?
  3. Добрый день! Пытаюсь прочесть конфиг. пространство PCIe RootPort из NiosII. Просмотрел исходники Linux, использую функции для общения через интерфейс TLP на шине CRA. К рутпорту цепляю endpoint - система переходит в L0 и DataLinkLayer работает. Используемая функция: pcie-altera.c static int tlp_cfg_dword_read(struct altera_pcie *pcie, u8 bus, u32 devfn, int where, u8 byte_en, u32 *value) { u32 headers[TLP_HDR_SIZE]; if (bus == pcie->root_bus_nr) headers[0] = TLP_CFG_DW0(TLP_FMTTYPE_CFGRD0); else headers[0] = TLP_CFG_DW0(TLP_FMTTYPE_CFGRD1); headers[1] = TLP_CFG_DW1(TLP_REQ_ID(pcie->root_bus_nr, RP_DEVFN), TLP_READ_TAG, byte_en); headers[2] = TLP_CFG_DW2(bus, devfn, where); tlp_write_packet(pcie, headers, 0, false); return tlp_read_packet(pcie, value); } Посылаю конф.запрос type 0 на чтение шины 0, dev 0, func 0 (на что должен откликнуться Rootport). Т.е. это самая первая операция которую я делаю до енумерации. Заголовок TLP header: [0] 0x04000001 [1] 0x00001D0F [2] 0x00000000 Функция возвращает PCIBIOS_DEVICE_NOT_FOUND. Корректен ли мой отправляемый рутпорту запрос/пакет? Спасибо!
  4. Цитата(Andrew Su @ Oct 31 2016, 21:08) Как "перебирать" Bus numbers, Device Numbers, Function numbers и добираться до регистров пространства конфигурации конкретного устройства на шине описано в PCI LOCAL BUS SPECIFICATION, REV. 3.0 (3.2.2.3.2. Software Generation of Configuration Transactions). ... Two DWORD I/O locations are used to generate configuration transactions for PC-AT compatible systems. The first DWORD location (CF8h) references a read/write register that is named CONFIG_ADDRESS. The second DWORD address (CFCh) references a read/write register named CONFIG_DATA.... Затык в том, что непонятен сам механизм общения с HIP PCIe Altera. Пишу Configuration Type 0 Request в CRA TLP TX. В ответ тишина. Как прочитать Configuration Space рутпорта? Как отправить конф запрос в endpoint? Записывать пакет в CRA TLP TX и опрашивать RP_RXCPL_STATUS?
  5. Цитата(krux @ Oct 28 2016, 17:02) как это делает BIOS, примерно так: перебираются bus, device, function. для каждого из них считываются размеры требуемых для выделения BARов. от адресуемого 32-битного пространства сверху от 4 Гбайт откусывается 512 Мбайт или 1024 Мбайт (зависит от конкретного BIOS) и методом бинарного поиска вычисляются адреса памяти, в которые может поместиться BAR, таким образом, чтобы адрес был кратен размеру BAR-а. если запрашиваемый размер BAR-ов больше чем откушенные BIOS-ом 512 Мбайт или 1024 Мбайт, то в зависимости от реализации BIOS либо всё виснет, либо устройства с большими BAR прокидываются либо ещё как. построенная карта памяти загоняется в соответствующие bus, device, function. реализация в linux kernel есть. rootport поднял на плате terasic DE1, будет работать под линуксами. Сейчас отлаживаюсь по Avalon-JTAG Master Сначала необходимо отладить enumeration без операционки. И вот тут возникает непонимание - 1. Что значит перебирать bus, device, function - когда у тебя в Qsys есть твой HIP Root и подключенный к нему Avalon-JTAG Master? Где их читать.. и как)) 2. Чтение документации Altera не дает понимания по какому адресу лежит Type 1 Configuration Space Header, в документации сказано 0x000:0x03C. Если имеется в виду абсолютное смещение в CRA, то чтение 0го адреса дает нули вместо Device ID и Vendor ID. Спасибо за помощь!
  6. Добрый день! Собрал систему из отладочных плат для проверки PCIe. Линк работает, rootport перешел в L0 Теперь стоит задача сделать енумерацию устройств на шине, пока что одной endpoint, потом через switch. Где можно как это делается, пример драйвера на С? Спасибо!
  7. Цитата(andrew_b @ Oct 24 2016, 18:32) Сравните entity модуля altpcie_cv_hip_avmm_hwtcl, декларацию компонента altpcie_cv_hip_avmm_hwtcl (если есть), инcтанцирование этого компонента. Где-то не совпадает. Для отладки в моделсиме собрал проект где есть и EndPoint и RootPort. Может в этом причина? Изначально стоит задача отладить RootPort - с ним в железе проблемы.
  8. Добрый день! Отлаживаю систему с PCIe. В железе не пошло - пробую Modelsim 10.4. Пишу на VHDL. При запуске начинает сыпать такого типа сообщениями # vsim -gui -l msim_transcript -do "PCIe_sim_run_msim_rtl_vhdl.do" # Start time: 16:36:38 on Oct 24,2016 # ** Note: (vsim-3812) Design is being optimized... # # ** Error (suppressible): E:/_ilya/_Project_Avia/_AlteraWorks/PCIe_sim/PCIe_sim_system/synthesis/submodules/PCIe_sim_system_EndPoint_subsystem.vhd(1385): (vopt-1130) Port "hpg_ctrler" of entity "altpcie_cv_hip_avmm_hwtcl" is not in the component being instantiated. # # ** Error (suppressible): E:/_ilya/_Project_Avia/_AlteraWorks/PCIe_sim/PCIe_sim_system/synthesis/submodules/PCIe_sim_system_EndPoint_subsystem.vhd(1385): (vopt-1130) Port "RxmAddress_1_o" of entity "altpcie_cv_hip_avmm_hwtcl" is not in the component being instantiated. ........ # ** Error (suppressible): E:/_ilya/_Project_Avia/_AlteraWorks/PCIe_sim/PCIe_sim_system/synthesis/submodules/PCIe_sim_system_RootPort_subsystem.vhd(1242): (vopt-1130) Port "IntxReq_i" of entity "altpcie_cv_hip_avmm_hwtcl" is not in the component being instantiated. # # ** Error (suppressible): E:/_ilya/_Project_Avia/_AlteraWorks/PCIe_sim/PCIe_sim_system/synthesis/submodules/PCIe_sim_system_RootPort_subsystem.vhd(1242): (vopt-1130) Port "rx_st_data" of entity "altpcie_cv_hip_avmm_hwtcl" is not in the component being instantiated. # # Optimization failed # Error loading design Как это можно побороть? Спасибо!
  9. Добрый день! На макетных платах отлаживаю работу системы с PCIe gen1 x1. Плата Altera Cyclone V GT (endpoint) и Terasic DE1 Cyclone V GX с платой расширения hsmc->PCIe в качестве rootport. Качество линка предварительно проверил гоняя данные трансиверами на той же 2.5Gb скорости. Все поет и пляшет в обоих направлениях. Когда доходит дело до проектов с HIP PCIe от Altera дело дальше link training не идет. Синхронно запускаю сигналтап на обоих платах: Со стороны endpoint ltssmstate доходит до 00010: Polling.Active Со стороны rootport - 00001: Detect.Active и потом сваливается в 00000: Detect.Quiet. Как можно отладить/посмотреть что они первоначально друг другу шлют? Те же самые TSы... Спасибо!
  10. Добрый день! Работаю с отладочной платой Terasic DE1 Cyclone V GX Неделю ломаю голову над размещением прошивки в EPCQ256. В примерах от Terasic сделано просто elf в виде hex цепляется в памяти nios в qsys. Данный метод лишен изящества и гибкости. Хочу размещать sof а потом hex по заданному оффсету. Путем перекапывание форумов и документации и тестирования разных методов на данный момент устаканил следующий вариант: sof2flash --input="NiosII_txLinux.sof" --output="software/NiosII_txLinux_epcq_HW.flash" --epcq –verbose elf2flash --input="software/NiosII_txLinux/NiosII_txLinux.elf" --output="software/NiosII_txLinux_epcq_SW.flash" --base=0x22000000 --end=0x23FFFFFF --reset=0x23000000 \ --boot=c:/altera/15.1/ip/altera/nios2_ip/altera_nios2/boot_loader_epcq256_cv.srec --save nios2-elf-objcopy -I srec -O ihex "software/NiosII_txLinux_epcq_SW.flash" "software/NiosII_txLinux_epcq_SW.hex" Далее в Convert Programming Files добавляю SOF с 0го адреса Ставлю "Compressed" По абсолютному адресу добавляю HEX, вижу что оффсет правильный - 0х01000000 Выбираю Active Serial x4 Конверчу (в map файле тоже смещение верное) Заливаю квартус программером Вижу что логика инициализируется-стартует а ниос нет( Спасибо!
  11. Цитата(krux @ Mar 16 2016, 15:38) может тогда стоит от приемной частоты трансивера отвязаться? Как именно? С выхода трансиверов данные завести на фифо?
  12. Цитата(Dima_G @ Mar 16 2016, 11:53) Не оно? https://www.altera.com/support/support-reso...302013_719.html Да... этот топик уже видел. Назначил ручками в редакторе - фиттер так же орет(((
  13. Добрый день! Разрабатываю проект на основе платы Terrasic DE1 (Cyclone V GX). принимаю данные с JESD АЦП, загоняю в блоки обрабоки, контролирую весь процесс с NiosII. Все работало без чудес. Добавил немного функционала - Fitter стал ругаться: Error (170025): Fitter requires that more entities of type LAB be placed in a region than are available in the region Error (170026): Region "lower-left" corner: X1_Y9; Region "upper-right" corner: X25_Y34 Похоже, ему перестал нравится мой блок управления гигабитными трансиверами и приема данных, который с помощью сигнала bitslip синхронизируется с потоком данных от АЦП. Хотя тоже странно - этот блок давно отлажен и работает в разных проектах. Проект занимает меньше половины кристалла: Logic utilization (in ALMs) 12,194 / 29,080 ( 42 % ) Очень не хочется дробить проект на более мелкие. Может кто-то сталкивался с чем-то подобным?
  14. Цитата(DmitryR @ Dec 17 2015, 16:34) Если вы полностью разобрались в настройках - поставьте SignalTap сразу после трансивера и посмотрите, что там происходит. Минимальный датарэйт трансиверов 614Мбитс, у меня 1000Мбитс Поставил, только не после трансиверов а после ядра - вытащил то что можно для отладки трансиверов согласно рекомендациям из альтеровской даташиты на ядро (стр 7-3) 1. Инициализирую АЦП и генератор 2. Ресечу секвенсер 3. Поднимаю ресеты трансивера | link | frame 4. Устанавливаю в регистре SYNCN_SYSREF_CTRL значения csr_rbd_offset csr_lmfc_offset csr_sysref_singledet | csr_sysref_alwayson | csr_link_reinit 5. Снимаю ресеты трансивера | link | frame Вижу картинку в STP Картина не меняется если пропускаю пункты 3-5 Трансиверы в LTD моде, PHY_CLK с каждого прет 25Мгц как и положено (смотрю на осциллографе). Но больше ничего не происходит, kchardata в нулях.
  15. Цитата(DmitryR @ Dec 16 2015, 16:16) При частоте дискретизации 100МГц возможна только настройка 20х, а у вас похоже 40х стоит (раз вы 1000/40 считаете). NP (N') соответственно должно быть 20, K в АЦП - 9 вроде по умолчанию. Также я вижу что дизайн, который вы используете, предназначен для Arria10. JESD для CycloneV появился только в 15.1 вроде. Link Clk == Lane_Data_Rate / 40 - согласно даташиту ядра от Альтеры В АЦП сериализация 20х, частота сэмплирования 50 * 20 == 1000 К меняю на 20 и в АЦП и я ЯДРЕ, это не воспрещается)))