Ž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?