Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: PCI-E интерфейс в Qsys на Cy IV GX
Форум разработчиков электроники ELECTRONIX.ru > Программируемая логика ПЛИС (FPGA,CPLD, PLD) > Системы на ПЛИС - System on a Programmable Chip (SoPC)
AVR
Здравствуйте!
Есть платка Cyclone IV GX Starter, стандартный поставочный пример-демка видится в системе как PCI-E устройство. Теперь хочется создать уже свое устройство, которое было бы совместимо с ранее написанным (своим) драйвером для ПЛИС другого производителя. Однако у Altera PCI-E ядро оказалось существенно сложнее в подключении и настройке, и судя по всему предназначено для работы именно через Qsys а не как отдельный интерфейс.

Существуют ли хорошие туториалы где бы по шагам была бы объяснена настройка и подключение к Nios? Я не могу найти ничего, только какие-то презентации и слайды, хотя вот для TSE например были подробные туториалы.
AVR
Кажется, стала ясна причина невозможности найти туториал, по причине его присутствия прямо в даташите на IP блок: ug_pci_express.pdf 15. Testbench and Design Example и 16. Qsys Design Example. Прошу прощения, не додумался посмотреть на самом видном месте...
AVR
Конечно, туториал из ug_pci_express.pdf не подошел имеющейся у меня отладочной плате по многим причинам, но тем не менее удалось сгенерировать систему, состоящую из одного лишь ядра IP Compiler (плюс altgx_reconfig и PLL в топ модуле):
Нажмите для просмотра прикрепленного файла
Такая прошивка определилась в системе, однако у нее нет "региона памяти" (т.е. BAR0). Он видится только если подключить MM Slave типа памяти или тому подобного.

А как работать с альтеровским PCI-E ядром БЕЗ таких извращений? В документации даже пишут:
Цитата
In the Qsys design flow, the PCI Base Address Registers (Type 0 Configuration
Space) Bar Size and Avalon Base Address information populates from Qsys. You
cannot enter this information in the IP Compiler for PCI Express parameter editor.

Хочу как у Lattice и Xilinx просто слать TLP пакеты и принимать.

Что же туда подцепить чтобы оно схватило размер для BAR0, и при этом легко писать/читать туда данные? FIFO может быть (один в одну сторону, другой в обратную на передачу)? Могу Nios2 туда воткнуть, но хочется ведь из своей простой логики слать TLP-пакеты.
novartis
подцепите on-chip ram на bar0. Тогда со стороны компа сможете писать данные в ПЛИС (в эту ram) и читать данные из ПЛИС (из этой ram).
Чтобы слать TLP-пакеты из ПЛИС на комп нужно на порт txs подцепить модуль с Avalon Master.
novartis
Цитата(novartis @ Dec 16 2016, 00:27) *
Чтобы слать TLP-пакеты из ПЛИС на комп нужно на порт txs подцепить модуль с Avalon Master.

Неправильно написал. В данном варианте PCIE IP Core в порт txs вы запихиваете просто данные. Сама корка обертывает их tlp, то есть вам даже не нужно с tlp заморачиваться.

Если же хотите самостоятельно формировать пакеты, заголовки для PCIE, то нужно сгенерить PCIE IP Core типа Avalon Streaming. Такой точно можно сгенерить с помощью мегавизарда, а в кусисе - надо смотреть.
AVR
Цитата(novartis @ Dec 16 2016, 06:53) *
Если же хотите самостоятельно формировать пакеты, заголовки для PCIE, то нужно сгенерить PCIE IP Core типа Avalon Streaming. Такой точно можно сгенерить с помощью мегавизарда, а в кусисе - надо смотреть.

Спасибо за подсказку! Не знал что есть еще вариант!
Получается, что это уже совсем другое IP-core (может основанное на общем коде) и PDF документации у него другой?
Очень нужно самому (как на ПЛИС других производителей) формировать TLP. Вечером посмотрю, надеюсь "Avalon Streaming" не означает что там сложный интерфейс sm.gif
AVR
Цитата(novartis @ Dec 16 2016, 06:53) *
Если же хотите самостоятельно формировать пакеты, заголовки для PCIE, то нужно сгенерить PCIE IP Core типа Avalon Streaming. Такой точно можно сгенерить с помощью мегавизарда, а в кусисе - надо смотреть.
Действительно, смог сгенерировать, указал Avalon-ST интерфейс. Правда я удивлен вот чем:
Нажмите для просмотра прикрепленного файла
Вроде не более нового даташита на корку, но в ней почему-то пишут что Avalon-ST не поддерживается. Может по этой причине у меня проект успешно компилируется, однако задействует НОЛЬ логических элементов и по факту не работает (в отличие от QSys-версии с Avalon-MM интерфейсом).
novartis
Ошибка какая-то в пдф, я для стратикс4 конкретно PCIE compiler Avalon Stream (128 бит) создавал и работал.

PCIE Gen2 x8

-- megafunction wizard: %IP Compiler for PCI Express v14.1%
AVR
Цитата(novartis @ Dec 18 2016, 21:26) *
для стратикс4 конкретно PCIE compiler Avalon Stream (128 бит) создавал и работал
Можно ли Вас попросить показать участок кода непосредственно подключения сгенерированной корки? Сигналов там очень много, было бы интересно взглянуть только на те что нужны для работы.
Дело в том что мои попытки подключить ровно тот же набор сигналов, как и в случае QSys, приводят к нулевому задействованию регистров в проекте. Видимо оптимизатор видит незадействованные линии и оптимизирует в ноль вообще всё. На данном этапе освоения хотелось бы заставить корку просто увидеться в компьютере с моими параметрами.
novartis
Вот мой файл прослойка для стратикса 4.

Нажмите для просмотра прикрепленного файла

Компонент altpcierd_reconfig_clk_pll - альтеровский, прописан в .qip файле
set_global_assignment -name MISC_FILE [file join $::quartus(qip_path) ip_compiler_for_pci_express-library/altpcierd_reconfig_clk_pll.v ]

Компонент pcie_rs_hip должен быть в сгенеренной папке pcie_x8_examples\chaining_dma


AVR
Цитата(novartis @ Dec 19 2016, 09:50) *
Вот мой файл прослойка для стратикса 4.

Спасибо! Это помогло. Теперь это похоже на адекватный интерфейс PCI-E ядра, с которым можно работать. Вся задача решилась без QSys, ядро видится в компьютере.
Правда пока работает если загрузить комп, прошить ПЛИС и сделать ребут - только тогда видится. А если так не делать - загрузка ОС виснет. Ну думаю разберусь, что-то с резетами.

Вот мой вариант подключения на Verilog:Нажмите для просмотра прикрепленного файла
Тут r_npor это регистр который изначально ноль, а когда пойдут клоки он чуть подержит и затем снимет сигнал сброса npor. Может это ужасное решение, но пока так sm.gif

core_clk_out - это то, от чего мы должны тактить свою пользовательскую логику? И на прием и на передачу? Или только для приема. Это единственный тактовый выход из корки, и так написано в даташите, вроде верно.
wolfman
Цитата(AVR @ Dec 24 2016, 06:42) *
core_clk_out - это то, от чего мы должны тактить свою пользовательскую логику? И на прием и на передачу? Или только для приема. Это единственный тактовый выход из корки, и так написано в даташите, вроде верно.

в общем да, надо его использовать.

Я не использовал, но это из-за косяка в схеме, чтобы была совместимость с блоками, в которых была ошибка в подключении PCI-E.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.