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

 
 
> OpenSource DMA for Virtex 5, проект на www.ds-dev.ru
dsmv
сообщение Jul 14 2011, 15:32
Сообщение #1


Местный
***

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



Всем доброго времени суток.

Я открыл исходный код для проекта контроллера PCI Express на ПЛИС Virtex 5;
Проект доступен по адресу: http://www.ds-dev.ru

Проект ещё не завершён. Сейчас мне пришлось опять его отложить. Но ознакомится с ним уже можно.
Работает полная модель системы.

В железе есть недостатки:
1. Не работает прерывание.
2. Есть сбои при частых обращениях к регистрам BAR1
3. Есть сбой при одновременной работе двух каналов DMA

Это всё исправимо.
Меня интересует критический разбор проекта.
Go to the top of the page
 
+Quote Post
5 страниц V   1 2 3 > »   
Start new topic
Ответов (1 - 64)
SFx
сообщение Jul 14 2011, 18:17
Сообщение #2


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



добавьте скрипт сборки хотя бы, и туда старт моделирования. просто читать сырцы не очень интересно. example design тоже не повредит.


З.Ы. За опенсурс cheers.gif
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jul 15 2011, 09:40
Сообщение #3


Местный
***

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



Цитата(SFx @ Jul 14 2011, 21:17) *
добавьте скрипт сборки хотя бы, и туда старт моделирования. просто читать сырцы не очень интересно. example design тоже не повредит.


Добавил полный архив проекта. http://ds-dev.ru/projects/ds-dma/files
Он под Active-HDL 8.3; В него включены скомпилированные библиотеки проекта. Так что он должен просто запуститься.
В нем также есть несколько временных диаграмм и лог файл.
Файл верхнего уровня: stend_ambpex5_core_m2
Example design есть, это проект ambpex5_v20_sx50t_core
Go to the top of the page
 
+Quote Post
SFx
сообщение Jul 15 2011, 09:43
Сообщение #4


Знающий
****

Группа: Свой
Сообщений: 758
Регистрация: 11-07-05
Из: Понаехал (Мск)
Пользователь №: 6 688



спасибо, на недельке погляжу.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 12 2011, 09:58
Сообщение #5


Местный
***

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




Контроллер работает всё лучше и лучше.

Работает ввод и вывод данных. Есть сбои при одновременной работе двух каналов DMA.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 17 2011, 03:33
Сообщение #6


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(dsmv @ Aug 12 2011, 16:58) *
Контроллер работает всё лучше и лучше.

Работает ввод и вывод данных. Есть сбои при одновременной работе двух каналов DMA.

Под двумя каналами ДМА понимается два потока в противоположных направлениях (один - на запись и один - на чтение), или два канала - это два логических устройства, шарящих шину и работающих в произвольных (возможно совпадающих) направлениях) ?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 17 2011, 07:37
Сообщение #7


Местный
***

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



Цитата(Bad0512 @ Aug 17 2011, 06:33) *
Под двумя каналами ДМА понимается два потока в противоположных направлениях (один - на запись и один - на чтение), или два канала - это два логических устройства, шарящих шину и работающих в произвольных (возможно совпадающих) направлениях) ?


Реализовано два независимых двунаправленных канала DMA.
Они могут работать оба в одну сторону или в разные стороны.
Естественно, они разделяют шину.
Контроллер заканчивается 64-х разрядной параллельной шиной. С сигналами запроса DMA.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 17 2011, 14:05
Сообщение #8


Местный
***

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



Есть хорошие новости:
прошло успешное тестирование одновременной работы двух каналов DMA.

1. Два канала на приём. Время тестирования 6 часов. Средняя скорость по каждому каналу 809.1 Мбайт/с
2. Один канал на приём, второй на передачу. Время тестирования 6 часов. Средняя скорость по каждому каналу 574.2 Мбайт/с

На сайте выложил описание управляющих регистров.
Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 17 2011, 15:38
Сообщение #9


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(dsmv @ Aug 17 2011, 14:37) *
Реализовано два независимых двунаправленных канала DMA.
Они могут работать оба в одну сторону или в разные стороны.
Естественно, они разделяют шину.
Контроллер заканчивается 64-х разрядной параллельной шиной. С сигналами запроса DMA.

Никогда не понимал смысла в построении многоканальных контроллеров. Если контроллер построен правильно, то он утилизирует шину почти на 100%.
Соответственно когда один из каналов загружает шину, второй в любом случае ждёт пока шина освободится. Есть смысл распараллеливать лишь те операции,
которые могут в одно и то же время независимо работать не мешая друг другу. Например, чтение и запись. В остальных случаях вместо многоканальных движков
логичнее будет навернуть сверху над движком управляющий автомат, а не дублировать логику движка.

Цитата(dsmv @ Aug 17 2011, 21:05) *
Есть хорошие новости:
прошло успешное тестирование одновременной работы двух каналов DMA.

1. Два канала на приём. Время тестирования 6 часов. Средняя скорость по каждому каналу 809.1 Мбайт/с
2. Один канал на приём, второй на передачу. Время тестирования 6 часов. Средняя скорость по каждому каналу 574.2 Мбайт/с

На сайте выложил описание управляющих регистров.

Поглядите документы на IP для бриджа GN4121/GN4124. Там есть некоторые интересные идеи, часть из них я реализовал в своём контроллере.
А кое-что наоборот убрал. В общем, довольно интересно наблюдать как одну и ту же задачу решают разные люди.
Бридж геннумовский в общем и целом не сильно от коры Ксайлинкса отличается - также торчат в обе стороны две шины данных (в данном случае они 16 бит ДДР, но это
не важно). К ним кое-какие сигналы управления. Всё очень похоже.
Кстати, всё забываю спросить... Откуда ваш контроллер берёт данные на плате и куда их складывает? Наиболее часто ДМА машины цепляют к ДДР контроллеру. На этом стыке,
кстати тоже есть возможность потерять производительность.

Прикрепленные файлы
Прикрепленный файл  GN412x_FlexDMA_sequencer_design_guide_52179_Doc3.pdf ( 447.97 килобайт ) Кол-во скачиваний: 164
Прикрепленный файл  GN412x_FPGA_IP_hardware_design_guide_51860_Doc2.pdf ( 2.89 мегабайт ) Кол-во скачиваний: 1465
 
Go to the top of the page
 
+Quote Post
dmitry-tomsk
сообщение Aug 17 2011, 15:52
Сообщение #10


Знающий
****

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



Цитата(Bad0512 @ Aug 17 2011, 18:09) *
Никогда не понимал смысла в построении многоканальных контроллеров. Если контроллер построен правильно, то он утилизирует шину почти на 100%.
Соответственно когда один из каналов загружает шину, второй в любом случае ждёт пока шина освободится. Есть смысл распараллеливать лишь те операции,
которые могут в одно и то же время независимо работать не мешая друг другу. Например, чтение и запись. В остальных случаях вместо многоканальных движков
логичнее будет навернуть сверху над движком управляющий автомат, а не дублировать логику движка.

В pcie линия запросов одна - на чтение и на запись. Для чтения (памяти ПК) вторая линия. Минимум два канала формирования запросов. При правильном построении контроллера логика не дублируется, формирователь запросов один для всех каналов чтения/записи, приёмник один для всех каналов чтения. В формирователе добавляется только арбитр и мультиплексор по сравнению с одноканальным вариантом, в приёмнике не добавляется ничего, разве что декодер номера канала. Попробуйте сформировать чтение нескольких потоков данных с разной скоростью имея один канал. Думаю, Вас никакой автомат не спасёт. Простой пример такой необходимости - размещение памяти дескрипторов страниц данных в памяти ПК для sgdma передач (размер буфера больше 1 мбайт winda позволяет сделать только так, бесконечное копирование с задействованием цпу во временный буфер не в счёт).
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 18 2011, 04:40
Сообщение #11


Местный
***

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



Цитата(Bad0512 @ Aug 17 2011, 18:38) *
Никогда не понимал смысла в построении многоканальных контроллеров. Если контроллер построен правильно, то он утилизирует шину почти на 100%.
Соответственно когда один из каналов загружает шину, второй в любом случае ждёт пока шина освободится. Есть смысл распараллеливать лишь те операции,
которые могут в одно и то же время независимо работать не мешая друг другу. Например, чтение и запись. В остальных случаях вместо многоканальных движков
логичнее будет навернуть сверху над движком управляющий автомат, а не дублировать логику движка.

Смысл есть. Контроллер разрабатывается под специфику нашей компании - а именно подключение АЦП и ЦАП. Двухканальный и двунаправленный контроллер позволяет закрыть большинство задач. В частности одновременный ввод из АЦП и вывод в ЦАП, или ввод двух независимых потоков от АЦП.


Цитата(Bad0512 @ Aug 17 2011, 18:38) *
Поглядите документы на IP для бриджа GN4121/GN4124. Там есть некоторые интересные идеи, часть из них я реализовал в своём контроллере.
А кое-что наоборот убрал. В общем, довольно интересно наблюдать как одну и ту же задачу решают разные люди.
Бридж геннумовский в общем и целом не сильно от коры Ксайлинкса отличается - также торчат в обе стороны две шины данных (в данном случае они 16 бит ДДР, но это
не важно). К ним кое-какие сигналы управления. Всё очень похоже.

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


Цитата(Bad0512 @ Aug 17 2011, 18:38) *
Кстати, всё забываю спросить... Откуда ваш контроллер берёт данные на плате и куда их складывает? Наиболее часто ДМА машины цепляют к ДДР контроллеру. На этом стыке,
кстати тоже есть возможность потерять производительность.

Потерять производительность можно везде.
По поводу подключения, есть компонент
pcie_core64_m1 -http://src.ds-dev.ru/projects/ds_dma/core/...core64__m1.html
Это собственно контроллер, он имеет пакетную шину PB_BUS, которая реализована на двух сигналах pb_master и pb_slave;

Выше по иерархии компонент pcie_core64_m2 - http://src.ds-dev.ru/projects/ds_dma/core/...core64__m2.html
Он уже имеет нормальную 64-х разрядную синхронную параллельную шину.

Тестовый проект выполнен как проект ADMPRO. В нём реализован узел подключения к тетрадам cl_ambpex5_m2 - http://src.ds-dev.ru/projects/ds_dma/ambpe...mbpex5__m5.html
и собственно тетрады:
TRD_MAIN
TRD_DIO64_IN
TRD_DIO64_OUT
TRD_TEST_CTRL

Подробнее о интерфейсе ADMPRO можно прочитать на сайте "ИнСиС" - http://insys.ru/doc

В тетраде TRD_TEST_CTRL реализован узел формирования тестовой последовательности- cl_test_generate
и узел проверки тестовой последовательности - cl_test_check

В итоге cl_test_generate формирует тестовую последовательность, программа на компьютере её проверяет. Или наоборот, программа формирует тестовую последовательность, а узел cl_test_check её проверяет.
В тетраде MAIN также есть узел формирования псевдослучайной последовательности. В тесте двух каналов на приём используется два источника - тетрада MAIN и тетрада TEST_CTRL

Go to the top of the page
 
+Quote Post
Bad0512
сообщение Aug 18 2011, 14:13
Сообщение #12


Знающий
****

Группа: Свой
Сообщений: 802
Регистрация: 11-05-07
Из: Томск
Пользователь №: 27 650



Цитата(dsmv @ Aug 18 2011, 11:40) *
Документы посмотрел. У них, также как и остальных разработчиков DMA, используется одиночные дескрипторы для DMA. Это резко ограничивает скорость обмена при работе с фрагментированной памятью.

Если Вы имеете ввиду со стороны памяти хоста, то там - честный scatter-gather, с листами страничек и размером одного ДМА пакета до 4 мегабайт (как раз размер HD картинки).
Если речь идёт о непрерывности со стороны интерфейса в локальную память, то в родном геннумовском интерфейсе всё даже хуже - там не то что адрес менять нельзя, его просто нет, интерфейс заточен на ФИФО. Кстати для ЦАП-АЦП вполне подходит такой вариант. Именно потому, что при обращении к локальной памяти нельзя выставить, а потом на ходу и поменять адрес, я и взялся этот дизайн переписывать. Приделал небольшой списочек дескрипторов для локальной памяти, в моём случае было важно за одну операцию забирать до 8 разных кусков видео-аудио, которые уже лежат в локальной памяти, но имеют разный размер (от 0 до 4 мегабайт) и естественно расположены по почти случайным адресам.
Go to the top of the page
 
+Quote Post
FLTI
сообщение Aug 19 2011, 11:03
Сообщение #13


Местный
***

Группа: Свой
Сообщений: 399
Регистрация: 8-06-05
Пользователь №: 5 832



Цитата(Bad0512 @ Aug 17 2011, 19:38) *
Поглядите документы на IP для бриджа GN4121/GN4124.

В документах от Gennum ( в отличии от Xilinx и Altera, которые приводят результаты даже для конкретных материнских плат ) нигде не указаны достижимые скорости передачи данных для GN4121/GN4124.
Если Вы имели дело с GN4121/GN4124, то что можете сказать по поводу достижимых скоростей?
Или же я всё же не заметил, и есть документ , где эти скорости приведены?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 22 2011, 04:46
Сообщение #14


Местный
***

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



Цитата(Bad0512 @ Aug 18 2011, 17:13) *
Если Вы имеете ввиду со стороны памяти хоста, то там - честный scatter-gather, с листами страничек и размером одного ДМА пакета до 4 мегабайт (как раз размер HD картинки).


Я хочу обратить внимание как раз на честный scatter-gather. Во всех известных мне IP Core, а именно Xilinx, PLDA, Northwest Logic, Synopsys, Intensys, а также в микросхемах PLX используются одиночные дескрипторы.
Т.е. для одного блока памяти используется один дескриптор. Алгоритм работы: DMA читает один дескриптор и производит обмен с одним блоком. Если размер блока большой, например 1 Мбайт, то всё замечательно.
Но проблема в том, что выделить 1.5 Гбайта можно только в USER MEMORY. А там память выделяется страницами по 4 килобайта. И получаются большие потери, так как дескриптор читается для блока в 4 килобайта.

В моём контроллере дескрипторы объеденены в блок, за одну операцию происходит чтение блока в котором 63 дескриптора. Потери производительности на чтение дескрипторов минимальны. А если дескрипторов меньше 63 - то всё работает из памяти и потерь нет.

Интересное решение в DMA от Intensys. Там дескрипторы расположены в локальной памяти ПЛИС. Потерь на чтение нет, но большой блок в фрагментированной памяти разместить нельзя - не хватит памяти ПЛИС.


Со стороны локальной шины у меня DMA работает по фиксированному адресу, предполагается что там расположено FIFO.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 24 2011, 12:39
Сообщение #15


Местный
***

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



Добавлен проект ML605_LX240T_CORE для платы ML605. Там реализован PCI Express v2.0 x4; Работает. Скорости таки же, как и на AMBPEX5.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Aug 30 2011, 10:41
Сообщение #16


Местный
***

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



Всем доброго времени суток.

Несколько слов по поводу развития проекта:

1. Разработка документации. Файлы скачивают, но вопросов пока никто не задаёт. Наверное всё понятно ?
2. Ядро для Spartan-6 x1; Есть ли у кого-нибуть какая либо плата для проверки ?
3. Размещение на opencores.org; Для этого необходимо сделать подключение к шине Wishbone, пример проекта для этой шины и документация на английском языке.

Какие есть ещё предложения ?
Go to the top of the page
 
+Quote Post
mhspace
сообщение Aug 31 2011, 14:49
Сообщение #17





Группа: Новичок
Сообщений: 5
Регистрация: 19-08-11
Пользователь №: 66 792



Цитата(dsmv @ Aug 30 2011, 13:41) *
Файлы скачивают, но вопросов пока никто не задаёт. Наверное всё понятно ?


У меня есть вопрос. Сколько ресурсов требуется при реализации в Virtex - 5 ?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Aug 31 2011, 14:55
Сообщение #18


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Цитата(dsmv @ Aug 30 2011, 13:41) *
...
2. Ядро для Spartan-6 x1; Есть ли у кого-нибуть какая либо плата для проверки ?
...

Имею SP605, в данный момент находится в ящике, при желани можно нарисовать и тестовый PC. Могу подсобить. Будет интересно.
Могу так же поучавствовать в 3.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 1 2011, 08:09
Сообщение #19


Местный
***

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




Вот фрагмент отчета для проекта ambpex5_v20_sx50t_core. ПЛИС Virtex 5 SX50T;

Код
Release 13.1 Map O.40d (nt)
Xilinx Mapping Report File for Design 'ambpex5_v20_sx50t_core'

Design Information
------------------
Command Line   : map -p 5VSX50TFF1136-1 -o map.ncd -pr b -ol high -cm speed -ir
off -detail -t 1 -global_opt speed -retiming on -equivalent_register_removal on
-lc auto -mt off ambpex5_v20_sx50t_core_merge_chipscope.ngd
ambpex5_v20_sx50t_core_merge_chipscope.pcf
Target Device  : xc5vsx50t
Target Package : ff1136
Target Speed   : -1
Mapper Version : virtex5 -- $Revision: 1.55 $
Mapped Date    : Fri Aug 12 15:37:44 2011

Design Summary
--------------
Number of errors:      0
Number of warnings:   39
Slice Logic Utilization:
  Number of Slice Registers:                 7,789 out of  32,640   23%
    Number used as Flip Flops:               7,779
    Number used as Latches:                      9
    Number used as Latch-thrus:                  1
  Number of Slice LUTs:                      6,463 out of  32,640   19%
    Number used as logic:                    5,405 out of  32,640   16%
      Number using O6 output only:           4,315
      Number using O5 output only:             610
      Number using O5 and O6:                  480
    Number used as Memory:                   1,002 out of  12,480    8%
      Number used as Dual Port RAM:            692
        Number using O6 output only:           656
        Number using O5 and O6:                 36
      Number used as Single Port RAM:           88
        Number using O6 output only:            88
      Number used as Shift Register:           222
        Number using O6 output only:           220
        Number using O5 output only:             1
        Number using O5 and O6:                  1
    Number used as exclusive route-thru:        56
  Number of route-thrus:                       681
    Number using O6 output only:               660
    Number using O5 output only:                19
    Number using O5 and O6:                      2

Slice Logic Distribution:
  Number of occupied Slices:                 3,017 out of   8,160   36%
  Number of LUT Flip Flop pairs used:        9,916
    Number with an unused Flip Flop:         2,127 out of   9,916   21%
    Number with an unused LUT:               3,453 out of   9,916   34%
    Number of fully used LUT-FF pairs:       4,336 out of   9,916   43%
    Number of unique control sets:             365
    Number of slice register sites lost
      to control set restrictions:             541 out of  32,640    1%

  A LUT Flip Flop pair for this architecture represents one LUT paired with
  one Flip Flop within a slice.  A control set is a unique combination of
  clock, reset, set, and enable signals for a registered element.
  The Slice Logic Distribution report is not meaningful if the design is
  over-mapped for a non-slice resource or if Placement fails.
  OVERMAPPING of BRAM resources should be ignored if the design is
  over-mapped for a non-BRAM resource or if placement fails.

IO Utilization:
  Number of bonded IOBs:                         8 out of     480    1%
    Number of LOCed IOBs:                        8 out of       8  100%
    Number of bonded IPADs:                     18
      Number of LOCed IPADs:                    18 out of      18  100%
    Number of bonded OPADs:                     16
      Number of LOCed OPADs:                    16 out of      16  100%

Specific Feature Utilization:
  Number of BlockRAM/FIFO:                      21 out of     132   15%
    Number using BlockRAM only:                 21
    Total primitives used:
      Number of 36k BlockRAM used:              10
      Number of 18k BlockRAM used:              18
    Total Memory used (KB):                    684 out of   4,752   14%
  Number of BUFG/BUFGCTRLs:                      4 out of      32   12%
    Number used as BUFGs:                        4
  Number of BSCANs:                              1 out of       4   25%
  Number of BUFDSs:                              1 out of       6   16%
  Number of DSP48Es:                             4 out of     288    1%
  Number of GTP_DUALs:                           4 out of       6   66%
  Number of PCIEs:                               1 out of       1  100%
  Number of PLL_ADVs:                            1 out of       6   16%

  Number of RPM macros:           12
Average Fanout of Non-Clock Nets:                3.44

Peak Memory Usage:  557 MB
Total REAL time to MAP completion:  8 mins 37 secs
Total CPU time to MAP completion:   8 mins 34 secs



Цитата(Kuzmi4 @ Aug 31 2011, 17:55) *
Имею SP605, в данный момент находится в ящике, при желани можно нарисовать и тестовый PC. Могу подсобить. Будет интересно.
Могу так же поучавствовать в 3.


Отлично. Тогда я начинаю собирать проект.
По поводу opencores - надо обсудить как лучше перейти на wishbone. Нужно заменить компонент core64_pb_transaction и перевести тестовый проект с ADM на что-то более простое. Например сделать блоки тестирования аналогичные block_pe_main;

Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 1 2011, 16:35
Сообщение #20


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Вот бы ещё описалово какое-никакое к сорцам (хотя бы "в общем и целом" так сказать), цены бы им не было. Потому как я его не нашёл ни в Хранилище ни в Файлах...
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 2 2011, 08:39
Сообщение #21


Местный
***

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



Цитата(Kuzmi4 @ Sep 1 2011, 19:35) *
Вот бы ещё описалово какое-никакое к сорцам (хотя бы "в общем и целом" так сказать), цены бы им не было. Потому как я его не нашёл ни в Хранилище ни в Файлах...


Хорошо бы. Пока есть только структурная схема
Для создания документации я планирую использовать программу DOXYGEN. Результат здесь. Но конечно этого недостаточно.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 2 2011, 11:04
Сообщение #22


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 dsmv
То есть, если я правильно понял, на данный момент, чтобы разобраться в дизайне, нужно втыкать в каменты/симуляцию и пользоваться структурной схемой/иерархией проекта? А кроме вас есть ещё лица которые могут просветить в деталях? И куда/кому задавать вопросы ?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 2 2011, 12:35
Сообщение #23


Местный
***

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



Цитата(Kuzmi4 @ Sep 2 2011, 14:04) *
2 dsmv
То есть, если я правильно понял, на данный момент, чтобы разобраться в дизайне, нужно втыкать в каменты/симуляцию и пользоваться структурной схемой/иерархией проекта? А кроме вас есть ещё лица которые могут просветить в деталях? И куда/кому задавать вопросы ?


Совершенно верно. Кроме меня проект ещё никто не знает. Да и я уже многое забыл. Вопросы задавать нужно мне. Спрашивать можно например на этом форуме, думаю модераторы не будут против. Или на непосредственно сайте ds-dev.ru

Я открыл этот проект, потому что хочу что бы появились ещё люди, которые в нём разберутся. Иначе знание будет потеряно.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 2 2011, 15:18
Сообщение #24


Местный
***

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




Готов проект для SP605. На модели работает. Теперь нужно проверить на реальной плате.

Для проверки надо использовать программу AMBPEX5_SDRAM. Находится в разделе Файлы на сайте.
Драйвера надо скачать здесь. Внутри zip есть файл установки qtpex58x1-12500_rt_v4_01.exe

Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 2 2011, 16:31
Сообщение #25


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 dsmv
Для тестов могу взять систему с AMD Athlon64 3000+, 1536 MB RAM (MB не знаю какая , нужно лезть внутря).
Систему смогу собрать хоть сейчас, но с 3.09 по 5.09 меня не будет, потому проверить можно будет только во вторник (за это время думаю подчитать описание, и попытаться разобраться в проекте).

Как я понимаю, заливать в SP605 нужно будет "sp605_lx45t_core_2011_09_02_v1_0_build_0x100.zip\sp605_lx45t_core\implement\ver1\rev1\sp605_lx45t_core.bit" а запускать на компе после установки драйверов(qtpex58x1-12500.zip\qtpex58x1-12500_rt_v4_01.exe) прогу "ambpex5_sdram.zip\bin\ambpex5_sdram.exe"? И как смотреть все ли тесты прошли ?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 2 2011, 19:34
Сообщение #26


Местный
***

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



Это не горит. Вторник тоже подойдет.

Прошивка и драйвера:
sp605_lx45t_core_2011_09_02_v1_0_build_0x100.zip\sp605_lx45t_core\implement\ver1\rev1\sp605_lx45t_core.bit
qtpex58x1-12500.zip\qtpex58x1-12500_rt_v4_01.exe

По поводу программы - запускать надо не .exe а .bat файлы.
Список тестов:
test_main.bat - ввод данных из тетрады MAIN
out_main.bat - вывод данных в тетраду MAIN (без проверки)
test_dio.bat - ввод данных из тетрады DIO_IN
out_dio.bat - вывод данных в тетраду DIO_OUT
test_main_dio.bat - ввод двух потоков: из тетрады MAIN и из тетрады DIO_OUT
out_main_dio.bat - ввод из тетрады MAIN и вывод в тетраду DIO_OUT

Это консольное приложение, запускается бесконечный тест, выход по ESC.
В процессе работы отображается количестово принятых и переданных блоков, а также число правильных и ошибочных блоков.
Скорость измеряется двуя способами: на интервале 4 с и средняя скорость с момента запуска.
Если есть ошибки, то перед выходом по esc отображаются первые 16 ошибок.

В тестах test_main._dio.bat и out_main_dio.bat отображаются две строки - по одной для каждого теста.

Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 6 2011, 13:21
Сообщение #27


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 dsmv
Просмотрел файлы. Возник вопрос касательно sys_clk_p/sys_clk_n пинов.
У вас эти лапы есть в топовом модуле, и вы их заводите на IBUFDS, то есть тут вопросов нет. И в TB они есть:
Код
sys_clk_p            => clk125p,   -- тактовая частота 125 MHz от PCI_Express

Однако я посмотрел UCF:
1) sp605_lx45t_core\implement\ver1\rev1\sp605_lx45t_core.ucf
2) sp605_lx45t_core\src\top\sp605_lx45t_core.ucf
В этих файлах закоментированы строки назначающие sys_clk_p/sys_clk_n (посмотреть в самом дизайне не могу:UnsupportedFileFormatVersion==>ISE v11.5)
Не могли бы вы проверить ещё раз дизайн(на SP605 speed grade не 2 а 3, попробую завести, но посмотрим чт ов реале будет)??
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 6 2011, 15:46
Сообщение #28


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



Результаты (система: AMD Athlon64 3000+, 1536 MB RAM, MB: K8N4-E):
заливаю битстрим, ресечусь, вижу подмигивание лампы DS3 при старте, потом глухо.
В Device Manager-e вижу ошибку в дровах.
Прикрепленное изображение

Прикрепленное изображение

Прикрепленное изображение

PciTree выдаёт собно вот такое:
Прикрепленное изображение

Вот выхлоп запусков 3х батников:
Цитата
D:\TMP\PCIe_test\sp605_dma\ambpex5_sdram\bin>test_main.bat

D:\TMP\PCIe_test\sp605_dma\ambpex5_sdram\bin>ambpex5_sdram.exe test_main.cfg
Ошибка при открытии модуля AMBPEX: ret=0x40010100

D:\...test\sp605_dma\ambpex5_sdram\bin>test_main_dio.bat

D:\TMP\PCIe_test\sp605_dma\ambpex5_sdram\bin>ambpex5_sdram.exe test_main.cfg tes
t_dio.cfg
Ошибка при открытии модуля AMBPEX: ret=0x40010100

D:\TMP\PCIe_test\sp605_dma\ambpex5_sdram\bin>

А вот я залил тестовый дизайн хилых:

Прикрепленное изображение

в нём всё по ходу пашеД laughing.gif

резюмируя результаты - скорей всего спидгрейдовый вопрос всплыл sad.gif
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 6 2011, 16:18
Сообщение #29


Местный
***

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



Цитата(Kuzmi4 @ Sep 6 2011, 18:46) *
резюмируя результаты - скорей всего спидгрейдовый вопрос всплыл sad.gif
о

Для начала неплохо. Совершенно правильно определились VendorID, DeviceID. Так что ядро Xilinx работает. Спидгрейд я думаю здесь ни причём. -2 более медленная чем -3. А на ней ошибок по времянке нет. Я завтра ещё одну программу пришлю, посмотрим что читается из регистров BAR0. Скорее всего читаются неправильные значения и драйвер не опознаёт устройство.

Выводы sys_clk_p/sys_clk я проверял, они попадают куда нужно. Но можно и ещё раз завтра посмотреть.

Один из светодиодов (GPIO_LED_1) должен подмигивать, но очень редко. Он показывает ширину шины PCI Express( x1 - один раз мигает), но я забыл что здесь шина 62.5 Мгц вместо 250 Мгц на Virtex 5, так что он будет редко вспыхивать.

В общем - процесс пошёл rolleyes.gif
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Sep 6 2011, 16:28
Сообщение #30


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 dsmv
да , провтыкал я со спидгрейдом: Spartan®-6 LX and LXT FPGAs are available in various speed grades, with -3 having the highest performance.

На счёт светодиода - а на сколько редко он мигать должен ??
На счёт клока - это вы к чему? PCIe х1 корка бегает на 8ns периоде.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 6 2011, 17:00
Сообщение #31


Местный
***

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



Нет, частота локальной шины ядра 62.5 Мгц - 16 нс.
У меня есть узел, который мигает светодиодом в соответствии с шириной шины. Он остался от реализаций для x8 на Virtex 5 и Virtex 6. Но там частота шины 250 Мгц, а мигает он и там достаточно медленно. А здесь будет ещё в 4 раза медленней, точный период сказать не могу, возможно раз в минуту.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Sep 13 2011, 08:42
Сообщение #32


Местный
***

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




Есть новая информация. Проект SP605_LX45T_CORE успешно работает. Огромное спасибо Kuzmi4 за проверку на реальной плате и обнаружение проблемы при работе с chipset от NVIDEA. В процессе отладки проявилась интересная особенность chipeset P55 - он игнорирует поле LOWER ADR в пакете COMPLETION. Это я поле я оставлял нулевым. В результате на компьютере с процессором AMD и chipset от NVIDEA читались только регистры у которых в младших адресах был 0. На компьютерах c P55 всё работало отлично. После исправления LOWER ADR - заработало и на NVIDEA.

Скорость ввода данных на компьютере с chipset P55 - 201 Мбайт/с.
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Dec 28 2012, 14:12
Сообщение #33


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



Добрый день! Пишет вам благодарный, но немного бестолковый пользователь вашего проекта sm.gif
Только начал вникать в ваши исходники, поэтому вопросов огромное множество, но пока не буду их все вываливать, надеюсь что постепенно сам разберусь.
Итак, скачал с ds-dev.ru архив ambpex5_v20_sx50t_core_2012_04_09_v1_1_build_0x100.zip. Собрал в ISE, немного исправил под свою плату с XC5VFX30T. Скачал оттуда же исходники под linux, скомпилил то что в application/adm_test. Результаты тестов примерно такие (соединение x1):

test_dio_s128.cfg
Код
             BLOCK_WR   BLOCK_RD   BLOCK_OK  BLOCK_ERR   SPD_CURR    SPD_AVR     STATUS

TRD :   4          0 -544350728          0          0  1423616.0   100837.2     0xFFFF  0    0
TRD :   6          0          0          0          0        0.0        0.0     0x004F  1    0

out_dio_s128.cfg
Код
             BLOCK_WR   BLOCK_RD   BLOCK_OK  BLOCK_ERR   SPD_CURR    SPD_AVR     STATUS

TRD :   4          0 1919343662          0          0  1485236.4     5566.9     0xFFFF  0    0
TRD :   7       1024          0          0          0        0.0        0.0     0x0073

Тест test_main.cfg вылетает с segmentation fault. Результаты вроде обнадеживают. Непонятны некоторые величины, выдаваемые прогой:
если текущая скорость остается примерно одинаковой, то средняя скачет многократно и показывает явно заниженные значения. Это какой-то глюк? Можно вкратце пояснить способ измерения скорости?
Можно пояснить смысл столбцов в логе? Для меня только значения скорости оказались интуитивно понятны.

Касаемо прошивки плис:
правильно ли я понимаю, что само ядро интерфейса это PCIE_CORE64_M1, ну или PCIE_CORE64_M2, если нужна обычная параллельная шина LC bus? И для того, чтобы использовать ядро, достаточно приделать к этой шине свой источник данных, например FIFO-буфер?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 5 2013, 19:29
Сообщение #34


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Jack_of_Shadows
Есть версия для вишбона, или вас интересует именно LC bus?
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 6 2013, 10:07
Сообщение #35


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



Kuzmi4, да-да, видел, на данном этапе мне это не особо принципиально, лишь бы было попроще.
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 6 2013, 10:14
Сообщение #36


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Jack_of_Shadows
А куда проще ? Времянки на WB документированы, MemoryMap имеется...
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 7 2013, 18:25
Сообщение #37


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



Kuzmi4,
я хотел сказать что вокруг PCIE_CORE64_M1 есть обертки на обе эти шины, можно взять любую из них, и получить готовый блок PCIe, для работы с которым понадобится только подсовывать новые данные на входную шину. Я правильно понимаю степень законченности вашего проекта?
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 9 2013, 15:08
Сообщение #38


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



И еще, может я конечно начинаю не с той стороны, но немного покопав программу под Linux совсем засел в тупик:

скорость теста должно показывать в МБ/с, в то время как у меня выдает совершенно нереальные несколько миллионов (из-за того, что параметр BLOCK_RD растет как на дрожжах)

с какими параметрами надо вызывать программу, к примеру для того, чтобы протестировать чтение тестовых данных из плис? Надо указывать тетраду 1 (TEST_CTRL) или какую-то другую? Тесты test_dio_s128.cfg и out_dio_s128.cfg висят в нуле, при вызове программы без параметров счетчики тикают, но как я уже говорил показывают нереально больше значения.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jan 11 2013, 13:14
Сообщение #39


Местный
***

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



Спасибо за интерес к моему проекту. Тест работает неправильно. В качестве параметра надо передавать имя файла конфигурации: test_dio_s128.cfg; Должна появится только одна строчка для тетрады 6; Строки с TRD 4 быть не должно. Что то не срослось. Есть возможность проверить работу на компьютере с Windows ?

Тетрады 4 в тестовом проекте нет, поэтому значения скорости - произвольные. Значение регистра STATUS=0xFFFF это правильно.

Для тетрады 6 значение регистра STATUS=0x4F - это означает что FIFO полностью заполнено, но передачи в PCI Express нет.

По поводу скорости: текущаяя скорость измеряется на интервале 4 секунды, средняя скорость - с момента запуска теста. Вывод в Мбайтах/с; Для PCI Express x1 должно быть около 200 Мбайт/с.

Для Virtex 5 ядром PCI Express является узел PCIE_CORE64_M1. Он реализует пакетную шину PB_BUS; Узел PCIE_CORE64_M2 содержит переход на шину LC_BUS и блок управления BLOCK_MAIN - он нужен для работы наших драйверов. Наиболее просто использовать LC_BUS. Это простая параллельная шина без ожидания готовности. Переход на WISHBONE связан с добавлением промежуточных FIFO.

Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 14 2013, 08:10
Сообщение #40


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



Цитата
Есть возможность проверить работу на компьютере с Windows ?

есть win 7 x64. Качал ambpex5_test_v1_0, но там только тестовая прога без драйвера. И при запуске BRD.DLL требует.
Цитата
Строки с TRD 4 быть не должно

она возникает если запускать как описано здесь:
./adm_test <имя устройства> <файл конфигурации> [<файл конфигурации>]
так как в программе для параметров по умолчанию прописана тетрада 4. Когда же указываю только файл конфигурации, строчка одна, как и должна.
Цитата
Для тетрады 6 значение регистра STATUS=0x4F - это означает что FIFO полностью заполнено, но передачи в PCI Express нет.

что посоветуете посмотреть для дебага?
Go to the top of the page
 
+Quote Post
Kuzmi4
сообщение Jan 17 2013, 07:37
Сообщение #41


Гуру
******

Группа: Свой
Сообщений: 3 304
Регистрация: 13-02-07
Из: 55°55′5″ 37°52′16″
Пользователь №: 25 329



2 Jack_of_Shadows
удалось побороть ошибку ? Система заработала в обе стороны ?
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 17 2013, 08:31
Сообщение #42


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



Kuzmi4
пока нет. Управляющие регистры доступны, явных ошибок в лог ни программа ни драйвер не выдаёт. Судя по регистру статуса передающее FIFO заполняется тестовыми данными, но DMA не хочет их передавать. В обратную сторону соответственно не хочет забирать.
Кстати по регистрам: в тетраде MAIN есть набор регистров SELx выбора прерывания и канала DMA. Единственное ненулевое значение в них, это в SEL1 записано 0x1000, что значит примерно: для канала 1 DMA разрешено формирование запроса и выбрана тетрада 0. Непонятно почему здесь стоит нулевая тетрада (main) а не приемная или передающая. И как можно посмотреть отправляются ли реально DMA-запросы - в драйвере, программе или плисе?
Go to the top of the page
 
+Quote Post
karak
сообщение Jan 17 2013, 09:33
Сообщение #43





Группа: Участник
Сообщений: 5
Регистрация: 17-01-13
Пользователь №: 75 224



Цитата(Jack_of_Shadows @ Jan 17 2013, 12:31) *
Kuzmi4
пока нет. Управляющие регистры доступны, явных ошибок в лог ни программа ни драйвер не выдаёт. Судя по регистру статуса передающее FIFO заполняется тестовыми данными, но DMA не хочет их передавать. В обратную сторону соответственно не хочет забирать.
Кстати по регистрам: в тетраде MAIN есть набор регистров SELx выбора прерывания и канала DMA. Единственное ненулевое значение в них, это в SEL1 записано 0x1000, что значит примерно: для канала 1 DMA разрешено формирование запроса и выбрана тетрада 0. Непонятно почему здесь стоит нулевая тетрада (main) а не приемная или передающая. И как можно посмотреть отправляются ли реально DMA-запросы - в драйвере, программе или плисе?

чтобы посмотреть информацию о состоянии регистров модуля нужно выполнить команду cat /proc/MODULE_NAME вместо MODULE_NAME посмотрите какая плата у Вас (что-то вроде ***-PEX5-**) и покажите результат.
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 17 2013, 09:40
Сообщение #44


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



karak
Код
  Device information
  m_TotalIRQ = 0

  PE_EXT_FIFO 4

  BLOCK_ID = 18
  BLOCK_VER = 103
  FIFO_ID = 3400
  FIFO_NUMBER = 0
  RESOURCE = 2
  DMA_MODE = 0
  DMA_CTRL = 0
  FIFO_STATUS = a000
  FLAG_CLR = 0
  PCI_ADRL = 0
  PCI_ADRH = 0
  LOCAL_ADR = 0

  PE_EXT_FIFO 5

  BLOCK_ID = 18
  BLOCK_VER = 103
  FIFO_ID = 3400
  FIFO_NUMBER = 1
  RESOURCE = 2
  DMA_MODE = 0
  DMA_CTRL = 0
  FIFO_STATUS = a000
  FLAG_CLR = 10
  PCI_ADRL = c000
  PCI_ADRH = 0
  LOCAL_ADR = 1000


а во время работы программы (пытающейся принимать из FIFO 1):
Код
PE_EXT_FIFO 5

  BLOCK_ID = 18
  BLOCK_VER = 103
  FIFO_ID = 3400
  FIFO_NUMBER = 1
  RESOURCE = 2
  DMA_MODE = 27
  DMA_CTRL = 1
  FIFO_STATUS = a000
  FLAG_CLR = 10
  PCI_ADRL = c000
  PCI_ADRH = 0
  LOCAL_ADR = 1000


Сообщение отредактировал Jack_of_Shadows - Jan 17 2013, 10:01
Go to the top of the page
 
+Quote Post
karak
сообщение Jan 17 2013, 10:11
Сообщение #45





Группа: Участник
Сообщений: 5
Регистрация: 17-01-13
Пользователь №: 75 224



Цитата(Jack_of_Shadows @ Jan 17 2013, 12:31) *
Kuzmi4
пока нет. Управляющие регистры доступны, явных ошибок в лог ни программа ни драйвер не выдаёт. Судя по регистру статуса передающее FIFO заполняется тестовыми данными, но DMA не хочет их передавать. В обратную сторону соответственно не хочет забирать.
Кстати по регистрам: в тетраде MAIN есть набор регистров SELx выбора прерывания и канала DMA. Единственное ненулевое значение в них, это в SEL1 записано 0x1000, что значит примерно: для канала 1 DMA разрешено формирование запроса и выбрана тетрада 0. Непонятно почему здесь стоит нулевая тетрада (main) а не приемная или передающая. И как можно посмотреть отправляются ли реально DMA-запросы - в драйвере, программе или плисе?

чтобы посмотреть информацию о состоянии регистров модуля нужно выполнить команду cat /proc/MODULE_NAME вместо MODULE_NAME посмотрите какая плата у Вас (что-то вроде ***-PEX5-**) и покажите результат.

Цитата(Jack_of_Shadows @ Jan 17 2013, 13:40) *
а во время работы программы (пытающейся принимать из FIFO 1):
Код
PE_EXT_FIFO 5

  BLOCK_ID = 18
  BLOCK_VER = 103
  FIFO_ID = 3400
  FIFO_NUMBER = 1
  RESOURCE = 2
  DMA_MODE = 27
  DMA_CTRL = 1
  FIFO_STATUS = a000
  FLAG_CLR = 10
  PCI_ADRL = c000
  PCI_ADRH = 0
  LOCAL_ADR = 1000

Что-то предыдущее сообщение отправилось второй раз. то что в статусе 0xA000 говорит о том, что контроллер не стартовал. Должно быть 0xA001 у вас 64 битная linux система или 32?
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 17 2013, 10:16
Сообщение #46


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



Цитата
у вас 64 битная linux система или 32?

64 бита.
Еще в FIFO_ID старшие четыре бита (значение TYPE) равны 3, хотя как написано здесь может быть 1 (если на чтение) и 2 (если на запись)
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jan 17 2013, 10:50
Сообщение #47


Местный
***

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



Цитата(Jack_of_Shadows @ Jan 17 2013, 13:16) *
64 бита.
Еще в FIFO_ID старшие четыре бита (значение TYPE) равны 3, хотя как написано здесь может быть 1 (если на чтение) и 2 (если на запись)


FIDO_ID правильное, 3 - это двунаправленный контроллер. Предыдущии версии были однонаправленными.


Значение FIFO_STATUS 0xA000 - неправильное -должен быть установлен бит DSC_CORRECT (т.е. 0xA100) - это означает, что блок дескрипторов прочитан неправильно.

Здесь два варианта - что неправильно в драйвере или в прошивке ПЛИС. Пришлите Ваш проект, надо посмотреть как он развёлся. Может что увижу.

P.S. Сейчас видно одно из преимуществ контроллера. Блок дескрипторов защищён контрольной суммой. Сейчас есть какая то ошибка и контроллер просто останавливается. Если бы контроля CRC не было, то компьютер бы просто завис.
Go to the top of the page
 
+Quote Post
karak
сообщение Jan 17 2013, 15:04
Сообщение #48





Группа: Участник
Сообщений: 5
Регистрация: 17-01-13
Пользователь №: 75 224



Цитата(dsmv @ Jan 17 2013, 14:50) *
FIDO_ID правильное, 3 - это двунаправленный контроллер. Предыдущии версии были однонаправленными.


Значение FIFO_STATUS 0xA000 - неправильное -должен быть установлен бит DSC_CORRECT (т.е. 0xA100) - это означает, что блок дескрипторов прочитан неправильно.

Здесь два варианта - что неправильно в драйвере или в прошивке ПЛИС. Пришлите Ваш проект, надо посмотреть как он развёлся. Может что увижу. Пришлите сюда: dsmv@ mail.ru

P.S. Сейчас видно одно из преимуществ контроллера. Блок дескрипторов защищён контрольной суммой. Сейчас есть какая то ошибка и контроллер просто останавливается. Если бы контроля CRC не было, то компьютер бы просто завис.


Точно, не 0xA001 а 0xA100. Посмотрел сейчас на работающем приборе. dsmv спасибо за коррекцию.
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Jan 21 2013, 12:19
Сообщение #49


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



karak,
мне советовали по поводу проги к вам обращаться: на 32-битном линуксе обмен таки пошёл. На х64 она вообще тестировалась до меня, или 64-битные адреса она не может обрабатывать априори?
Данные пока принимает так (первый запуск программы):
Код
Result of receiving data from tetrade 6
   0  Block: 0     Index: 00000000  Waiting: 00000000A5A50123  Received: 0000000000000000
   1  Block: 0     Index: 00000002  Waiting: 0000000000000002  Received: 0000000000000003
   ...
  30  Block: 0     Index: 0000001F  Waiting: 0000000040000000  Received: 000000007FFFFFFF
  31  Block: 0     Index: 00000020  Waiting: 0000000080000000  Received: 00000000FFFFFFFF

Начиная со второго запуска принимаемые данные везде равны 0x1234567812345678, т.е. равны значению по умолчанию.
После нескольких запусков память перестает выделяться, пишет core_alloc(): Error allocate memory. Также в системном мониторе видно что память, выделенная программой, не освобождается - занятый объем ОЗУ возрастает при запуске программы, и остается на том же уровне при выходе из ней по ctrl-C. Как с этим можно бороться?

upd: с освобождением памяти разобрался, функция освобождения была, но её никто не вызывал почему то.

Сообщение отредактировал Jack_of_Shadows - Jan 22 2013, 06:57
Go to the top of the page
 
+Quote Post
karak
сообщение Jan 28 2013, 10:52
Сообщение #50





Группа: Участник
Сообщений: 5
Регистрация: 17-01-13
Пользователь №: 75 224



В функции ошибка, из за которой всегда данные вводились из тетрады MAIN. Нужно 0 заменить на addr sm.gif Про 64-битную систему сказать пока не могу, так как нет под руками. Вообще-то запускалось и кажется работало.

u32 pex_board::core_set_local_addr(int DmaChan, u32 addr)
{
AMB_SET_DMA_CHANNEL DmaParam;
DmaParam.DmaChanNum = DmaChan;
DmaParam.Param = addr;

if(m_Descr[DmaChan])
{
if (0 > ioctl(fd, IOCTL_AMB_SET_SRC_MEM, &DmaParam)) {
fprintf(stderr, "%s(): Error set source for DMA\n", __FUNCTION__ );
return -1;
}
}

return 0;
}
Go to the top of the page
 
+Quote Post
Jack_of_Shadows
сообщение Mar 22 2013, 07:23
Сообщение #51


Участник
*

Группа: Участник
Сообщений: 46
Регистрация: 29-10-10
Пользователь №: 60 513



Всё руки не доходили написать по поводу 64-битного линукса: было замечено что дело не только в нём (на одном компьютере проект работал, на втором нет), и единственное бросающееся в глаза различие было в том, что при выделении памяти разрядность адреса была разная - на компе где обмен не шёл память выделялась за границами 32-битной области. Поборол принудительным ограничением в драйвере, в функции RequestMemory:
Код
dma_set_coherent_mask(dma->m_dev, 0xFFFFFFFF);

после чего адреса стали 32-битными и DMA-обмен пошел. После исправления из предыдущего поста стали отвечать те тетрады которые и должны. Вообщем проект вполне себе нормально работает с 200 МБ/с на x1.
Go to the top of the page
 
+Quote Post
StrangerX
сообщение Nov 20 2013, 07:03
Сообщение #52


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 7-08-09
Пользователь №: 51 787



Доброго времени суток.
Пытаюсь запустить ваше ядро pcie_core64_m1 (m2) на своей плате.
Вроде бы разобрался частично, но остались вопросы.
Прошу мне помочь.

1. При записи в адреса PE_EXT_FIFO, не содержащие регистров, дальнейшее чтение из правильных регистров невозможно (всегда получаю FFFFF...) это не существенно, вопрос в том, нормальное ли это поведение контроллера.
2. В wiki написано:
*Составить цепочку дескрипторов, которая описывает цепочку передаваемых блоков
*Записать адрес начального дескриптора в регистр PCI_ADRL
*Записать локальный адрес в регистр LOCAL_ADR
Модификация 1 - только режим автоинициализации

Я пытаюсь набросать драйвер под Win7. Что это для меня значит?
Как мне составить дескрипторы?
Выделить 64*8 байт область памяти, заполнить её в соответствии с описанием "Дескриптор блока автоинициализации";
в PCI_ADRL записать адрес этого блока;
в LOCAL_ADR адрес, относительно которого на LC шине будут запросы DMA на передачу/прием данных.

Прошу помощи.
Go to the top of the page
 
+Quote Post
StrangerX
сообщение Nov 20 2013, 10:50
Сообщение #53


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 7-08-09
Пользователь №: 51 787



И ещё ничего не понял про NEXT_BLOCK.

Как я понял, в памяти PCI, что отображена в оперативную создаю структуру 64*8 байтов - это и есть блок дескрипторов.
Допустим у меня 8192 байт, выделяется три куска памяти по 4096, 1712, 2384.
Я создаю блок дескрипторов:
1. - адрес блока 1, команда JUMP_NEXT_BLOCK, размер(4096), направление передачи
2. - адрес блока 2, команда JUMP_NEXT_BLOCK, размер(1712), направление передачи
3. - адрес блока 3, команда EOT, размер(2384), направление передачи

Поясните, чем отличается JUMP_NEXT_DS от JUMP_NEXT_BLOCK и что делать с NEXT_BLOCK, какой писать адрес и как считать CRC.

Спасибо заранее.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Nov 25 2013, 15:58
Сообщение #54


Местный
***

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



В памяти компьютера создаётся блок 64*8=512 байт - это блок дескрипторов.

Каждый дескриптор - это четыре байта: описание здесь: http://src.ds-dev.ru/doc/core/block_pe_ext_fifo.htm

Блок содержит 63 дескриптора и указатель на следующий блок. Что будет происходить после завершения обмена с текущим блоком определяют три бита в поле CMD. Может быть установлен один из них, либо все нули.

Если все нули - то канал DMA остановиться.

Если JUMP_NEST_DS=1, то произойдёт переход к следующему дескриптору в этом блоке.

Если JUMP_NEXT_BLOCK=1, то произойдёт переход к следующему блоку (при этом следующий дескритор содержит адрес следующего блока). Это бит может быть установлен у любого дескриптора. Т.е. не обязательно заполнять все 63 элемента, оставшиеся можно заполнить нулями.

Если JUMP_DS0=1, то произойдёт переход к нулевому дескриптору в текущем блоке. Это позволяет не читать блоки дескрипторов из памяти.

Обратите внимание - обмен всегда ведётся блоками кратными 4 кбайтам. А при выделении памяти в USER MEMORY - так и просто по 4 килобайта. Если выделено три блока памяти (допустим по 4096 байт), то нужно создать один блок дескрипторов размером 512 байт.

1. адрес блока 1, команда *JUMP_NEST_DS*, размер(4096), направление передачи

2. адрес блока 2, команда *JUMP_NEST_DS*, размер(4096), направление передачи

3. адрес блока 3, команда *EOT*, размер(4096), направление передачи

Остальные дескрипторы - нули. В конце надо записать сигнатуру и контрольную сумму.

Прерывание будет получено после завершения обмена с блоком 3. P.S. Направление передачи всегда одно и то же для одного сеанса работы.

По поводу расчёта CRC - постараюсь выделить кусок программы, но чуть позже.

По поводу записи в PE_EXT_FIFO и чтении FF. Интересное наблюдение. Я таких экспериментов не ставил, но вроде бы такого быть не должно. А для записи используются 32-х разрядные команды ?
Go to the top of the page
 
+Quote Post
StrangerX
сообщение Dec 12 2013, 13:32
Сообщение #55


Участник
*

Группа: Участник
Сообщений: 19
Регистрация: 7-08-09
Пользователь №: 51 787



Цитата(dsmv @ Nov 25 2013, 19:58) *
По поводу записи в PE_EXT_FIFO и чтении FF. Интересное наблюдение. Я таких экспериментов не ставил, но вроде бы такого быть не должно. А для записи используются 32-х разрядные команды ?


Спасибо большое за развернутый ответ, всё понятно.
Для записи/чтения PE_EXT_FIFO использовал 32-битные команды.
Go to the top of the page
 
+Quote Post
dsmv
сообщение Dec 21 2013, 05:26
Сообщение #56


Местный
***

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



Цитата(StrangerX @ Dec 12 2013, 16:32) *
Спасибо большое за развернутый ответ, всё понятно.
Для записи/чтения PE_EXT_FIFO использовал 32-битные команды.


Вот нашёл класс для подсчёта CRC: PE_ExtChainItem.zip
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jan 15 2014, 11:37
Сообщение #57


Местный
***

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



Всем доброго времени суток.


Вот хочу спросить, кому-нибуть помогло изучение проекта DS_DMA ?

Есть ли вопросы, предложения ?




Go to the top of the page
 
+Quote Post
Antonx86
сообщение Feb 10 2014, 05:15
Сообщение #58





Группа: Новичок
Сообщений: 3
Регистрация: 10-02-14
Пользователь №: 80 421



Добрый день!
Имеется желание запустить проект на плате Xilinx Artix 7 AC701 (FPGA XC7A200T FBG676ACX плата в наличии).

dsmv, напишите пожалуйста с чего лучше начать и каким образом.

может быть имеются программные мастера по подготовке DS_DMA проекта для нового ядра PCIE?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Feb 11 2014, 11:15
Сообщение #59


Местный
***

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



Добрый день.

Давайте сделаем. Я посмотрю на AC701 и сформирую проект.




Цитата(Antonx86 @ Feb 10 2014, 08:15) *
Добрый день!
Имеется желание запустить проект на плате Xilinx Artix 7 AC701 (FPGA XC7A200T FBG676ACX плата в наличии).

dsmv, напишите пожалуйста с чего лучше начать и каким образом.

может быть имеются программные мастера по подготовке DS_DMA проекта для нового ядра PCIE?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Feb 18 2014, 06:58
Сообщение #60


Местный
***

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



Собрал проект AC701_A200T_CORE. Пока есть проблемы с моделированием.

http://ds-dev.ru/issues/65

Go to the top of the page
 
+Quote Post
Antonx86
сообщение Mar 12 2014, 05:54
Сообщение #61





Группа: Новичок
Сообщений: 3
Регистрация: 10-02-14
Пользователь №: 80 421



dsmv, добрый день,

в http://ds-dev.ru/issues/65 обратил внимание на вопрос о генерации ISE 14.5.

я сгенерировал ядро pcie для Artix 7 на ISE 14.7 (во вложении)
приложил принтскрины с настройками генерации
(в случае если настройки не верные - могу сгенерировать заново)
надеюсь, что это поможет решить проблемы с моделированием
Прикрепленные файлы
Прикрепленный файл  Artix7_DMA.rar ( 1.56 мегабайт ) Кол-во скачиваний: 29
 
Go to the top of the page
 
+Quote Post
dsmv
сообщение Mar 12 2014, 09:46
Сообщение #62


Местный
***

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



Настройки нормальные. Хотя у меня есть некоторые отличия:

Payload - 256 байт, пока в компьютерах нет поддержки 512 байт (по крайней мере я не встречал)

И я ставлю "Buffering Optimized for Bus Mastering Application"

Вчера я обновил ядро - сделал на 14.6; Стало лучше, но полностью ещё не работает. Попробую на этом.

Go to the top of the page
 
+Quote Post
dsmv
сообщение Mar 17 2014, 12:59
Сообщение #63


Местный
***

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



Проверил с ядром от ISE 14.7 - не работает.

Проблема на передаче запроса чтения от HOST к ПЛИС.


Отправляю два пакета - пакет записи проходит нормально, пакет чтения - не доходит до ПЛИС.

Узел xilinx_pcie_rport_m2 тот же самый что и в остальных проектах, видимо проблема в самом IP Core; Для моделирования использую Active-HDL 9.3 SP1 и библиотеки для ISE 14.7;

Куда копать - не знаю.

Go to the top of the page
 
+Quote Post
Antonx86
сообщение Jun 10 2014, 00:32
Сообщение #64





Группа: Новичок
Сообщений: 3
Регистрация: 10-02-14
Пользователь №: 80 421



dsmv, добрый день,
измеряли ли Вы скорость обмена информацией PC->FPGA->PC для платы SP605 ?
т.е. скорости в одном направлении у Вас предоставлены http://ds-dev.ru/projects/ds-dma/wiki/Sp605_lx45t_core
а вот про одновременный обмен от компьютера к ПЛИС и обратно я информацию не нашел ...
Какую теоретическую скорость можно добиться PC->FPGA->PC на плате SP605 с помощью Вашего проекта?
Go to the top of the page
 
+Quote Post
dsmv
сообщение Jun 20 2014, 13:46
Сообщение #65


Местный
***

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



Цитата(Antonx86 @ Jun 10 2014, 03:32) *
dsmv, добрый день,
измеряли ли Вы скорость обмена информацией PC->FPGA->PC для платы SP605 ?
т.е. скорости в одном направлении у Вас предоставлены http://ds-dev.ru/projects/ds-dma/wiki/Sp605_lx45t_core
а вот про одновременный обмен от компьютера к ПЛИС и обратно я информацию не нашел ...
Какую теоретическую скорость можно добиться PC->FPGA->PC на плате SP605 с помощью Вашего проекта?


Конкретно на SP605 не измерял, но по аналогии с другими модулями пропускная способность будет делиться пополам. Т.е. следует ожидать ~ 80 Мбайт/с
Go to the top of the page
 
+Quote Post

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

 


RSS Текстовая версия Сейчас: 19th August 2025 - 12:09
Рейтинг@Mail.ru


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