реклама на сайте
подробности

 
 
2 страниц V   1 2 >  
Reply to this topicStart new topic
novartis
сообщение May 28 2010, 14:10
Сообщение #1


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Добрый день!
Имеется плата Stratix IV GX Development Kit, выполнена в форм-факторе PCIE x8.
Создали в квартусе проект на vhdl, подцепили мегакорку PCIE, сделали простенькую обвязку этой мегафункции, мегафункция настроена на Hard IP, Avalon ST 128. К интерфейсу RX Avalon ST подцепили память шириной 128 бит, глубиной 64 слова. В память пишим данные rx_st_data по сигналу rx_st_valid = '1'.
Воткнули плату в комп под линукс. Наш спец по программированию в линуксе и в С написал драйвер, обнаружил плату, создал тестовую прогу на С, вот ее укороченный код:
Код
int af = open("dev/qwert", O+RDWR | O_SYNC); //
char *am = mmap (NULL, MEM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, af, 0);
volatile int *ptr = (__typeof(ptr))(am);
volatile int data = 0x0001;
*ptr = data;//запись в плис
int data1;
data1 = *ptr;//чтение из плис

При выполнении программы smile3046.gif в памяти в плисе мы видим следующее:
128 битная посылка на запись data [data][header2][header1][header0]
128 битная посылка на чтение data1 [мусор][header2][header1][header0]
Таким образом мы передали за один пакет (посылку) 32 бита данных.
Попросили нашего спеца по программированию послать не 32 бита (int), а больше, чтобы получилась пакетная передача данных. Он покапался в описаниях на процессор Intel, нашел там 128 разрядный регистр. Код получился таким:
Код
int af = open("dev/qwert", O+RDWR | O_SYNC); //
char *am = mmap (NULL, MEM_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, af, 0);
volatile __v4si *ptr = (__typeof(ptr))(am);
volatile __v4si data = { 0x0001, 0x0002, 0x0003, 0x0004};
*ptr = data;//запись в плис
__v4si data1;
data1 = *ptr;//чтение из плис

В памяти в плисе мы видим следующее:
четыре 128 битных посылки на запись data

[мусор][header2][header1][header0]
[мусор][ мусор ][ 0x0002][ 0x0001]

[мусор][header2][header1][header0]
[мусор][ мусор ][ 0x0004][ 0x0003]

128 битная посылка на чтение data1 [мусор][header2][header1][header0]

А хотелось бы увидеть три хедера и много много байт данных в одном пакете(посылке):
[ мусор ][header2][header1][header0]
[ 0x0004][ 0x0003][ 0x0002][ 0x0001]
[ 0x0008][ 0x0007][ 0x0006][ 0x0005]
...
[ 0x007F][ 0x007E][ 0x007D][ 0x007C]

Куда стоит копать? В программе на Си? Или мегафункцию ковырять? Или нужно DMA организовывать (как это делать представления не имею)?
Наш спец по программированию сказал (кстати очень граммотный и опытный специалист, оснований сомневаться в нем у меня нет), что сделал все что может, большего из процессора не выжать, так как там нет регистров больше 128 бит, хотя даже при 128 разрядном регистре у нас не получается послать посылку со 128 битами данных, а получается послать два пакета по 64 информативных бит данных.

Буду благодарен за любые ответы, советы, комментарии.(извините что многа букф)
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jun 1 2010, 13:02
Сообщение #2


Местный
***

Группа: Свой
Сообщений: 451
Регистрация: 6-09-05
Из: Москва
Пользователь №: 8 284



Цитата(novartis @ May 28 2010, 18:10) *
Куда стоит копать? В программе на Си? Или мегафункцию ковырять? Или нужно DMA организовывать (как это делать представления не имею)?


Мои эксперименты с Intel показали что даже при использовании MMX регистров, на шине происходят 32-х разрядные обращения. 64-х разрядных обращений мне получить не удалось.

Для реализации скоростного обмена необходимо реализовать контроллер DMA. Причём в режиме SCATER-GATHER. А что такое DMA можно прочитать у PLDA : http://plda.com/prodetail.php?pid=152
Go to the top of the page
 
+Quote Post
AsJohnAs
сообщение Jun 1 2010, 14:54
Сообщение #3


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 14-07-05
Из: Санкт-Петербург
Пользователь №: 6 793



Это так устроенно. Если пишешь или читаешь регистры через PCI-E, т.е. разовые транзакции по шине, то ширина слова будет только 32 бита.
Я работал с Xilinx - поэтому смотрел реализацию xapp1052.zip - там это видно.

При использовании DMA можно передавать 64-битные слова.
Go to the top of the page
 
+Quote Post
novartis
сообщение Jun 3 2010, 16:26
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Спасибо за ответы!

Зашел на http://plda.com/prodetail.php?pid=152 - жму на кнопку FREE DOWNLOAD, вылазит формы для заполнения данными о себе и компании, а после заполнения письмо прислали с просьбой подтвердить данные путем сообщения корпоративного мыла - вообщем, free download не получилось.

вот еще один вопрос на ту же тему:
на стороне плис мы например поставим DMA. Этот DMA будет быстро складывать/забирать данные из плис-памяти в общую шину ПК. А на стороне ПК тоже нужно задействовать DMA-контроллер, чтобы брать данные из общей шины и кидать их например на жеский диск? Как этот DMA контроллер на стороне ПК задействовать?
Go to the top of the page
 
+Quote Post
AsJohnAs
сообщение Jun 3 2010, 18:16
Сообщение #5


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 14-07-05
Из: Санкт-Петербург
Пользователь №: 6 793



Так чего-то непонятно из вашего поста кто будет являться мастером DMA?
Go to the top of the page
 
+Quote Post
serebr
сообщение Jun 4 2010, 02:09
Сообщение #6


Частый гость
**

Группа: Свой
Сообщений: 191
Регистрация: 10-01-05
Из: San Francisco Bay, Silicon Valley
Пользователь №: 1 869



Цитата(novartis @ Jun 3 2010, 23:26) *
на стороне плис мы например поставим DMA. Этот DMA будет быстро складывать/забирать данные из плис-памяти в общую шину ПК. А на стороне ПК тоже нужно задействовать DMA-контроллер, чтобы брать данные из общей шины и кидать их например на жеский диск? Как этот DMA контроллер на стороне ПК задействовать?

На стороне ПК контроллера DMA не бывает, насколько я знаю. Все DMA-контроллеры располагаются во внешних устройствах. В том числе, такой контроллер имеется и в электронике жёсткого диска. Собственно он и выполняет пересылки с жёсткого диска в память и обратно. Причём "памятью" в данном случае может являться и буферная память вашего разработанного устройства.

Если же сильно хочется, то можно научить DMA-контроллер ПЛИС работать в режиме "внешняя память <-> внешняя память". Этот контроллер сможет пересылать данные из жёсткого диска в системную память, т.к. буферная память жёсткого диска также отображается в пространстве адресов памяти ПК.
Go to the top of the page
 
+Quote Post
AsJohnAs
сообщение Jun 4 2010, 17:54
Сообщение #7


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 14-07-05
Из: Санкт-Петербург
Пользователь №: 6 793



Цитата(serebr @ Jun 4 2010, 06:09) *
На стороне ПК контроллера DMA не бывает, насколько я знаю. Все DMA-контроллеры располагаются во внешних устройствах. В том числе, такой контроллер имеется и в электронике жёсткого диска. Собственно он и выполняет пересылки с жёсткого диска в память и обратно. Причём "памятью" в данном случае может являться и буферная память вашего разработанного устройства.

Если же сильно хочется, то можно научить DMA-контроллер ПЛИС работать в режиме "внешняя память <-> внешняя память". Этот контроллер сможет пересылать данные из жёсткого диска в системную память, т.к. буферная память жёсткого диска также отображается в пространстве адресов памяти ПК.


Ну это просто не правда. Это доказать очень легко если вы в ОС Windows посмотрите в диспетчере устройств на винчестеры - там видно что указан канал - так этот канал DMA. Вообще на более старых вариантах Windows даже можно было выбирать режим работы DMA или не DMA. Для CDROM и сейчас можно переключиться в работу без DMA, но тогда про 52 скорости мечтать не придется smile.gif
DMA - это такой сопроцессор который облегчает жизнь при работе с внешним устройством.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Jun 7 2010, 09:46
Сообщение #8


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(AsJohnAs @ Jun 4 2010, 21:54) *
Ну это просто не правда. Это доказать очень легко если вы в ОС Windows посмотрите в диспетчере устройств на винчестеры - там видно что указан канал - так этот канал DMA. Вообще на более старых вариантах Windows даже можно было выбирать режим работы DMA или не DMA. Для CDROM и сейчас можно переключиться в работу без DMA, но тогда про 52 скорости мечтать не придется smile.gif
DMA - это такой сопроцессор который облегчает жизнь при работе с внешним устройством.

DMA умерло вместе с шиной ISA. В PCI и т.д. это называется Bus Master, т.е. само устройство является ведущим на шине без всякого дополнительного контроллера как было с шиной ISA. Так что не пудрите людям мозги....
Go to the top of the page
 
+Quote Post
AsJohnAs
сообщение Jun 7 2010, 12:15
Сообщение #9


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 14-07-05
Из: Санкт-Петербург
Пользователь №: 6 793



Цитата
DMA умерло вместе с шиной ISA. В PCI и т.д. это называется Bus Master, т.е. само устройство является ведущим на шине без всякого дополнительного контроллера как было с шиной ISA. Так что не пудрите людям мозги....

Ну если вы за чистоту речи то это называется "Bus Master DMA". И вы сами сказали что устройство является ведущим т.е. есть такой блок который работает с шиной. Ну а я и не спорил с этим я говорил что оно есть а где оно в устройстве, в мосте, или в Африке - главное что оно есть.
Go to the top of the page
 
+Quote Post
-Al-
сообщение Jun 7 2010, 12:29
Сообщение #10


Местный
***

Группа: Свой
Сообщений: 330
Регистрация: 10-06-05
Из: Россия, Москва
Пользователь №: 5 894



Цитата(AsJohnAs @ Jun 7 2010, 16:15) *
Ну если вы за чистоту речи то это называется "Bus Master DMA". И вы сами сказали что устройство является ведущим т.е. есть такой блок который работает с шиной. Ну а я и не спорил с этим я говорил что оно есть а где оно в устройстве, в мосте, или в Африке - главное что оно есть.

Тогда я неправильно понял эту фразу:
Цитата(AsJohnAs @ Jun 4 2010, 21:54) *
...DMA - это такой сопроцессор который облегчает жизнь при работе с внешним устройством.

Звучит она так, как будто речь о ISA системах, коих уже практически нет. Да и DMA к Bus Mastering прилепили непонятно зачем (видимо для сохранения преемственности), поскольку Bus master это Bus master, а Direct Memory Access это Direct Memory Access....
Go to the top of the page
 
+Quote Post
AsJohnAs
сообщение Jun 7 2010, 13:05
Сообщение #11


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 14-07-05
Из: Санкт-Петербург
Пользователь №: 6 793



Согласен - не очень корректно получилось. Но теперь точно поставлены все точки над "i" smile.gif
Go to the top of the page
 
+Quote Post
novartis
сообщение Jun 9 2010, 01:49
Сообщение #12


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Вот непонятки у меня.
Персональный компьютер - root устройство. Плата с ПЛИС - endpoint устройство. Может ли Endpoint устройство послать по PCI Express запрос Write Memory Request, или же это обязанность и привелегия только root устройств.
Если может, то как практически потом считать на ПК данные из этой памяти. Ведь когда я считываю data = *ptr, ПК посылает запрос в ПЛИС Memory Read Request и на него я должен ответить Completion With Data.
Go to the top of the page
 
+Quote Post
AsJohnAs
сообщение Jun 9 2010, 06:43
Сообщение #13


Частый гость
**

Группа: Свой
Сообщений: 125
Регистрация: 14-07-05
Из: Санкт-Петербург
Пользователь №: 6 793



Endpoint устройство может послать запрос на чтение и может послать квитанцию за которой пойдут данные.
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Jun 9 2010, 07:07
Сообщение #14


Знающий
****

Группа: Свой
Сообщений: 672
Регистрация: 18-02-05
Пользователь №: 2 741



Цитата(novartis @ Jun 9 2010, 04:49) *
Вот непонятки у меня.
Персональный компьютер - root устройство. Плата с ПЛИС - endpoint устройство. Может ли Endpoint устройство послать по PCI Express запрос Write Memory Request, или же это обязанность и привелегия только root устройств.
Если может, то как практически потом считать на ПК данные из этой памяти. Ведь когда я считываю data = *ptr, ПК посылает запрос в ПЛИС Memory Read Request и на него я должен ответить Completion With Data.

зайдите на xilinx.com там в xapp1052 и xapp859 всё написано
Go to the top of the page
 
+Quote Post
novartis
сообщение Jun 9 2010, 11:56
Сообщение #15


Местный
***

Группа: Свой
Сообщений: 375
Регистрация: 9-10-09
Из: Свердловский регион
Пользователь №: 52 845



Цитата
Endpoint устройство может послать запрос на чтение и может послать квитанцию за которой пойдут данные.

Что значит квитанция? В спецификации PCI Express по английски как эта квитанция называется?
Go to the top of the page
 
+Quote Post

2 страниц V   1 2 >
Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 23rd June 2025 - 09:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01554 секунд с 7
ELECTRONIX ©2004-2016