Elektroda.pl
Elektroda.pl
X
IGE-XAO
Proszę, dodaj wyjątek dla www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Wszystko o układach programowalnych... podstawowe informacje

marenc 24 Lut 2008 22:30 14676 95
  • #31
    marenc
    Poziom 24  
    Witam ponownie ... korzystając tylko z budowy programu na schemacie można zauważyć naprawdę ogromne możliwości układów programowalnych. Chyba się w to wkręciłem i zacznę przeglądać kody ;)

    Mam jeszcze tylko ogólne pytanie ... I/O napisanego programu można ręcznie przyporządkowywać ... czy może być to naprawdę dowolne przyporządkowanie? Czy wpływa ono na jakość optymalizacji lub wykorzystania zasobów układu?

    Do czego służą piny VAUX; GCLK; GTS; GSR; Clock devider reset; Data gate enable? Prosił bym o podanie krótkiego przykładu przy którym mógłbym wykorzystać dany pin...

    I prosił bym parę słów o bankach ... jakie mają znaczenie i inne podstawowe informacje.
  • IGE-XAO
  • #32
    sepher
    Poziom 19  
    Przyporządkowanie IO wpływa znacząco na położenie w układzie co za kolei wpływa na czas propagacji. Ułomny plastycznie przykład jest poniżej. Jeśli szary bloczek ma tą samą strukturę w obu przypadkach, to układ po lewej ma niższe czasy propagacji, ponieważ sygnały mają krótszą drogę do przebycia. W praktyce trzeba brać pod uwagę jeszcze rzeczy typu położenie względem bloków o ustalonej pozycji w strukturze układu (dla Spartana 3 to np. BlockRAM i mnożarki). Jeśli chodzi o banki - najważniejsze jest to, że korzystają z jednego standardu wejścia/wyjścia (napięcia, układ elektryczny itd.). Dodatkowo zwykle jest ograniczenie ilości wyjść jednocześnie zmieniających swój stan dla całego układu i dla bloku. Co do pinów - dopiszę później, teraz muszę już znikać.
  • #33
    elektryk
    Poziom 42  
    mariuszlorenc napisał:
    Do czego służą piny VAUX; GCLK; GTS; GSR; Clock devider reset; Data gate enable? Prosił bym o podanie krótkiego przykładu przy którym mógłbym wykorzystać dany pin...
    Popatrz na schemat logiczny układy, to są piny dedykowane, układ jest tak zaprojektowany że są one "rozprowadzone" po całym układzie (nie wykorzystując matryc połączeń). Generalnie są one optymalizowane do określonych zastosowań, np
    GCLK -> linie zegara, szybkie, z małym jitterem
    GTS -> bufory trójstanowe, podłączone do matryc logicznych, pozwalają wewnątrz robić coś w rodzaju magistrali z buforami trójstanowymi (kiedyś 16x8 miały dedykowany pin OE z podobną funkcją).
    GSR -> reset/set przerzutników, doprowadzone do wszystkich makrocel, służą do inicjacji układu.
    Vaux, to nie wiem, myślę że to samo co Vio, zasilanie buforów pinów, można wykorzystać do zrobienia jednego z banku pinami o innych progach napięciowych (np 5V, gdy rdzeń 3v3, albo 3v3, gdy rdzeń 2.5 etc)
    mariuszlorenc napisał:
    I prosił bym parę słów o bankach ... jakie mają znaczenie i inne podstawowe informacje.
    Banki w przypadku CPLD są to piny dedykowane do grup makrocel. Każdy pin układu ma bit konfigurujący czy ma trafiać na matrycę logiczną (i być obsługiwany z głębi układu), czy trafić na dedykowaną makrocelę. Efekt jest taki że sygnały z makrocel dedykowanych są szybsze, mają mniejszy opóźnienia (i takie same względem siebie) i nie wykorzystując matryc połączeń.

    Myślę że powinieneś podawać typ układu o którym dyskutujemy, pozwoli to dokładniej odpowiadać na pytanie.
  • #34
    marenc
    Poziom 24  
    Witam ponownie. Proste układy już wykonałem i podczas symulacji wchodzi tak jak sobie tego zażyczyłem ;)

    Moje pytanie ... w jaki sposób mogę wykonać "komponent" do programu ISE WebPack, abym mógł go używać podczas projektowania schematu? Może być rysowany lub w VHDL.
  • #36
    marenc
    Poziom 24  
    No i wszystko jasne :D Wielkie dzienx ;)
  • #37
    MarasK
    Poziom 18  
    To może ja zadam pytanko -
    czym charakteryzują się poszczególne rodziny układów?
    Słyszałem o Spartanach, Cyclone.
    Są jakieś większe różnice między nimi poza producentem?
    Które środowisko do programowania jest najwygodniejsze.

    Do tej pory miałem styczność tylko z Max+Plus2 na Max EPM3128.
    Macie jakieś miejsce w sieci, gdzie można dowiedzieć się więcej o CPLD, FPGA itp? Może być polska lub angielska strona/pdf.
  • IGE-XAO
  • #38
    pndemon
    Poziom 19  
    generalnie strona producenta jest dobrym miejscem do rozpoznania różnic w matrycach
  • #39
    MarasK
    Poziom 18  
    Umiem porównać pobieżnie dane techniczne, ale zależałoby mi bardziej na zdaniu osób, które miały doświadczenia z ich różnymi rodzajami.

    Tak samo, jak sam miałem styczność z PLC Easy Moellera, Twido Schneidera, Logo Siemensa, Omron i mogę się wypowiedzieć, które mi się podobają i dlaczego, a które omijać z daleka (Twido! :P).

    Co innego teoria, a co innego praktyka, doświadczenie z różnymi matrycami.

    Osobiście bardziej podobają mi się CPLD, bo nie potrzebują konfiguratora. Zdaję sobie sprawę, że są przez to bardziej ograniczone, ale nie można mieć wszystkiego.
  • #40
    pndemon
    Poziom 19  
    Ogólnie mówiąc (bez szczegółów dotyczących budowy, z resztą w necie można łatwo znaleźć info o różnicy CPLD i FPGA) FPGA po mimo tego że są oparte na pamięciach ulotnych, mają znacznie większe możliwości, za równo pod względem wielkości projektów jak i szybkości działania.

    Co do poszczególnych producentów, to na rynku widać dwa bieguny Xilinx i Altera. Tak na prawdę matryca to matryca i musi być dostosowana do potrzeb zadania, co zaś się tyczy oprogramowanie, to jest to kwestią co kto lubi. Ja np używam Xilinxa i jestem zadowolony, natomiast nie miałem okazji pracować na sprzęcie Altery, poza tym opanowanie dwóch środowisk jest dosyć żmudne. Niestety ale dyskusja na wyższością jednego nad drugim, to wg. mnie dyskusja nad wyższością świąt bożego narodzenia na wielkanocą.

    Podsumowując, jak chcesz zrobić coś poważnego to i tak i siak trafisz w końcu na FPGA, a tu to już w zależności co cię interesuje, bo co innego będziesz potrzebować dla DSP, a co innego jeśli zależy ci na logice.
  • #41
    MarasK
    Poziom 18  
    Akurat z porównania Altera i Xilinx jest jak Boże Narodzenie i Wielkanoc, to się cieszę. Oznacza to, że niezależnie produktami której firmy się zajmę, nie zabrnę w ślepą uliczkę. Firma Lattice (producent m.in. Gali i serii MACH) się nie liczy? Jest zmarginalizowanai poza czołówką?

    Zgodzę się - do zaawansowanych rzeczy FPGA jak znalazł, ale do moich zastosowań myślę CPLD jest dobrym startem. Bo o ile się nie mylę programowanie obu typów układów sprowadza się do narysowania programu lub sporządzenia opisu zachowania matrycy w *HDL?

    Pamiętajmy też o tym, że FPGA to wyższa półka cenowa niż CPLD, wymagają konfigutatora, który nie kosztuje 10zł :/ Najtańszy na tme jaki znalazłem 40zł.

    Chciałbym kiedyś potrafić zrobić sobie przystawkę np do awkizycji danych ze 100 czujników na PCI-E lub USB2.0 z pełną prędkością itp. Ale to raczej na studiach się tym zajmę, bo teraz maturka itp.

    Możesz polecić jakiś w miarę tani startekit, ale nie zubożały? Najbardziej interesuje mnie tematyka ethernet, usb i inne układy interfejsowe.

    Mam nadzieję nie zadręczam Was pytaniami :)
    Pozdrawiam i dziękuję za odpowiedzi
    Marek Kuciński
  • #42
    pndemon
    Poziom 19  
    Jak mówiłem mam tylko styczność z układami Xilinxa, więc www.digilentinc.com. Ale szczerze polecam ściągnij sobie ISE do tego ModelSima XE (ALtera ma swoje odpowiedniki) i pobaw sie tym za darmo. A matryce kup jak ci się znudzi.
  • #43
    J.A
    Poziom 27  
    MarasK napisał:
    Firma Lattice (producent m.in. Gali i serii MACH) się nie liczy?

    w tej chwili niestety nie, gal to kilkadziesiat bramek, mach kilkaset;
    [od mach'ow zaczynalem, mam do nich pewien sentyment ...]
    cpld/fpga to tysiace i setki tysiecy bramek az do miliona+ w najwiekszych ukladach;
    plus takie rzeczy jak wew. pamiec, pll, dll, specjalizowanie uklady arytmetyczne,
    programowalne i/o obslugujace rozne standardy;
    slowo o porownaniu xilinx/altera, z altera pracuje na codzien, xilinxem
    musialem zajmowac sie przez ok. rok:
    fpga/cpld xilinxa sa nieznacznie lepsze, w rekach doswiadczonego uzytkownika,
    ale naprawde doswiadczonego, mozna z nich 'wycisnac' wiecej niz z odpowiednika
    altery, chodzi mi glownie o max. czestotliwosc pracy jak i zuzycie zasobow
    przez identyczny projekt;
    software aletry jest zdecydowanie bardziej user-friendly i - co czasem wazniejsze -
    stabilny, czego nie mozna powiedziec o ise;

    J.A
  • #44
    pndemon
    Poziom 19  
    Cytat:
    software aletry jest zdecydowanie bardziej user-friendly i - co czasem wazniejsze -
    stabilny, czego nie mozna powiedziec o ise;

    może nie jestem jakimś starym wyjadaczem ISE, ale nie napotkałem nigdy problemów ze stabilnością, choć jak słyszałem wiele osób ma problemy z wbudowanym symulatorem, którego jak tylko zobaczyłem to zaraz uruchomiłem ModleSima, więc może dlatego :)
  • #45
    J.A
    Poziom 27  
    pndemon napisał:
    /...ale nie napotkałem nigdy problemów ze stabilnością/...

    zle sie wyrazilem, nie mialem na mysli wieszania sie programu,
    ale sporo latek i 'work-around' trikow potrzebnych dla ise do
    poprawnego dzialania;

    sam szukalem po sieci hasla 'antenne' - blad ise, ktory powodowal,
    ze do wyjscia komorki laczona byla sciezka prowadzaca donikad,
    stad 'antena' przed ktora ostrzegal software;
    mialem tez efekt, ze ise kompilowalo w nieskonczonosc, po ubiciu
    i dodaniu jednej pustej lini w pliku hdl poszlo bez problemu;
    ladowanie obrazu do fpga zwykle wymagalo 2-3 prob;

    no i komentarze na tym forum tez o czyms swiadcza;
    [choc zdaje sobie sprawe z tego, ze brak narzekania na quartus
    jest efektem jedynie tego, ze prawie nikt z nim nie pracuje ... ;)]
    juz nie pamietam kto - ty, czy g.d stwierdzil, ze ise w zasadzie
    nadaje sie jako place&route i programator;

    ale - jesli ktos rozwaza w nauke ktorego narzedzia zainwestowac czas,
    to trzeba tez miec na uwadze, ze xilinx wciaz jest popularnieszy,
    wiec w przyszlej pracy szansa na to, ze trzeba bedzie pracowac
    ze spartanem czy virtexem jest wieksza niz na spotkanie z cyclone
    czy stratix;

    J.A
  • #46
    [g.d.]
    Poziom 18  
    J.A napisał:

    juz nie pamietam kto - ty, czy g.d stwierdzil, ze ise w zasadzie
    nadaje sie jako place&route i programator;

    To nie ja, prędzej griva. Ale znam kilka osób, które podzielają tą opinię.:|

    Jak o mnie chodzi to projekt można pisać nawet w notatniku i tylko wygenerować *.bit :D, a programuje się świetnie przez JTAG, czy dodatkowy mikrokontroler, nie koniecznie soft-em Xilinx-a. :D

    Co do ISE tak jak napisał J.A czasem generuje dziwne sytuacje, a w okolicy okrągłych wersji 8.0, 9.0 też było sporo wylotów (królował map.exe), ale nie na takich przeciętnych projektach raczej na "testowych".:cry:

    Kiedyś słyszałem że Xilinx ma taką technologię że miesiąc przed premierą nowej wersji trafia ona do "współpracowników" i w chwili "premiery" dostępny jest od razu ServicePack1 :D
  • #47
    marenc
    Poziom 24  
    Cytat:
    ...programuje się świetnie przez JTAG, czy dodatkowy mikrokontroler...

    Możesz to rozwinąć? ;) Potrzebował bym jakiś programator pod cokolwiek innego niż LPT. Oczywiście najlepiej DIY ;) Mam Xilinx'a X-Board, ale chyba nie mogę różnych układów łączyć w JTAG-Chainy, tak?
  • #48
    [g.d.]
    Poziom 18  
    mariuszlorenc napisał:
    Cytat:
    ...programuje się świetnie przez JTAG, czy dodatkowy mikrokontroler...

    Możesz to rozwinąć? ;) Potrzebował bym jakiś programator pod cokolwiek innego niż LPT. Oczywiście najlepiej DIY ;) Mam Xilinx'a X-Board, ale chyba nie mogę różnych układów łączyć w JTAG-Chainy, tak?

    Cokolwiek innego niż LPT, DIY i najlepiej gotowiec, może być cieżko. :D

    Tworzenie nowego kabla w momencie gdy IMPACT wciąż supportuje DLC5:
    http://www.xilinx.com/support/programr/jtag_cable.pdf
    to wyważanie otwartych drzwi. :|

    Możnaby pokombinować z USB i np. FT245RL, tylko po co? Ostatni raz coś takiego robiłem przy pracy dyplomowej w oparciu o mikrokontroler Cypress-a (bo taka była specyfika tematu) dlatego piszę że się da. :D

    Bardziej świeże przemyślenia może mieć lordac:
    https://www.elektroda.pl/rtvforum/topic882472.html#4522649
    https://www.elektroda.pl/rtvforum/topic885052.html#4829087
  • #49
    marenc
    Poziom 24  
    Witam ponownie, zamierzam się troszku pobawić ze sporymi częstotliwościami(to było głównym powodem przejścia na układy programowalne ;) ). Mam pytanie, bo niezbyt rozumiem część dokumentacji. Screen poniżej przedstawia tabele maksymalnych częstotliwości.

    Ftoogle - to częstotliwość wewnętrznego przetwarzania?
    Fsystem1 - to maksymalna częstotliwość na licznikach wewnętrznych?
    Fsystem2 - to maksymalna częstotliwość na bramkach OR?
    Fext1 - to maksymalna częstotliwość wejściowa na I/O?
    Fext2 - to maksymalna częstotliwość wejściowa na I/O??
  • #50
    [g.d.]
    Poziom 18  
    Nie wiem skąd tą dokumentację do CoolRunner-II wyciągnąłes, ale w tym co ściągnąłem z netu pod tabelką pisze:

    1. FTOGGLE is the maximum clock frequency to which a T-Flip Flop can reliably toggle (see the CoolRunner-II family data sheet).
    2. FSYSTEM1 (1/TCYCLE) is the internal operating frequency for a device fully populated with one 16-bit counter through one p-term per
    macrocell while FSYSTEM2 is through the OR array.
    3. FEXT1 (1/TSU1+TCO) is the maximum external frequency using one p-term while FEXT2 is through the OR array.
  • #51
    marenc
    Poziom 24  
    Witam, no u mnie to było inaczej ujęte ;) Ściągnąłem drugą dokumentację(z Xilinx'a) i w tej jest tak jak przekopiowałeś ;)

    Ale mniej więcej o to chodzi, tak?

    Ftoggle - maksymalna częstotliwość pracy T-flip-flop
    Fsystem1 - maksymalna dla makroceli z jednym 16b licznikiem
    Fsystem2 - dla bramek OR
    Fext1 - tego nie bardzo rozumiem ???
    Rext2 - jak wyżej tylko na bramkach OR.
  • #53
    marenc
    Poziom 24  
    Witam, właśnie piszę pierwszy program dla układu Xilinx'a XC2C256 w VHDL'u, a nie na schemacie jak to wcześniej robiłem. Mam kilka samouczków, ale potrzebuję kilka prostych podpowiedzi.

    1. Jeżeli po 'process' dodam w nawiasie jakąś zmienną to będzie on wykonywany zawsze przy zmianie tej zmiennej?
    2. Jeżeli zmiennej wewnętrznej nadam 'range' to po przepełnieniu będzie zliczać od 0? Czy jedyny sposób na dodawanie to ZMIENNA := ZMIENNA + 1; ?
    3. Czy jeżeli zmiennej wewnętrznej nadam wartość początkową to zawsze będzie ona wynosiła tą wartość początkową podczas wykonywania procesu czy tylko przy pierwszym jego uruchomieniu?
    4. Podczas wykonywania procesu potrzebował bym dać na wyjściu(zmienna zewnętrzna - pin) impuls o określonym lub dowolnym czasie trwania - w jaki sposób mogę regulować długość impulsu? Standardowa pętla opóźniająca? Czy poniższy kod ma prawo działać?
    Code:
             CL2 <= '1';
    
             CL2 <= '0';

    To by było na tyle ... napisałem prosty program, a schemat jest ogromny ... namawialiście mnie odrazu ... szkoda, że dopiero teraz się przekonałem ;)
  • #54
    pndemon
    Poziom 19  
    1. to są SYGNAŁY a nie zmienne, zmienne można definiować tylko wew. procesu i jako takie nie mogą wejść na listę czułości procesu, jeśli zaś przyjąć że chodziło ci o sygnały tylko się nie precyzyjnie wyraziłeś to odpowiedź jest TAK. Proces zawsze jest uruchomiany gdy nastąpi zmiana wartości któregoś z sygnałów na liście czułości. Zwracam uwagę że w syntezie, wszystkie sygnały występujące po prawej stronie instrukcji przypisania ('<=') są automatycznie dodawane na listę czułości, nawet jeśli programista o tym zapomniał.

    2. Jeśli jest typu integer to nie, w momencie przepełnienia otrzymasz błąd symulacji. Oczywiście w syntezie będzie to zamienione na licznik, ale nie wiem z jakim skutkiem (tzn. czy będzie się 'przekręcać'). Nie ma czegoś takiego jak w C ( zmienna++, ani nawet zmienna += 1) musisz robić tak jak pokazałeś.

    3. Tylko przy pierwszym
    4. Nie - ostatecznie po takim przypisaniu będziesz mieć '0'. Jak chcesz jakieś opóźnienia to masz do wyboru dwie techniki: asynchroniczna - nie polecam, bazuje na opóźnieniach w logice, nie masz tu pewności co do czasu trwania takiego opóźnienia, jest to opcja dla bardzo zaawansowanych użytkoników którzy wiedzą co robią; synchroniczna - robisz licznik i jak dobije do jakiejś wartości to zmieniasz wartość sygnału.

    Na koniec drobna uwaga:
    większość z rzeczy można samemu sprawdzić eksperymentując (poprzez symulacje) z kodem przez 10 min.
  • #55
    [g.d.]
    Poziom 18  
    pndemon napisał:

    4. Nie - ostatecznie po takim przypisaniu będziesz mieć '0'. Jak chcesz jakieś opóźnienia to masz do wyboru dwie techniki: asynchroniczna - nie polecam, bazuje na opóźnieniach w logice, nie masz tu pewności co do czasu trwania takiego opóźnienia, jest to opcja dla bardzo zaawansowanych użytkoników którzy wiedzą co robią; synchroniczna - robisz licznik i jak dobije do jakiejś wartości to zmieniasz wartość sygnału.

    Tak jak powyżej, jeśli czas trwania to może być jakaś wielokrotność jednego taktu sygnału zegarowego, który masz dostępny w CPLD to robisz licznik, jeśli nie to piszesz prosty multiwibrator monostabilny, ale nie wiem jak z tym jest w CPLD bo tam trochę inaczej wygląda sprawa timmingów.
  • #56
    marenc
    Poziom 24  
    Dzięki za konkretne odpowiedzi, a co do opóźnienia w punkcie 4 to zastosuję licznik.

    Co do testowania ... to właśnie dlatego napisałem kod, ponieważ symulator pokazał mi same 'U' :)

    Jeszcze raz dzienx za info ... idę studiować dalej ;)
  • #57
    marenc
    Poziom 24  
    Witam ponownie, od dłuższego czasu walczę z pewnym komunikatem, więc chyba trzeba się spytać specjalistów...

    Syntezując to:
    Cytat:
    if ACTIVE = '1' and CLK'event and (CLK = '0' or CLK = '1') then

    Otrzymuję komunikat:
    Cytat:
    ERROR:Xst:797 - "D:/Xilinx/Sampler/Sampler.vhd" line 44: unsupported Clock statement.


    Kod jest poprawny. Może można to inaczej rozwiązać? Chodzi mi o pracę na dwóch zboczach i warunkiem pracy ACTIVE = '1'.
  • #58
    pndemon
    Poziom 19  
    nie ma przerzutników które działają na opadające i narastające zbocze, inna sprawa że zgodnie ze sztuką nie miesza się w w jednym if'ie sygnałów logicznych i zegarowych, inaczej mówiąc jeśli proces jest synchroniczny to na liście czułości powinny być tylko clk. idąc dalej trzeba dodać, że nie powinno mieszać się w projekcie przerzutników działających na narastające i opadające zbocze. sygnały typu active trzeba używać jak clock enable:

    Code:

    if rising_edge(clk) then
      if ce = '1' then
        a <= b;
      end if;
    end if;
  • #59
    marenc
    Poziom 24  
    Myślałem, że syntezator automatycznie da dwa przerzutniki wyzwalane różnymi zboczami równolegle. Jeżeli w liście czułości procesu nie uwzględnię ACTIVE to otrzymuję jakieś ostrzeżenie, więc tam dodałem.

    Bardziej prawidłowo będzie napisać proces w IF dotyczącym testowania ACTIVE?
  • #60
    pndemon
    Poziom 19  
    standardowo syntezer umieszcza na liście czułości wszystkie sygnały, które znajdują się po prawej stronie znaku '<=' oraz w if'ach, stąd jeśli ich nie umieścisz to wyrzuci ci komunikat że to sam zrobił, oczywiście sprawa nie dotyczy procesów synchronicznych, ale takiego tu nie masz :)

    zastanawia mnie tylko po co ci takie dwa przerzutniki połączone równolegle, a inną kwestią jest to że jeśli nie jesteś na 100% pewien co powstaje z tego co napisałeś to nie licz na to, że syntezer domyśli się o co ci chodziło, lepiej trochę więcej się napisać, a zrobić to łopatologicznie, przy okazji sam wykryjesz błędy - jak sam nie wiesz jak wykonać coś z przerzutników i logiki, to jest to najlepszy sygnał, że syntezer też tego nie będzie potrafił.