Vėl prisiminiau savo žaidimus su FPGA čipu. Prisiverčiau pasižaisti su virtualiu (softcore) procesorium. Juolab, kad Altera atidarė savo licenziją ir NiosIIe procesorių galima naudoti savo kūriniams nemokamai. NiosIIe procesorius tai 32 gyvis su galimybe prikomponuoti matematinį koprocesorių (FPU).
Procesorių nutariau sukišti į savo gamybos plokštę su minimaliu Cyclone II čipu (EP2C5T144). Kas įdomiausia, softas su programiškai padaryta slankiojo kablelio matematika netilpo į čipo vidinę atmintį, tačiau tilp FPU ir softas su koprocesoriaus panaudojimu :).
Kad palyginti procesoriaus greitį, panaudojau tą patį softą (C kalboje) tiek ant Atmega 16, tiek ir su NiosII procesorium. Štai jumi ir rezultatas:
Pagrindiniai parametrai:
- ATMEGA16, veikianti 12MHz dažniu. Softas kompiliuotas su GNU C. Interfeisas su FPGA čipu per 4 duomenų bitus ir keliais kontroliniais laideliais. FPGA vidinis skaitliukas resetinamas su Atmega, vėliau paveiksliukas pumpuojamas po 4 bitus. (4 bitai, strobas, 4 bitai, strobas, FPGA padidina adresą, ir taip ratu).
- NiosIIe, ekonominis, nemokamos licenzijos procesorius. Softas kogero irgi GNU C kompiliuojamas. Duomenų perdavimas kiek kitoks, nes viduje FPGA sujungti žymiai lengviau: 8 bitai duomenim, kelioliką bitų adresui. Kaip jau ninėjau- FPU, hardware floating point (sudėtis, atimtis ir daugyba). Procesorius veikia nuo 50MHz taktinio dažnio. Didesnio dažnio negalėjau panaudoti, nes FPGA neturi laisvo PLLo (PLLas naudojamas LVDS interfeisui).
- NiosIIf, tas pats kaip ir NiosIIe, tik dabar “komercinė” versija, vadinama dar “fast”. Matosi, kad kiek greitesnė. Tačiau pagrindinis greitumas pasijaustu, jei softas važiuotu iš išorinės SDRAM ar DDR atminties.
Tikėjausi žymiai didesnio greičio skirtumo. Gi Mega tik 8 bitų, neturi “geležinio” slankiojo kablelio ir važiuoja nuo 12MHz (todėl, kad toks kvarcas prilituotas). Tuo tarpu Niosas 32 bitų, hardwarinis floating point, groja ant 50MHz ir naudoja vidinę FPGA atmintį kuri tikrai nestabdo.
Nemanau, kad reikia publikuoti softą (tiek C, tiek Verilog) nes hardwarė labai jau specifinė ir niekas jos nepasidarys. Jei labai labai susidominot, rašytik laiškelį, pamačysim.
Manau ner ko noret su FPU…
O ko trūksta, kad vaizdas būtų perpiešiamas greičiau?
Norisi vaizdą matyti sklandžiai besikeičiantį 🙂
TomuiD: kas su FPU? Niosas su FPU, turi lėkti kaip vėjas. Tuo tarpu vos vos šliaužia.
Mariui: gal optimizuoti programą, parinkti rimtesni procesorių. Galima parašyti visą fraktalų paišymą Veriloge. Bet čia tikslas buvo palyginti procesorius. Softas tai grynas C, copy-paste iš vienos platformos į kitą.
O kodel turi lekt? As nezinau kaip Alteroj, bet Xilinx’as tai turi specialius FPGA su daugikliais skirtus darbui su DSP. Jei tavo ciklonas to neturi, tai kazin ar taip jau gerai sukasi tavo FPU.
nu koks skirtumas, ar yra hardwariniai “daugikliai” ciklone (yra jie). Pagalvok, Atmega NETURI jokių FPU, neturi 32 bitų matematikos, važiuoja ant 4 kartus mažesnio dažnio… ir nedaug jau atsilieka nuo to nioso.
Atitinkamai pagal dazni ir sukasi 🙂 Nieko nesakau, tiketina, kad NIOS letas. Neaisku dar koks kodas, bet visgi, rezultatai akivaizdus. Vertetu pabandyt LatticeMico32 🙂
Tarp kitko, kadangi yra PLL’as, gal yra noro prasukt ta pati testa ant 12MHz? 🙂 Itariu gausim ta pati, ka ant atmegos 😉
Nu kad laisvo PLLo nėra. O šiaip, rezultatas gautusi dar baisesnis (nios nenaudai). Pasirodo, NiosIIe vieną programos taktą atlieka per 6 clock taktus. Tuo tarpu AVR rodos vienas prie vieno (išskyrus branch instrukcijas). Alteros forume davė kelias rekomendaciojas, jei bus laiko ir noro, tai pabandysiu. Bet pagrindinis spartinimo kelias- arba naudoti C2hardware optimizatorių arba rankutėmis susikurti savo instrukcijas procesoriui.
Gal teko susidurti su Cortex-M0 ar Cortex-M3?
Aš planuoju išbandyti, ARM procesosrius su 50 MHz taktiniu dažniu, už tokia kaina, net juokinga ( Lemonoj LPC114 ~16 litukų).