Fórum témák
» Több friss téma |
Fórum » CPLD, FPGA - Miértek, hogyanok
Hello kosszz Carlen a segitseget most mar egyre jobban kezdek bele jonni csak sajnos megakadtam s nem tudom kitalalni h hol rontottam el. Akartam kesziteni egy rajzot ami szamolja az idot es annak fugvenyeben gyul ki vagy alszik ki a led de nem tudom h mi van de a C lednel elakad es nem akarja folytatni. a surrend meg ugy lenne h A,B,C,B,A,B,stb es a C nel pedig a szamlalo csak szamol es nem inditja be a Bt es sehogy sem kapom a hibat.A bal oldali szamlalo fuggvenyeben kezd vagy alnak le a szamlalok 00 az A, 10 a B stb.Tudnal segiteni?A rajzot mellekeltem.
Hát bele néztem, de én már ezt is inkább Verilogban programoznám meg. Sajnos eddig csak a bináris számláló sikert, Knight Rider futófényt még nem.
Pedig az csak egy oda, vissza számláló, vezérelt iránnyal. Persze könnyen beszélek, én sem írtam még le ilyet soha, de azt hiszem sikerülne. Esetleg tárgyaljuk ki itt, úgy sincs szó itt programozásról, legalább is elvétve. Sajnos a hozzáértőbbek is eltűntek, mint a kámfor, nincs kitől kérdezni...
Az kicsit elüt, hogy én VHDL, te Verilog, de szerintem nincs akkora eltérés a két nyelv között ilyen szinten, hogy ne lehetne megérteni. Ha 10 LED lenne a Rider, akkor kéne egy bináris előre-hátra számláló 0..9-ig. A számláló értéke vezérelné a LED-eket(10bites Out, Select Case kiválasztás számláló értékétől függően. Végül is egy Decoder/Demultiplexer 4bitről 10 lábra). A számláló értéke választaná ki az irányt, azaz ha 9 akkor vissza, 0 akkor előre(if feltétel, irány signal beállítasa, számláló ettől függően órajelenként +1, vagy -1). (3 után tudok ISE elé ülni, legaláb lesz egy téma, amin elindulok, eddig csak olvastam, de annyit, hogy már a fülemen jön ki! )...
Összeszenvedtem. Biztosan tele van hibákkal, átgondolatlanságokkal, de szimulátorban működik, igaz, hogy a RESET egy kicsit furára sikeredett!
Arra nem jötem rá, hogy hogyan lehet kezdő értékeket adni a signaloknak, illetve még van egy csomó fekete folt. Minden építő kritikát elfogadok! Köszönöm!
Ma megnéztem a rajzot, amit a program generált és az elfoglalt alkatrészek arányát. Hát eléggé rosszul lettem a látványtól. Ezért megpróbáltam másképpen leírni a feladatot. Ez lett belőle:
A szimulációt csatoltam és a kapott rajzot is, valamint a korábbi rajzát is. Bár ez csak egy kezdő kósza próbálkozása, még is kiderül, hogy nagyon nem mindegy, hogy miképpen van valami leírva. Az okokat sejtem, mint béka az esőt, de még használni nem tudom a mögötte rejlő tudást, mert még nem tudtam megfogalmazni, hogy hogyan is kell jól megközelíteni egy feladatot. Jól jönne egy kis szakértői vélemény! :worship:
Az szép, gratulálok! Én Verilogban ezt nem tudtam leprogramozni, amit te küldtél, azt meg nem értem, a VHDL nekem kínai.
A lényeg, hogy működik. Amúgy ez kicsit off, de pár napja szerencsétlenkedek egy 128x64-es GLCD vezérléssel PIC ASM-ből, de egyenlőre Istenért sem akar megindulni. Nem tudom mi a baj, pedig elvileg minden jó.
Hali!
Azért lehet kicsit egyszerűbben. Csináld shifteléssel. Jobbra: sLED0_9 <= '0' & sLED0_9(7 downto 1); Balra: sLED0_9 <= sLED0_9(6 downto 0) & '0'; Aztán csak a két szélső ledet kell figyelni és ha 1, irányt váltani. Üdv. Zoli>>
Köszi, nem ismertem a shiftelés módját.
Esetleg abban tudsz segíteni, hogy hogyan szoktak előállítani vezérlő jeleket? pl. Várni kell 2millió órajelet, majd egy vezeték 50-ig 0 , 500-ig 1 ezt 300*, aztán előről... A rendszer órajelet lehet osztani a Coolrunner2 CPLG-ben valahogy, de nem tudom hogy...
Milyen vezérlő jeleket akarsz ? A KR léptetetést akarod lelassítani ? CR2-m van nekem is, de én nem használtam az osztót. Itt írnak róla: Bővebben: Link
ÜDv. Zoli
Nem, dehogy, egy TFT vezérlő jelét kéne előállítani körülbelül a jelzett órajelszámoknál(úgy, hogy ne menjen rá a XC2C128 fele ).
Kipróbáltam a shiftes példát, de úgy tűnik sokkal nagyobb áramkört generált. Pedig azt hinném, hogy ez egy tök egyszerű áramkör, ha lerajzolom. Mit kéne másképp?
A linket nézem, köszi! Idézet: „Jobbra: sLED0_9 <= '0' & sLED0_9(7 downto 1); Balra: sLED0_9 <= sLED0_9(6 downto 0) & '0';” Ez bitszélesség helyesen: Jobbra: sLED0_9 <= '0' & sLED0_9(9 downto 1) Balra: sLED0_9 <= sLED0_9(8 downto 0) & '0'; 8 bitben gondolkodtam. Üdv. Zoli
Esetleg if sLED0_9(9) = '0' , de szerintem lehet nem lesz kisebb, mert úgyis kioptimalizálta.
TFT vezérlő jeleket counterek nélkül nem úszod meg. Üdv. Zoli
Igen a bitszélességre rájöttem.
Idézet: „if sLED0_9(9) = '0'” Ezt próbáltam először, valami baja van vele. ?? ui. Megvan, macskakörmök közé tettem véletlenül a bit értékét ("1" a '1' helyett! A counterekkel nincs is sok bajom, csak nekem fura, hogy mekkora helyet tudnak elfoglalni, főleg ha bizonyos időpontokban akarok valamit csinálni azaz komparátorokat is betesz. Arra már rájöttem, hogy jobb több kisebb számlálót egymás mögé fűzni, mint egy nagyobbon végigellenőriztetni a kritikus pontokat, mert a nagy komparátorok pazarlóbbak, mint a sok kicsi. De valóban nem úszom meg, és talán azt sem, hogy nagyobb eszközt kell vegyek, mert nem fog belemenni... Köszi az eddigieket, számítanék még rád! Rögtön kérdezék is, mert nem tudom beinstallálni a ClockDividert, nem teljes a példa a pdf-ben(és apélda link nem működik) és nem értem a csatalkozási pontok felhasználását sem igazán. Esetleg egy példát tudsz adni?
Megnéztem a technológiai rajzot, a v3-assal majdnem egyforma felépítésű, így végül is hasonló áramkört épített. Ennél jobban nem hiszem, hogy le lehetne egyszerűsíteni...
Esetleg ez nem eredményez kisebb kódot ?
Ebbe benne van az osztó bedrótozása is a pdf alapján. Hiba lehet benne, mert nagyon éhes vagyok, nem vacsoráztam még . Üdv. Zoli
Köszi! Csak holnap délután nézem meg, mert aludni kéne! Jó éjt!
Szia!
Kipróbáltam, köszönöm! Két dolog van: a. A Clock Counter, figyelmeztetéssel fordul le, és a szimulációban nem tudja felhasználni a forrást, nem számlál. Az üzenet a következő: Instantiating black box module b. Lefordítottam a CLK_DIV16 nélkül. Látszólag egyszerűbb a rajz de a használt Pterms terület nagyobb(36(9%), vs. 19(4%)). Bevallom nem tudom, hogy ez a terület micsoda, de ha fogy, az nem jót jelent egyrészről. Másrészről sebesség tesztet nem tudtam még szimulálni, lehet, hogy a te verziód, vagy egy másik a sok közül gyorsabb lenne, és akkor megérné erőforrást fordítani rá bizonyos esetekben, ahol ez fontos. (Itt ugye nem a futófény a fő kérdés, hanem az elmélet.) A variable- vel kapcsolatban eddig azt hittem, hogy az ilyen módon deklarált változó, szemben a signallal, a Registers-ben kap helyet, ezzel szemben a te verziódban, ahol az sDIR variable, ugyanannyi regiszter foglalódott le, mint a többi verzióban, ahol nincs variable. Eddig azért próbáltam kerülni a használatát(annak ellenére, hogy az még a processen belül kiértékelődik), mert gondoltam jobb ha azt fontosabb dolgokra tartogatom, de látom nem ilyen egyérteműek az összefüggések a fordítás során! Az se tiszta, hogy egyáltalán van-e igazi regiszter egy CPLD-ben, illetve amit számol, az valóságos, vagy hogy kell érteni? (Csatoltam egy képet az összegzésről, az itt látható területeket kérdezem).
Hali!
a.,
A megjegyzés szerint kell eljárni. Én is belefutottam . b., Azt már én is észrevettem, hogy nem mindig az egyszerübb felirás a kisebb erőforrás igényű. Esete válogatja. A változó még nekem sem tiszta teljesen, annyi jött le, hogy olyan mint a C-ben a lokal változó és csak a processz végén lesz regiszter belőle. Nálam ott az sDir regiszter FDC az RTL sémában. Próbáld ki ezt a kódot úgy, hogy az sDir-t kiteszed signalnak ( értékadásokat át kell írni <= -ra) és nézd meg a szimulációt. Üdv. Zoli
Kivettem a kommentet a két sor elől, de a hiba ugyanaz, az U1 : CLK_DIV16 sorra mutat a warning. Neked lefordul?
Még nem szimuláltam le signal sDir-el, de úgy sejtem, hogy el fog tolódni a "LED" lépése, mert a signal csak a process végén fog értéket váltani(csak a következő órajelnél veszi észre a process if ága), szemben ha variable, mert akkor azonnal, így az ilyen feltételeknél jobb variable-t használni.
Nem kell oda valami "header" ? (use library akarmi)
Warning nálam is van, az nem gond. Nálam szimulálni is lehet. Na, látom érted a variable signal különbséget.
Nem tudom ezt az anyagot ismered e ? Bővebben: Link Egyébként megnéztem egy régi tft cuccosomat (első lépések voltak) 256 MC-ás CR2-vel csináltam, MC 57%, PTERM 46%, REGS 50%, FBI 65% és ebben benne volt a kijelző HW-es törlése is (320x272). Üdv. Zoli
Köszönöm a doksit, ezt nem ismertem!
Igen én is úgy érzem, hogy a 128-asba nem fog beleférni, de hát ez van. Kisebb dologra jó lesz, csak kár, hogy amikor rendeltem nem 256-ost vettem. Akkor még nem tudtam, hogy mekkora kódokat generál egy aránylag egyszerűnek tűnő forrásból. Még arra kíváncsi lennék, ha schematic-be megrajzolnám ugyanazt, akkor is ekkora lenne? Na majd kipróbálom a KRF-el! A szimuláció nálam a pCLK-t hozza fel és a clk_div_by_16 meg sem jelenik, de még próbálkozom!
Mekkora kijelzőt akarsz kezelni vele? Adatlap van ?
Memória ? Mivel (uC?) és milyen interface-el akarod meghajtani ? Kicsit bővebben ? Üdv. Zoli
Na ezt még értelmeznem kell, de köszi a linket!
Közben sikerült szimulálni, és az RTL rajzon is megjelent az osztó. A szimulációkor a pCLK jelenik meg, de pOut1 lábon látható az osztó hatása(minden 16. órajelnél vált), tehát működik. Az volt a tévedésem, hogy azt hittem az órajelben látszik az osztás, de logikus, hogy az órajel az adott és kintről jön a lábról!
480x272, TFT 3x8bit RGB redukálva 332-re, 7..12MHz CLK. SRAM 10ns 512K, PIC (valamilyen 24, vagy 32-s család, de végül is egy izmosabb 18F is elvezérli, miután csak a RAM egyik területét kell feltöltenie a képváltás előtt. Csak rajzok és szöveg lesz megjelenítve, képek nem jellemzően. A textúrákat egy SD kártyán, vagy egy flash-en fogom tárolni. Van konkrét elképzelésem a vezérlésről, csak vasba kéne önteni! Nem sűrgős, szeretném közben megérteni a hardverleírás rejtelmeit is!
Lehet, hogy naív kérdés, de úgy látom, hogy ez az órajel osztó nem hardveres, hanem csak egy előre definiált komponens, amilyet én is írhatnék?
Mert felhasznált egy makrocellát és egy regisztert(így könnyű az én kontómra! ). Én meg azt hittem, van benne egy elkülönített osztó, amit ezzel lehet előhívni!
Upsz, nem szóltam! De lökött vagyok, hiszen nem az osztónak kellett a hely, hanem a fd tárolónak és a puffereknek! Akkor még is csak hardveres! (Illene az adatlapot átnéznem, de egyelóre nem volt hozzá még erőm, mert a PIC után nekem ez nagyon áttekinthetetlen és információ szegény...)
|
Bejelentkezés
Hirdetés |