Интел ОПАЕ ФПГА Линук Девице Дривер Архитектура
Архитектура драјвера ОПАЕ Интел ФПГА Линук уређаја
ОПАЕ Интел ФПГА драјвер обезбеђује интерфејсе за апликације у корисничком простору за конфигурисање, набрајање, отварање и приступ ФПГА акцелераторима на платформама опремљеним Интел ФПГА решењима и омогућава функције управљања на нивоу система као што су ФПГА реконфигурација, управљање напајањем и виртуелизација.
Архитектура хардвера
Са тачке ОС-а view, ФПГА хардвер се појављује као обичан ПЦИе уређај. Меморија ФПГА уређаја је организована коришћењем унапред дефинисане структуре података (Листа функција уређаја). Функције које подржава ФПГА уређај су изложене кроз ове структуре података, као што је илустровано у наставку на следећој слици:
ФПГА ПЦИе уређај
Драјвер подржава ПЦИе СР-ИОВ за креирање виртуелних функција (ВФ) које се могу користити за додељивање појединачних акцелератора виртуелним машинама.
Интел Цорпоратион. Сва права задржана. Интел, Интел лого и друге Интел ознаке су заштитни знаци Интел Цорпоратион или њених подружница. Интел гарантује перформансе својих ФПГА и полупроводничких производа у складу са тренутним спецификацијама у складу са Интеловом стандардном гаранцијом, али задржава право да изврши измене било којег производа и услуге у било ком тренутку без обавештења. Интел не преузима никакву одговорност или одговорност која произилази из примене или коришћења било које информације, производа или услуге описане овде осим ако је Интел изричито пристао у писаној форми. Интеловим клијентима се саветује да набаве најновију верзију спецификација уређаја пре него што се ослоне на било коју објављену информацију и пре него што наруче производе или услуге.
Друга имена и брендови могу се сматрати власништвом других.
Виртуелизовани ФПГА ПЦИе уређај
ФПГА Манагемент Енгине (ФМЕ)
ФПГА Манагемент Енгине врши управљање напајањем и топлотом, извештавање о грешкама, реконфигурацију, извештавање о перформансама и друге инфраструктурне функције. Сваки ФПГА има један ФМЕ, коме се увек приступа преко физичке функције (ПФ). Апликације у корисничком простору могу да стекну ексклузивни приступ ФМЕ користећи опен() и да га ослободе коришћењем цлосе() као привилеговани корисник (роот).
Порт
Порт представља интерфејс између статичке ФПГА структуре („ФПГА Интерфаце Манагер (ФИМ)“) и делимично реконфигурабилног региона који садржи функцију акцелератора (АФ). Порт контролише комуникацију од софтвера до акцелератора и излаже функције као што су ресетовање и отклањање грешака. ПЦИе уређај може имати неколико портова, а сваки порт може бити изложен кроз ВФ тако што ће му се доделити коришћењем ФПГА_ФМЕ_ПОРТ_АССИГН иоцтл на ФМЕ уређају.
Јединица функције акцелератора (АФ).
- Јединица функције акцелератора (АФ) је прикључена на порт и излаже 256К ММИО регион који ће се користити за контролне регистре специфичне за акцелератор.
- Апликације у корисничком простору могу да стекну ексклузивни приступ АФУ прикљученом на порт коришћењем опен() на Порт уређају и ослободе га коришћењем цлосе().
- Апликације у корисничком простору такође могу ммап() акцелератор ММИО региона.
Делимична реконфигурација
Као што је горе поменуто, акцелератори се могу реконфигурисати кроз делимичну реконфигурацију функције акцелератора (АФ) file. Функција акцелератора (АФ) мора бити генерисана за тачан ФИМ и циљани статички регион (порт) ФПГА; у супротном, операција реконфигурације неће успети и може изазвати нестабилност система. Ова компатибилност се може проверити упоређивањем ИД-а интерфејса забележеног у АФ заглављу са ИД-ом интерфејса који је изложио ФМЕ преко сисфс-а. Ову проверу обично врши кориснички простор пре позивања ИОЦТЛ-а за реконфигурацију.
Напомена:
Тренутно, сваки софтверски програм који приступа ФПГА, укључујући и оне који раде у виртуелизованом хосту, мора бити затворен пре покушаја делимичне реконфигурације. Кораци би били:
- Истоварите возача од госта
- Искључите ВФ са госта
- Онемогућите СР-ИОВ
- Извршите делимичну реконфигурацију
- Омогући СР-ИОВ
- Прикључите ВФ на госта
- Учитајте возача у гост
ФПГА виртуелизација
Да бисте омогућили приступ акцелератору из апликација које се покрећу у ВМ-у, одговарајући АФУ порт треба да се додели ВФ-у користећи следеће кораке:
- ПФ подразумевано поседује све АФУ портове. Сваки порт који треба поново доделити ВФ-у мора прво бити ослобођен од ПФ-а преко ФПГА_ФМЕ_ПОРТ_РЕЛЕАСЕ иоцтл-а на ФМЕ уређају.
- Када се Н портова ослободи од ПФ-а, наредба у наставку се може користити за омогућавање СРИОВ и ВФ-ова. Сваки ВФ поседује само један порт са АФУ. ецхо Н > ПЦИ_ДЕВИЦЕ_ПАТХ/сриов_нумвфс
- Прођите кроз ВФ до ВМ.
- АФУ под ВФ је доступан из апликација у ВМ (користећи исти драјвер унутар ВФ).
Напомена:
ФМЕ се не може доделити ВФ-у, тако да су ПР и друге функције управљања доступне само преко ПФ-а.
Организација возача
Управљачки програм ПЦИе модула
Организација возача
ФПГА уређаји се појављују као обични ПЦИе уређаји; према томе, драјвер ФПГА ПЦИе уређаја (интел-ФПГА-ПЦИ.ко) се увек прво учитава када се детектује ФПГА ПЦИе ПФ или ВФ. Овај драјвер игра инфраструктурну улогу у архитектури драјвера. То:
- Креира ФПГА контејнерски уређај као родитељ функција уређаја.
- Пролази кроз листу функција уређаја, која је имплементирана у БАР меморију ПЦИе уређаја, да би открила уређаје са функцијама и њихове под-функције и креирала платформске уређаје за њих у оквиру уређаја контејнера.
- Подржава СР-ИОВ.
- Уводи инфраструктуру уређаја са функцијама, која апстрахује операције за под-функције и излаже уобичајене функције управљачким програмима уређаја.
Функције управљачког програма ПЦИе модула
- Садржи ПЦИе откривање, набрајање уређаја и откривање функција.
- Креира сисфс директоријуме за родитељски уређај, ФПГА Манагемент Енгине (ФМЕ) и Порт.
- Креира инстанце драјвера платформе, узрокујући да Линук кернел учитава одговарајуће драјвере модула платформе.
Драјвер уређаја модула ФМЕ платформе
- Управљање напајањем и топлотом, извештавање о грешкама, извештавање о перформансама и друге инфраструктурне функције. Овим функцијама можете приступити преко сисфс интерфејса које је изложио ФМЕ драјвер.
- Делимична реконфигурација. ФМЕ драјвер региструје ФПГА менаџер током иницијализације ПР под-функције; када од вас прими ФПГА_ФМЕ_ПОРТ_ПР иоцтл, он позива функцију заједничког интерфејса од ФПГА менаџера да заврши делимичну реконфигурацију тока битова на датом порту.
- Управљање портовима за виртуелизацију. ФМЕ драјвер уводи два иоцтл-а, ФПГА_ФМЕ_ПОРТ_РЕЛЕАСЕ, који ослобађају дати порт из ПФ-а; и ФПГА_ФМЕ_ПОРТ_АССИГН, који додељује порт назад на ПФ. Када се порт ослободи од ПФ-а, може се доделити ВФ-у преко СР-ИОВ интерфејса које обезбеђује ПЦИе драјвер. За више информација погледајте „ФПГА виртуелизација“.
Функције управљачког програма модула ФМЕ платформе
- Креира чвор уређаја ФМЕ карактера.
- Креира ФМЕ сисфс fileс и имплементира ФМЕ сисфс file приступници.
- Имплементира ФМЕ приватне под-драјвере.
- ФМЕ приватни под-драјвери:
- ФМЕ Хеадер
- Тхермал Манагемент
- Управљање напајањем
- Глобал Еррор
- Делимична реконфигурација
- Глобал Перформанце
Драјвер уређаја модула платформе порта
Слично ФМЕ драјверу, драјвер ФПГА порта (и АФУ) (интел-фпга-афу. ко) се испитује након креирања уређаја Порт платформе. Главна функција овог модула је да обезбеди интерфејс за апликације у корисничком простору за приступ појединачним акцелераторима, укључујући основну контролу ресетовања на порту, извоз АФУ ММИО региона, услугу мапирања ДМА бафера, обавештење УМсг(1) и функције удаљеног отклањања грешака ( види горе).
УМсг је подржан само кроз Аццелератион Стацк за Интел Ксеон® процесор са интегрисаним ФПГА.
Функције драјвера уређаја модула платформе порта
- Креира чвор уређаја карактера Порт.
- Креира порт сисфс fileс и имплементира порт сисфс file приступници.
- Имплементира под-дривер функције Порт привате.
- Под-драјвери за приватне функције порта:
- Заглавље порта
- АФУ
- Порт Еррор
- УМсг(2)
- Сигнал Тап
Апплицатион ФПГА Девице Енумератион
Овај одељак уводи како апликације набрајају ФПГА уређај из сисфс хијерархије под /сис/цласс/фпга. У екampдоле, два Интел ФПГА уређаја су инсталирана у хосту. Сваки ФПГА уређај има један ФМЕ и два порта (АФУ). За сваки ФПГА уређај креира се директоријум уређаја под /сис/цласс/фпга:
/сис/цласс/фпга/интел-фпга-дев.0
/сис/цласс/фпга/интел-фпга-дев.1
Сваки чвор има један ФМЕ и два порта (АФУ) као подређене уређаје:
/сис/цласс/фпга/интел-фпга-дев.0/интел-фпга-фме.0
/сис/цласс/фпга/интел-фпга-дев.0/интел-фпга-порт.0
/сис/цласс/фпга/интел-фпга-дев.0/интел-фпга-порт.1
/сис/цласс/фпга/интел-фпга-дев.1/интел-фпга-фме.1
/сис/цласс/фпга/интел-фпга-дев.1/интел-фпга-порт.2
/сис/цласс/фпга/интел-фпга-дев.1/интел-фпга-порт.3
Уопштено говорећи, ФМЕ/Порт сисфс интерфејси се називају на следећи начин:
/сис/цласс/фпга/интел-фпга-дев.и/интел-фпга-фме.ј/
/сис/цласс/фпга/интел-фпга-дев.и/интел-фпга-порт.к/
са И узастопним нумерисањем свих контејнерских уређаја, ј узастопним нумерисањем ФМЕ-а и к узастопним нумерисањем свих портова.
Чворови уређаја који се користе за иоцтл() и ммап() могу се референцирати путем:
/дев/интел-фпга-фме.ј
/дев/интел-фпга-порт.к
Набрајање ПЦИе драјвера
Овај одељак даје оверview тока кода за набрајање уређаја које врши интел-фпга-пци.ко. Истакнуте су главне структуре података и функције. Овај одељак је најбоље пратити када viewуношење пратећег изворног кода (пцие.ц).
Структуре података набрајања
енум фпга_ид_типе {
ПАРЕНТ_ИД,
ФМЕ_ИД,
ПОРТ_ИД,
ФПГА_ИД_МАКС
};
статичка структура идр фпга_идс[ФПГА_ИД_МАКС];
струцт фпга_цхардев_инфо {
цонст цхар *наме;
дев_т девт;
};
струцт фпга_цхардев_инфо фпга_цхрдевс[] = {
{ .наме = ФПГА_ФЕАТУРЕ_ДЕВ_ФМЕ },
{ .наме = ФПГА_ФЕАТУРЕ_ДЕВ_ПОРТ },
};
статичка структура класе *фпга_цласс;
статичка структура пци_девице_ид цци_пцие_ид_тбл[] = {
{ПЦИ_ДЕВИЦЕ(ПЦИ_ВЕНДОР_ИД_ИНТЕЛ, ПЦИе_ДЕВИЦЕ_ИД_РЦиЕП0_МЦП),},
{ПЦИ_ДЕВИЦЕ(ПЦИ_ВЕНДОР_ИД_ИНТЕЛ, ПЦИе_ДЕВИЦЕ_ИД_ВФ_МЦП),},
{ПЦИ_ДЕВИЦЕ(ПЦИ_ВЕНДОР_ИД_ИНТЕЛ, ПЦИе_ДЕВИЦЕ_ИД_РЦиЕП0_СККС_П),},
{ПЦИ_ДЕВИЦЕ(ПЦИ_ВЕНДОР_ИД_ИНТЕЛ, ПЦИе_ДЕВИЦЕ_ИД_ВФ_СККС_П),},
{ПЦИ_ДЕВИЦЕ(ПЦИ_ВЕНДОР_ИД_ИНТЕЛ, ПЦИе_ДЕВИЦЕ_ИД_РЦиЕП0_ДЦП),},
{ПЦИ_ДЕВИЦЕ(ПЦИ_ВЕНДОР_ИД_ИНТЕЛ, ПЦИе_ДЕВИЦЕ_ИД_ВФ_ДЦП),},
{0,}
};
статичка структура пци_дривер цци_пци_дривер = {
.наме = ДРВ_НАМЕ,
.ид_табле = цци_пцие_ид_тбл,
.пробе = цци_пци_пробе,
.ремове = цци_пци_ремове,
.сриов_цонфигуре = цци_пци_сриов_цонфигуре
};
струцт цци_дрвдата {
инт девице_ид;
струцт уређај *фме_дев;
струцт мутек лоцк;
струцт лист_хеад порт_дев_лист;
инт релеасе_порт_нум;
струцт лист_хеад региони;
};
струцт буилд_феатуре_девс_инфо {
струцт пци_дев *пдев;
воид __иомем *иоаддр;
воид __иомем *иоенд;
инт цуррент_бар;
воид __иомем *пфме_хдр;
струцт уређај *парент_дев;
струцт платформ_девице *феатуре_дев;
};
Енумератион Флов
- ццидрв_инит()
- Иницијализујте фпга_идс помоћу идр_инит().
- Иницијализујте фпга_цхрдевс[и].девт користећи аллоц_цхрдев_регион().
- Иницијализујте фпга_цласс користећи цласс_цреате().
- пци_регистер_дривер(&цци_пци_дривер);
- цци_пци_пробе()
- Омогућите ПЦИ уређај, затражите приступ његовим регионима, подесите ПЦИ главни режим и конфигуришите ДМА.
- цци_пци_цреате_феатуре_девс() буилд_инфо_аллоц_анд_инит()
- Доделите структуру буилд_феатуре_девс_инфо, иницијализујте је.
.парент_дев је постављен на надређени сисфс директоријум (интел-фпга-дев.ид) који садржи директоријуме ФМЕ и Порт сисфс.
- Доделите структуру буилд_феатуре_девс_инфо, иницијализујте је.
- парсе_феатуре_лист()
- Прошетајте БАР0 списком функција уређаја да бисте открили ФМЕ, порт и њихове приватне карактеристике.
- парсе_феатуре() парсе_феатуре_афус() парсе_феатуре_фме()
- Када се ФМЕ наиђе:
- буилд_инфо_цреате_дев()
- Доделите уређај платформе за ФМЕ, чувајући у буилд_феатуре_девс_инфо.феатуре_дев.
- феатуре_дев.ид је иницијализован резултатом идр_аллоц(фпга_идс[ФМЕ_ИД],
- феатуре_дев.парент је подешен на буилд_феатуре_девс_инфо.парент_дев.
- Доделите низ структурних ресурса у феатуре_дев.ресоурце.
- Доделите структуру феатуре_платформ_дата, иницијализујте је и сачувајте показивач у феатуре_дев.дев.платформ_дата
- цреате_феатуре_инстанце() буилд_инфо_адд_суб_феатуре()
- Иницијализујте феатуре_дев.ресоурце[ФМЕ_ФЕАТУРЕ_ИД_ХЕАДЕР].
- Феатуре_платформ_дата_адд()
- Иницијализујте феатуре_платформ_дата.феатурес[ФМЕ_ФЕАТУРЕ_ИД_ХЕАДЕР], све осим .фопс.
- парсе_феатуре() парсе_феатуре_афус() парсе_феатуре_порт()
- Када се наиђе на порт:
- буилд_инфо_цреате_дев()
- Доделите уређај платформе за Порт, чувајући га у буилд_феатуре_девс_инфо.феатуре_дев.
- феатуре_дев.ид је иницијализован на резултат идр_аллоц(фпга_идс[ПОРТ_ИД],
- феатуре_дев.парент је подешен на буилд_феатуре_девс_инфо.парент_дев.
- Доделите низ структурних ресурса у феатуре_дев.ресоурце.
- Доделите структуру феатуре_платформ_дата, иницијализујте је и сачувајте показивач у феатуре_дев.дев.платформ_дата
- буилд_инфо_цоммит_дев()
- Додајте структуру феатуре_платформ_дата.ноде за Порт на листу портова у струцт цци_дрвдата.порт_дев_лист
- цреате_феатуре_инстанце() буилд_инфо_адд_суб_феатуре()
- Иницијализујте феатуре_дев.ресоурце[ПОРТ_ФЕАТУРЕ_ИД_ХЕАДЕР].
- Феатуре_платформ_дата_адд()
- Иницијализујте феатуре_платформ_дата.феатурес[ПОРТ_ФЕАТУРЕ_ИД_ХЕАДЕР], све осим .фопс.
- парсе_феатуре() парсе_феатуре_афус() парсе_феатуре_порт_уафу()
- Када се наиђе на АФУ:
- цреате_феатуре_инстанце() буилд_инфо_адд_суб_феатуре()
- Иницијализујте феатуре_дев.ресоурце[ПОРТ_ФЕАТУРЕ_ИД_УАФУ].
- Феатуре_платформ_дата_адд()
- Иницијализујте феатуре_платформ_дата.феатурес[ПОРТ_ФЕАТУРЕ_ИД_УАФУ], све осим .фопс.
- парсе_феатуре() парсе_феатуре_привате() парсе_феатуре_фме_привате()
- Када се наиђе на приватну функцију ФМЕ:
- цреате_феатуре_инстанце() буилд_инфо_адд_суб_феатуре()
- Иницијализујте феатуре_дев.ресоурце[ид].
- Феатуре_платформ_дата_адд()
- Иницијализујте феатуре_платформ_дата.феатурес[ид], све осим .фопс.
- парсе_феатуре() парсе_феатуре_привате() парсе_феатуре_порт_привате()
- Када се наиђе на приватну функцију порта: * цреате_феатуре_инстанце() буилд_инфо_адд_суб_феатуре() * Иницијализујте феатуре_дев.ресоурце[ид]. * феатуре_платформ_дата_адд() Иницијализујте феатуре_платформ_дата.феатурес[ид], све осим .фопс.
- парсе_портс_фром_фме()
- Ако је управљачки програм учитан на физичку функцију (ПФ), онда:
- Покрените ток парсе_феатуре_лист() на сваком порту описаном у ФМЕ заглављу.
- Користите БАР поменуту у сваком уносу порта у заглављу.
Иницијализација уређаја ФМЕ платформе
Овај одељак даје оверview тока кода за иницијализацију ФМЕ уређаја који врши интел-фпга-фме.ко. Главне структуре података и функције су истакнуте. Овај одељак је најбоље пратити када viewкоришћење пратећег изворног кода (фме-маин.ц).
Структуре података уређаја платформе ФМЕ
струцт феатуре_опс {
инт (*инит)(струцт платформ_девице *пдев, струцт карактеристика *феатуре);
инт (*уинит)(струцт платформ_девице *пдев, струцт карактеристика *феатуре);
лонг (*иоцтл)(струцт платформ_девице *пдев, струцт карактеристика *феатуре,
унсигнед инт цмд, унсигнед лонг арг);
инт (*тест)(струцт платформ_девице *пдев, струцт карактеристика *феатуре);
};
струцт феатуре {
цонст цхар *наме;
инт ресоурце_индек;
воид __иомем *иоаддр;
струцт феатуре_опс *опс;
};
струцт феатуре_платформ_дата {
струцт лист_хеад чвор;
струцт мутек лоцк;
унсигнед лонг дев_статус;
струцт цдев цдев;
струцт платформ_девице *дев;
унсигнед инт дисабле_цоунт;
воид *приватно;
инт нум;
инт (*цонфиг_порт)(струцт платформ_девице *, у32, боол);
струцт платформ_девице *(*фпга_фор_еацх_порт)(струцт платформ_девице *,
воид *, инт (*матцх)(струцт платформ_девице *, воид *)); струцт
карактеристике[0];
};
струцт перф_објецт {
инт ид;
цонст струцт аттрибуте_гроуп **аттр_гроупс;
струцт уређај *фме_дев;
струцт лист_хеад чвор;
струцт лист_хеад деца;
струцт кобјецт кобј;
};
струцт фпга_фме {
у8 порт_ид;
у64 пр_ерр;
струцт уређај *дев_ерр;
струцт перф_објецт *перф_дев;
струцт феатуре_платформ_дата *пдата;
};
Ток иницијализације уређаја ФМЕ платформе
ФМЕ иницијализациони ток
- фме_пробе() фме_дев_инит()
- Иницијализујте структуру фпга_фме и сачувајте је у пољу феатуре_платформ_дата.привате.
- фме_пробе() фпга_дев_феатуре_инит() феатуре_инстанце_инит()
- Сачувајте структуру феатуре_опс у феатуре_платформ_дата.феатурес за сваку попуњену функцију.
- Позовите тест функцију, ако постоји, из структуре.
- Позовите инит функцију из структуре.
- фме_пробе() фпга_регистер_дев_опс()
- Креирајте чвор уређаја ФМЕ карактера, региструјући структуру file_операције.
Иницијализација уређаја платформе порта
Овај одељак даје оверview тока кода за иницијализацију уређаја порта коју обавља интел-фпга-афу.ко. Истакнуте су главне структуре података и функције. Овај одељак је најбоље пратити када viewуносећи пратећи изворни код (афу.ц).
Структуре података уређаја платформе порта
струцт феатуре_опс {
инт (*инит)(струцт платформ_девице *пдев, струцт карактеристика *феатуре);
инт (*уинит)(струцт платформ_девице *пдев, струцт карактеристика *феатуре);
лонг (*иоцтл)(струцт платформ_девице *пдев, струцт карактеристика *феатуре,
унсигнед инт цмд, унсигнед лонг арг);
инт (*тест)(струцт платформ_девице *пдев, струцт карактеристика *феатуре);
};
струцт феатуре {
цонст цхар *наме;
инт ресоурце_индек;
воид __иомем *иоаддр;
струцт феатуре_опс *опс;
};
струцт феатуре_платформ_дата {
струцт лист_хеад чвор;
струцт мутек лоцк;
унсигнед лонг дев_статус;
струцт цдев цдев;
струцт платформ_девице *дев;
унсигнед инт дисабле_цоунт;
воид *приватно;
инт нум;
инт (*цонфиг_порт)(струцт платформ_девице *, у32, боол);
струцт платформ_девице *(*фпга_фор_еацх_порт)(струцт платформ_девице *,
воид *, инт (*матцх)(струцт платформ_девице *, воид *));
карактеристике карактеристика структуре[0];
};
струцт фпга_афу_регион {
у32 индекс;
у32 флагс;
у64 сизе;
у64 оффсет;
у64 пхис;
струцт лист_хеад чвор;
};
струцт фпга_афу_дма_регион {
у64 усер_аддр;
у64 дужина;
у64 иова;
струцт страница **странице;
струцт рб_ноде чвор;
боол ин_усе;
};
струцт фпга_афу {
у64 регион_цур_оффсет;
инт нум_регионс;
у8 нум_умсгс;
струцт лист_хеад региони;
струцт рб_роот дма_регионс;
струцт феатуре_платформ_дата *пдата;
};
Ток иницијализације уређаја платформе порта
Ток иницијализације порта
- афу_пробе() афу_дев_инит()
- Иницијализујте структуру фпга_афу и сачувајте је у пољу феатуре_платформ_дата.привате.
- афу_пробе() фпга_дев_феатуре_инит() феатуре_инстанце_инит()
- Сачувајте структуру феатуре_опс у феатуре_платформ_дата.феатурес за сваку попуњену функцију.
- Позовите тест функцију, ако постоји, из структуре.
- Позовите инит функцију из структуре.
- афу_пробе() фпга_регистер_дев_опс()
- Креирајте чвор уређаја карактера Порт, региструјући структуру file_операције.
ФМЕ ИОЦТЛс
ИОЦТЛ које се позивају на отвореном file дескриптор за /дев/интел-фпга-фме.ј ФПГА_ГЕТ_АПИ_ВЕРСИОН—врати тренутну верзију као цео број, почевши од 0.
ФПГА_ЦХЕЦК_ЕКСТЕНСИОН—тренутно није подржано.
ФПГА_ФМЕ_ПОРТ_РЕЛЕАСЕ—арг је показивач на:
струцт фпга_фме_порт_релеасе {
__у32 аргсз; // у: сизеоф(струцт фпга_фме_порт_релеасе)
__у32 флагс; // у: мора бити 0
__у32 порт_ид; // у: ИД порта (од 0) за ослобађање.
};
ФПГА_ФМЕ_ПОРТ_АССИГН—арг је показивач на:
струцт фпга_фме_порт_ассигн {
__у32 аргсз; // у: сизеоф(струцт фпга_фме_порт_ассигн)
__у32 флагс; // у: мора бити 0
__у32 порт_ид; // у: ИД порта (од 0) за додељивање. (мора да је било
претходно издао ФПГА_ФМЕ_ПОРТ_РЕЛЕАСЕ)
};
ФПГА_ФМЕ_ПОРТ_ПР—арг је показивач на:
струцт фпга_фме_порт_пр {
__у32 аргсз; // у: сизеоф(струцт фпга_фме_порт_пр)
__у32 флагс; // у: мора бити 0
__у32 порт_ид; // у: ИД порта (од 0)
__у32 буффер_сизе; // ин: величина бафера тока битова у бајтовима. Мора бити 4-бајта
поравнати.
__у64 буффер_аддресс; // ин: адреса процеса бафера битова
__у64 статус; // оут: статус грешке (битмаск)
};
Порт ИОЦТЛ
ИОЦТЛ које се позивају на отвореном file дескриптор за /дев/интел-фпга-порт.к ФПГА_ГЕТ_АПИ_ВЕРСИОН—враћа тренутну верзију као цео број, почевши од 0. ФПГА_ЦХЕЦК_ЕКСТЕНСИОН—тренутно није подржано.
ФПГА_ПОРТ_ГЕТ_ИНФО—арг је показивач на:
струцт фпга_порт_инфо {
__у32 аргсз; // у: сизеоф(струцт фпга_порт_инфо)
__у32 флагс; // излаз: враћа 0
__у32 нум_регионс; // излаз: број ММИО региона, 2 (1 за АФУ и 1 за
СТП)
__у32 нум_умсгс; // оут: број УМсг-ова подржаних од стране хардвера
};
ФПГА_ПОРТ_ГЕТ_РЕГИОН_ИНФО—арг је показивач на:
струцт фпга_порт_регион_инфо {
__у32 аргсз; // у: сизеоф(струцт фпга_порт_регион_инфо)
__у32 флагс; // излаз: (битмаск) { ФПГА_РЕГИОН_РЕАД, ФПГА_РЕГИОН_ВРИТЕ,
ФПГА_РЕГИОН_ММАП }
__у32 индекс; // у: ФПГА_ПОРТ_ИНДЕКС_УАФУ или ФПГА_ПОРТ_ИНДЕКС_СТП
__у32 паддинг; // у: мора бити 0
__у64 сизе; // оут: величина ММИО региона у бајтовима
__у64 оффсет; // оут: помак ММИО региона од почетка уређаја фд
};
ФПГА_ПОРТ_ДМА_МАП—арг је показивач на:
струцт фпга_порт_дма_мап {
__у32 аргсз; // у: сизеоф(струцт фпга_порт_дма_мап)
__у32 флагс; // у: мора бити 0 __у64 усер_аддр; // у: процес виртуелни
адреса. Мора бити поравнат на страници.
__у64 дужина; // ин: дужина мапирања у бајтовима. Мора бити вишеструка страница
величина.
__у64 иова; // излаз: ИО виртуелна адреса };
ФПГА_ПОРТ_ДМА_УНМАП—арг је показивач на:
струцт фпга_порт_дма_унмап {
__у32 аргсз; // у: сизеоф(струцт фпга_порт_дма_унмап)
__у32 флагс; // у: мора бити 0
__у64 иова; // у: ИО виртуелна адреса враћена претходним
ФПГА_ПОРТ_ДМА_МАП };
- ФПГА_ПОРТ_РЕСЕТ—арг мора бити НУЛЛ.
- ФПГА_ПОРТ_УМСГ_ЕНАБЛЕ—арг мора бити НУЛЛ.
- ФПГА_ПОРТ_УМСГ_ДИСАБЛЕ—аргс морају бити НУЛЛ.
ФПГА_ПОРТ_УМСГ_СЕТ_МОДЕ—арг је показивач на:
струцт фпга_порт_умсг_цфг {
__у32 аргсз; // у: сизеоф(струцт фпга_порт_умсг_цфг)
__у32 флагс; // у: мора бити 0
__у32 хинт_битмап; // у: битмап режима УМсг наговештаја. Означава који су УМсг
омогућено.
};
ФПГА_ПОРТ_УМСГ_СЕТ_БАСЕ_АДДР—
- УМсг мора бити онемогућен пре издавања овог иоцтл-а.
- Поље иова мора бити за бафер довољно велики за све УМсг-ове (нум_умсгс * ПАГЕ_СИЗЕ).
- Управљање бафером возача означава бафер као „у употреби“.
- Ако је иова НУЛЛ, сваки претходни регион није означен као „у употреби“.
- арг је показивач на:
струцт фпга_порт_умсг_басе_аддр {- у32 аргсз; // у: сизеоф(струцт фпга_порт_умсг_басе_аддр)
- у32 флагс; // у: мора бити 0
- у64 иова; // у: ИО виртуелна адреса са ФПГА_ПОРТ_ДМА_МАП. };
Напомена:
- Да бисте обрисали грешке порта, морате написати тачну битмаску тренутних грешака, нпрampле, мачке грешке > јасно
- УМсг је подржан само кроз Аццелератион Стацк за Интел Ксеон процесор са интегрисаним ФПГА.
сисфс Files
ФМЕ Хеадер сисфс files
интел-фпга-дев.и/интел-фпга-фме.ј/
сисфс file | ммио поље | тип | приступ |
портс_нум | фме_хеадер.цапабилити.нум_портс | децимални инт | Само за читање |
цацхе_сизе | фме_хеадер.цапабилити.цацхе_сизе | децимални инт | Само за читање |
верзија | фме_хеадер.цапабилити.фабриц_верид | децимални инт | Само за читање |
соцкет_ид | фме_хеадер.цапабилити.соцкет_ид | децимални инт | Само за читање |
битстреам_ид | фме_хеадер.битстреам_ид | хек уинт64_т | Само за читање |
битстреам_метадата | фме_хеадер.битстреам_мд | хек уинт64_т | Само за читање |
ФМЕ Тхермал Манагемент сисфс files
интел-фпга-дев.и/интел-фпга-фме.ј/тхермал_мгмт/
сисфс file | ммио поље | тип | приступ |
праг1 | термални.тхресхолд.тмп_тхсхолд1 | децимални инт | Корисник: Само за читање Роот: Читање-писање |
праг2 | термални.тхресхолд.тмп_тхсхолд2 | децимални инт | Корисник: Само за читање Роот: Читање-писање |
тхресхолд_трип | терм.тхресхолд.тхерм_трип_тхсхолд | децимални инт | Само за читање |
тхресхолд1_реацхед | термални.тхресхолд.тхсхолд1_статус | децимални инт | Само за читање |
тхресхолд2_реацхед | термални.тхресхолд.тхсхолд2_статус | децимални инт | Само за читање |
тхресхолд1_полици | термички. тхресхолд.тхсхолд_полици | децимални инт | Корисник: Само за читање Роот: Читање-писање |
температура | терм.рдсенсор_фм1.фпга_темп | децимални инт | Само за читање |
ФМЕ Повер Манагемент сисфс files
интел-фпга-дев.и/интел-фпга-фме.ј/повер_мгмт/
сисфс file | ммио поље | тип | приступ |
конзумиран | повер.статус.пвр_цонсумед | хек уинт64_т | Само за читање |
праг1 | повер.тхресхолд.тхресхолд1 | хек уинт64_т | Корисник: Само за читање Роот: Читање-писање |
праг2 | повер.тхресхолд.тхресхолд2 | хек уинт64_т | Корисник: Само за читање Роот: Читање-писање |
тхресхолд1_статус | повер.тхресхолд.тхресхолд1_статус | децимални без предзнака | Само за читање |
тхресхолд2_статус | повер.тхресхолд.тхресхолд2_статус | децимални без предзнака | Само за читање |
ртл | повер.статус.фпга_латенци_репорт | децимални без предзнака | Само за читање |
ФМЕ Глобал Еррор сисфс files
интел-фпга-дев.и/интел-фпга-фме.ј/еррорс/
сисфс file | ммио поље | тип | приступ |
пцие0_еррорс | геррор.пцие0_ерр | хек уинт64_т | Читај-пиши |
пцие1_еррорс | геррор.пцие1_ерр | хек уинт64_т | Читај-пиши |
ињецт_еррор | геррор.рас_еррор_ињ | хек уинт64_т | Читај-пиши |
интел-фпга-дев.и/интел-фпга-фме.ј/еррорс/фме-еррорс/
сисфс file | ммио поље | тип | приступ |
грешке | геррор.фме_ерр | хек уинт64_т | Само за читање |
прва_грешка | геррор.фме_фирст_ерр.ерр_рег_статус | хек уинт64_т | Само за читање |
нект_еррор | геррор.фме_нект_ерр.ерр_рег_статус | хек уинт64_т | Само за читање |
јасно | Брише грешке, фирст_еррор, нект_еррор | разне уинт64_т | Само за писање |
Напомена:
Да бисте обрисали ФМЕ грешке, морате написати тачну битмаску тренутних грешака, нпрampле цат еррорс > цлеар.
ФМЕ делимична реконфигурација сисфс files
интел-фпга-дев.и/интел-фпга-фме.ј/пр/
сисфс file | ммио поље | тип | приступ |
интерфејс_ид | пр.фме_пр_интфц_ид0_х, пр.фме_пре_интфц_ид0_л | хексадецимални 16-бајт | Само за читање |
ФМЕ Глобал Перформанце сисфс files
интел-фпга-дев.и/интел-фпга-фме.ј/дперф/цлоцк
сисфс file | ммио поље | тип | приступ |
сат | гперф.цлк.афу_интерф_цлоцк | хек уинт64_т | Само за читање |
интел-фпга-дев.и/интел-фпга-фме.ј/дперф/цацхе/ (Не важи за Аццелератион Стацк за Интел Ксеон ЦПУ са ФПГА)
сисфс file | ммио поље | тип | приступ |
замрзнути | гперф.цх_цтл.фреезе | децимални инт | Читај-пиши |
реад_хит | гперф.ЦАЦХЕ_РД_ХИТ | хек уинт64_т | Само за читање |
реад_мисс | гперф.ЦАЦХЕ_РД_МИСС | хек уинт64_т | Само за читање |
врите_хит | гперф.ЦАЦХЕ_ВР_ХИТ | хек уинт64_т | Само за читање |
врите_мисс | гперф.ЦАЦХЕ_ВР_МИСС | хек уинт64_т | Само за читање |
холд_рекуест | гперф.ЦАЦХЕ_ХОЛД_РЕК | хек уинт64_т | Само за читање |
тк_рек_сталл | гперф.ЦАЦХЕ_ТКС_РЕК_СТАЛЛ | хек уинт64_т | Само за читање |
сисфс file | ммио поље | тип | приступ |
рк_рек_сталл | гперф.ЦАЦХЕ_РКС_РЕК_СТАЛЛ | хек уинт64_т | Само за читање |
дата_врите_порт_цонтентион | гперф.ЦАЦХЕ_ДАТА_ВР_ПОРТ_ЦОНТЕН | хек уинт64_т | Само за читање |
tag_врите_порт_цонтентион | гперф.ЦАЦХЕ_TAG_ВР_ПОРТ_ЦОНТЕН | хек уинт64_т | Само за читање |
интел-фпга-дев.и/интел-фпга-фме.ј/дперф/иомму/ (Не важи за Аццелератион Стацк за Интел Ксеон ЦПУ са ФПГА)
сисфс file | ммио поље | тип | приступ |
замрзнути | гперф.втд_цтл.фреезе | децимални инт | Корисник: Само за читање Роот: Читање-писање |
интел-фпга-дев.и/интел-фпга-фме.ј/дперф/иомму/афук/ (Не важи за Аццелератион Стацк за Интел Ксеон ЦПУ са ФПГА)
сисфс file | ммио поље | тип | приступ |
реад_трансацтион | гперф.ВТД_АФУ0_МЕМ_РД_ТРАНС | хек уинт64_т | Само за читање |
врите_трансацтион | гперф.ВТД_АФУ0_МЕМ_ВР_ТРАНС | хек уинт64_т | Само за читање |
тлб_реад_хит | гперф.ВТД_АФУ0_ТЛБ_РД_ХИТ | хек уинт64_т | Само за читање |
тлб_врите_хит | гперф.ВТД_АФУ0_ТЛБ_ВР_ХИТ | хек уинт64_т | Само за читање |
интел-фпга-дев.и/интел-фпга-фме.ј/дперф/фабриц/
сисфс file | ммио поље | тип | приступ |
омогућити | гперф.фаб_цтл.(омогућено) | децимални инт | Корисник: Само за читање Роот: Читање-писање |
замрзнути | гперф.фаб_цтл.фреезе | децимални инт | Корисник: Само за читање Роот: Читање-писање |
пцие0_реад | гперф.ФАБ_ПЦИЕ0_РД | хек уинт64_т | Само за читање |
пцие0_врите | гперф.ФАБ_ПЦИЕ0_ВР | хек уинт64_т | Само за читање |
пцие1_реад | гперф.ФАБ_ПЦИЕ1_РД | хек уинт64_т | Само за читање |
пцие1_врите | гперф.ФАБ_ПЦИЕ1_ВР | хек уинт64_т | Само за читање |
упи_реад | гперф.ФАБ_УПИ_РД | хек уинт64_т | Само за читање |
упи_врите | гперф.ФАБ_УПИ_ВР | хек уинт64_т | Само за читање |
интел-фпга-ев.и/интел-фпга/фме.ј/дперф/фабриц/портк/
сисфс file | ммио поље | тип | приступ |
пцие0_реад | гперф.ФАБ_ПЦИЕ0_РД | хек уинт64_т | Само за читање |
пцие0_врите | гперф.ФАБ_ПЦИЕ0_ВР | хек уинт64_т | Само за читање |
пцие1_реад | гперф.ФАБ_ПЦИЕ1_РД | хек уинт64_т | Само за читање |
пцие1_врите | гперф.ФАБ_ПЦИЕ1_ВР | хек уинт64_т | Само за читање |
упи_реад | гперф.ФАБ_УПИ_РД | хек уинт64_т | Само за читање |
упи_врите | гперф.ФАБ_УПИ_ВР | хек уинт64_т | Само за читање |
Порт Хеадер сисфс files
интел-фпга-дев.и/интел-фпга-порт.к/
сисфс file | ммио поље | тип | приступ |
id | порт_хеадер.цапабилити.порт_нумбер | децимални инт | Само за читање |
лтр | порт_хеадер.цонтрол.латенци_толеранце | децимални инт | Само за читање |
Порт АФУ Хеадер сисфс files
интел-фпга-дев.и/интел-фпга-порт.к/
сисфс file | ммио поље | тип | приступ |
афу_ид | афу_хеадер.гуид | хексадецимални 16-бајт | Само за читање |
Порт Еррор сисфс files
интел-фпга-дев.и/интел-фпга-порт.к/еррорс/
сисфс file | ммио поље | тип | приступ |
грешке | перрор.порт_еррор | хек уинт64_т | Само за читање |
прва_грешка | перрор.порт_фирст_еррор | хек уинт64_т | Само за читање |
фирст_малформед_рек | перрор.малрек | хексадецимални 16-бајт | Само за читање |
јасно | грешка.(све грешке) | разне уинт64_т | Само за писање |
Напомена:
Да бисте обрисали порт грешке, морате написати тачну битмаску тренутних грешака, нпрampле цат еррорс > цлеар.
Историја ревизија
Верзија документа | Промене |
2017.10.02 | Првобитно издање. |
Водич за архитектуру драјвера ОПАЕ Интел ФПГА Линук уређаја
Документи / Ресурси
![]() |
Интел ОПАЕ ФПГА Линук Девице Дривер Архитектура [пдф] Упутство за кориснике ОПАЕ ФПГА Линук Девице Дривер Арцхитецтуре, ОПАЕ ФПГА, Линук Девице Дривер Арцхитецтуре, Дривер Арцхитецтуре, Арцхитецтуре |