XILINX FPGA projektek


Két Xilinx -es fejlesztőkártyám is van, az egyik egy CPLD-t tartalmaz, ez a kisebbik és egy nagyobb fejlesztőkártya ami egy Spartan3-at tartalmaz

Xilinx CPLD Coolrunner fejlesztőkártya

Adatlapok, leírások a kártyáról:

Xilinx termékek általános leírás

Hogyan kezdjünk neki FPGA-t programozni?

CPLD fejlesztőkártya leírás 1

CPLD fejlesztőkártya leírás 2

CPLD fejlesztőkártya leírás 3

XC9572XL adatlap

XC2C256 adatlap

s6b1713 adatlap

programozó kábel adatlap

logic handbook

ds311 adatlap

CPLD verilog

cableQSG adatlap

AD9283 adatlap

AD829 adatlap

AD5424_5433_5445 adatlap





Spartan 3E FPGA fejlesztőkártya

Adatlapok, leírások a kártyáról:

Spartan-3E Starter Kit Gerber File

Spartan-3E Starter Kit Product Brief

Spartan-3E Starter Kit Schematic_Rev D

Spartan-3E Starter Kit User Guide

Spartan3E

DDR_RAM jegyzet

Spartan-3E Starter Kit BOM_RevD

pinouts

DDR RAM általános

512MBDDRx4x8x16 adatlap

AD konverter adatlap 1407fa

AD konverter adatlap 2604fb

AD konverter adatlap ADC_LTC1407

DA konverter adatlap DAC_LTC2624

Külső oszcillátor

Külső oszcillátor adatlap FOX electronics

SMC 83c185

SMC 83c185bom

SMC 83c185sch

SMC an1013

SMC an1318

SMC an139

SMC an813





Kísérleti projektek a kártyákra

Általánosan használt modulok forrásai:

Verilog file: futofeny.v Egyszerű futófény LED-eken, előosztott órajel hajtja meg

Verilog file: monostabil.v Egyszerű monostabil multivibrátor modul

Verilog file: prescaler.v 5 bites előosztó modul

Verilog file: receiver.v RS232 soros vevő

Verilog file: transmitter.v RS232 soros adó

Verilog file: kiserlet_top.v Soros adó és vevő modulok tesztje. A vevő rész egy regiszterbe tárolja el a vett utolsó bájtot amit az adó a nyomógomb megnyomása után lead. Hyperterminál segítségével tesztelhető.

Verilog file: serial.v RS232 soros vevő egyszerű tesztje ahol a vett bájtot kiírja a LED-ekre.

Verilog file: shiftreg.v Shift regiszter modul

Verilog file: winyo.v Egy soros RS232 - IDE winchester átalakító. A soros porton küldött parancsokkal az FPGA megfelelő lábaira kötött IDE felületű winchester vezérelhető. Ehez a projekthez tartozik egy Windows -ra írt EXE program is ami az egészet megvezérli. Ez a program DOS alól működő Borland debugger segítségével visszafejtett 486-os számítógép AMI BIOS gépi kódja alapján lett megírva. Ennek a kísérletnek az eredményei alapján építettem meg a winchesterről boot-oló számítógépemet lásd:Kisszámítógép

Verilog file: xilinx_ddr_parameters.v DDR RAM kísérletekhez használt DDR RAM paraméterei


Teljes Xinlinx ISE fejlesztőkörnyezetbeli projektek:

Xilinx ISE projekt: boardtest.zip Panel teszt, egyszerű LED villogtatás a CPLD kártyára

Xilinx ISE projekt: dac_spi.zip DA és AD konverterek tesztje Spartan 3-ra. A bejövő analóg jelet (hangot) az AD konverter digitalizál, és az FPGA SPI-on keresztül fogadja, letárolja, és rögtön küldi ki a DA konverterre szintén SPI-on keresztül. A projekt tartalmaz egy SPI adó és vevő egységet is. Későbbi továbbfejlesztési cél volt hogy digitális jelfeldolgozást is végezzen a hangjelen, pl FIR szűrés, speech-shifter, visszhangosítő, vocoder, formáns szűrők, zene szintézis, és egyéb beszéd illetve zene torzítás

Xilinx ISE projekt: EDK_projects.zip A Spartan 3E FPGA tartalmaz beépített dedikált harver elemeket mint pl számlálók, SRAM modulok, dedikált szorzók, LUT (Look Up Table), stb. Ezek mind a DDR RAM vezérlő előkészítése céljából kellett

Xilinx ISE projekt: futofeny.zipEgyszerű LED villogtatós panel teszt az FPGA kártyához.

Xilinx ISE projekt: Robot1.zip Elkezdett de nem befejezett PWM vezérlő robot szervó motorokhoz.

Xilinx ISE projekt: SERIAL_FPGA.ZIP Soros port vevő teszt FPGA-hoz. A soros porton hyperterminal-on vett értéket kiírja a LED sorra

Xilinx ISE projekt: serialtest.zip Újabb soros port teszt

Xilinx ISE projekt: serial6_Sikeres.zip Kifejlesztett soros port modul tesztje amit univerzális modullá tettem

Xilinx ISE projekt: transmit4.zip Soros port adó modul tesztje

Xilinx ISE projekt: soros_adovevo1_serialportOK.zip Soros adó és vevő modulok tesztje. Az adó és vevő össze van kötve. A hyperteminal-ból küldött értéket a vevő egy regiszterbe tárolja amit a kártyán lévő gomb megnyomásával az adó modul visszaküld és megjelenik a terminálban

Xilinx ISE projekt: serialfsm.zip Soros portról vezérelhető állapotgép tesztje. A soros porton leküldött bájtokat parancsként értelmezi és az állapotgép ennek megfelelően álalpotot vált. Az állapot kódja a LED-eket látható. Ez egy közbenső fejlesztési állapot a soros port-IDE winchester átalakító felé.

Xilinx ISE projekt: winyo1_szim_ok.zip Soros port - IDE winchester átalakító. A projekthez tartozik egy Windows-ra megírt grafikus EXE program ami vezérli az egészet. Ennek segítségével soros porton keresztül fájlok írhatóak a winchesterre. Az FPGA-n lévő soros vevő veszi a küldött bájtokat amit egy állapotgép veszi és parancsként értelmezi őket. Ennek megfelelően megfelelő állapotokba ugrik, és különféle kimeneteket állít elő az IDE felületre kötött winchester számára. A parancsok nagyon primitívek, az IDE felületen a lábakat lehet közvetlenül beállítani. Az egészet az EXE program vezérli úgy hogy a fájlok ráíródjanak a winchesterre, vagy éppen kiolvasódjanak. Kiolvasáskor az olvasási parancs hatására a soros port visszaküldi az IDE felület lábainak állapotát.
Az egész prjektenk két fő célja volt. Egyrészt hogy élesben teszteljem a 486-os számítógép AMI BIOS-ából visszafejtett winchester író/olvasó gépi kód tanulmányozása után megszerzett tudást. Ezt felhasználva IDE winchestert köthessek mikrokontrollerekhez (PIC és ATMEL). Így tudtam elkészíteni a második komolyabb saját számítógépemet ami már képes volt winchesterről boot-olni az operációs rendszert. Másrészt különféle csak soros porttal rendelkező rendszerekből lehet segítségével titkon adatokat elcsenni :D

Xilinx ISE projekt: DDRRAMexperiments.zip Ezek a DDR RAM meghajtó modul megírására végzett kísérleteim. Működik, csak bugos, és továbbfejlesztésre vár. A részleteket lásd később, alább.





Modelsim szimulációk

Modelsim Modelsim logikai szimulátoron végzett tesztek forrásokkal együtt. Xinlinx kártyára történő direkt letöltögetés útján való tesztelése a kódunknak elég macerás és hosszadalmas főleg a hosszú fordítási periódus miatt. Sokkal eyszerűbb a modulunkat szimulálni éles próba előtt. Hátránya hogy a valósághoz hasonló tesztvektorokat kell előállítanunk ami időigényes de még mindig rövidebb mint a folytonos fordítgatás és letöltgetés, próba szerencse módszer.
A ZIP-ben található a DDR RAM meghajtó modul teljes szimulációja, a primitívekkel és azok tesztjeivel és valósághű meghajtó tesztvektorokkal együtt.





DDR RAM meghajtó modul

Bármi komolyat ha szeretnénk kezdeni az FPGA-nkkal akkor elkerülhetetlen hogy nem kevés memóriára van szükségünk. A panelon egy DDR (double data rate) RAM található, ez egy modernebb viszont bonyolultabb technológia. Előnye hogy nagyon gyors, így igen gyors adatkezelésre képes. Nekem pont ez kell, ugyanis gyors jelfeldolgozást szeretnék megvalósítani. Az FPGA előnye a processzorokkal szemben éppen ez, a gyors feldolgozás.
Főbb ötletek, célok:
- Hang, audió feldolgozás, beszédtorzítás, vocoder, valós idejű speech shifter, analóg zeneszintézis digitális szimulációja. Mivel ezeket könnyű megvalósítani sima PC-n és nem olyan erőforrás igényesek így ezt elvetettem.
- Egyik barátom által alapvető logikai elemekből épített processzor szimulálása, vagy az eredeti kapcsolás FPGA-ban való megvalósítása.
- Képfelismerés alapú robotvezérlés. Első körben egy válogató robotkar vezérlése. Ez igen erőforrás igényes, egy OpenCV alapú ada-boost tanuló algoritmus akár 1 hétig is futhat. Ezt lehetne gyorsítani.
Optimalizációs ehetőségek: - Neurális hálózat számítás: Lenne több neuron számító egysség amik párhuzamosan számítják ki a neuronokat. A paramétereket a memóriából veszik, és oda is töltik vissza. Így a többszázazer neuron hamar kiszámítódna. Optimalizáció alapon működő tanuló algoritmusok támogatása, pl backpropogation algoritmus diff. egyenlet számításának megtámogatása FPGA-val.
- Haar szűrő alapú feature-extraction. Konvolúciós szűrőkhöz hasonlóan implementálható. A feature-k szintén sok memóriát esznek.
- Ada-boost összetett tanulási algoritmus gyorsítása.
- Egyéb gépi tanuló algoritmusok, optimalizáción vagy regresszión alapulók implemenmtálása. Pl útkeresők, szemantikus gráfok, stb..
A hagyományos vezérlő feladatokat külső dedikált processzorok hajtanák végre. Teljesen felesleges FPGA-ba processzort implementálni, hiszen erre a célra sokkal jobb procik léteznek már, és az FPGA-nak van elég lába csatlakozni hozzájuk (és FPGA arbitrálná őket pl).


A memória egy Micron gyártmányú 512MBDDRx4x8x16 -os RAM, fentebb letölthető az adatlapja, benne látható a programozása és hardver felülete. Ez alapján elkészíthető az FPGA kód hozzá.
A DDRRAMexperiments.zip tartalmazza a teljes kísérleti projektet Xilinx ISE-ben elkészítve, ebben már benne vannak többek közt a RAM bekötésével kapcsolatos "constraint"-ek is úgy, hogy a kódot letöltve már egyből működik is a projekt.
A DDRRAMexperiments.ZIP tartalma:
200MHz_osctest - Fox electronics által gyártott miniatűr fémtokos 200MHz-es külsőleg rákötött oszcillátor tesztje. Az FPGA kártyán van egy 50MHz-es órajel oszcillátor, de ez a DRR RAM-nak nem elég, mert az 166-266MHz tartományban hajlandó csak működni. Az oszcillátor adatlapját lásd fent az adatlapok között. Ez a teszt egy egyszerű órajel osztó amiről villog egy LED. Így látható hogy az oszcillátor valóban működik.
ddr_experiment6 - Ez maga a DDR RAM meghajtó projekt utolsó változtatása
sajatDDRdriver_change1 - Ez a DDR RAM modul ModelSim-es teljes teszt projektje. Letöltés után egyből beimportálható ModelSim alá. Tartalmazza az összes teszt vektort is.
DDR RAM teszt verilog moduljainak felépítése:
- ddr_top.v - Ez a top modul ez tartalmazza a modulok közötti összeköttetéseket. Hierarchia legteteje, a ki/bemenetei közvetlenül az FPGA lábaira mennek rá
- clkshifter.v - Csomagoló (wrapper) modul a PLL fázis szinkronizáló fáziszárt hurok FPGA-n belüli dedikált hardverhez. Az egész Spartan 3E-ben egy ilyen hardver van megvalósítva. A DDR RAM működésének lényege hogy az órajel fel és lefutó élére is történik adat írás vagy olvasás. Így érik el a dupla sávszélességét, ezért is a neve double data rate. A RAM IC áramkörnek fázispontosan érkező két egymáshoz képest negált órajelre van szüksége. 200MHz-en már jelentősek a fáziseltolások a panel futásideje miatt ezért kell ez a fázis szinkronizáló áramkör hogy a DDR RAM lábán fázispontosan érkezzenek meg az ellentétes órajelek. Ez a PLL ezt a célt szolgálja.
- cpuemu.v - A meghajtó processzort szimulálja. Azt teszi mintha a DDR RAM-ra egy adatot olvasó , író processzor lenne rákötve. Jelenleg ez a modul egy egyszerű FSM(finite state machine) ami beír néhány értéket egy bizonyos címre és utánna meg kiolvassa őket és összehasonlítja az eredeti értékkel őket. Ha ugyanazt olvassuk vissza mint amit beírtunk a rekeszbe akkor a teszthez tartozó LED felgyullad jelezve hogy a teszt átment. Érdekes módon az FPGA reset gombját nyomkodva újraindítgatva ezt a tesztet mindig más más teszt megy át illetve bukik meg. Ez egy bug jelenleg aminek az oka ismeretlen. Talán hibás a fázis szinkronizáló hurok, vagy ki tudja. Az alapos kiderítésére ezt a modult át kéne alakítani hogy soros porton hyperterminálban érkező parancsokra beírjon vagy visszaolvasson egyes rekeszeket a memóriából és az eredményt visszadobja soros porton keresztül a hiper teminálra. Ez még várat magára.
- ddraut.v - Ez maga a DDR RAM meghajtó modul. Egy FSM (finite state machine)-t tartalmaz. Reset hatására elindul az automata és végrehajtja a memória inicializálását ahogyan a Micron adatlapjában le van írva. Ezek után a processzortól érkező írás illetve olvasási ciklusokat várja aminek hatására burst-ökben végrehajtott írás/olvasási ciklusokat hajt végre a parancsnak megfelelően.
MT46V32M16TG-6T.v - Ez maga a DDR RAM szimulációja. ModelSim-ben illetve bármilyen logikai szimulátorban felhasználható a RAM emulálására.
BUFG.v - Szimulációs primitív, szimuláció során a Xilinx beépített buffer hardver építőelemét szimulálja.
IBUFG.v - Szimulációs primitív, Xilinx belső órajel bufferét szimulálja.
DCM_SP.v - Szimulációs primitív, Xilinx Spartan 3E fázis szinkronizáló PLL-jét szimulája ami a DDR RAM ellenfázisú órajelét állítja elő.


Megoldandó feladat:
- Miért bukik meg a memória teszt? Miért nem ugyanazt olvassuk vissza a RAM-ból mint amit beleírtunk? Valószínűleg bugos a DDR RAM vezérlő.
- Ennek kiderítésére soros porton hiperterminálból küldött parancsokkal lehetővé tenni a RAM szektorainak írását, olvasásást tetszőlegesen megadott adattal.





Vissza:

Főoldalra

Dokumentációk tartalomjegyzéke

tetszik a cikk

Írj hozzászólást
Neved:

A beküldés gomb megnyomásával elfogadom a szabályokat

Hozzászólások megtekintése






By Bognár András (2015)