Jump to content

    
Digi

Altera PCI express как лучше реализовать обмен

Recommended Posts

On 11/7/2020 at 7:47 PM, Digi said:

задача стоит сопрячь 2х портовую память с Avalon-MM и самописным , внешним, контроллером

а напрямую сигналы с памяти на свой контроллер никак не получается или Вам это не нужно? В V  цыклоне в qsys память представлена своими сигналами, есть картинка с диаграммой работы, по ней можно написать свой контроллер.

Если же память вешать на общую шину - это, как понимаю, возможны непредсказуемые задержки. Шина, конечно, это разрулит... Мне было важно без задержек на максимальной скорости использовать память, поэтому обошелся без шины, чтобы гарантированно не было ни такта задержки.

Edited by Yuri124

Share this post


Link to post
Share on other sites
21 hours ago, Yuri124 said:

а напрямую сигналы с памяти на свой контроллер никак не получается или Вам это не нужно? В V  цыклоне в qsys память представлена своими сигналами, есть картинка с диаграммой работы, по ней можно написать свой контроллер.

Если же память вешать на общую шину - это, как понимаю, возможны непредсказуемые задержки. Шина, конечно, это разрулит... Мне было важно без задержек на максимальной скорости использовать память, поэтому обошелся без шины, чтобы гарантированно не было ни такта задержки.

Так как раз и хотел получить прямые сигналы второго порта памяти вывести на контроллер. Так как контроллер уже отлажен с ними. Сейчас вытащил Avalon шину второго порта памяти, пытаюсь её прилепить к контроллеру. 

 

Share this post


Link to post
Share on other sites
23 hours ago, Yuri124 said:

чтобы гарантированно не было ни такта задержки

спрашиваю чисто для опыта, подразумеваете большие задержки? Там же в авалоне простой арбитр стоит, задержки думаю такта 3-4, если шина очень сильно нагружена, а так waitrequest всегда свободен у меня. Тут правда наверное уместно сказать, кому как эти 4 такта, может это и много в каких то задачах

Share this post


Link to post
Share on other sites
7 hours ago, new123 said:

кому как эти 4 такта

мне нужно было (читать из одного блока памяти поток данных)/(обрабатыватьь этот поток в конвейере)/(писать этот поток в другой блок памяти) как можно быстрее - т.е

синхронно. Если где-то не дай Бог  waitquest бы появился - весь синхронизм насмарку. А так знаю - со второго такта чтения пошел поток не останавливаясь, и управляю им как хочу.

Конечно, раз шина была бы выделенная - то задержек не должно было бы быть в теории...

 

8 hours ago, Digi said:

хотел получить прямые сигналы второго порта памяти вывести на контроллер. Так как контроллер уже отлажен с ними. Сейчас вытащил Avalon шину второго порта памяти, пытаюсь её прилепить к контроллеру

так если непосредственно с сигналами порта контроллер уже работает - почему бы не создать instance этого контроллера в qsys и не завести шину памяти как она есть в этот контроллер. Или можно экспортировать из qsys наружу, в top, а там уже подключить к контролеру. А не придумывать костыль между авалоном памяти и контроллером...

Edited by Yuri124

Share this post


Link to post
Share on other sites
15 hours ago, Yuri124 said:

почему бы не создать instance этого контроллера в qsys и не завести шину памяти как она есть в этот контроллер.

Не знаю, чем мне поможет Instance контроллера в QSys ведь к нему всё равно от памяти будет идти интерфейс Avalon. Мне то нужно вытащить(экспортировать) сигналы порта памяти. Чтобы получилась Instance в Qsys Двухпортовой памяти, к которой к одному порту подключена шина Avalon а другой порт экспортировался наружу в виде сигналов.  К тому же у меня нет опыта в создании своего Instance для QSys.

Временно решил проблему так, так как пока что только только  чтение контроллером из памяти, я экспортировал Avalon второго порта и подключил соответствующие сигналы к контроллеру. Диаграмма работы шины вроде совпадает с диаграммой голой памяти.

Share this post


Link to post
Share on other sites

 

17 minutes ago, Digi said:

чем мне поможет Instance контроллера в QSys ведь к нему всё равно от памяти будет идти интерфейс Avalon. Мне то нужно вытащить(экспортировать) сигналы порта памяти. Чтобы получилась Instance в Qsys Двухпортовой памяти, к которой к одному порту подключена шина Avalon а другой порт экспортировался наружу в виде сигналов

хм, я так понял из ранее написанного - у Вас есть блок двухпортовой памяти, один порт подключен к авалону и кто-то туда что-то пишет/читает по этой шине.

Второй порт - тоже к  авалону, но его нужно подключить к уже отлаженному контроллеру, умеющему работать не с этой шиной, а просто с сигналами памяти. И это - суть проблема, которую нужно решить.

А сейчас, после этой фразы - ничего не понимаю...

24 minutes ago, Digi said:

нет опыта в создании своего Instance для QSys

вызываете мастер создания, описываете сигналы (только желательно сразу все правильно, иначе потом поменять - в моей версии Кватруса был большой гемор), связываете это с файлом описания Вашего контроллера.

В qsys добавляете Ваш контроллер, голую шину памяти напрямую, только ее одну, без объединения с другими шинами, подключаете к соотв. шине контроллера - всё...

Share this post


Link to post
Share on other sites
9 minutes ago, Yuri124 said:

 

хм, я так понял из ранее написанного - у Вас есть блок двухпортовой памяти, один порт подключен к авалону и кто-то туда что-то пишет/читает по этой шине.

Второй порт - тоже к  авалону, но его нужно подключить к уже отлаженному контроллеру, умеющему работать не с этой шиной, а просто с сигналами памяти. И это - суть проблема, которую нужно решить.

А сейчас, после этой фразы - ничего не понимаю...

вызываете мастер создания, описываете сигналы (только желательно сразу все правильно, иначе потом поменять - в моей версии Кватруса был большой гемор), связываете это с файлом описания Вашего контроллера.

В qsys добавляете Ваш контроллер, голую шину памяти напрямую, только ее одну, без объединения с другими шинами, подключаете к соотв. шине контроллера - всё...

Вот так сейчас сделано.

PCI_mm.png

Share this post


Link to post
Share on other sites
3 minutes ago, new123 said:

Вижу знакомые pio =)

Ага. Потом буду голову ломать, как к этому внешний DMA контроллер прикрутить и надыбать драйвер ))) Так как разрядность шины 64бит, а Avalon MM DMA работает только с шиной 128 бит. А так как 128 бит возможно только на Gen2 4х а у меня только 1х Gen1 то  Avalon MM DMA не доступен. Поэтому только внешний контроллер.... 

Share this post


Link to post
Share on other sites

Придется изучать TLP и делать самому tlp общение с 64-битной адресацией. Там у вас в букваре по арии раздел есть по этой части

Edited by new123

Share this post


Link to post
Share on other sites
37 minutes ago, Digi said:

так сейчас сделано

спасибо. Меня немного напрягает название этого блока "PCIe_mm_ram" - звучит так, что это блок памяти, встроенный в PCIe, а не независимая память. 

В сое время пробовал на Cyclone V применить такую корку (PCIe memory mapped - как то так она называлась), точно уже не помню, как она в qsys выглядела - но не заработала так, как мне нужно было (практически - работала, но тайминги в TimeQuest не сходились), а в более быстром Arria V было всё нормально.

А чистые блоки памяти (ohchip RAM) в qsys появлялось со своими родными сигналами что-то типа wr, rd, clk_en  - точно уже не помню на 100%, но не авалон. И wait не было, что для меня было важно.

Share this post


Link to post
Share on other sites
1 minute ago, Yuri124 said:

Меня немного напрягает название этого блока "PCIe_mm_ram" - звучит так, что это блок памяти, встроенный в PCIe, а не независимая память

Оно примерно так и есть, это блок памяти подключен к контроллеру PCIe а с другой стороны подключен мой контроллер. Этот блок памяти является буфером обмена между компом и и моей железкой.

Share this post


Link to post
Share on other sites
23 minutes ago, new123 said:

Придется изучать TLP и делать самому tlp общение с 64-битной адресацией

Зачем? К txs прикрутить контроллер DMA и можно гонять туда-сюда данные между компом и ПЛИС.  Блок PCIe сам побъет поток на tlp нужного размера и добавит служебные и будет контролировать всё сам.

Только зачем это нужно, если уже имеется memory mapped PCIe блок, который внутри имеет DMA, которое знает и про подключенный к нему блок памяти, и про имеющийся в PCIe буфер, и не будет создавать ни лишнюю задержку, ни лишние промежуточные буферы памяти при перекачке данных туда-сюда. Главное - правильно этим добром воспользоваться...

9 minutes ago, Digi said:

Оно примерно так и есть

спасибо, теперь понятно. Похоже - нужно смотреть, что там за сигналы в той шине авалон, что Вы уже и начали делать.

Share this post


Link to post
Share on other sites
1 minute ago, Yuri124 said:

К txs прикрутить контроллер DMA и мо

да точно.

1 minute ago, Yuri124 said:

memory mapped PCIe блок, который внутри имеет DMA

я так понял, именно эта корка не встает на gen1 x1. Я посмотрел букварь, там действительно, все плюшки начинаются с gen 2 x4

Share this post


Link to post
Share on other sites
2 minutes ago, Yuri124 said:

Только зачем это нужно, если уже имеется memory mapped PCIe блок, который внутри имеет DMA

Я же писал, что этот блок работает с PCIe Gen2 x4, А у меня х1. С таким интерфейсом он не работает

 

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.