Fórum témák
» Több friss téma |
Fórum » CPLD, FPGA - Miértek, hogyanok
Ha esetleg Pajti2 tanácsa valamiért nem járható út, és mindenképpen frissítened kell az FPGA konfigurációt is, akkor ajánlom figyelmedbe a Xilinx FPGA-k MultiBoot névre keresztelt megoldását. Ekkor a memóriában több konfiguráció is tárolható. Először mindig az alapértelmezettet tölti be, ennek lehet esetedben "bootloader" szerepe. Feltételvizsgálat után elágazhatsz, hogy frissíteni akarsz-e, vagy betölteni a tényleges konfigot. Hátránya, hogy megdobja az indulási időt, nem tudom, hogy ez ebben az alkalmazásban megengedhető-e...
Ha RAM bazisu FPGA-rol van szo (pl. Xilinx-ek), akkor a konfiguraciot a processzor is adhatja az FPGA-nak, nem feltetlenul kell a config flash-t az FPGA-ra kotni. Amikor az FPGA boot-ol, akkor szepen a processzor atnyomja neki a configot es kesz. A frissites meg egyertelmu.
Ma érkezett meg az Altera MAX II (EPM240T100C5N ) kártyám, USB Blasterrel és a szükséges kábelekkel együtt. Ennyi pénzért szinte ajándék volt.
CPLD-vel most ismerkedőknek tanulásra nagyon tudom ajánlani. Nekem tetszik, hogy van rajta néhány gomb, LED sor, 7-szegmens kijelző és egy csipogó. Az ingyenes Altera Quartus Prime Lite Edition jó hozzá, abban van az USB Blaster drivere is. A hozzászólás módosítva: Jún 10, 2016
Szia! Én is foglalkozom ezzel a CPLD-vel, valóban jó választás fejlesztéshez, de vigyázz mert csak 100-szor lehet újraprogramozni! Használd a ModelSim-et a kód kipróbálásához.
Sziasztok
Több kapcsolási rajzban láttam, hogy FPGA mellé be van építve valamilyen külső nagysebességű párhuzamos RAM. Kérdésem hogy ez a memória elengedhetetlen az FPGA működéséhez, vagy ez teljesen általános felhasználásra van beépítve... Pontosan mire szolgál ez a memória? A hozzászólás módosítva: Júl 10, 2016
Eppen az elozo hozzaszolasokban irtak le a valaszt
Tovabba a nagysebessegu RAMot arra hasznalod amire akarod. A hozzászólás módosítva: Júl 10, 2016
Sziasztok megérkezett az FPGA panelom (DLP-HS-FPGA2) Elég drága volt de nem kell hozzá külön programozó, USB porton keresztül lehet programozni, táplálni. Van hozzá ingyenesen letölthető demo konfig fájl, plusz PC program amin keresztül például IO portokat lehet kapcsolgatni. Xilinx spartan XC3S400A FPGA van beépítve. Ez mind működik, csak fejlesztőkörnyezetet nem tudom ,hogy milyet töltsek le hozzá. VHDL-ben szeretnék dolgozni. Esetleg tudtok valamilyen ingyenesen letölthetőt ajánlani hozzá?
Xilinx ISE Design Suite 14.7
Az oldalt egy kicsit letekered, a középső mezőben találni fogsz 4x 2 gigás file-okat, azokat szedd le. Regisztrálnod kell hozzá. Majd ne ijedj meg, sokáig települ. Megnéztem nálam az install mappát 17.2 giga, 19120 mappa, 239550 file.
Írtam verilogban egy összeadót. Kap egy órajelet, két egybites bemenetet és van egy kétbites kimenete. Ha "rendesen" bekötöm a kimenetén a két bitet, akkor a szimulációban "lassan" fut fel a jel, ahogy az a valódi hardverben is elvárható. Ellenben ha csak az LSB-t, akkor azonnali a változás. Ez mitől van?
Az összeadó bemenetei n1 és n2, kimenete out2, szimuláció mellékletben.
Ja, én is lestem, mikor felraktam, felveszi a versenyt az Android IDE/SDK-val, az sem piskóta.
A Verilog forras valoszinuleg segitene a problema megerteseben. Meg a "rendesen" es a "lassan fut fel a jel" kifejezesek sem vilagosak szamomra.
A gyors meg a lassú felfutás alatt pedig azt értem, ami a szimuláción is látszik: az egyik esetben azonnal megváltozik az érték (függőleges vonal a waveform-on), a másik esetben meg van egy beállási idő.
Szerintem semmi gond nincs ott. Amit te lassú felfutásnak gondolsz az csak a rajzi jele annak hogy ott több bit szerepel, ha a bal oldali bekarikázott részben kinyitod az adott értéket külön külön látod a bitek jelformáit.
A hozzászólás módosítva: Dec 4, 2016
Értem, köszönöm. Ebben az esetben viszont valami más nem világos. Amikor megjön az órajel felfutó éle és ezzel egy időben változik meg a bemenetek értéke is, akkor az eredmény az előző vagy az új bemeneti értékek összege lesz?
Tehát: n2 = 1. Megjön az első órajel, ezzel egy időben n1 = 1. Ekkor a sum = 2 lesz, amiből az következik, hogy már az új értékeket adta össze. Ezt a logikát követve, ha az out-ot nézzük, ami az n1 és a sum összege, 3-ra kellene, hogy beálljon. De nem 3-ra áll be, hanem 1-re, és majd csak a következő felfutó élnél lesz 3. Olyan, mintha az n1-nek már az új értékét látná, a sumnak viszont az előző értékét. Most akkor hogy is van ez? Nem igazán kapisgálom. Köszönöm a segítséget előre is.
Az a baj hogy a verilogot nem látom át, VHDL-ben is irtó gyenge a tudásom.
VHDL-ben van egy olyan tulajdonság hogy egy jelhez(signal) csak delta-késleltetlés után lehet értéket hozzárendelni, változó(variable) meg azonnal felveszi az értéket. Ez okozhat késést de nem tudom verilogban van e ilyen.
A regisztered az orajel felfutasakor felveszi azt az erteket, ami a bemeneten van. Tehat, ha
Igen, számomra is így lenne a logikus. De akkor a 11:36-kor írt hozzászólásomban a képen, hogy lehet, hogy sum értéke azonnal 2-re vált (1 ns-nál), pedig nem volt ott a jel az órajel felfutása előtt? Ezzel szemben viszont az out pont a leírásod szerint működik, és csak a következő felfutó élnél, 3 ns-nál veszi fel az új értéket.
Mert a szimulacioban ez a kesleltetes maskepp van. A valosaban, ha egy regiszter bemenete egyutt valtozik az orajellel, egesz pontosan, ha setup es hold time-on belul valtozik, akkor nem lehet tudni, hogy a regiszter milyen erteket fog felvenni. Nalad az n1 erteke egyszerre valt a clk-val, es ezert a szimulacio ugy tekinti, hogy mar az orajel felfutasa elott 1-ben volt. A valosagban ennek az eredmenye bizonytalan mukodes lenne. Az elvezerelt tarolokra megadnak egy setup es hold time-ot, ami azt jelenti, hogy a bemenet az orajel aktiv ele elott setup idovel mar stabil kell legyen, es az orajel aktiv ele utan meg hold ideig stabil kell maradjon. Ha ezt az idozitesi kreiteriumot nem tartod be, akkor olyan is elofordulhat, es elo is fordul, hogy a tarolo felvesz valamilyen erteket, aztan kicsit kesobb atbillen masra. Ez komoly problema tud lenne aszinkron jelek fogadasanal, de szerencsere vannak ra megoldasok.
"Nalad az n1 erteke egyszerre valt a clk-val, es ezert a szimulacio ugy tekinti, hogy mar az orajel felfutasa elott 1-ben volt"
Oké, én ezt értem, de akkor az out esetén miért nem így működik? Az miért nem vált 1 ns-nál 3-ra (n1+sum), miért csak 3 ns-nál? Az nem világos, hogy miért nem ugyanaz a logika érvényesül mindkét esetben.
Mert 1ns-nál, az orajel felfutasanak pillanataban az n1 = 1, n2 = 1, a sum viszont még 0. Az orajel lefutasakor ezekkel az ertekekkel szamol ki mindent, es tolti be az uj ertekeket a regiszterekbe egyszerre (ettol szinkron).
Ezert 1ns-nal a sum n1 + n2 lesz, ami 2, az out viszont n1 + sum, azaz 1 + 0, ami 1; A kovetkezo orajelnel mar sum = 2, n1 = 1, tehat akkor mar 3 lesz az out. Told el az orajelet es az n1 allitasanak idejet egymastol idoben es akkor jobban fogod latni, hogy mi tortenik. Eleg, ha a clk-t 2ns-onkent lepteted.
Áá, megvilágosodtam Köszönöm szépen a magyarázatot. Már egy hete ezen kattog az agyam, hogy miért nem úgy csinálja, ahogy én gondolom.
Plusz adalék, ha még érdekel: az órajellel egyszerre változó jelek ütemezését nem konstans késleltetésekkel érdemes megoldani a szimulációban. Vagy ha ragaszkodsz hozzá, akkor told el egy kicsit az élváltásokat, ahogy Killbill javasolta. De van egy elegánsabb megoldás, az @ jel használata a testbenchben. Itt egy példa:
Ha így oldod meg, akkor a szimuláció eredménye meg fog felelni a valóságnak, tehát az órajellel egyszerre változó jelek mintavételezése csak a következő ütemben fog érvényesülni.
Szia! Köszönöm, ez tényleg egy sokkal elegánsabb megoldásnak tűnik. Csak egy bajom van vele: nem tudom megcsinálni. Vagyis megcsináltam, csak nem működik. Sajnos még nem rég kezdtem el Verilogozni. Át tudnád esetleg írni a testbenchemet erre a formára?
Köszönöm! A hozzászólás módosítva: Dec 12, 2016
Oké, azt hiszem jó lesz, csak blokkoló helyett nem blokkoló utasításokat kell használnom (ezt mondjuk nem értem miért, szinte az összes netes példában blokkolót használnak).
Azt én sem értem, szimulációban én is sima egyenlőségjeleket szoktam írni. Ezt a kódot most másoltam ki egy régi projektemből. Lefuttat egy jelet, vár két órajelnyit, majd felfuttatja:
Sziasztok!
FPGA-n való implementációra milyen medián kereső algoritmust ajánlotok? Vivado HLS-ben kell implementálni, szóval C-ben lehet programozni, de jó lenne olyan algoritmus, amit azért könnyen tud a szintézer FPGA-ra implementálni. 9 db. 13 bites számnak kéne a mediánját kiválasztani. Mondjuk valamilyen HDL-en megírva milyen algoritmust, módszert választanátok? Köszi!
Szia!
A "könnyen tud implementálni" lefordítva -> "temérdek sok erőforrás, amit pocsékolhatsz" Melyik magra kellene ráférnie annak az összeadó & osztónak? Azok a 13 bites számok legalább egész formában vannak ábrázolva, vagy lebegőpontosak ? |
Bejelentkezés
Hirdetés |