Fórum témák
» Több friss téma |
Fórum » CPLD, FPGA - Miértek, hogyanok
Pont olyan devboardot sikerült berendelnem, ami kifogyott, és ezt a tényt csak fizetés után árulták el. Még vagy 2 hét, mire ide ér. Ennyit a gyakorlatról
Verilog kontra vhsic hitvitákkal tele a net, amit nem kívánok ide hozni. Amibe belefutottam, annak nem kellene sem hdl, sem fejlesztői környezet függőnek lennie. A hdl-ek mindegyike elvileg hordozható - ebből a szempontból legalábbis.
Hali!
Idézet: „Kissé ellentmondást érzek. Mit kellene gondolnom?” Az ellentmondás szerintem abból fakad, hogy a Xilinx doksiban már a saját eszközspecifikus tulajdonságok alapján írták a guide-ot. Mivel ezek konfigurálható eszközök és a konfigurációs stream tartalmazza a regiszterek kezdő értékét is. Viszont, egy HDL forrás szintézisének eredménye, lehet egy nagy sorozatu ASIC is. Itt nincs konfigurációs stream, a regiszterek véletlenszerüen állnak be, kell egy szinkron, aszinkron reset a bekapcsolás után. Üdv. Zoli
A kísérleti elektronikai tapasztalataitokra lenne szükségem. Sajnos nem vagyok felszerelve eszközökkel ahhoz, hogy kimérjem, amire kíváncsi vagyok.
Cpld-ből szintillesztő latch regisztereket faragnék, amiknek a kimenetéről differenciális órajelet is le kellene vennem. Vajon megbízhatok-e abban, hogy a kimeneten a logikailag egyébként közösen vezérelt jelek (közös jel tárolási vezérlés) szinkronban fognak megjelenni annyira, hogy a differenciális slew rate-em értékelhető legyen? Ha valaki futott már össze a problémával, örülnék a tapasztalt tanácsnak. Ami doksikat fellelni tudtam, ott jel propagálási eltérések alapján összejöhet az elgondolásom, de az csak elmélet. Minden tippet előre is köszönök.
Sziasztok! Van bármi különbség működés vagy fizikai megvalósítás szempontjából a három összeadó között?
A hozzászólás módosítva: Nov 26, 2014
mellékelt képek
Akkor ezek szerint nincs. Köszönöm!
Hali!
Nem boldogulok a XILINX 12.2-es fordítójával: hogyn ismerje fel az LPT1-re dugott JTAG programozót. CSE server nevet vagy IP port-ot kér: Server name <host[;port]>
Ugy emlekszem be kell allitani valamit LPT-re vonatkozoan bioszban. Itt a topikban mintha volt szo rola.
hello!
Adott egy ni labview rio evaulation kit. Ha 2 DIO-t összekötök eg vezetékkel, egyiket írom, másikat olvasom, az úgy jó? Azt szeretném tudni hogy nincs e rövidzár.
Szia, nem ismerem ezt a kit-et, de szerintem nyugodtan összekötheted őket, persze ha biztos vagy abban amit a programmal csinálsz, azaz még véletlenül se fogod mindkettőt kimenetre állítani a programból...
Biztos ami biztos alapon a sima vezeték helyett inkább pl egy 100-1k közötti ellenállást tegyél, így ha mégis mindkettő kimenet lenne és emellett még egyik föld és másik táp még akkor se lesz gond, mert az ellenállás korlátozza az áramot.
köszi!
Nem tudom, hogy te milyen mikrovezérlőre gondoltál, de ha az ezelőtt említett kit-ről van szó akkor több mint valószínű, hogy lehet, mást nem tudom, mikrovezérlőkre általában C-ben szoktak programot írni, de ez már lassan nem ebbe a topic-ba tartozik...
Nagy kedvvel vágtam a VHDL nyelv tanulásába de amellett hogy sok mindent értek azért vannak sötét foltok is. Például a következő dolog nem világos tömb bejelentésénél:
Alap szintaktika: type típusnév is array (indexdef...1 [,indexdef...2]) of típus; A dolog érthető ha ilyen pédát látok: type word is array (31 downto 0) of bit; Itt egy word nevű 0...31 között indexelt korábban definiált bit típusú tömb elemek helyezkednek el. Itt már bizonytalanabb vagyok hogyan kell olvasni a sort. type register is array (byte range 0 to 132) of Integer; Itt egy regiszter nevű tömb keletkezik, melynek tagjai Integer típusúak, de az indexelés már leszűkíti a korábban vélhetően 0...255 közt definiált byte tartományt? Aztán van ilyen is: type vector is array (integer range <>) of Real; Itt az index azt jelenti, hogy az bármilyen szám lehet... Kicsit bővebben valaki tudna segíteni ebben? Aztán a legfurcsább variáció mikor ezt olvasom: type vector_1 is array ( 0 to 20); type vector_2 is array (NATURAL); type vector_3 is array (INTEGER range -10 to 10); Ezeknél hova lett a tömbelem típus? Tudnátok kicsit olvasmányosabbá tenni a fenti sorokat?
Ha még aktuális: régebben (azt hiszem LV 2009-ig) volt egy LabVIEW for ARM csomag amivel ARM-okra lehetett fejleszteni, de ez ma már nem ajánlott új fejlesztésekhez. . A háttérben C kódot generál és a Keil fordítójával fordította le. Az egész a Keil RTX kernelére épül, ha nem supportált hardveren akarod futtatni akkor először azt kell portolni, ami anniyra nem triviális. Egy ismerősöm nekiállt egy STM32! alapú termosztáthoz portolni, de ha nem járt sikerrel.
A hozzászólás módosítva: Jan 2, 2015
Sziasztok!
Így átfutva a topikot gyorsan az elején sok szó esett az ISE webpack rengeteg bugjáról. Ezek az elején elvették a kedvem de, gondolom azóta kijavították őket. Szeretném elkezdeni az ismerkedést a CPLD-kkel is. Rengeteg kérdésem lenne, itt egy pár: Órajel: Külső kvarc oszcillátor de belül van ezekben PLL? Kvarc oszcillátor helyett használható ha egy a CPLD belsejében lévő invertert használok és egy sima kvarc-ot? (pl kvarcoszcillátor TTL áramkörökkel) Feszültség: Hányfajta feszültség kell egy CPLD-nek? Használható a ki és bemeneteik 5V vagy 3,3V szintekkel? A legfontosabb: USB-s JTAG programozót honnan lehet nem arany áron szerezni hozzájuk? Üdv: Suncorgo A hozzászólás módosítva: Feb 20, 2015
A kerdeseid nagy reszere valaszt talalsz az adatlapokban. En egy HC125-el epitett parhuzamos portos programozoval programoztam az XC9572XL-t, de gondolom hogy a fesz szintekre odafigyelve a coolrunner is programozhato lenne.
Nem értem a VHDL kódban miért van az, hogy egyszer az arhitektúra az entitásában közvetlenül a pornak adja meg az értéket, míg más példaprogramban a processben deklarálni kellet egy változót és ez adja értékét tovább a portnak.
másik: [code=c] entity cnt is port (clk, rst : in std_logic; q : out std_logic_vector (3 downto 0)); end entity cnt; architecture behavioral of cnt is begin process (clk) is variable count : std_logic_vector (3 downto 0); begin i f (clk = '1') then i f (rst = '1') then count := B"0000"; else count := count + B"001"; end if; end if; q <= count; end process; end architecture behavioral; [code=c] A hozzászólás módosítva: Ápr 18, 2015
Azért van kétféle képpen, mert a feladat amit elvégeznek is más!
Az első (mint a neve is mutatja) egy multiplexer, ami a SEL bemenetek értékének függvényében kapcsolgatja valamelyik bemenetet a kimenetre (mint egy egyszerű mux. IC), s mivel nincs órajel amihez kellene szinkronizáljon ezért instant kapcsol ahogy megváltozik a SEL, ezért nincs belső változó, csak egyből a kimenetre pakolja a bemenetet. A második esetben egy számlálód van (neve is mutatja... cnt, mint counter rövidítése). Egy számláló általában egy órajel változására növeli értékét, ebben az esetben a felfutó élre. Ez a számláló "meg kell jegyezze" az értékét, hogy majd a következő órajelnél legyen mit növelni egyel, másképp nem lenne számláló...Ahhoz, hogy meg tudja jegyezni, szükség van egy belső változóra (count) amiben tárolja az aktuális értéket, amit ki is tesz a kimenetre. Ennek a számlálónak még van egy reszet bemenete is, ha az is aktiv (logikai 1) miközben az órajel is "1" akkor nullázza a váltzó értékét ami megint megjelenik a kimeneten. Természetesen az első esetnél is lehetne belső változót használni amibe eltárolja a bemenetet és majd kiteszi a kimenetre, de nem lenne semmi értelme, mert később nincs szükség arra az értékre, így egyszerűen "összeköti" a bemenetet a kimenettel. Úgy kell implementálni ahogy az adott feladat kéri.
A program működését értettem, már csak az a kérdés a magyarázatot is jól értem -e.
Egyetlen kulcs mondatot idéznék: Idézet: „ Ahhoz, hogy meg tudja jegyezni, szükség van egy belső változóra (count) amiben tárolja az aktuális értéket, ” Megjegyezni megtudná Q -n is, de azért nem használják így mert esetleg Q -t módosíthatja más is a program egyéb - itt nem írt - részében?
Az igaz, hogy a kimenet is "megjegyzi" az adott értéket, csak azt nem tudod felhasználni bemeneti értékként is ha szükség lenne rá, azaz pl. ha egy bizonyos érték után szeretnéd reszetelni és nem túlcsorduláskor vagy külső reszet jel hatására.
Ezért jó a belső változó, azzal azt csinálsz amit akarsz, használhatod az egyenlőségjel mindkét oldalán, majd a végén kiteszed a kimenetre. Itt egy példa: Bővebben: Link szerk.: a kimenetet más része a programnak nem nagyon tudja módosítani direkt módon, mert nem engedi a hdl nyelv, egy kimenet csak egyetlen process-ben módosítható. Csak úgy lehet ha létre hozol egy-egy változót vagy signal-t mindegyik process-nek amelyik módosítani szeretné ugyanazt a kimenetet, majd azokat a változókat módosítod a process-ekben és majd egy VAGY kapuval kötöd őket az adott kimenetre. Persze ez is függ a feladattól, mert nem minden esetben van értelme ennek. A hozzászólás módosítva: Ápr 19, 2015
Köszönöm a választ teljesen értem a dolgot.
Ugyan a kódot már jól tudom olvasni még kezdőnek számítok a nyelv rejtelmeiben. Például a általad belinkelt példakódban egyáltalán nem világos miért kellett használni a use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; csomagokat? Ha én írom ezt a programot biztosan eszembe sem jut mindez, anélkül meg nyilván nem működik. Amit sejtek, de nem tudom jól gondolom -e a use IEEE.STD_LOGIC_ARITH.ALL; kell az összeadás elvégzéséhez, míg a use IEEE.STD_LOGIC_UNSIGNED.ALL; az operandusok típusbeállításához. (minden a programban definiált signal és változó ilyen lesz ??) Jól gondolom?
Azt hiszem igen, de már nem emlékeszem pontosan, meg ezeket amúgy is az fejlesztői környezet (pl Xilinx ISE) adja hozzá a kódhoz mikor egy új vhdl állományt hozol létre
Sziasztok!
Egy címdekódolót szeretnék készíteni (Amigához) és a sok kapu IC helyett CPLD-re gondoltam. Az 5V miatt az XC9536 vagy XC9582-re gondoltam első körben, de a programozóját a pénztárcámhoz mérten drágának tartom, kb 10eFt körül van pl. az eBay-en. Az Altera esetén viszont 1500Ft-ból meglenne egy "altera Mini Usb Blaster", de sajnos nem tudom alkalmas-e a fent nevezett típusok programozásához. Az Altera MAX7000 pdf-ben található táblázat szerint csak a MAX7000S típusokban van ISP via JTAG interfész, illetve külön oszlopban jelzi az EPM7032 és EPM7064 típusokat. Esetleg ismeri valaki ezt a programozót? Köszönöm
XC9572XL-t programoztam LPT portos barkacsolt programozoval (egyetlen IC). Igaz manapsag mar nem valoszinu hogy LPT port van a gepeken.
Esetleg nezz utanna : Xilinx DLC5 Parallel Cable III. A hozzászólás módosítva: Jún 13, 2015
Nagyon szépen köszönöm, még van parallel portom, megnézem
Ezt is nezd meg: Bővebben: Link Keress ra az oldalon: Here is an add-on for the XILINX programming hardware .
Vagy :Bővebben: Link A hozzászólás módosítva: Jún 13, 2015
Itt a rajza a hazilag is megepitheto Parallel portos JTAG programozonak.
Feltelepítettem az ISE Webpack-et, vagyis most már Vivado-t, viszont nem találom az XC9572-t illetve semmilyen hasonlót nem tartalmaz, mindössze Kintex Artix és Zynq családból lehet választani. Nincs alap logikai kapu sem, amiből összeállítanám a kapcsolást, csak komplex egységek... a google ugyan a barátunk de example-t sem nagyon találok, amiből el tudnék indulni, az első találat is egy "embedded processor design" és a többi is úgy kezdődik, hogy valamilyen fejlesztőkártyát kell kiválasztani... hát azt hittem azért ennél könnyebb lesz elindulni és érthetőbb, értelmezhetőbb a fejlesztőkörnyezet, nem processzort akarok tervezni és nem X ezer Euro-s fejlesztőkörnyezeten
Ha esetleg volna tanács, hogyan merre kezdjem (az alapoknál) megköszönöm előre is.
Az ISE Webpack-bol a 14.7 a legutolso. Az meg talan tudja ezeket a CPLD-ket. A vivaldo nem. A Webpack letoltheto.
|
Bejelentkezés
Hirdetés |