FPGA

Sokszor említettem már ezt az FPGA dolgot.

Hogy is kell elképzelni egy tipikus FPGA-t.
0. közelitesben azt szoktam mondani, hogy van egy chiped amin van sok logikai kapu ami nincs összekopcsolva, egy programozás után lesz összekapcsolva és bármilyen feledatot megvalsithatsz ami kihozható az adott kapu számbol. Kurva jó párhuzamosíthatóság.
1. közelítésben:
FPGA áll:
* IOB: IO blokkokból ezek vannak összeköttetésben a lábakkal, használható labanként 1-1.
- i/o standard választható (feszültség szintek..)
- egy i/o pin lehet kiment vagy bemenet bi-directional
- DDR mode támogattását segító flip-flopok
- késleltetés állitható
* CLB: kombinációs logikai blokk
- Több ezer van belőle , mátrix szerű elhelyezkedés
- 4 slice ből áll. ebből kető okosabb LUTokat tatalmaz kető butábat.
* Slice
Tartalmaz egy LUT Look up table -t ez megvalósíthat egy _tetszőleges_ logikai függvényt (pl. 4 bemenetű AND kaput) , (némelyik tipus 5 bementű függvényt is tud) Programozás után persze.
Az okosabbak :
Megvalósithat pl. 1x16 bites RAM (ROM) -ot
Megvalósithat egy shift regisztert 1x16bit

-FD flip-flop (S,R,D,C,CE,Q)
-multiplexerek
-egyeb, (par kapu)

* vezetékek: különböző hosszúságú vezetékek vannak vízszintesen és függőlegesen, ahol "metszik" egymást programozható,hogy hagyan kapcsolódjanak, termesztésen a fenti elemekhez is kapcsolódnak.

Specilis elemek:
*Szorzó áramkörök 18x18 ->36 bites szorzók kb. 20 db.
*Block ram , dedikált néhány Kb-os ramok dual-port, programozható, hogy hányszor hány bites legyen, 16Kx1 vagy 8Kx2 .. stb.
* DCM digital clock manager , órajelel tud mindenféle jóságot művelni szorozni, oszatani eltlni ..etc.

(Tudom sok mindent kihagytam.. :))

Munkamenet.
* Verilog,VHDL, vagy akármilyen HDL nyelven írsz egy forráskódot. Hasonlít egy kicsit pascal, Ada,C -hez, de attol még kurvára máskép kell gondolkozni.
És meg tesszük tervezési megszorításokat (pl. lábkiosztás)
(Esetleg rajzolsz valami szép áramkört.)
* Összerakunk belőle egy áramkört (Synthesize)
* Ezeket leképezük olyan formára amit map-er meg tud emészteni.
* A maper feladata, hogy FPGA elemeinek megfeleltesse a fentieket.
* Elhelyezzük az elemeket az FPGA -n és összekötjük (Place & route)
* előáll a program file
* feltöltjük
* És keresükk a hibát :)

FPGA programozását elveszti kikapcsoláskor, minden bootkor újra kell programozodnia, (mellé kell egy PROM, vagy JTAG -en keresztül)

Kód megírása után megy minden maga útján, de nagy sebességű áramköröknél kézzel való elhelyezés is szükséges lehet.

see also

Verilog Quick Ref
Verilognak (és a legtöbb HDL (Hardware leíró nyelv)-nek, csak nagyon kis része Synthesizable, vagyis ténylegesen hardware fordítható, főleg modellezési és szimulciós célokat szolgál a nyelv.
Ha már szimulációkon átmegy el lehet kezdeni átkapálni a progit Synthesizable kóddá.

Hozzászólások

Hú eszembe jutott az utolsó Digit1 előadás, amikor Spartan E3-at adták le. Biztos rohadt érdekes volt, de annyira másnapos voltam, hogy kb negyed óra után feladtam és inkább hazamentem.:D

Engem érdekelne FPGA-s dolog, valami olyan amivel olcsón tudnék egy gyakorlópanelt csinálni első körben. Ja és azok kilőve amik miatt muszáj lenne elinditani az ablakokat, hogy fejleszthessem :)

Ugyanitt érdekelne fejlesztőkörnyzet a következőkhöz, persze linux alá:
PIC 16-os sorozat ASM & C
PIC 18-as sorozat C
C-k lehetőleg kompatibilisek legyenek Microchippes C-vel
PicKit2-es programozó kezelése (USB)
ICD2 kezelése (USB)
Debug és programozás

Atmel pl. ATmega16 és társai ASM & C
JTAG-ICE kezelése (serial, /dev/tty...)
Debug és programozás

Eddig csak úgy látok kiutat ha a GRUB-ban a windózt választom.
Esetleg rá kellene mennem a virtualizációs technológiára, próbálkoztam már vele de eddig nem jött össze.... akkor is ott lesz a kérdés hogy pl. a PicKit2 USB-s csatolófelülete átmenne e a virtualizáción, lehetőleg transzparensen.

Pont fedorás vagyok, majd ha leadtam a háziaimat, és a munkáimat, akkor tervezek egy 6-ról 8-ra upgradet.
Akkor ezekszerint átmegy az USB a virtualizáción?
Milyen a programfuttatási lehetóség, halottam valami olyasmit hogy csak a program ablakja jelenik meg, nem az egész "monitor".
Az a verzió tetszene amiben fut a linuxom és csak pl. az mplab és pickit ablaka látszik nem látszik a startmenü, háttér, stb... Nem tudom hogy érthető vagyok e? Melyik ez a progi?
Eddig a fedorába (7) épített virtuális gépet próbáltam, talán QEMU alapú, de kavés sikerrel, még se XP se WIN98 nem ment fel eddig.

Hi!

A PIC feltoltese siman megy Linux alatt. En mindenkepp epitenek sajat programozot, nem szaroznek gyarival. (Nekem pl. Wisp628 van, ami soros, de tervben van az USB-s is. De van masik programozo is, amit lehet hasznalni siman Linux alatt.) ICD-vel ugy tudom, a programozas megy, a debug nem. Igazabol nem is tudom, hogy azt hogy kell hasznalni. En mindig ilyen LED allapotokkal, meg ilyesmivel jelzem a progi allapotat, eddig ki tudtam javitani minden hibat.

AVR-hez a legegyszerubb, 5 ellenallasbol allo programozo is hasznalhato Linux alatt (avrdude-dal szoktam, ha minden igaz), de ott is van profibb, ami uC-s (AVR910).

A Wisp628-hoz es az AVR910-hez van NYAK tervem is. ha esetleg erdekel, irj privatban.

C forditas: Ha nem kell a GUI, akkor ha minden igaz, akkor a CCS-nek szerintem mennie kell parancssorbol wine-nal (a forras megirasara amugy mindig az eleve megszokott texteditorodat celszeru hasznalni).

AVR-hez az AVR-GCC tokeletes, de amugy mindket platformra van SDCC is, amit mondjuk meg nem probaltam (bar ezeket se).

By(t)e
TBS::Antiemes

Van már PicKit2-esem, főként azért mert nem OLD típusokkal szórakozok, most is ethernetes PIC van itt elöttem. Azokat nem viszik még a komolyabb 3rd.p programozók sem.
Tervezem ICD2 vételét is, legfőképp programozás miatt azt is, de néha jol jött volna kiolvasni futás közben egy egy dolgot, vagy megnézni merre megy a program egy egy elágazásban (mondjuk eddig nekem is leddel volt ez).

Lehet akkor tényleg az lesz a vége hogy valami virtualizáció alatt fogom futtatni az XP-t és majd úgy érem el.
Mert elvileg, sokmonitoros rendsszerem lesz 1 géppel, több gépet viszont nem akarok.

Ugynitt én is tudok nyáktervet felajánlani Atmel JTAG-ICE-hez, most készült a házim miatt, mivel valamivel programozni is kellett a kicsikét. Annyi hogy full SMD, esetleg panel is megcsinálom, ha valaki nem tudna fotózni, stb... Beszerezhető dobozba van tevezve (lehetne kisebb is, ilyen doboz volt), USB-seriallal megy a gép felé, FT232BM, szóval liinux is látja. Csak tudnám használni is alatta. Bár szerintem ez az Atmeles "vak vágány" csak a házi miatt volt nálam, de ki tudja egyszer... lehet még kellene.

Hi!

Olcsobb FPGA-khoz valami pelda kapcsolasokat hol lehet leszedni? Annyi eleg, hogy hogy kell rakotni a JTAG-et, hogy feltolsem ra a kodot, hogy kell rakotni az EEPROM-ot, hogy tudom megmondani neki, hogy ott keresse, esetleg ha az orajel eloallitasaban meg a tapokban van valami extra, akkor az is erdekel.

A kovetkezo lepesben az is erdekel, hogy hogy lehet a VHDL vagy Verilog file-bol szintetizalni azt a bizonyos kodot, es hogy lehet feltolteni az FPGA-ba.

Es ha mar a feltoltesnel jarunk, Linux ala milyen -- lehetoleg USB-s, nem gyari -- JTAG adaptert erdemes hasznalni?

By(t)e
TBS::Antiemes

A fejlesztő panelekhez megkapod a kapcsolási rajzot. (Fel programozót "véletlenül" kifelejtették starter kit -nél)

FPGA nagyon érzekenyek a táp -ra (+-0.1V halálos lehet), chipcad -nél találsz táp IC -ket. Legtöbb nagy gyártónak pl. Texas Instruments, Linear saját megoldásuk van a xilinx cuccok táplálásra, példa kapcsolással.

Az adatlapjaban benne van, hogy kell PROM -al összekötni , csak mellé kell tenni és kész :)
http://www.xilinx.com/support/documentation/data_sheets/ds312.pdf

Google ezt dobta:
http://toolbox.xilinx.com/docsan/3_1i/data/common/jtg/dppb/appb.htm

Xilinx ad zárt drivert a cucchoz, de megjelntek nyílt driverek.
http://www.xilinx.com/ise/logic_design_prod/webpack.htm -ezt a cuccot használom. Erről keresel valami tutoriált. A Teljes munka folyamot támogatni igyekeztek. Úgy-ahogy parcssorbol is mennek az eszközök.
iverilog -ot is haszálhatsz, de maping-re routing-ra nincs open source alternativa.

Drivernek ezt: http://rmdir.de/~michael/xilinx/
Ez egy user space library, egy LD_PRELOAD -al jól becsapja a xilinx -es stuffokat és remekül megy :)

(Lattice , Altera is támogatja Linuxot.)

Ha reletive egyszerű dolgra kell, és cél kurva kicsi fogyasztás, valamint nem akarsz külső flash -t akkor CPLD -k is szoba jöhetnek, nekik megmarad a program. (így persze limitált, hogy hányszor programozhatod újra)