Fórum Root.cz

Hlavní témata => Vývoj => Téma založeno: PanVP 14. 10. 2021, 15:53:26

Název: FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 14. 10. 2021, 15:53:26
Ahoj,

mám jeden projekt, který by si zasloužil předělat na FPGA, VHDL je na mě asi moc, ale Verilog mi přijde snesitelnější.

Jsou různé PCIe karty s FPGA:
(https://shop.trenz-electronic.de/media/image/08/54/83/TEC0330-05_0.jpg)
(https://numato.com/wp-content/uploads/2020/08/Nereid_2-2-1.png)

Potřebuji do FPGA dostat blok o velikosti ~32MB, zpracovat ho, dostat ho zpátky do RAM.
Ideální tak zpracovat 20 až 30 takových bloků za vteřinu.

Jenže jak dostat data z té karty přes PCIe do RAM?
Předpokládám, že by znamenalo:
- ve Verilogu "napsat" funkční interface pro PCIe
- napsat si vlastní primitivní driver do Linux (včetně naučit se ovládat DMA v Linux)
- "nějak" do svého programu přidat tu kartu

Jinými slovy, přijde mi, že by to mělo tuto náročnost:
10% práce na naprogramování vlastního problému (není to až tak světoborné)
90% práce na omáčcce okolo, abych dostal data po PCIe do paměti té FPGA karty a jak data dostat data z paměti karty

Nějaký nápad, jak se tomu vyhnout?
Aby to mělo smysl předělávat na FPGA, potřebuji stream ~800 MB/s z FPGA do PC,
případně obráceně, protože data jdou dovnitř a pak ven.

Tento projekt je vesměs solitér.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 14. 10. 2021, 16:09:39
Ve FPGA nebyva 32MiB pameti (ram), takze to nemas vlatne KAM prenest. A pokud to bude externi DDR, tak to bejva 32bit, nekdy 64... jako single channel ddr3/ddr4. PC je na tom s pameti lepe :-)
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 14. 10. 2021, 19:00:00
externi DDR, tak to bejva 32bit, nekdy 64... jako single channel ddr3/ddr4

Ano, koukal jsem výhradně na karty s paměťovým slotem.
A teď mě to nějak dost vyděsilo, to musím naprogramovat i paměťové rozhraní ? ??? :o
Že nejsou právě rychlé, to by nevadilo, koukal jsem na karty s DDR3, i kdyby to bylo jen 32 bit, tak se bavíme o ~4GB/s, resp cca ~8 GB/s při 64bitech pro nejpomalejší moduly ne?

Doufám, že to paměťové rozhraní je alespoň hotové tzn. člověk se k tomu chová jako "ke kusu jedniček a nul".
Jestli se jim musí posílat clock, select a vůbec celý ten bambilion blbin, které ram potřebuje, aby fungovala, tak to potěš koště. Doufám, že ty ramky jsou selfrefresh...protože jestli bych musel řídit i to, tak bych měl co dělat do důchodu  :o

Co ta komunikace s PCIe? Je tam nějaké jednoduché rozhraní + základní ovladač nebo jen nějaký template a vše od píky?
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 14. 10. 2021, 19:13:33
Ke vsemu existuji generatory od vyrobcu, pripadne 3rd party IP jadra. Neni to uber-optimalni, ale pokud nejsi narocny tak to staci.

Vetsina "API" je asynchronni, neco tam cpes jednim koncem a o nahodnou casovou prodlevu ti pada vysledek druhym koncem. Pak zalezi zda dane jadro umi zpracovat vicero veci naraz, nebo ne. Vetsinou ano.

Se podivej do dokumentace prece, ma to jen par tisic stran k tomu co potrebujes :-)

Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: androfx 14. 10. 2021, 19:22:11
tipnu si, že přes GPU to budeš mít rychleji hotový a mnohem levnější
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: alex6bbc 14. 10. 2021, 19:26:15
tipnu si, že přes GPU to budeš mít rychleji hotový a mnohem levnější

a mozna podle problemu to muze jit i na CPU.
mohl by nam popsat o co jde.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: janevim11165123 14. 10. 2021, 19:30:17
nemusíš programovat ani řadič rozhraní DDR a už vůbec ne řadič rozhraní PCIe. Dokonce i kdyby jsis je fakt chtěl (a věř mi, že fakt nechtěl. DDR možná, ale PCIe fakt ne) napsat ručně, tak smůla (vysvětlím v třetím odstavci). Obecně se to dělá, že si ve vývojovém nástroji přidáš blok, který je obvykle poklikáním konfigurovatelný a v konfigurátoru si naklikáš jaké to má mít vlastnosti. Blok pak bude mít nějaké "vodiče" na které přivedeš adresy, data, transakce, .... Většinou tak implementuješ jen něco, co do těch bloků bude cpát data, což je mnohem jednodušší než implementovat ten samotný blok.

Ten konfigurovatlený blok, který si tam vložíš je speciální blok (podobně jako DSP bloky, malé RAMky, atd) ve skutečnosti není syntetizován na samotném hradlovém poli. Důvod je ten, že ta sběrnice je extrémně rychlá a není rozumně reálné implementovat obsluhu tak rychlých signálů v tak komplexní struktuře hradel. Místo toho je to tam natvrdo zadrátované v mnohem přímočarejší, ale neupravitelné struktuře.

Jen pro představu hodiny uvnitř té hradlové struktury dokáží běžet na frekvencích okolo 500 MHz. Není tedy možné zpracovat rychlejší signál než 500 MHz. Signály, které ale používají zmíněné sběrnice běžně používají hodiny na frekvencích daleko přes GHz (např. DDR běžně 1600 MHz, dnes klidně i víc). Obecně si to předdstav tak, že je to řešeno způsobem, že do toho speciálního bloku popsaného v prnvím odstavic posíláš nebo čteš z něj paralelně třeba 32 bitů na frekvenci 50 MHz (což je na většine FPGA v pohodě zvládnutelné s prstem v nose), ale na druhé straně na vodíčích ven z FPGA ten speciální natvrdo zadrátovaný blok generuje nebo čte jeden (nejčastěji diferenciální) signál na grekvenci 1600 MHz serializovaný z těch dat co jsi tam pralelně poslal.

Ten blok je ve skutečnosti složitějíš a řeší i nějaké věci ohledně protokolu, který se tam používá. K tomu tě většinou navede to co ten konfigurátor toho bloku umožňuje naklikat.

Ok a teď abych zodpověděl tvůj dotaz: Najdi si na stránkách výrobce FPGA, které používáš uživatelskou příkazu (u Xilinx se to jmenuje User Guide - UG, u jiných výrobcí většinou Application Node - AN) a měl bys najít příručky věnované PCIe i příručku věnovanou DDR. Tyto příáručky nebývají step-by-step tutorial, ani tam nebývá detailní popis toho protokolu, ale vše podstatné k základnímu zprovoznění by tam mělo být.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 14. 10. 2021, 19:52:46

Dík! Mrknu na to.
Přiznám se, že výrobce je podružný, zatím jsem ho neřešil, spíš abych prototyp pořídil za rozumné peníze.
Pak, jestli bude samotná karta stát 100 nebo 200, tisíc mi je jedno. Když to bude fungovat, tak se to zaplatí.

přes GPU to budeš mít rychleji hotový
GPU je specifická a méně vyhovuje tomu, co dělám (netvrdím že jsem nejlepší programátor na světě).
S GPU vezmeš naráz paralelně milion "lidí" a všechny ostříháš.
Mně víc vyhovuje serializovaný postup, kdy vezmeš milion lidí, kdy první ti chytá za kliku, druhý otvírá dveře, třetí si sedá, poslední odchází, předposlední děkuje, ten před ním právě zaplatil, ten předním právě platí...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: mhi 14. 10. 2021, 20:25:32
Ja jsem takovy lepic lowcost reseni, neznam danou ulohu, atd. Nebylo by resenim nejake levnejsi FPGA a pres nejaky cypress to krmit daty z USBcka ? A tech zarizeni mit diky nizsi cene vic, aby to dalo pozadovanou rychlost zpracovani.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 14. 10. 2021, 20:37:35
lowcost reseni

To by asi řešení bylo, líp by to i škálovalo.
Koukal jsem, že obyčejnější FPGA mají asi 100k prvků (hodně hrubě), bohužel netuším, jestli by se to vešlo nebo ne.
Nebo kolik mají ty lowcost řešení prvků, jestli to lowcost nemá taky třeba jen 1/10 frekvenci a podobně.

Popravdě, postavil jsem se k tomu hodně naivně, vím, jak velký blok dat chci zpracovat a protože zpracovat ho naráz je výhodnější, mám představu dostat ho do paměti, zpracovat ho v ram a výstup hodit do ram. Něco jako: Zatímco blok A leze do karty, blok B se zpracovává a blok C si stahuju z karty....
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: mhi 15. 10. 2021, 01:10:42
Chtelo by to asi vedet vic informaci o tom co vlastne chcete delat. Kdybych to delal ja ... a ze nevim "co bych delal", moji snahou by bylo eliminovat ty drahe prvky, treba tim, ze bych se snazil vyhnout pouziti nejake DDR okolo, a nejak to jen prohnal predkousane tim FPGAckem. Vsechno je pak o dost jednodussi. A idealne treba tak, ze bych to napojil primo na nejakou ARM desticku, cimz bych se vyhnul problemum s PCIe nebo pomalosti USB. MediaTek ma SoC s periferiemi, ktere jsou takovy svycarsky nozik na komunikaci (slouzi to treba na vystup LCD/HDMI/... ale presvedcite to k temer cemukoliv).

Alternativne nejake vetsi FPGA s hard ARM core, nicmene s tim mam nulove zkusenosti, nikdy jsem s tim nedelal. https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: mudrlant 15. 10. 2021, 07:04:59
Zkusím popsat svoje zkušenosti, byť malé.
Hrál jsem si s FPGA cca před deseti lety, takže situace se mohla značně zlepšit, přesto je asi dobré si dát pozor na to, co zmíním.

- vývojová prostředí pro FPGA byla mnohdy zadarmo, ale s omezenou funkčností, např. jen pro učitá, spíše malá FPGA.
- pro přístup k DRAM nebo PCI byly dostupné generované obvody, jak řekl předřečník, ale mám dojem, že to bylo placené, čili byste stejně asi potřeboval plné IDE, ne žádnou free verzi.

O vlastní implementeci přístupu k periferiím ani neuvažujte, jednak to nejde kvůli pomalosti, jednak je to absolutně pekelná práce, začátečníkem prakticky nezvládnutelná.
- profesionální FPGA pro výkon s taktem >500 Mhz budou drahá, až bych si místo nich radši koupil desku s několika výkonými x86 a programoval multicore ...

No a dále k algoritmu vašeho úkolu. Bylo by dobré si přečíst něco o tom, jak jsou FPGA implementovaná. Brzy zjistíte, že jakýkoli obvod sice na FPGA naimplementujete, ale některé operace využíjí extrémně mnoho zdrojů FPGA, takže se vám to custom CPU ani nevleze.
Levné operace jsou sčítání, odčítání, různé přesuny a výměny bitů. Násobení je už horší, ale jsou tam dedikované násobičky typu 16x16bitů (nebo o něco více). Pokud násobíte větší integery, kvadraticky vám poroste počet zkonzumovaných násobiček. A těch tam tolik zase není.
Dělení je samozřejmě nutné se obloukem vyhýbat, na to dedikovaný obvod není a sežere vám to kus FPGA.

Nepověděl jste nám, zda pracujete s celočíselnými daty nebo floating pointem.
Pokud chcete pracovat s floaty, ani o FPGA nepřemýšlejte. Jen implementace jednoduchého FPU vám sežere hrůznou část FPGA (tedy zejména malé FPGA).
Proto FPGA mívají dnes často dedikované třeba ARM jádro na běžnou logiku - implemnetovat i RISC CPU třeba sežere i celou FPGA. Vím, že nechcete implementovat celé vlastní CPU, ale píšu to jen pro ilustraci, jak rychle můžete vyplýtvat zdroje FPGA. A kromě jednoduchých operací vám budou docházet integrované bloky SRAM (např. na registry), přičemž k jednotlivým blokům interní SRAM je omezený počet paralelních přístupů (třeba dva).

Dále k vašemu algoritmu. Říkáte, že máte radši sériovou implementaci algoritmu, ale pak spíše naznačujete, že byste chtěl paralelní frontu (pipeline). Dobře si rozmyslete, zda dokážete algoritmus vyjádřit jako pipeline s mnoha kroky.
Čím více kroků, tím lépe - využijete paralelních schopností FPGA.
Pokud pipeline nebude dost hluboká, budete to mít pomalé, protože FPGA je na čistě sériové operace pomalá (vyplývající z frekcence v řádu stovek MHZ, a toho, že na jeden takt frekvence toho mnoho nespočítáte).

Pokud tedy nemáte algoritmus, který počítá jen v integerech a fikaně nakládá s bity a je dobře paralelizovatelný do hlubokých pipeline, myslím, že si nepolepšíte a budete nepříjemně překvapen.
Na obecnou akcelaraci výpočtů bych skutečně radši nakoupil GPU nebo slušné desktopvé/serverové CPU.
FPGA dokáže urychlit jen určité, správně napsané algoritmy. Není vhodné to použít jako generalizovaný akcelerátor algoritmu, který jste si někde nachystal v C ...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: František Ryšánek 15. 10. 2021, 11:12:01
Alternativne nejake vetsi FPGA s hard ARM core, nicmene s tim mam nulove zkusenosti, nikdy jsem s tim nedelal. https://www.xilinx.com/products/silicon-devices/soc/zynq-7000.html

Toto není můj obor - jenom z doslechu od jednoho dodavatele vím, že používají Altera Arria. A že na Zynq před lety taky koukali, ale tehdy byl dost rozdíl v komfortu a dotaženosti vývojových nástrojů (softwaru), Arria vyhrála na celé čáře...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: František Ryšánek 15. 10. 2021, 11:26:02
...je potřeba, aby FPGA ten 32MB "balík" vidělo naráz? Jako že data uvnitř toho bloku spolu souvisí a jsou potřeba ke zpracování? Protože pro efektivní PCI-e DMA přenos by stačil mnohem menší blok, střelím od boku třeba 1 kB...

BTW OT: ten expanzní konektor na kartách, to je FMC bus? Jako tady (https://ohwr.org/project/spec/uploads/3b5326fd6ed2dc55b2e26e8c25f826fd/spec_v4_top.jpg)? Jasně, pro Vaše potřeby irelevantní...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 15. 10. 2021, 11:41:32
...je potřeba, aby FPGA ten 32MB "balík" vidělo naráz? Jako že data uvnitř toho bloku spolu souvisí a jsou potřeba ke zpracování? Protože pro efektivní PCI-e DMA přenos by stačil mnohem menší blok, střelím od boku třeba 1 kB...

BTW OT: ten expanzní konektor na kartách, to je FMC bus? Jako tady (https://ohwr.org/project/spec/uploads/3b5326fd6ed2dc55b2e26e8c25f826fd/spec_v4_top.jpg)? Jasně, pro Vaše potřeby irelevantní...

PCIe je efektivni uz pri naplneni Max Payload - tj. 128B pri desktop, 256B pri server zeleze (nyni to ma amd i v desktopu).

Ale z pohledu OS a aplikace, je optimalni velikost bloku "nekonecna" (tedy prakticky omnoho vyssi nez hw optimum) - protoze je nutno provest preklad na fyzicke adresy, zajistit ze se data neodswapuji a jine pausalni ukony v OS, per blok. Delat to po vlastni ose prinese jiste vykon, ale pro laiky je snazsi pouzit neco klikaciho a hotoveho, i za ztratu deset - dvacet procent vykonu.

Jo, vypada to jako FMC, ale neni jiste ktera varianta (LPC,HPC) a kolik a jak rychlych seriovych linek to ma.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: radioing 15. 10. 2021, 12:47:49
Potřebuji do FPGA dostat blok o velikosti ~32MB, zpracovat ho, dostat ho zpátky do RAM.
Ideální tak zpracovat 20 až 30 takových bloků za vteřinu.
...

Jakožto člověk, který měl to štěstí, že se FPGA už nějaký ten rok zabývá (a třeba teď mně jeden z v diskuzi výše zmíněných SoC ARM + PL zrovna leží na stole), vám mohu dát pouze jednu radu:
Dokud svůj algoritmus, který chcete do FPGA dostat, do poslední mrtě neodkryjete a neprodiskutujete s někým, kdo FPGA skutečně rozumí a dělá s nimi, tak jsou jakékoliv úvahy o PCIe kartách, velikostech FPGA, velikostech paměti, požadovaných přenosových rychlostech atp. bezpředmětné. Ono se totiž může stát (jak už tu někdo psal), že algoritmus bude pro implementaci nevhodný (a to třeba ani ne z důvodu, že by se tam nedal nacpat, ale rychlost, cena,...). Jako jo, v těch nejlepších FPGA můžete mít třeba desítky floating-pointových jednotek s jednoúčelovým mikrořadičem vedle sebe a I/O konektivitu v řádu desítek Gb/s, ale ty náklady (jak na hw, tak hlavně na vývoj).
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 15. 10. 2021, 18:53:01
Předně, FPGA mě láká už dlouho, ale VHDL je moc lowlevel. Oproti tomu jazyky jako Scala/SystemVerilog a podobně jsou o dost snesitelnější. To už bych zvládl. Cena je až na posledním místě, do 200k Kč jsem v poho, za to už je dost zajímavého HW.

Důležité je:
 - Easy of use, nechci roky řešit haiku
- Rychlost, proto to dělám, problém pro to vhodný je
- Ne(ztraceny cas), aby vysledek nebyl stejny, jako kdybych paril hry
- Idealne, abych ziskal skilly, ktere mi umozni si rict Nemcum o mnohem tucnejsi vyplatu

Kazdopadne vsem diky za nazory.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 15. 10. 2021, 22:45:23
Toz nevim, zda absolutni ignorace architektury bude fungovat i v tomto pripade, kdyz vidim programatory co netusi jak pocitac funguje tak to je velky spatny :)
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: androfx 16. 10. 2021, 08:05:36
Důležité je:
 - Easy of use, nechci roky řešit haiku
- Rychlost, proto to dělám, problém pro to vhodný je
- Ne(ztraceny cas), aby vysledek nebyl stejny, jako kdybych paril hry
- Idealne, abych ziskal skilly, ktere mi umozni si rict Nemcum o mnohem tucnejsi vyplatu

Jsi měl říci hned, že ti jde o naučení se FPGA... zaštiťovat se testovacím projektem nebylo nutno...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 16. 10. 2021, 12:14:40

Jsi měl říci hned, že ti jde o naučení se FPGA...
Skutečný důvod je realizace toho projektu.
Pokud bych se musel XY let učit to, jak poslat data po PCIe nebo uložit do ram, tak to pro mě postrádá smysl. Protože cíl je jasný, realizovat ten projekt, který mi zaplatí ten čas, jsem dost ne prachy... kdybych si chtěl hrát pustím si Skyrim.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: mhi 16. 10. 2021, 19:39:33
Předně, FPGA mě láká už dlouho, ale VHDL je moc lowlevel. Oproti tomu jazyky jako Scala/SystemVerilog

Na zacatku pisete Verilog, ted SystemVerilog. Nicmene, VHDL vs Verilog - oba popisuji to same, je to myslim dost podobne srovnani C vs Pascal nekdy v 90. letech (tehdy byl Turbo Pascal moda na skolach). Alespon tak to vidim ja.

My 2 cents:

Podle me to je uplne jedno v cem ty FPGAcka programujete, dabel je nekde uplne jinde, nezavisly na popisnem jazyku.

Koupil bych si ten nejlevnejsi kit s nejakym pidi FPGA co nekde najdete a vyzkousel do nej neco naprogramovat. Nez "vyrostete" do nejakeho vetsiho FPGA, mate moznost se naucit spoustu veci, a zjistit, jak se to doopravdy ma.

Nebo se na opencores mrknete jak veci navrhuji jini lide, pro predstavu o slozitosti a na jake problemy se narazi to staci.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: CFM 16. 10. 2021, 21:58:07
Xilinx má například dostupné IP pro PCIe/AXI bridge včetně příkladů pro linux, které lze použít jako základ a na nich rychle polepit (většinou) funkční řešení. Nejsem si jist současnou licenční politikou, ale bývaly zadarmo malé a střední FPGA. HLS v neplacených verzích není, takže jen VHDL/Verilog.
Jinak není nic jednoduššího, než si patřičnou verzi stánout a zkusit si prohlédnout a přeložit dodávané příklady. Co zde nepadlo a může nemile překvapit je jak dlouho generování bitstreamu trvá (záleží na velikosti FPGA, jeho zaplnění a vlastním designu - potížích se splěním časování). Řádově pět minut až mnoho hodin. Bohužel tyto časy se platí po každé byť minimální změně, takže metoda pokus/omyl je značně neefektivní. Podpora/výhoda multicore se u překladače blíží nule ...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 16. 10. 2021, 22:05:11
Xilinx má například dostupné IP pro PCIe/AXI bridge včetně příkladů pro linux, které lze použít jako základ a na nich rychle polepit (většinou) funkční řešení. Nejsem si jist současnou licenční politikou, ale bývaly zadarmo malé a střední FPGA. HLS v neplacených verzích není, takže jen VHDL/Verilog.

Veskere relevantni jadra (pcie,axi,dma) jsou zdarma. Omezeni je jen na strane "prekladace", ze free verze nepreklada pro velka pole, ale jen pro mensi hracky. Pak existuje jeste cesta pouziti devkitu ke kteremu prijde device-locked licence pro rekneme stredne velke FPGA, ale clovek je omezen jen na ten model cipu.

Celkove to xilinxovo dma nedosahuje optimalniho vytizeni zbernice, takze my jsme si napsali vlastni jadro nad tim low-level hardblokem. A ano - je k mani pro zajemce (komercne). Kdyz uz clovek jede do FPGA, tak chce z toho vyzdimat i posledni kapku vykonu.

Samozrejme, kdyz mate moc penez na rozhazovani a malo casu.. HLS je taky moznost.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: František Ryšánek 16. 10. 2021, 22:12:05
Že se k tomu DMA ještě vracím: rychlý Google mi vrátil úhlednou produktovou stránku (https://www.xilinx.com/products/intellectual-property/pcie-dma.html) u Xilinxu s odpovídajícím IP modulem (obsahuje dokonce video intro - vypadá to báječně, nevím nakolik je to pornografie) a pak o něco méně boží appnote od Altery (https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/an/an708.pdf). Ty hotové bloky jsou boží, skoro mám chuť si začít hrát :-)

Osobně jsem s DMA nikdy nic netvořil, protože veškerý hardware, který DMA používá, jsem dostal s hotovými drivery, a když jsem tu a tam patlal nějaký driver pro IO karty, tak ten hardware DMA neuměl. A moje HW bastlení na koleně je o tři ligy níž.

Pokud správně chápu, periferie může sypat data skrz DMA do libovolně velkého okna v hostitelově RAM, aniž by dotyčná periferie potřebovala mít stejně velký kus RAMky onboard, ze kterého to servíruje. Vůbec ne - periferie může mít interní storage klidně jedno slovo (32b nebo 64b) a prostě do toho DMA sypat vzorky jak přijdou, pokud chodí dost rychle. Trochu to přeháním, ale pointa je, že při DMA periferie nemusí mít na své straně buffer stejně velký, jako je alokované okno v hostitelově RAM (tam je obvykle prostoru relativně dost). A samozřejmě ten přenos je nadrobený na transakce o velikosti "max payload", protože při ultra-dlouhých přenosech by se nedostaly k lizu interrupty (MSI) apod. Osobně bych intuitivně mířil minimální velikost DMA přenosu cca na cache line size (granularita a zarovnání)...  Trochu jsem zagooglil kolem DMA a souvisejícího memory managementu v Linuxu a našel jsem hezké čtení, dvě (https://www.oreilly.com/library/view/linux-device-drivers/0596000081/ch13s04.html) kapitoly (https://www.oreilly.com/library/view/linux-device-drivers/0596005903/ch15.html) z knížky od Jona Corbeta. Dá se říct, že těžkou práci na straně hostitele udělá Linux za Vás :-)

No a ten IP modul od Xilinxu je k dispozici včetně example driveru pro Linux. Zkompilujete zdroják, loadnete driver, example utilita běží = DMA funguje. Pokud Vám to čtení od J.Corbeta připadá složité, teoreticky ho nepotřebujete :-)
Ony ty IP moduly umí zřejmě i SG-DMA... žůžo. Aspoň na papíře.

BTW, co je zač AXI ? Nějaká lokální sběrnice / privátní adresní prostor, typický pro Xilinx FPGA?
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 16. 10. 2021, 22:22:56
BTW, co je zač AXI ? Nějaká lokální sběrnice / privátní adresní prostor, typický pro Xilinx FPGA?

AXI je point-to-point spojeni, neco jako "ISA" zbernice z PC.. v PIO rezimu. Adresa, Operace, data, data, data, data.

Je to typicky pro ARM:
https://developer.arm.com/documentation/102202/0200/What-is-AMBA--and-why-use-it-
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: CFM 16. 10. 2021, 22:36:13
AXI je sběrnice/komunikace používaná (vyvinutá?) ARMem. Základní myšlenka je master/slave (snad se to ještě může říkat :D) komunikace. Paralelní, adresa, data a řídicí signály, které implementují handshake pro potvrzení transakce. Tím se řeší problémy s řízením toku (jak která strana je schopna přijímat/dodávat data) a přechody mezi časovými doménami. Dále tam jsou různé vychytávky, které se nemusí využívat a vlastně je ani neznám (odlehčená verze AXI lite). Další zajímavá věc je AXI stream, což je něco jako FIFO (žádné adresy, jen mám data/chci data).

Každopádně mě také příjemně překvapilo, jak rychle lze "slepit" něco funkčního s minimem předchozích znalostí. Samozřejmě optimálnost řešení je diskutabilní. Používám spíš Zynq SoC, kde je podobnou filozofií naroubované FPGA na ARMová jádra. Velmi jednoduše se v FPGA vytvoří periferie (SPI, I2C, UART, DMA, FIFO ...) namapované do adresního prostoru CPU. Co dost pokulhává je dokumentace dodávaného kódu pro obsluhu těchto rozhraní na straně CPU. Občas tam jsou chyby. Nicméně kód je zadarmo, takže ...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: CFM 16. 10. 2021, 23:03:38
Mimochodem máte s HLS nějaké hlubší zkušenosti z pohledu srovnání s vlastním "optimálním" řešením? Myslím tím spíše aplikace jako zpracování signálu.

Já to použil na fixpoint aritmetiku a filtry nad signálem z A/D převodníků. Generováno z Matlabu, když už na to ve firmě existuje licence. Nejde o produkt, ale ověření konceptu, takže na optimalizace se nehraje. Řekl bych, že to ušetří spoustu práce a navíc se to dá pěkně simulovat. Moc si nedokáži představit, jak moc (ne)optimální takové řešení je z pohledu využití zdrojů či časování a nemám čas to zkoušet ... příliš nevěřím, že bych to udělal o mnoho lépe. Cenu těchto nástrojů teď nechme stranou.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: František Ryšánek 17. 10. 2021, 06:54:19
AXI je point-to-point spojeni, neco jako "ISA" zbernice z PC.. v PIO rezimu. Adresa, Operace, data, data, data, data.

Je to typicky pro ARM:
https://developer.arm.com/documentation/102202/0200/What-is-AMBA--and-why-use-it-

AXI je sběrnice/komunikace používaná (vyvinutá?) ARMem...

Díky za vysvětlivku. Já jsem si říkal, že už jsem to někde zahlédl :-) Čili je to soudělné s "front side busem" ARMových jader a v této souvislosti populární. A pokud správně chápu, výrobci FPGA nás poňoukají, že uvnitř FPGA lze snadno vytvořit "netransparentní slave bridge" z upstream PCI-e na tuto lokální sběrnici, a dál kolem ní uvnitř FPGA ledacos zařídit...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 17. 10. 2021, 11:28:11
Díky za vysvětlivku. Já jsem si říkal, že už jsem to někde zahlédl :-) Čili je to soudělné s "front side busem" ARMových jader a v této souvislosti populární. A pokud správně chápu, výrobci FPGA nás poňoukají, že uvnitř FPGA lze snadno vytvořit "netransparentní slave bridge" z upstream PCI-e na tuto lokální sběrnici, a dál kolem ní uvnitř FPGA ledacos zařídit...

On by to muselo byt NTB, protoze v ruznych kompech mas prece jinam namapovany BAR (mezi rebooty v ramci jednoho stroje se to tedy nastesti nemeni). Ale typicky pro PCIe se to nepouziva v NTB modu - spis exkluzivnim/privatnim. PCIe-device port je master (skrze pcie-axi bridge) a zbytek logiky je slave. Jiny master tam primo nebyva, resp. zbytek zapojeni je zcela jinde (napr. na dalsim portu pametoveho radice - ktery pak prolina pametove operace z dvou masteru).

Na FPGA se to AXI resi "soft" metodou, takze zere cenne zdroje - proto ta ma analogie k java/skriptovanym vecem - mate to sice rychle slepeny, ale neni to optimalni/nativni pro to, co ten hw by umel.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: František Ryšánek 17. 10. 2021, 13:45:40
Díky za vysvětlivku. Já jsem si říkal, že už jsem to někde zahlédl :-) Čili je to soudělné s "front side busem" ARMových jader a v této souvislosti populární. A pokud správně chápu, výrobci FPGA nás poňoukají, že uvnitř FPGA lze snadno vytvořit "netransparentní slave bridge" z upstream PCI-e na tuto lokální sběrnici, a dál kolem ní uvnitř FPGA ledacos zařídit...

On by to muselo byt NTB, protoze v ruznych kompech mas prece jinam namapovany BAR (mezi rebooty v ramci jednoho stroje se to tedy nastesti nemeni). Ale typicky pro PCIe se to nepouziva v NTB modu - spis exkluzivnim/privatnim. PCIe-device port je master (skrze pcie-axi bridge) a zbytek logiky je slave. Jiny master tam primo nebyva, resp. zbytek zapojeni je zcela jinde (napr. na dalsim portu pametoveho radice - ktery pak prolina pametove operace z dvou masteru).

Na FPGA se to AXI resi "soft" metodou, takze zere cenne zdroje - proto ta ma analogie k java/skriptovanym vecem - mate to sice rychle slepeny, ale neni to optimalni/nativni pro to, co ten hw by umel.

Tyjo, znovu děkuji za poučnou vysvětlivku :-) opět vidíte o dost dál než já.
Já jsem termit "netransparentní slave bridge" plácnul spíš volně v tom smyslu, co dělaly blahé paměti jednoúčelové čipy jako PLX PCI9052 a příbuzní - s tím že za bridgem je "jakási lokální sběrnice". A aniž bych o tom nějak extra dumal, moje představa byla, že v tom FPGA může být natvrdo zapečené ARM jádro (nebo dvě), jak jste tady už zmiňovali, která na tu AXI taky vidí. Takže chápu, že pokud ARM je master a ten PCI-e bridge bazmek je taky master, tak jsou najednou na lokální sběrnici mastery dva, což je pikantní, pokud je AXI standardně single-master věc...
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: radioing 17. 10. 2021, 13:49:34
Mimochodem máte s HLS nějaké hlubší zkušenosti z pohledu srovnání s vlastním "optimálním" řešením? Myslím tím spíše aplikace jako zpracování signálu.

Ano, ušetří to spoustu práce. Běžně to používáme na processing, který by se ve VHDL psal neakceptovatelně dlouho. Hraje se na to, že vybrané FPGA (třeba Zynq, Ultrascale,...) je už při designu hw vybráno tak velké, že se to tam v pohodě vejde a max clk je stále nad požadavkem (špatné to začne být, když si zákazník začne následně přidávat další náročnější funkcionality).
Psaní v HLS bych pocitově asi přirovnal k tomu, jak se v C snažíte psát optimálně pro 8-bit MCU. Tj. znáte architekturu MCU (registry, ISA, způsoby adresace) a zápisem algoritmu jdete architektuře naproti. Někdy to moc nejde, ale slušný překladač si s tím docela poradí a optimalizuje. Na čem to dojíždí v FPGA, jsou především dvě věci - složitější matematické operace (tady se překladači blbě vysvětluje, že stačí pouze ta a ta přesnost a třeba jen v nějakém oboru hodnot) a opakování bloků při paralelizaci apod. (tu mírnou neefektivitu, co odpustíte jednomu bloku v HLS, už snášíte se skřípěním zubů, když se ten blok použije 128krát).
Příklad z praxe - jistá nechutná ale primitivní matematická funkce. HLS vedlo k použití vyššího počtu stovek CLB + nějaká ta BRAM s variabilní latecí vstup/výstup v rozsahu do asi 100 Tclk. Při ručním návrhu v VHDL/RTL s přihlédnutím k tomu, že následné DSP core v dalším zpracování jsou stejně 18bitové a nám stačí 16bitová přesnost, se blok redukoval na necelých 40 CLB s fixní latencí 19 Tclk.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: CFM 17. 10. 2021, 18:57:31
Příklad z praxe - jistá nechutná ale primitivní matematická funkce.
Dík za info. Je možné ještě dodat, jaká matematická funkce to byla?
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 17. 10. 2021, 20:43:58
Takže chápu, že pokud ARM je master a ten PCI-e bridge bazmek je taky master, tak jsou najednou na lokální sběrnici mastery dva, což je pikantní, pokud je AXI standardně single-master věc...

Ono to je point to point, takze tri veci tam nespojis - takze premyslet o multimaster postrada smysl. Samozrejme pak je tam "rozbocovac" (axi interconnect), kde si pak naklikas adresni mapu pro vicero slavu, abys vytvoril neco jako stromovou strukturu.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: radioing 17. 10. 2021, 20:48:51
Příklad z praxe - jistá nechutná ale primitivní matematická funkce.
Dík za info. Je možné ještě dodat, jaká matematická funkce to byla?
Ale jo, atan2(y, x) v převodu z kart. do polárních souřadnic někde uprostřed výpočtů.
Výsledná "ruční" implementace šla samozřejmě přes CORDIC. Původní HLS implementace podle zběžné analýzy CORDIC také nějak používala, ale byla obklopena spoustou smetí, na kterém si optimalizátor vylámal zuby a skončilo to, jak jsem psal. Došli jsme k závěru, že rozsah implementace byl způsoben univerzalitou a předpokladem argumentů větší šířky, kdy v implementaci stále zůstávaly takové konstrukty, jako if (y == 0) then result = 0; if (y/x) << 1 then result = y/x *(1 - LUT(..)) atp.
Že právě toto bude kandidát na blok ve VHDL bylo jasné od počátku, ale také nás zajímalo, jak se s tím překlad popere.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 17. 10. 2021, 20:51:25
Že právě toto bude kandidát na blok ve VHDL bylo jasné od počátku, ale také nás zajímalo, jak se s tím překlad popere.

A ono to HLS umi includovat funkce z VHDL nejak jednoduse?
(treba tomu rict jakou to bude mit latenci a jak casto tam muze vkladat vstupni data, nebo to ma oboustranny handshake?)
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: CFM 17. 10. 2021, 21:21:25
Výsledná "ruční" implementace šla samozřejmě přes CORDIC.
CORDIC se dá například v Simulinku plácnout jako low level Xilinx blok. Implementaci vlastní "optimalizované" HLS funkce pomocí tohoto bloku jste nezkoušeli, nebo to dopadlo také mizerně?

A ono to HLS umi includovat funkce z VHDL nejak jednoduse?
(treba tomu rict jakou to bude mit latenci a jak casto tam muze vkladat vstupni data, nebo to ma oboustranny handshake?)
Aspoň u Xilinxu to funguje to obráceně. Základní projekt (top level, mapování na I/O) je v jejich vývojovém prostředí (Vivado), kde to může být realizováno jako VHDL/Verilog případně jejich block diagram (což jsou klikací bloky a šlaušky mezi nimi). Do tohoto projektu se pak vloží bloky vytvořené pomocí HLS. V mém případě exportované z Matlabu, což zajišťuje Xilinxu plugin, který se nainstaluje do Simulinku při instalaci Vivada s HLS rozšířením. Samozřejmě obvyklé háčky jsou kompatibility verzí Vivado/Matlab.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 17. 10. 2021, 21:22:25

Scala pro FPGA se překládá do Verilogu, vznikne objekt, který je možný přidat do projektu (Vivada).
Samo netuším, jak to je v HLS.

Už to testuji, zatím zkouším implementovat jednoduchý CPU v simulátoru.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: radioing 17. 10. 2021, 23:10:03
CORDIC se dá například v Simulinku plácnout jako low level Xilinx blok. Implementaci vlastní "optimalizované" HLS funkce pomocí tohoto bloku jste nezkoušeli, nebo to dopadlo také mizerně?
Nejprve se nasadil wrapnutý IP core, a jelikož zbylo trochu času, tak ve finále design from scratch.
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: PanVP 17. 10. 2021, 23:54:44
Jakou desku na hraní od Xilixu?
Na hraní stačí asi cokoliv s Kintex-7 hm?
Název: Re:FPGA s Verilog na PCIe kartě
Přispěvatel: RDa 18. 10. 2021, 00:19:21
Jakou desku na hraní od Xilixu?
Na hraní stačí asi cokoliv s Kintex-7 hm?

Na hrani s PCIe a pameti ti staci nejaky Artix7, napr. AC701 - https://www.xilinx.com/products/boards-and-kits/ek-a7-ac701-g.html#hardware - tohle je podporovano ve Free verzi Vivada, muzes si pak hw sehnat bokem. Vetsina ostatnich kitu nema PCIe, jenom pamet a cim levnejsi tim marnejsi.

Ten Kintex (napr. KC705) a vejs (ZC706, VC707) bude device locked licence, a musis to poridit z oficialni distribuce abys dostal klic k softu, second hand nabidky desek neobsahuji tuto licenci. Tato licence te pak privaze k verzi sw ktery vysel v momente aktivace.

Pokud ti nevadi chybejici PCIe tak se pak jeste nabizi hromada kitu pro zacatecniky se Zynq-em (napr. Zybo, Pynq, ZC702), kde je to pak kombinace  ARM+eth+ram+fpga+linux. Na vyvoj akceleratoru a hratky s DMA ci AXI se to hodi.

Pro zacatek doporucuji zapadni poctive desky, od vyrobce nebo distributora. Az v tom budes dobrej, tak pak muzes risknout cinsky smejdy - at neresis zbytecne nesouvisejici problemy navic pri uceni.

Klidne postni linky na hw a neco ti vybereme - zda se ze se tady seslo par odborniku co v tom taky jedou :)