FPGA s Verilog na PCIe kartě

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


CFM

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

RDa

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

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

RDa

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


CFM

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

PanVP

Re:FPGA s Verilog na PCIe kartě
« Odpověď #36 kdy: 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.
« Poslední změna: 17. 10. 2021, 21:24:27 od PanVP »

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

PanVP

Re:FPGA s Verilog na PCIe kartě
« Odpověď #38 kdy: 17. 10. 2021, 23:54:44 »
Jakou desku na hraní od Xilixu?
Na hraní stačí asi cokoliv s Kintex-7 hm?

RDa

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