Jump to content
    

dde29

Участник
  • Posts

    100
  • Joined

  • Last visited

Reputation

0 Обычный

About dde29

  • Rank
    Частый гость
    Частый гость
  • Birthday 07/29/1985

Контакты

  • Сайт
    Array
  • ICQ
    Array

Информация

  • Город
    Array

Recent Profile Visitors

1,610 profile views
  1. Вы оказались правы! Прочитав конфигурационное пространство командой: hexdump /sys/bus/pci/device/0000:01:00.0/config оказалось, что командный регистр, находящийся по адресу 0x04 гол как сокол (рис.1), а значит флаги I/O Space Enable, Memory Space Enable, Bus Master Enable сброшены в ноль. Аналогичную картину я увидел JTAGом, глядя на регистр cfg_function_status (рис.2) предоставляемый коркой pcie3_ultrascale. Соответствующие флаги Физической Функции 0 были сброшены (Функцию 1 я и не использую, на нее пофиг). С помощью команды sudo setpci -s 01:00.0 04.B=07 попробовал установить все 3 флага. Прочитав после этого снова конфигурационное пространство, убедился что в командном регистре заветную 7-ку (рис.3) Посмотрев JTAGом регистр cfg_function_status, еще раз железно убедился в установленных флагах... После этого отправляя на resource0 мимо всякого драйвера в map я увидел заветные транзакции чтения (рис.4) и записи (рис.5) Смотрел JTAGом цепляясь на интерфейс Completer Request (CQ). Так что, текущая проблема решена, буду двигаться дальше...
  2. Какую конкретно ip-корку вы имеете в виду под "корка gpio"? В этом проекте имется память. JTAGом я смотрел числе и сигналы память - при операции чтения/запись шевеления на сигналах памяти не было, соответственно делаю вывод, что память не читается и не записывается... И еще: как понять фразу " Gpio автоматом должен обновиться, без всяких своих транзакций"? Ведь, если не было никаких транзакция, то ничего и не должно поменяться, или я что-то не понимаю? 1. Линк поднялся, так как через lspci мое устройство отображается с некоторыми параметрами. С какими конкретно, если нужно, могу позже написать сюда... 2. Так же отображаются адреса BARов и их размер, можно сделать вывод, что система их сконфигурировала? 3. "разрешены соответствующие транзакции (IO, MEM, Master)". А вот это надо глянуть...
  3. Именно так! Пишем в map и я на интерфейсе CQ не вижу никаких шевелений, цепляясь триггером на valid или last
  4. Всем привет! Продолжаю разбираться в корке pcie3_ultrascale_0 в Vivado2018.1 Пытаюсь зафиксировать транзакции между Хостом и Таргетом, наблюдая за сигналами в ПЛИС через JTAG. В Вивадо имеется полезная функция Open IP Example Design. Т.е. имеется возможность сгенерировать полностью заведомо рабочий (по крайней мере задумано так) проект с настроенной мной IP-коркой pcie3_ultrascale_0. Таким образом, создается проект где можно и записать в регистры ПЛИС и считать. Проделав все вышеописанное, при записи в БАР никаких транзакция не наблюдаю. Вообще никакого шевеления... Любая транзация, не важно запись/чтение memory или запись/чтения I/O производится через интерфейс Completer Request (CQ) протокола AXI4-Stream. Через следующие сигналы: wire [63 : 0] m_axis_cq_tdata; wire [1 : 0] m_axis_cq_tkeep; wire m_axis_cq_tlast; wire m_axis_cq_tready; wire [84 : 0] m_axis_cq_tuser; wire m_axis_cq_tvalid; Может местные эксперты по PCIe на Xilinx посмотрят на настройки корки, вдруг где-то заветную галочку не установил... (скрины корки прикрепил в ПДФ) Также прикрепляю архив сгенерированного проекта: pcie3_ultrascale_0_ex_1.xpr.zip P.S. Дополнительная информация: ОС Линукс, убунту Попытка чтения/записи в БАРы осуществляется без какого-либо собственного драйвера через отмапенную виртуальную память ПЛИС UltraScale Есть использовать корку AXI Bridge for PCI Express Gen3 Subsystem, но там интерфейс с еще большим количеством сигналов, а я про эту то корку начитался... P.P.S: Любые подсказки и нецензурная брань приветствуются!) Настроки корки.pdf
  5. При генерации IP корки для PCIe установил галочку "JTAG Debaging", чтобы была возможность отладки. Сгенерировались скрипты на TCL, но в скриптах в самом начале подключаются нужные пакеты: package require Tcl 8.5 package require Tk Так вот первая строка успешно выполняется вот Tk вивадо не видит... В чем может быть проблема. Как выбрать версию интерпретатора TCL, так как в установочных каталогах версии разные имеются...
  6. Разобрался с проблемой. Проблема, естесно, не в измерениях): Я пользовался платой KCU105 к которой в нагрузку идет плата PCIe LoopBack в которой сигнал начального сброса PERST просто никуда не подцеплен! И по факту, подтянутая к земле, эта линия держала корку PCI в сброшенном состоянии - соотетственно ГУН ПЛЛ находился в крайнем положении. Поэтому корка выдавала user_clk частотой 25 МГц вне зависимости от настроек лэйнов и частот в визарде корки. Поэтому, пришлось в визарде на вкладке Basic изменить System reset polarity в значение ACTIVE_HIGH. Но! Когда плату планируется вставлять в слот ПК (а не в этот недоделанный LoopBack), то данное значение необходимо вернуть в ACTIVE_LOW
  7. Я понимаю, что могло быть искажение из-за дискретизации, но глюков измерения тут скорее всего нет, но я еще поковыряюсь конечно, так как это нельзя полностью исключать. Спасибо!
  8. Еще один момент, который я обнаружил, непонятный мне: сконфигурировав IP-блок UltraScale FPGA Gen3 Integrated Block for PCI Express, я должен был получить user_clock частотой 250 МГц, согласно настройкам корки... Вывед данный клок наружу ПЛИС - осциллом наблюдаю 25 Мгц (да, я не гоню, ноликом не ошибься ). Как можно это объяснить?
  9. Немного запутался в принципах интерфейса AXI4-Stream. Основными интерфейсам взаимодействия хоста и user logic через IP-блок являются: Completer Requester Interface (AXI4-Stream Master) Completer Completion Interface (AXI4-Stream Slave) Requester Requester Interface (AXI4-Stream Slave) Requester Completion Interface (AXI4-Stream Master) Насколько я понял, изучая документ PG156, взаимодействие между хостом и user logic происходит следующим образом: 1.1 Если хост инициирует передачу пакета - данные появятся на линиях интерфейса Completer Requester 1.2 В ответ на принятый пакет user logic отдает ответный пакет (а может и не отдавать) на линии интерфейса Completer Completion Interface 2.1 Если же user logic инициирует передачу пакета на хост, то это необходимо сделать через линии интерфейса Requester Requester Interface 2.2 В ответ хост может ответить посылкой на линии Requester Completion Interface Правильно ли я понял процесс обмена данными?
  10. Для первого этапа - достаточно BAR, так как необходимо просто обмен медленными посылками между ПЛИС на плате и ПК. Для второго этапа, скорее всего да - придется задействовать механизм DMA...
  11. Здравствуйте! Драйвер еще не написан, им только занялись, причем не лично я (я плисовод и цифровик-железячник), а другой отдел программистов. По поводу xdma - могу уточнить...
  12. Да, как выглядит пространство известно. Т.е. имеется возможность прочитать содержимое конфигурационного пространства через (как я понял) интерфейс: cfg_mgmt_addr, cfg_mgmt_write, cfg_mgmt_write_data, cfg_mgmt_byte_enable, cfg_mgmt_read, cfg_mgmt_read_data, cfg_mgmt_read_write_done, cfg_mgmt_type1_cfg_reg_access Только вот, у меня мозг так устроен, что лучше всего обмен данными устроен через изучение временных диаграмм, коих по данной теме почти нет (ну или мне было не по глазам). Буду Разбираться, благодарю! Да, есть вариант запустить симуляцию, но тут меня кидает в холодный пот. Причина - я раньше работал только с продуктами Altera/Intel? поэтому переход на Вивадо происходит у меня болезненно. Но, хныкать не будем, тоже буду копать в этом направлении! VID и PID, согласен известны уже в самой корке, и также, да, в Линуксе добился того, что ОС подружилась с платой, а значит корка по минимальным настройкам сконфигурирована верно (через lspci распознается как надо). Для того, чтобы начать писать драйвер, согласен достаточно VID PID, но в дальнейшем нужно чтобы корка как-то отвечала на посылки с хоста на плату. Как я понимаю, для этого нужно изучить интерфейс AXI4-Stream (вроде простой). Только вопрос: Посылку от хоста я (мой user code на ПЛИС) могу получить на интерфейсе Completer Request, в ответ мне нужно будет сформировать пакет на интерфейсе Completer Completion. Подскажите, я правильно понимаю данный процесс "запрос/ответ" в контексте простого взаимодействия хост-девайс ? А через этот стандартный драйвер каким образом можно реализовать простейший обмен данными между ОС и платой - через какие рычаги? В каком направлении мне тут покопать? Спасибо! Поизучаю инфу по Вашим ссылкам!
  13. Всем привет! По роду своей деятельности появилась необходимость "поднимать" PCIe. Прочитано немноло даташитов и прочих талмудов. Собираюсь тут задавать вопросы по данной теме и внимательно слушать советы... Вводные данные: Плата на базе Xilinx Kintex UltraScale, PCIe Gen 3.0 x8, Vivado 2018.1 Первое, что я сделал сконфигурировал IP-блок UltraScale FPGA Gen3 Integrated Block for PCI Express. Сразу появилась нужна знать - как выглядит конфигурационное пространство, полученного IP-блока PCIe? (Данная информация нужна будет для тех, кто будет писать драйвер для ПК). Имеется ли возможность прочитать содержимое конфигурационного пространства (хотя бы ту часть, которую не трогает ОС) без непосредственного подлючения платы в слот ПК? Например, может в процессе генерации IP-блока создается некоторый файл или я могу это сделать через какой-либо интерфейс полученного IP-блока? Заранее, спасибо!
  14. Мой параметризируемый модуль приемника UART: https://github.com/DigitalRabbit85/SvLibDR/tree/main/SingleRxUART За пояснениями - в личку...
  15. Вот! Именно с добавлением параллельного (у них общий только клок ) - и проект может рухнуть. Вопрос именно как использовать create_clock при том, что клоки, например разветвил assign clk1 = clk_pll, assign clk2 = clk_pll ... При этом варианте таймквестом не получается использовать create_clock По поводу false_path можете пример привести в моем случае?)
×
×
  • Create New...