Jump to content

    

COMPLETION для MEMORY WRITE

Начал разбираться с PCIE и есть вопрос.

Опиушу ситуацию:

1. Есть мат. плата на которой стоит процессорный модуль с LINUX.

2. На плате также стоит FPGA ARRIA2GX, которая связана с процессорным модулей по PCIE

3. Хочется реализовать простейший аппаратный цикл в данном случае MEMORY WRITE non posted

4. В FPGA используется HARD IP PCIE

5. В результате енумерации линукс увидел устройство с задаными ID . Увиделся выбранный BAR.

6. Делается запись в этот бар со стороны LINUX со смещением 0х0 значение 0х30. (32bit)

7. На анализаторе в FPGA видим реквест: (64 битные слова)

00Е0_000F-4000_0001

0000_0000_BC00_0000

0000_0030_0000_0030

 

FPGA формирует в ответ на это COMPLETION

0100_0000-0А00_0001

0000_0000-00Е0_0000

 

но после этого операционка вешается. Явно почему то не понравился этот комплешн...

 

8. Делаем запись в этот бар со стороны LINUX со смещением 0х8 значение 0хDEAD_BEEF (32bit)

9. На анализаторе в FPGA видим реквест: (64 битные слова)

00Е0_000F-4000_0001

0000_0000_BC00_0020

DEAD_BEEF_DEAD_BEEF

 

FPGA формирует в ответ на это COMPLETION

0100_0000-0А00_0001

0000_0000-00Е0_0000

 

Все ок...

 

Подскажите люди добрые, в чом собака порылась?

В принципе проходят даже некоторые циклы чтения, но также иногда зависают....

Если нужна какая доп информация отвечу.

Понимаю что вопрос чайниковский, но все же!

 

p.s. Не откажусь от грамотной консультации, могу перезвонить с вопросами и т.д.

p.s.s. Понимаю что есть какая то мелочь но найти ее очень тяжело.

p.s.s.s. Может просто кто проверит правильность формируемого комплешина? Может кто даст исходник какой посмотреть с примером простейшего чтения/записи слов без всяких DMA и усложнений?

В качестве интерфейса к ALTERA HARD-IP используется AVALON-ST.

 

Share this post


Link to post
Share on other sites

Вот не пойму, Вы что, на запрос записи в память устройства процессору данные хотите отправлять?

 

Share this post


Link to post
Share on other sites
Вот не пойму, Вы что, на запрос записи в память устройства процессору данные хотите отправлять?

Как я понял из спецификации , на non posted запросы нужно всегда формировать комплешины. В данном случае от процессора приходит запрос на запись данных в память и я должен сформировать пустой комлешн без данных сигнализируя процессору, что данные записаны. Если я не прав поправте меня пожалуйста.

Share this post


Link to post
Share on other sites
Как я понял из спецификации , на non posted запросы нужно всегда формировать комплешины. В данном случае от процессора приходит запрос на запись данных в память и я должен сформировать пустой комлешн без данных сигнализируя процессору, что данные записаны. Если я не прав поправок меня пожалуйста.

А как Вы определили, что он non-posted?

Share this post


Link to post
Share on other sites
А как Вы определили, что он non-posted?

 

Честно говоря я об этом чтото не подумал, по TLP действительно этого не понять...

вы хотите сказать что в моем случае комплешн отправлять не нужно?

Share this post


Link to post
Share on other sites
Честно говоря я об этом чтото не подумал, по TLP действительно этого не понять...

вы хотите сказать что в моем случае комплешн отправлять не нужно?

не нужно. Возьмите готовое решение, а то у Вас так много времени уйдёт.

Share this post


Link to post
Share on other sites
не нужно. Возьмите готовое решение, а то у Вас так много времени уйдёт.

 

Спасибо за совет! Обязательно после праздников попробую на работе.

По поводу готового решения нельзя ли по подробнее, что вы имеете ввиду? Имеются какие то конкретные примеры, которые можно было бы взять за основу организации шинной модели?

 

У меня еще остался один не очевидный вопрос к циклам записи, а даже скорее к не к ним а к организации

циклов задержки. К примеру если приемное устройство не успевает принимать данные от передающего.

Каким образом осуществляется сигнализация о неготовности приемного устройства?

В AVALON ST есть сигнал RX_READY, выставляя который в принципе можно приостановить шину AVALON, но будет ли

при этом задержаны циклы PCIE? Скорей всего данные будут копится во внутренних буферах AVALON и все это в конце концов плохо закончится.

Намекните как приостановить входной поток со стороны PCIE? Или я опять придумываю несуществующие проблемы и AVALON будет сам сигнализировать PCIE немного притормозить?

 

Спасибо за то что разъясняете ключевые моменты, потому как зная их намного легче разбираться в других тонкостях

довольно сложного стандарта...

Share this post


Link to post
Share on other sites
Спасибо за совет! Обязательно после праздников попробую на работе.

По поводу готового решения нельзя ли по подробнее, что вы имеете ввиду? Имеются какие то конкретные примеры, которые можно было бы взять за основу организации шинной модели?

 

У меня еще остался один не очевидный вопрос к циклам записи, а даже скорее к не к ним а к организации

циклов задержки. К примеру если приемное устройство не успевает принимать данные от передающего.

Каким образом осуществляется сигнализация о неготовности приемного устройства?

В AVALON ST есть сигнал RX_READY, выставляя который в принципе можно приостановить шину AVALON, но будет ли

при этом задержаны циклы PCIE? Скорей всего данные будут копится во внутренних буферах AVALON и все это в конце концов плохо закончится.

Намекните как приостановить входной поток со стороны PCIE? Или я опять придумываю несуществующие проблемы и AVALON будет сам сигнализировать PCIE немного притормозить?

 

Спасибо за то что разъясняете ключевые моменты, потому как зная их намного легче разбираться в других тонкостях

довольно сложного стандарта...

У altera есть ref design для pcie, лучше, конечно, через nios или через сторонний dma контроллер. Приостановить можно, какие сигналы на выходе ядра в алтьере не знаю, я с xilinx работаю. Только вряд ли у Вас приёмник будет занят, скорость 10 мбайт в секунду вряд ли что-то может перегрузить.

Share this post


Link to post
Share on other sites

Спасибо огромное за совет! Действительно на эти циклы формировать комплешины не требуется. Циклы записи успешно отрабатываются. Без вашей поддержки я бы потратил кучу времени неправильно истолковав соотв главу стандарта. К сож он довольно сложно описан однако ответы там конечноже есть, только поиск их может длится не один день...

Share this post


Link to post
Share on other sites
Спасибо огромное за совет! Действительно на эти циклы формировать комплешины не требуется. Циклы записи успешно отрабатываются. Без вашей поддержки я бы потратил кучу времени неправильно истолковав соотв главу стандарта. К сож он довольно сложно описан однако ответы там конечноже есть, только поиск их может длится не один день...

Да не за что. Это только верхушка айсберга, не советую делать свою логику с нуля, уйдёт очень много времени, присмотритесь к мостам для nios.

Share this post


Link to post
Share on other sites

To aosp:

Если все еще есть вопросы по PCIE - обращайтесь, могу помочь советами, так как сам через это проходил год назад. Сейчас имеется на руках работоспособный (ну почти))) ) проект по обмену данными через PCIE как разовыми командами, так и по dma каналу.

Share this post


Link to post
Share on other sites

спасибо господа, за советы и разьяснения! проект начал жить и с pcie на начальном уровне разобрался.

будут вопросы обязательно к вам обращусь!

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this