Fórum témák
» Több friss téma |
Fórum » CPLD, FPGA - Miértek, hogyanok
Szia!
Mindkettőt! üdv.
Van valami elképzelésed arról, miként lehetne ezt megoldani? Tudod esetleg, hogy mikrokontrollerekben hogy oldják meg? Ha nem, nézz meg egy adatlapot, mondjuk az ATmega16-ét. Ebben vannak időzítő egységek (Timer/Counter), blokkvázlattal. Szerintem sokat segíthet megérteni, hogy hogy lehet megoldani a feladatot.
Bálint
Üdv mindenki!
VHDL programot kell készítenem a következő feladathoz: Egy kamera képét kell beolvasnom párhuzamos porton keresztül és egy memóriában kell tárolnom (az mind1 hogy külső vagy belső). A kamera felbontása 320x240 pixel. Ha valakinek van valami példa anyaga azt nagyon megköszönömm Előre is köszi!! Üdv: Zoli
a VHDL nem program, a medve meg nem játék
Nem fogsz erre általános megoldást kapni, mert kamerafüggő a dolog.
OK, utánanézek! köszi az infót! Bár úgy néz ki elég lesz ha a frekvenciát változtatom!
Tibi
Sziasztok!
Spartan3e FPGA-n próbálkozok összehozni softZ80-as procival valamilyen rendszert verilog nyelven. Addig működik, hogy egy switch-case módon hoztam létre neki ROM-ot amiből olvas, de ezzel az a probléma ugye hogy vagy 10perc mire újrafordítja az egészet az Ise ha új progit írok az procira. Addig eljutottam hogy Blokkramot kellene használnom ROMként, és majd a data2mem progival, a .bit fájlba bele lehet fűzni a futtatandó kódot. Tehát beraktam a kódba egy RAMB16_S9-et (2kx8bit) bekötöttem és írtam neki egy testbenchet. És adtam neki némi inicializáló adatot hogy ki tudjam próbálni RAMB16_S9 #( .INIT(9'h000), // Value of output RAM registers at startup .SRVAL(9'h000), // Output value upon SSR assertion .WRITE_MODE("NO_CHANGE"), // WRITE_FIRST, READ_FIRST or NO_CHANGE // The following INIT_xx declarations specify the initial contents of the RAM // Address 0 to 511 //incializáló adat, most a világítós progi lesz benne .INIT_00(256'h00_3E_AA_D3_02_00_18_FD_00_...stb.. .INIT_01(256'h00_00_00_00_00_00_00_00..stb.. ...stb.. .. stb ... stb ) MyRAM ( .DO(data_out), // 8-bit Data Output //.DOP(DOP), // 1-bit parity Output .ADDR(mem_addr[10:0]), // 11-bit Address Input .CLK(clk), // Clock ->órajel .DI(8'h00), // 8-bit Data Input > valahova legyen kötve.... .DIP(1'b0), // 1-bit parity Input ->nem kell .EN(1'b1), // RAM Enable Input, legyen mindig H .SSR(reset), // Synchronous Set/Reset Input .WE(1'b0) // Write Enable Input -> mindig tiltva legyen ); Ezután megírtam a testbenchet, ami annyit csinál hogy egy órajelciklusra ad H szintet a RESETre, Majd minden órajelben növeli a memóriacímet. Ilyenkor elvileg ki kellene jönni valami értelmes adatnak a kimeneten, de egyfolytában csak 0-k jönnek ki. :no: Szimulátornak Isim-et használok, de ha feltöltöm FPGA-ra akkor ott se működik. Egyszerűen megpróbáltam mindent, de sehogy se sikerül működésre bírni. Valaki találkozott már ilyennel?
Mint kiderült, egy-egy inicializáló sor végén kezdődnek az alsóbb bájtok.... Napokig ültem rajta....
Tehát ebből .INIT_00(256'h00_3E_AA_D3_02_00_18_FD_00_...stb.. ez lesz .INIT_00(256'......00_FD_18_02_D3_AA_3E_00),
Legyszi segitsetek!!! Nem vagyok meg nagy szakerto a xilinx ise ben. kaptam egy fpgat spartan 3e xcs500e,FG320, es sehogy sem jon ossze h keszitsek egy frekvenciaosztot. vagy nem mukodik vagy nem osztja meg ugy ahogy kene. Lecci aki ert hozza segitsen meg 50Mhz rol kene 1Hz re lecsokkenteni. Ja es nem programba hanem rajzal. Lecci megkerlek ki tud segitsen meg nagyon kene. elore is kossszz
Szia! Konkrét rajzot nem tudok küldeni, de a mellékelt pdf-ben minden benne van, hogy tudj építeni egy ilyet. Ha mégis elakadnál szólj, segítek.
B.U.É.K.
Kellene csinálni egy countert, ami elszámol 500ms-ig (25 000 000 20ns-es ciklus), ekkor nullázni és egy kimenetre kötött flip-flop-ot invertálni. Ez lenne( a kimenet) az 1 Hz 50% kitöltéssel. A counter lehet mondjuk 2 db CC16CLE kaszkádolva ( Első CE Vcc-n,CEO_1->CE_2, órajel, reset, load közös). Ebből csak az alsó 25 bit kell. Az adatbenetekre konstans nullát tenni és a load bemenetre ledekódolni a 25 bitet, hogy a 25 000 000 bináris értkre adjon egy load '1" -est. Ugyanezt a load jelet a kimeneti FF CE bemenetére kötni. Az FF adatkimenetét egy inverteren keresztül az adatbemenetére kötni. Az FF órajele is 50MHz. Ha a schematic nem kikötés, én megtanulnám valamelyik HDL nyelvet. Ezekkel ez öt perc, a schematic-ban meg fél óra. Persze ez függ a gyakorlottságtól is. Üdv. Zoli
Hello Carlen! En a rajzot ugy csinaltam h az egyik szamlalo szamol 50000 ig a masik meg 1000 ig mert ugye 50Mhz van. de ezekhez az ertekekhez nincs szuksegem az egesz kijovetre. es ezert irta ki a warningokat h a nem hasznalt kijovetekkel baj van. aztan rajattom h amit nem hasznalok azt is kossem be kijovetnek s akkor nem adja ki tobbet. de igy sem megy.de van egy masik warning ami nem tudom h mi lehet azt adja ki h dummy, es azt irja h van olyan kijovet ami be van kotve de nincs hasznalva ezert 0 ad neki. es nem tudtam rajanno h mi lehet. Ezen a rajzon nincs bekotve az a kijovet ami nem kell de logikailag igy kene mukodjon nem?
Azokkal a warningokkal ne foglalkozz, amik azt írják, hogy egy több bites busznak egy adott bitjét kötöd be egy másik modulba. Elvileg azokkal a hibákkal is lefordul, és megy tökéletesen. A második hibát viszont nem értem, nem tudnád bemásolni?
A képen elég érdekes dolgokat látni. A 'CE' lábára mind a két doboznak +tápot tegyél, attól fog működni. A 'C' bemenet az órajel, az első doboz sokadik bitjének kellene oda mennie, ettől fog az lassan számolni. Az 'R' láb a reset, ha arra adsz tápot, nullázza a kimenetet. Lehet velem van baj, de amit küldtél kép, az nagyon rossz. Javítsanak ki a kollégák, ha tévednék.
Van valami oka annak, hogy a CPLD-knek külső oszcillátort alkalmaznak mindig? Nem lehet belül kialakítani a megfelelő kapcsolást? Mindenképen a GCK2-n kell megkapnia a rendszer órajelet? Ha igen, akkor úgy nem megy, hogy saját kimenetét kössük oda vissza?
Ha a 2ik doboz C jelre kotom az elso doboz and kijovetet akkor azt irja ki h: Gated clock. Clock net XLXN_130 is sourced by a combinatorial pin. This is not good design practice. Use the CE pin to
control the loading of data into the flip-flop. Ez a warning nem tudom mi:WARNING:Xst:653 - Signal dummy is used but never assigned. This sourceless signal will be automatically connected to value 0. Ja az R a reset de ha nem Resetelem le akkor nem kezdi elolrol nem? Es az alatt mit ertessz h a CE re rakjak +tapot? buffert?Es a resetet h kossem be?
Ha az 'R'-re tápot adsz, akkor nullázza a kimentet, de miután elszámolt a maximális értékig, magától nulláz. A legjobb, ha a reset lábat földre kötöd. A 'CE' mind a kettőnél táp kell hogy legyen, azaz Vdd, mert a nélkül nem működik. Ezek a dobozok amúgy élvezéreltek (ezt mutatja a C melletti kis háromszög), vagyis a kimenetét csak akkor változtatja meg, amikor az órajel 0-ról 1-re ugrik. 50MHz-ből 1Hz-et úgy tudsz előállítani, hogy egyszer osztod egy 16bites számlálóval, utána annak a legfelső bitjét belekötöd egy 8bites számlálóba, eddig ugye f= 50MHz/2^24= 2,9Hz. Ha ennek a 8bitesnek a kimenetét kötöd egy 2bitesre, akkor annak a legfelső bitje 0,7Hz-en fog járni. A kapcsolás rajzot mellékeltem, azt nézegesd.
Ha olyat ír a fordítás során, hogy: "Signal
Nem értek a CLPD-hez, de abban csak logikai kapuk vannak százával, nem hiszem, hogy ott bárhogy ki tudnál alakítani oszcillátort. Szóval muszáj a külső oszcillátor.
Azt gondolnám, hogy egy oszci nem más mint két, vagy 3 inverter, esetleg némi késleltetés(persze külső tagokkal, mint kondi és kristály)...
Inkább az a gyanúm, hogy belül minden órajelfüggően működik, de ennek ellentmond az, hogy vannak logikai kapuk, amiknek nincs órajel bemenete, valamint az, hogy lehet statikus hálózatokat is kialakítani. Sajnos nem látom még át kellően a teljes áramkört, ezért vannak még fekete foltok(dögivel). Ez teljesen más világ...
Lenne még egy kérdésem.
Mit veszít az, aki Veriloggal kezd a VHDL helyett?
Kettőt, és könnyebbet.
Még én sem tudom melyikkel kezdjek foglalkozni, és sajnos az egyiket sem ismerem. Az angolom nem a legprofibb, ezért keresek valami magyar forrást, és amit találok azt kezdem el tanulni. Eddig hiába, bár most lehet tudok szerezni egy régebbi egyetemi jegyzetet. Amúgy azt mondják a VHDL elsőre könnyebb, a Veriloggal szemben, viszont a Veriloggal sokkal bonyolultabb rendszerek is könnyebben megírhatok. Lehet a vége az lesz, hogy beszerzek egy angol könyvet, és szatki-val lefordítom magamnak.
Én pont fordítva hallottam!
Egyébként egy csomó magyar nyelvű infó van, elég sokat haladtam a dologban, mindkét nyelvvel fel tudok írni alapvető logikákat, alig látok eltérést bennük. Az ISE is kezd derengeni, ahhoz is van leírás, elég jó(verilog példán keresztül). De választani nem tudok. A VHDL valahogy jobban emlékeztet az ASM-ra, amit szeretek, de itt ilyen összehasonlításnak nem sok értelme van. Mindenhol azt olvasom, hogy a Verilog a kezdők nyelve, mert a VHDL nehéz, mert szigorúbb. Namost ez mit jelenthet nem tudom, mert szerintem ha egy nyelv nem elég szigorú, akkor nem lesz belőle jó kód! Egyszerű logikáknál nem látszik a két nyelv különbsége, nem tudom, ha most hallgatok a Verilog pártolókra, nem járok-e úgy, mint az, aki most kezdi a PIC-et, és C-vel kezd, csak azért, mert sokak szerint az ASM nehéz. Nehéz, nem nehéz, azon keresztül lehet megérteni a lényeget... Valaki segítsen ki ebben! Az asszinkron rezgőkörös implementációs kérdés is él, lehet e ilyet egy CPLD-ben?
Amúgy én is hol így, hol úgy olvastam. Ha van valami jól használható infód, amiből lehet tanulni, azt megköszönném, ha megosztanád. Valamiért én inkább a Verilog felé indultam el, szintaktikailag nekem egyszerűbbnek tűnik. Bár még nem sikerült futófényen kívül bármit is összehoznom. PIC-cel kapcsolatban egyet értek, az ASMet kell elsőnek megtanulni, utána jöhet a C. Amúgy vannak fordítók C-ről a HDL-ekre.
Szia!
Szerintem semmit. Mindkét leíró nyelven programoztam már (bár nem olyan nagyon sokat), számomra a Verilog könnyebben áttekinthető, C/C++ szintaxishoz közelebb áll, mint a VHDL (ezt inkább olyan pascalosnak látom). Úgy hallottam, hogy a VHDL biztonságosabb, jobban le van korlátozva az ember, mint Verilog esetén. De azt hiszem abban kiegyezhetünk, hogy mindkét nyelven lehet jó, illetve rossz kódot írni (akárcsak ASM, vagy C esetében is). Szerintem nézz meg néhány mintapéldát és azok alapján döntsd el melyik a szimpatikusabb.
Köszönöm, néztem, és mindkettőt ki is próbáltam alap fokon, nem tudok dönteni. De majd megszülöm!
Nekem VHDL doksik vannak inkább, de ez a link egy verilogos doksira mutat, ami az ISE használatán keresztül közelíti a témát. Nekem sokat segített.
Bővebben: Link Csatoltam egy jó VHDL-es jegyzetet, ami szintén nekem a legtöbbet hozta. Korábban is volt belinkelve néhány doksi verilog is volt benne 3 zip-et keress.
Még egy gyöngyszem(VHDL): Bővebben: Link
Köszönöm! Volt amit már megtaláltam, volt ami új. Neki kéne már állni, és rendesen betanulni valamelyik nyelvet.
Hosszú távon én egy profibb digitális tárolós szkópot szeretnék összehozni, Egyenlőre gyűjtögetek mindenféle adatlapokat, kapcsolásokat.
Ez nekem is a listán van, bár USB-st szeretnék PC-re zúdítva a történetet. Jelenleg egy TFT meghajtáson dolgozom. Még nem tudom mibe fogtam, azt hiszem...
Van egy 32MByte-os VHDL pdf-m is a címe "VHDL Programming by Example - Douglas L.Perry.pdf" Esetleg erre is rákereshetsz. Ha nem találnád, esetleg felteszem valahová, míg leszeded.
Sokat mondták, hogy csináljak USB-set, de nekem az nem tetszik. Szerintem az sokkal jobb, ha mint műszer önmagában lehet használni, aztán hogy ha össze tudod kötni valahogy a géppel, és ott is tudsz valamit rajta mókolni, esetleg kezelni, az mér luxus. Így maradt az a felállás, hogy egy FPGA a doboz lelke, kezeli az ADC-t, meg egy PIC-et, ami meg a 320x240-es GLCD-t hajtja. Küldtem egy PÜ-t.
Lehet igazad van, de akkor már 5"-os 480x272, vagy 800x600. Ha sikerül a CPLD-s meghajtó, megosztom úgy is, az lehetne az alapja a megjelenítésnek.
Most próbálom elképzelni a belső felépítését a "fekete doboznak". Épp azon töprengek, hogy a címvezérlő számlálókat meg lehet e oldani változókkal(variable), amiket növelek és kiírok a kimenetre függvények szerint, valamint ezeket lehetne módosítani a PIC-től kapott kezdő cím adattal. Lehet, hogy itt konkurens vezérlésbe futok, ezt még nem teljesen értem, de lehet, hogy ezt el lehet kerülni, miután a történések egymás utániak, ismétlődnek és elvileg jól leírhatóak és demultiplexerekkel meg lehet oldani a több forrásból álló címkezelést. (A feladat az lenne, hogy miközben a fő KépRAM területről pakolja a bájtokat a TFT-re, a szünetekben a PIC-ről olvassa a következő képpontok bájtjait és a megadott címtől kezdve akár több részletben feltölti a háttérben lévő KépRAM területet. Ez utóbbi lassabb, miután várni kell amíg a PIC kipakoljaa következő bájtot, ezt a PIC jelzi, ha megvan. Nem akarok belemerülni, hosszú, csak a több forrású, kiválasztható címzést gondoltam felvetni, mint feladatot.) |
Bejelentkezés
Hirdetés |