Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программируемая логика: ПЛИС, ПАИС
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.94/17: Рейтинг темы: голосов - 17, средняя оценка - 4.94
katrisha
10 / 10 / 0
Регистрация: 14.11.2008
Сообщений: 56
#1

Реализация интерфейса PCI. Пакетная передача

21.04.2012, 16:37. Просмотров 3003. Ответов 4
Метки pci (Все метки)

Здравствуйте. Программирую ПЛИС, где необходимо реализовать интерфейс PCI. Нужно передавать большое количество информации, а все передается только под одному слову. Подскажите пожалуйста, на что нужно обратить внимание, чтобы слова передавались блоками?
Заранее спасибо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.04.2012, 16:37
Ответы с готовыми решениями:

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

Пакетная передача компонента в процедуру
Здравствуйте. Требуется передать из одной процедуры в другую 20+ меток....

Пакетная передача обновлений (Insert) в базу данных посредством DataAdapter.Update
Здравствуйте, господа :yes: Кто-нибудь имел дело с пакетной передачей...

Пакетная передача: Годится ли подобный способ передачи для детекции целостности
Есть данные, представлены они 8-битным значением: byte comb = B10110110; ...

выбор видеокарты под PCI Express 2.0 2 PCI, 1 PCI-E x1, 1 PCI-E x16
Помогите хочу покупать в Среду Видео ATI Radeon 5850 1GB но там PCI Express 2.1...

4
raxp
10182 / 6565 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
21.04.2012, 22:01 #2
...покажите как передаете, где схема-алгоритм-ядро? Эти решения на каждом углу не валяются.

1- есть готовые PCI-ядра для реализации в ПЛИС, да, коммерческие ...у того же Xilinx
2- есть готовые решения, PCI 905x от PLX Technology, к примеру
3- есть реализация Pci Express на http://opencores.org, на Verilog под лицензией LGPL (при регистрации, для доступа к проектам, идет проверка на вшивость)
0
Миниатюры
Реализация интерфейса PCI. Пакетная передача  
katrisha
10 / 10 / 0
Регистрация: 14.11.2008
Сообщений: 56
22.04.2012, 08:52  [ТС] #3
У меня свое решение для реализации в ПЛИС.
Драйвер был написан сначала с помощью WinDriver, затем с помощью Numega.

Не совсем понимаю, что именно за схему-алгоритм-ядро вы хотите.
0
raxp
10182 / 6565 / 492
Регистрация: 28.12.2010
Сообщений: 21,166
Записей в блоге: 1
22.04.2012, 10:00 #4
...по передаче блоками данных:
http://www.sm1820.ru/KSNews_170.htm
http://marsohod.org/index.php/ourblog/11-blog/194-videosys
Операции на шине

Операции на шине показывают агенту тип транзакции, которая требуется мастеру. Эти операции кодируются в течение фазы адреса на линиях C/BE[3::0]#.

Описание операций

Код операций на PCI - шине и их типы приведены ниже, с кратким описанием каждого из них. Обратите внимание, что коды команд приведены в таком виде, в каком они присутствуют на шине («1» показывает высокий уровень напряжения, «0» - низкий уровень). Byte Enables (побайтовый доступ или, иначе, разрешение байта) активен при низком уровне напряжения («0»).

C/BE[3::0]# Тип операции
0000 Interrupt Acknowledge (подтверждение прерывания)
0001 Special Cycle (специальный цикл)
0010 I/O Read (чтение при вводе - выводе)
0011 I/O Write (запись при вводе - выводе)
0100 Зарезервировано
0101 Зарезервировано
0110 Memory Read (чтение памяти)
0111 Memory Write (запись в память)
1000 Зарезервировано
1001 Зарезервировано
1010 Configuration Read (чтение конфигурации)
1011 Configuration Write (запись конфигурации)
1100 Memory Read Multiple (множественное чтение памяти)
1101 Dual Address Cycle (двойной цикл адреса)
1110 Memory read Line (линия чтения памяти)
1111 Memory Write and Invalidate (запись в память и недействительные данные)

Команда Interrupt Acknowledge представляет собой неявное обращение к системному контроллеру прерываний. Биты адреса в течение фазы адреса не имеют логического значения и показывают длину возвращаемого вектора.

Команда Special Cycle обеспечивает простой механизм передачи сообщений по шине PCI. Он используется в качестве альтернативного для физических сигналов, когда необходимо организовать связь по sideband - сигналам. Данный механизм полностью описан в разделе 3.6.2.

Команда I/O Read используется для чтения данных, поступающих от агента, отображенного в адресном пространстве ввода - вывода. По линиям AD[31::00] поступает адрес байта. Должны дешифрироваться все 32 бита. Byte Enables указывает размер передачи, при этом он должен соответствовать адресу байта.

Команда I/O Write используется при передаче данных агенту, отображенному в адресном пространстве ввода - вывода. Должны дешифрироваться все 32 бита. Byte Enables указывает размер передачи и должен соответствовать адресу байта.

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

Команда Memory Read используется для чтения данных от агента, отображенного в пространстве адресов памяти. Целевое устройство свободно в выборе, выполнять или нет упреждающее чтение для этой команды, при условии гарантии, что при таком чтении не будет никаких побочных эффектов. Кроме того, для данной PCI - транзакции целевое устройство должно убедиться в синхронизации данных, хранящихся во временных буферах. Эти буферы должны быть отменены перед любыми событиями синхронизации (например, обновление регистра состояния ввода-вывода или флажка памяти), при обращении через данный путь доступа.

Команда Memory Write используется при передаче данных агенту, отображенному в пространстве адресов памяти. Когда целевое устройство возвращает признак готовности, это подразумевает готовность данных и актуальность их значения. Это может обеспечиваться как при выполнении данной команды полностью синхронным способом, так и при проверке любого программного буфера, прежде, чем его содержимое будет «сброшено» перед каким-то событием синхронизации (например, при обновлении регистра состояния ввода-вывода или флажка памяти), через данный путь доступа. В данном случае подразумевается, что мастер может создать событие синхронизации сразу после использования этой команды.

Команда Configuration Read используется для чтения пространства конфигурации каждого агента. Агент выбран, когда активен его сигнал IDSEL, и на линии AD[1::0] присутствует 00. Во время фазы адреса цикла или цикла конфигурации, AD[7::2] адресует одно из 64 двойных слов DWORD (и внутри каждого DWORD допускается адрес байта или байтов); конфигурации с информацией о каждом устройстве, а AD[31::11] - логически это не предусматривает. AD[10::08] показывает, что каждый элемент многофункционального агента адресован.

Команда Configuration Write используется для передачи данных в пространство конфигураций агента. Агент выбран, когда активен его сигнал IDSEL, и на AD[1::0] присутствует 00. Во время фазы адреса цикла конфигурации линии AD[7::2] адресуют 64 двойных слова DWORD (и внутри каждого двойного слова допускается адрес байта или байтов) конфигурации с информацией о каждом устройстве, а AD[31::11] - логически это не предусматривают. AD[10::08] показывает, что каждый элемент многофункционального агента адресован.

Команда Memory Read Multiple является семантически идентичной команде Memory Read, за исключением того, что в ней дополнительно указывается возможность выбора мастером более, чем одной строки кэширования, перед отсоединением. Контроллер памяти должен продолжать конвейерную обработку памяти, пока активен сигнал FRAME#. Эта команда предназначена для работы по передаче больших последовательностей данных, когда можно повысить эффективность системы памяти (и запрашивающего мастера), при последовательном чтении дополнительной строки кэша, когда программной установленный буфер доступен для временного хранения.

Команда Dual Address Cycle (DAC) используется для передачи 64-разрядного адреса в устройства, поддерживающие 64-битную адресацию. Те же устройства, которые поддерживают только 32-битную адресацию, должны обработать эту команду, как зарезервированную, и никогда не отвечать на текущую транзакцию.

Команда Memory read Line является семантически идентичной команде Memory Read, за исключением того, что в ней дополнительно указывается возможность завершения мастером более, чем двух 32-битных фаз данных PCI. Эта команда предназначена для работы с большими последовательностями передаваемых данных, когда можно повысить производительность системы памяти (и запрашивающего мастера), при чтении строки кэша до конца в случае, если время реакции на запрос менее одного цикла памяти. Как и в случае с командой Memory Read, буферы выборки должна быть отменены прежде, через данный путь доступа будут инициированы события синхронизации.

Команда Memory Write and Validate семантически идентична команде Memory Write, за исключением того, что она дополнительно гарантирует передачу как минимум одной полной строки кэша; например, это требуется, когда мастеру необходимо записать все байты внутри адресованной строки кэша за одну транзакцию PCI. Мастер может позволить транзакции «перейти» границу строки кэша только в случае, если это предполагает передачу и всей последующей строки. Для выполнения этой команды требуется наличие у мастера регистра конфигурации, в котором был бы указан размер строки кэша (за более подробной информацией обращайтесь к разделу 6.2.4). Это позволит повысить производительность памяти, путем отмены строки в кэше обратной записи, без осуществления фактического цикла обратной записи, и, таким образом, сокращая время доступа.

Правила использования операций

Всем устройствам PCI требуются реагировать на команды конфигурации (чтения и записи) в качестве целевых устройств. Все остальные команды необязательные. Порядок исполнения команд на шине PCI гарантирован для операций ввода - вывода (чтения и записи). Устройствам PCI, которые содержат перегружаемые функции или регистры, требуется осуществить их отображение в пространстве памяти через регистры конфигурации. Данное действие обеспечивает возможность использования устройства в конфигурациях, в случае, если пространство ввода-вывода недоступно. Когда выполнено такое отображение, то проектировщик системы может гарантировать порядок выполнения команды, когда устройство используется при вводе - выводе или в пространстве памяти. Команды записи в память и чтения из нее, для отображенного в память устройства, осуществляют «ввод - вывод при отображении в память» («memory mapped I/O»).

При необходимости мастер может выполнять необязательные команды. Целевое устройство также может, при необходимости, выполнять эти команды, но если оно реализует основные операции с памятью, то необходимо поддерживать все подобные операции, включая Memory Write (запись в память) и Invalidate (отмена), Memory Read Line (чтение строки памяти), Read Multiple (множественное чтение). При неполной реализации, данные команды повышения производительности должны быть совмещены с основными командами работы с памятью. Например, целевое устройство может не реализовывать команду Memory Read Line; тем не менее, оно должно принять запрос (если адрес дешифрирован как для доступа к памяти) и обработать его как команду чтения из памяти (Memory Read). Аналогично, целевое устройство может не реализовывать команду Memory Write и Invalidate, но оно обязано принять запрос (если адрес дешифрирован как для доступа к памяти) и обработать его как команду Memory Write (запись в память). Для передача блоков данных в системную память и обратно мастеру рекомендуется поддерживать команды Memory Write and Invalidate и Read Memory Line. Команды Memory Read или Memory Write можно использовать, если по некоторым причинам мастер не способен использовать команды, повышающие производительность.

Мастера, использующие команды чтения из памяти данных любой длины (Memory Read), будут работать для всех команд, однако их основное применение показано ниже. Несмотря на то, что команда чтения и отмены (Write and Invalidate) - единственная команда, которая требует наличия регистра длины строки кэша, настоятельно рекомендуется, чтобы ею пользовались команды чтения памяти (Memory Read). Во всех остальных случаях, интерфейс не гарантирует правильности любых «неявных» данных. Основное использование команды показано как для случая с использованием регистра длины строки кэша.

Основное использование команд с применением регистра длины строки кэша:
- Команда Memory Read - Используется в случае блочной передачи половины строки кэша или
менее.
- Команда Memory Read Line - Используется в случае блочной передачи от половины строки кэша до трех строк кэша.
- Команда Memory Read Multiple - Используется при блочной передаче более трех строк кэша.

Основное использование команд без применения регистра длины строки кэша:
- Команда Memory Read - Используется при блочной передаче, если имеется две и менее пересылок
данных.
- Команда Memory Read Line - Используется при блочной передачи, если количество пересылок данных составляет от 3 до 12.
- Команда Memory Multiple Read - Используется при передаче больших блоков данных (до 13 и более пересылок).

Основы протокола для PCI

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

Интерфейс может различать, когда такое объединение разрешено, а когда - нет, при помощи анализа адресного диапазона, данные по которому должно предоставлять программное обеспечение при инициализации. Прекращение объединения данных в буфер (и сброс содержимого буфера) должно происходить во время следующей записи или чтения, которые заранее не предусмотрены (для любого диапазона). Транзакции записи после любого из этих двух событий могут быть объединены с последующими транзакциями, но это не относится к ранее объединенным данным, если они попали в «предсказанный» диапазон.

Основной интерфейс может комбинировать последовательности двойных слов записываемых в память данных (DWORD), которые генерируются процессором в блоки, при условии сохранения порядка следования адресов (ассоциированного с каждым двойным словом). Например, интерфейс может записывать следующую последовательность - DWORD 0, DWORD 2 и DWORD 3. Тогда последовательность на PCI может быть следующей: DWORD 0, DWORD 1 (байты не допускаются), DWORD 2 и в конце блока - DWORD 3. Такое объединение допускается во всех случаях, когда последующий адрес DWORD более значим, чем предыдущий. Интерфейс может преобразовывать одиночные запросы по чтению памяти, поступающие от процессора, в пакетный запрос (чтение производится с выборкой, до прихода данных в процессор), при условии, что при этом чтении не будут возникать побочные эффекты в адресуемом целевом устройстве.

Если запросы от процессора для ввода-вывода нельзя объединить, то они будут иметь единственную фазу - фазу данных. В настоящее время нет таких процессоров или «управителей» шины, которые бы нерировали пакетные запросы в пространстве ввода - вывода. Однако, если в будущем некоторое новое устройство будет генерировать значимые пакетные запросы на ввод-вывод, (например, для доступа к порту FIFO), то они не будут игнорироваться. Для пакетных запросов по вводу-выводу адресация не подразумевается. В этом случае адресация должна быть установлена целевым устройством и мастером после выполнения запросов по вводу-выводу. PCI - устройства, которые не работают с фазами данных при множественном вводе - выводе, должны разрывать связь после первой фазы данных. Чтобы убедиться, что устройства ввода - вывода функционируют правильно, интерфейсы не должны объединять или комбинировать в одиночный запрос доступа к PCI или блок последовательности запросов ввода - вывода. Все запросы на ввод - вывод должны появляться на шине PCI точно так, как их сгенерировал процессор. (Если адресуется целевое устройство, для которого Byte Enables показывает, что объем передаваемых данных больше, чем оно поддерживает, то это устройство аварийно завершает свою работу).

Значение всех сигналов проверяется по фронту синхроимпульса1 . Каждый сигнал имеет свою установочную апертуру и апертуру неактивного состояния относительно положительного фронта синхроимпульса, при которых не позволяется переход в другое состояние. Величины сигналов выше этой апертуры не имеют никакого значения. Эта апертура имеет значение только на «подходящих» фронтах синхроимпульсов для сигналов AD[31::00], [63::32], PAR2 , PAR64 и IDSEL3 и на любом фронте синхроимпульса для LOCK#, IRDY#, TRDY#, FRAME#, DEVSEL#, STOP#, REQ#, GNT#, REQ64#, ACK#64, SBO#, SDONE, SERR# (только на срезе), а для сигналов PERR#, C/BE[3::0]#, C/BE[7::4]# (так как это команды шины) существует ограничение по положительному фронту синхроимпульса, при условии активности сигнала FRAME#. Сигналы C/BE[3::0], C/BE[7::4]# (с разрешением байта) ограничены на любом положительном фронте синхроимпульса, после завершения фазы адреса или фазы данных. RST*, IRQA*, IRQB*, IRQC*, и IRQD* не ограничены и асинхронны.

Общее управление передачей информации

Все основные пересылки данных на шине PCI управляются тремя сигналами. За более подробной
информацией обращайтесь к рисунку 3-1.

FRAME# - Управляется мастером для того, чтобы он мог указать начало и конец транзакции.

IRDY# - Управляется мастером, чтобы он мог инициировать циклы ожидания.

TRDY# - Управляется целевым устройством, чтобы оно могло инициировать циклы ожидания.

Когда неактивны сигналы FRAME# и IRDY#, интерфейс находится в ожидании - состояние IDLE. Первый
фронт синхроимпульса, на котором активизируется сигнал FRAME# - это фаза адреса, в которую передаются адрес и команда шины. По следующему фронту синхроимпульса начинается первая фаза данных или более, в течение которой передаются данные между мастером и целевым устройством по фронту синхроимпульса, для которого активны сигналы IRDY# и TRDY#. Циклы ожидания могут быть инициированы в фазе данных мастером либо целевым устройством, с сигналами IRDY# и TRDY#, соответственно. Когда данные корректны, для независимой ни от чего установки сигнала xRDY# требуется источник данных (IRDY# - для транзакции записи, TRDY# - для транзакции чтения). Получение данных может привести к установлению в активное состояние сигналов xRDY#, конкретно - в зависимости от того, какой сигнал выбран.

Если мастер установил сигнал IRDY#, то он не может изменять состояние сигналов IRDY# или FRAME# до тех пор, пока не завершится текущая фаза данных, независимо от состояния TRDY#. Если целевое устройство один раз уже установило сигнал TRDY# или STOP#, то оно не может изменять состояние сигналов DEVSEL#, TRDY# или STOP# до тех пор, пока не завершится текущая фаза данных. Ни мастер, ни целевое устройство не могут изменять свое состояние, пока не завершится передача данных. Когда мастер предполагает завершить одну большую передачу данных (это может произойти сразу после фазы адреса), то сигнал FRAME# переходит в неактивное, а IRDY# - в активное, показывая готовность мастера. После того, как целевое устройство показывает, что данная передача - последняя (сигнал TRDY# -активен), интерфейс возвращается в состояние ожидания IDLE, с активными сигналами FRAME# и IRDY#.
К сожалению, поскольку мы говорим о "черном ящике", не видя вашего решения (ни схемы, ни кода), большее что-то посоветовать вам трудно.
0
katrisha
10 / 10 / 0
Регистрация: 14.11.2008
Сообщений: 56
22.04.2012, 10:07  [ТС] #5
ПЛИС ждет сигнал /frame, как он появляется, анализирует команду и адрес, если адрес совпадает с BAR, выдает сигнал /devsel, ждет сигнал /irdy, в этотм момент в зависимости от конмады, либо читает ОЗУ, либо управляющий регистр. Затем выдает данные с сигналом /trdy. Далее если /frame был снят, переводит все сигналы в z-состояние. Если нет - далее ситает ОЗУ, например, со сдвинутым адресом, или записывает данные в ОЗУ со сдвинутым адресом.

Если э3 вам даст больше информации в пн могу принести. и код тоже. Как я понимаю вы хотите посмотреть код для ПЛИС?
0
22.04.2012, 10:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 10:07

Как разобраться с пропускной способностью интерфейса PCI-E 3.0 и режимом SLI ?
Видеокарта GIGABYTE GTX780 (GV-N780OC-3GD). Пропускная способность - 288 Гб\с....

Gigabyte GA-970A-D3 (2 PCI, 3 PCI-E x1, 2 PCI-E x16, 4 DDR3 DIMM, Audio, Gigabit LAN)
Подойдет ли к данной материнке видеокарта gtx 970 от гигабайт? И запуститься...

Реализация интерфейса
Здравствуйте. Нам дали такое задание Постановка задачи Необходимо...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru