|
|
  |
PCIE IP и CycloneIV |
|
|
|
Jan 22 2016, 05:37
|
Группа: Участник
Сообщений: 8
Регистрация: 19-01-16
Пользователь №: 90 101

|
Здравствуйте! Необходимо реализовать прием, обработку и пересылку данных на ПЛИС CycloneIV через интерфейс PCIE. В QSys собрал системы, согласно примерам от Altera. Параметры PCIE IP приведены на рисунке. Возник ряд вопросов. Q1: Я правильно понимаю, что настройку/управление/чтение_состояния блоков PCIE и DMA я могу сделать во внешнем модуле (без использования NIOS), через второй порт onchip-memory (записывая и читая слова по соттветствующим смещениям, согласно описаниям на PCIE IP и DMA)? Q2: Не смог для себя уяснить некоторые моменты с настройкой PCIE IP. В каких случаях использовать 64-бит BAR type, а в каких 32-бит? Я правильно понимаю, что при использовании 64-бит BAR TYPE, трансляции адресов не происходит, а при 32-бит BAR TYPE старшие 32 бита добавляются из таблицы адресов трансляции? Q3: Использование fixed translation table отличается от dynamic лишь тем, что dynamic необходимо вначале настраивать через CRA, а fixed жестко задается при генерации системы? Параметр size of address pages определяет размер адресуемой памяти для данных? Q4: Карта адресов. В первой колонке показан общей размер onchip-memory - 64 кБ. Из второй видно, что для обращения к регистрам PCIE используются адреса 0x0000_0000 - 0x0000_3FFF, к регистрам DMA адреса 0x0000_4000 - 0x0000_401F. Я правильно понимаю, что если через порт S2 on-chip memory прочитаю данные по адресу 0x0000_0000, что получу следующие параметры PCIE: Command, Status, Vendor ID, Device ID ? Соответственно при обращении по адресу 0x0000_4001 получу следующие параметры DMA: Write master start address + Read master start address. Правильно?
Эскизы прикрепленных изображений
|
|
|
|
|
Jan 22 2016, 07:16
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Torika @ Jan 22 2016, 08:37)  Я правильно понимаю, что если через порт S2 on-chip memory прочитаю данные по адресу 0x0000_0000, что получу следующие параметры PCIE: Command, Status, Vendor ID, Device ID ? Соответственно при обращении по адресу 0x0000_4001 получу следующие параметры DMA: Write master start address + Read master start address. Правильно? Вы получите содержимое памяти, а не регистров DMA и PCIe. Цитата(Torika @ Jan 22 2016, 08:37)  Q1: Я правильно понимаю, что настройку/управление/чтение_состояния блоков PCIE и DMA я могу сделать во внешнем модуле (без использования NIOS), через второй порт onchip-memory (записывая и читая слова по соттветствующим смещениям, согласно описаниям на PCIE IP и DMA)? Неправильно! Это должен делать драйвер со стороны системы.
|
|
|
|
|
Jan 22 2016, 07:58
|
Группа: Участник
Сообщений: 8
Регистрация: 19-01-16
Пользователь №: 90 101

|
Цитата(doom13 @ Jan 22 2016, 07:16)  Вы получите содержимое памяти, а не регистров DMA и PCIe. хм а разве по эти адресам не находится содержимое регистров?
|
|
|
|
|
Jan 22 2016, 18:29
|

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

|
Цитата Q1: Я правильно понимаю, что настройку/управление/чтение_состояния блоков PCIE и DMA я могу сделать во внешнем модуле (без использования NIOS), через второй порт onchip-memory (записывая и читая слова по соттветствующим смещениям, согласно описаниям на PCIE IP и DMA)? onchip-memory никакого отношения к управлению PCIE и DMA не имеет. Она используется для хранения, пересылки ваших данных. Цитата Q2: Не смог для себя уяснить некоторые моменты с настройкой PCIE IP. В каких случаях использовать 64-бит BAR type, а в каких 32-бит? Я правильно понимаю, что при использовании 64-бит BAR TYPE, трансляции адресов не происходит, а при 32-бит BAR TYPE старшие 32 бита добавляются из таблицы адресов трансляции? В обоих случаях адреса формируются в соответствии с таблицей адресов трансляции. Выбирается 64 или 32 в зависимости от операционки, которая установлена на ПК. Смысл использовать 64, если ось 32 разрядная, и будет ли ваш pcie обмен вообще работать в этом случае. Цитата Q3: Использование fixed translation table отличается от dynamic лишь тем, что dynamic необходимо вначале настраивать через CRA, а fixed жестко задается при генерации системы? Параметр size of address pages определяет размер адресуемой памяти для данных? про динамик/фиксед ничего не скажу, не помню, не знаю. Параметр size of address pages определяет размер адресуемой памяти для данных совместно с кол-вом страниц. размер адресуемой памяти = (size of address pages ) * (кол-во страниц) Цитата Q4: Карта адресов. В первой колонке показан общей размер onchip-memory - 64 кБ. Из второй видно, что для обращения к регистрам PCIE используются адреса 0x0000_0000 - 0x0000_3FFF, к регистрам DMA адреса 0x0000_4000 - 0x0000_401F. Я правильно понимаю, что если через порт S2 on-chip memory прочитаю данные по адресу 0x0000_0000, что получу следующие параметры PCIE: Command, Status, Vendor ID, Device ID ? Соответственно при обращении по адресу 0x0000_4001 получу следующие параметры DMA: Write master start address + Read master start address. Правильно? Нет. DMA: Write master start address + Read master start address - читайте в баре BAR2 по адресам 0x0000_4000 - 0x0000_401F PCIE: Command, Status, Vendor ID, Device ID - нужно даташит смотреть на ip-ядро, может через Cra можно их прочитать. Если через Cra, то читайте в баре BAR2 по адресам 0x0000_0000 - 0x0000_3FFF. Если через Cra нельзя достучаться до Configuraton Space, то тогда через бары вы их не прочитаете. Только в драйвере через спец функции, типа так: pci_read_config_word(dev, PCI_VENDOR_ID, &val_vendor_id); pci_read_config_word(dev, PCI_DEVICE_ID, &val_device_id);
|
|
|
|
|
Jan 25 2016, 06:47
|
Группа: Участник
Сообщений: 8
Регистрация: 19-01-16
Пользователь №: 90 101

|
Добрый день! Спасибо всем ответившим. Цитата(novartis @ Jan 22 2016, 19:29)  DMA: Write master start address + Read master start address - читайте в баре BAR2 по адресам 0x0000_4000 - 0x0000_401F Если через Cra, то читайте в баре BAR2 по адресам 0x0000_0000 - 0x0000_3FFF. Подскажите пожалуйста, как прочитать BAR2. Пробежался по IP Compiler for PCI Express User Guide,ничего не нашел. Когда-то давно использовал Qsys и Nios, там для чтения/записи регистров управления различной периферии просто обращаешься по базовым адресам с соответствующим смещением и читаешь/редактируешь. Я думал, что здесь будет похожим образом, onchip memory разбивается на несколько областей: собственно сами данные, области доступа к регистрам управления различной периферии. Но, видимо все не так. Как же тогда получить доступ к регистрам управления DMA и PCIe ?
|
|
|
|
|
Jan 25 2016, 07:15
|
Профессионал
    
Группа: Свой
Сообщений: 1 404
Регистрация: 11-03-11
Из: Минск, Беларусь
Пользователь №: 63 539

|
Цитата(Torika @ Jan 25 2016, 09:47)  Подскажите пожалуйста, как прочитать BAR2. Пробежался по IP Compiler for PCI Express User Guide,ничего не нашел. Когда-то давно использовал Qsys и Nios, там для чтения/записи регистров управления различной периферии просто обращаешься по базовым адресам с соответствующим смещением и читаешь/редактируешь. Я думал, что здесь будет похожим образом, onchip memory разбивается на несколько областей: собственно сами данные, области доступа к регистрам управления различной периферии. Но, видимо все не так. Как же тогда получить доступ к регистрам управления DMA и PCIe ? BARs пишет/читает драйвер ОС. На этапе отладки можно добавить в систему Nios, предоставить ему доступ к регистрам DMA (dma->control_port_slave), тогда будет возможность мониторить правильность записи регистров DMA со стороны драйвера. При чтении/записи регистров устройств из программы Nios II лучше использовать макросы из BSP, которые предоставляет Altera. Использовать для этого указатель - не советую!
|
|
|
|
|
Jan 25 2016, 07:33
|
Группа: Участник
Сообщений: 8
Регистрация: 19-01-16
Пользователь №: 90 101

|
Цитата(doom13 @ Jan 25 2016, 08:15)  BARs пишет/читает драйвер ОС. На этапе отладки можно добавить в систему Nios, предоставить ему доступ к регистрам DMA (dma->control_port_slave), тогда будет возможность мониторить правильность записи регистров DMA со стороны драйвера. При чтении/записи регистров устройств из программы Nios II лучше использовать макросы из BSP, которые предоставляет Altera. Использовать для этого указатель - не советую! Получается я могу только лишь следить за состоянием регистров DMA ? Как же я буду отправлять данные через PCIe ? Я думал, укажу начальный адрес (writeaddress Register DMA), количество передаваемых байт (length Register DMA), установлю бит GO в control Register DMA и начнется передача. Далее буду ждать когда передача закончиться (мониторить соответствующие биты в control Register DMA). Видимо, я снова ошибался.
|
|
|
|
|
Jan 25 2016, 07:42
|
Группа: Участник
Сообщений: 8
Регистрация: 19-01-16
Пользователь №: 90 101

|
Цитата(doom13 @ Jan 25 2016, 08:38)  Всё это в случае PCIe делает драйвер, ещё он выделяет буферы памяти для данных. Хорошо, как же тогда отправлять данные с ПЛИС на ПК ? В смысле, я ведь должен указать, что именно отправлять и выставить флаг, что нужно отправлять.
Сообщение отредактировал Torika - Jan 25 2016, 07:59
|
|
|
|
|
Jan 25 2016, 08:16
|
Группа: Участник
Сообщений: 8
Регистрация: 19-01-16
Пользователь №: 90 101

|
Цитата(doom13 @ Jan 25 2016, 09:02)  Спасибо, буду разбираться.
|
|
|
|
|
Jan 26 2016, 06:27
|
Группа: Участник
Сообщений: 8
Регистрация: 19-01-16
Пользователь №: 90 101

|
Добрый день. Никто не сталкивался с примерами реализации приема/передачи данных по PCIe ? Большинство примеров, с которыми сталкивался, представляют собой лишь собранную систему в qsys и все.
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|