

dde29
Участник-
Posts
100 -
Joined
-
Last visited
Content Type
Profiles
Forums
Calendar
Everything posted by dde29
-
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Вы оказались правы! Прочитав конфигурационное пространство командой: 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). Так что, текущая проблема решена, буду двигаться дальше... -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Какую конкретно ip-корку вы имеете в виду под "корка gpio"? В этом проекте имется память. JTAGом я смотрел числе и сигналы память - при операции чтения/запись шевеления на сигналах памяти не было, соответственно делаю вывод, что память не читается и не записывается... И еще: как понять фразу " Gpio автоматом должен обновиться, без всяких своих транзакций"? Ведь, если не было никаких транзакция, то ничего и не должно поменяться, или я что-то не понимаю? 1. Линк поднялся, так как через lspci мое устройство отображается с некоторыми параметрами. С какими конкретно, если нужно, могу позже написать сюда... 2. Так же отображаются адреса BARов и их размер, можно сделать вывод, что система их сконфигурировала? 3. "разрешены соответствующие транзакции (IO, MEM, Master)". А вот это надо глянуть... -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Именно так! Пишем в map и я на интерфейсе CQ не вижу никаких шевелений, цепляясь триггером на valid или last -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Всем привет! Продолжаю разбираться в корке 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 -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
При генерации IP корки для PCIe установил галочку "JTAG Debaging", чтобы была возможность отладки. Сгенерировались скрипты на TCL, но в скриптах в самом начале подключаются нужные пакеты: package require Tcl 8.5 package require Tk Так вот первая строка успешно выполняется вот Tk вивадо не видит... В чем может быть проблема. Как выбрать версию интерпретатора TCL, так как в установочных каталогах версии разные имеются... -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Разобрался с проблемой. Проблема, естесно, не в измерениях): Я пользовался платой KCU105 к которой в нагрузку идет плата PCIe LoopBack в которой сигнал начального сброса PERST просто никуда не подцеплен! И по факту, подтянутая к земле, эта линия держала корку PCI в сброшенном состоянии - соотетственно ГУН ПЛЛ находился в крайнем положении. Поэтому корка выдавала user_clk частотой 25 МГц вне зависимости от настроек лэйнов и частот в визарде корки. Поэтому, пришлось в визарде на вкладке Basic изменить System reset polarity в значение ACTIVE_HIGH. Но! Когда плату планируется вставлять в слот ПК (а не в этот недоделанный LoopBack), то данное значение необходимо вернуть в ACTIVE_LOW -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Я понимаю, что могло быть искажение из-за дискретизации, но глюков измерения тут скорее всего нет, но я еще поковыряюсь конечно, так как это нельзя полностью исключать. Спасибо! -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Еще один момент, который я обнаружил, непонятный мне: сконфигурировав IP-блок UltraScale FPGA Gen3 Integrated Block for PCI Express, я должен был получить user_clock частотой 250 МГц, согласно настройкам корки... Вывед данный клок наружу ПЛИС - осциллом наблюдаю 25 Мгц (да, я не гоню, ноликом не ошибься ). Как можно это объяснить? -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Немного запутался в принципах интерфейса 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 Правильно ли я понял процесс обмена данными? -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Для первого этапа - достаточно BAR, так как необходимо просто обмен медленными посылками между ПЛИС на плате и ПК. Для второго этапа, скорее всего да - придется задействовать механизм DMA... -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Здравствуйте! Драйвер еще не написан, им только занялись, причем не лично я (я плисовод и цифровик-железячник), а другой отдел программистов. По поводу xdma - могу уточнить... -
PCIe - начало...
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Да, как выглядит пространство известно. Т.е. имеется возможность прочитать содержимое конфигурационного пространства через (как я понял) интерфейс: 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. Подскажите, я правильно понимаю данный процесс "запрос/ответ" в контексте простого взаимодействия хост-девайс ? А через этот стандартный драйвер каким образом можно реализовать простейший обмен данными между ОС и платой - через какие рычаги? В каком направлении мне тут покопать? Спасибо! Поизучаю инфу по Вашим ссылкам! -
PCIe - начало...
dde29 posted a topic in Работаем с ПЛИС, области применения, выбор
Всем привет! По роду своей деятельности появилась необходимость "поднимать" 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-блока? Заранее, спасибо! -
Конфигурируемый приемник RS-232
dde29 replied to lyaksandrov's topic in Языки проектирования на ПЛИС (FPGA)
Мой параметризируемый модуль приемника UART: https://github.com/DigitalRabbit85/SvLibDR/tree/main/SingleRxUART За пояснениями - в личку... -
Altera, Констрейны, два независимых для фиттера клока
dde29 replied to dde29's topic in Языки проектирования на ПЛИС (FPGA)
Вот! Именно с добавлением параллельного (у них общий только клок ) - и проект может рухнуть. Вопрос именно как использовать create_clock при том, что клоки, например разветвил assign clk1 = clk_pll, assign clk2 = clk_pll ... При этом варианте таймквестом не получается использовать create_clock По поводу false_path можете пример привести в моем случае?) -
Altera, Констрейны, два независимых для фиттера клока
dde29 replied to dde29's topic in Языки проектирования на ПЛИС (FPGA)
Понял, гляну, спасибо!) -
Altera, Констрейны, два независимых для фиттера клока
dde29 replied to dde29's topic in Языки проектирования на ПЛИС (FPGA)
50 МГц это входная частота от генератора, следом рождается в PLL клок 300 МГц. Вот на этой частоте и работают эти условные счетчики. Ну асинхры точно никакой нет - так как источник, вход по сути один (клок от генератора). По поводу констрейнов - да, поэтому и вопрос - что я еще могу умного прописать)) У меня 10й цыклон LP -
Altera, Констрейны, два независимых для фиттера клока
dde29 replied to dde29's topic in Языки проектирования на ПЛИС (FPGA)
Я может не правильно мысли свои донес) Другими словами, ТаймКвест показывает меньшее значение максимальной частоты Fmax при компиляции проектс с двумя счетчиками, по сравнению чем с один счетчиком. Вопрос - почему частота уменьшается, если ресурсы практически не задействованы и модули не связаны? Почему занялся этим вопросом - имеется проект, в котором генерируются разные сигналы, с возможностью шага мелкого шага смещение (ну т.е. модуль работает на большое частоте...) Если таких разных сигналов 2 то все ок, добавляешь в проект 3-й - и все рушится, проект перестает адекватно работать... Вот и возникла мысль сделать для каждого такого сигнала что-то вроде set_false_path -
Всем привет! В одном проекте, работающим на большое частоте, появилась необходимость в прописании констрейнов на проект... Допустим, имеется два модуля счетчиков - один инкрементирует, другие декрементирует (это условно, в реальном проекте вместо счетчиков другие модули). Они, по сути, работают на одном клоке... При компиляции проекта, синтезатор пытается выровнять пути сигналов по всем проекту. Но, мне необходимо так прописать констрейны, чтобы два клока clk_incr и clk_decr были экслюзивные. Т.е. как бы абсолютно два разных клоковых домена, не связанных между собой: RTL: module Top ( input inclk, output imp1, output imp2 ); mypll mypll_0( .inclk0 (inclk), .c0 (clk) ); wire clk_incr = clk; wire clk_decr = clk; defparam CounterIncr.parWIDTH = 32; CounterIncr CounterIncr( .clk (clk_incr), .out (imp1) ); defparam CounterDecr.parWIDTH = 32; CounterDecr CounterDecr( .clk (clk_decr), .out (imp2) ); endmodule SDC: #************************************************************** # Time Information #************************************************************** set_time_format -unit ns -decimal_places 3 #************************************************************** # Create Clock #************************************************************** create_clock -name {inclk} -period 20.000 -waveform { 0.000 10.000 } [get_ports {inclk}] #************************************************************** # Create Generated Clock #************************************************************** create_generated_clock -name {mypll_0|altpll_component|auto_generated|pll1|clk[0]} -source [get_pins {mypll_0|altpll_component|auto_generated|pll1|inclk[0]}] -duty_cycle 50/1 -multiply_by 6 -master_clock {inclk} [get_pins {mypll_0|altpll_component|auto_generated|pll1|clk[0]}] Вот, вопрос, собственно в том - что именно мне нужно прописать в SDC чтобы скомпилировалось так как задумывалось...
-
Шина Avalon-MM в Altera On-Chip Flash IP Core
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Чет не нашел я в Convert Programming File я такую галочку )) В общем понятно, спасибо. Просто как-то странно. Если ба данные в блок запихивал бы последовательно - то там тожно было понять фичу... И Если это формат RPD файла такой - то почему данные переворачивать нужно именно блоками по 4 байта... Дело в том, что я статью пишу на эту тему - и как это объяснить - дилемма ))) -
Всем привет, ковыряюсь с ПЛИС Max10 от Интела. Копаю корку Altera On-Chip Flash, которая позволяет в менять файл конфигурации находу, не используя JTAG. Грубо говоря самостоятельно себя перешивать. Структурная схема доступа к корке - на картинке. Если читать или записывать 32-х битное слово на шине writedata[31:0] блока Data и сравнивать данные с RPD-файлом, то оказывается что если брать данные по 4 байта из RPD-файла и записывать их на writedata[31:0] блока Data, то это 32-х битное слово нужно переворачивать - младший бит нужно записывать самым старшим в writedata и т д... Причем если читать и записывать writedata[31:0] блока Control - то там все впорядке. И вот вопрос: - это особенности шины данных Avalon или это такой хитрый формат RPD-данных, что врядли...
-
Структура файла RBF
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Благодарю! Поизучаю!- 6 replies
-
- rbf
- altera cyclone
-
(and 1 more)
Tagged with:
-
Структура файла RBF
dde29 replied to dde29's topic in Работаем с ПЛИС, области применения, выбор
Фишка в том, что по основному протоколу работы оборудования, необходимо по запросу отдавать контрольную сумму прошивки, конкретное число, а не сам факт - удачный файл прошивки или нет) Если бы Вы поделились ссылочкой, было бы неплохо- 6 replies
-
- rbf
- altera cyclone
-
(and 1 more)
Tagged with: