FPGA s Verilog na PCIe kartě

Re:FPGA s Verilog na PCIe kartě
« Odpověď #15 kdy: 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).


PanVP

Re:FPGA s Verilog na PCIe kartě
« Odpověď #16 kdy: 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.

RDa

  • *****
  • 2 709
    • Zobrazit profil
    • E-mail
Re:FPGA s Verilog na PCIe kartě
« Odpověď #17 kdy: 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 :)

Re:FPGA s Verilog na PCIe kartě
« Odpověď #18 kdy: 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...

PanVP

Re:FPGA s Verilog na PCIe kartě
« Odpověď #19 kdy: 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.


mhi

  • *****
  • 500
    • Zobrazit profil
Re:FPGA s Verilog na PCIe kartě
« Odpověď #20 kdy: 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.

CFM

Re:FPGA s Verilog na PCIe kartě
« Odpověď #21 kdy: 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 ...

RDa

  • *****
  • 2 709
    • Zobrazit profil
    • E-mail
Re:FPGA s Verilog na PCIe kartě
« Odpověď #22 kdy: 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.

Re:FPGA s Verilog na PCIe kartě
« Odpověď #23 kdy: 16. 10. 2021, 22:12:05 »
Že se k tomu DMA ještě vracím: rychlý Google mi vrátil úhlednou produktovou stránku 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. 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ě kapitoly 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?

RDa

  • *****
  • 2 709
    • Zobrazit profil
    • E-mail
Re:FPGA s Verilog na PCIe kartě
« Odpověď #24 kdy: 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-

CFM

Re:FPGA s Verilog na PCIe kartě
« Odpověď #25 kdy: 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 ...

CFM

Re:FPGA s Verilog na PCIe kartě
« Odpověď #26 kdy: 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.

Re:FPGA s Verilog na PCIe kartě
« Odpověď #27 kdy: 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...

RDa

  • *****
  • 2 709
    • Zobrazit profil
    • E-mail
Re:FPGA s Verilog na PCIe kartě
« Odpověď #28 kdy: 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.

Re:FPGA s Verilog na PCIe kartě
« Odpověď #29 kdy: 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...