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

Preskaler częstotliwości na CPLD XC9572XL

15 Sie 2009 11:21 9773 74
  • Poziom 10  
    Witam!! Było juz kilka podobnych tematów, ale dalej nie mam odp... Moj problem jest następujący: Mam sobie płytke (z kursu z EdW o cpld) z cpld XC9572XL. Na płytce mam generator 24MHz. Moim zadaniem jest zrobienie licznika który byłby taktowany zegarem 100MHz, lub troche wyżej. Podobno jest możliwość, aby cpld powielał mi tą wartość zegara... Za każdą pomoc serdecznie dziękuje!!!! P.S. Ma to byc zrobione za pomocą tego własnie układu cpld.
  • Poziom 43  
    Musiałbyś zaimplementować układ PLL.
    Nawet możliwe, ale nie obejdzie się choćby bez prostego połączenia pinów XCxxxx.
    Jeden pin jako wyjcie (Slow) a drugi jako wejście.
    Chodzi o to że PLL wymaga filtru analogowego a jego nie zaimplementujesz w CPLD.
    Musi to być filtr np. RC (ale kto wie – może ten pin ustawiony jako powolne wyjście by to odfiltrował ;p).

    Czyli musisz zaimplementować w zasadzie tylko dzielnik i detektor fazy którym może być bramka XOR. Trzeba też generator VCO. Z tym też będzie problem. Można spróbować zaimplementować dwa negatory. Ich wejścia i wyjścia wypuścić na piny układu i tam podłączyć elementy RC. Ale żeby aż na 100MHz? Chyba nie zadziała. Nawet prosty generator LC na tranzystorze (i z diodą pojemnościową żeby dało się mocno przestrajać) był by lepszy.

    Dodano po 6 [minuty]:

    Można też wygenerować małe opóźnienie (jednym buforem). I zegar normalny i ten opóźniony podajesz na wejścia bramki XOR. W ten sposób uzyskasz ciąg krótkich impulsów o podwojonej częstotliwości.
    Te impulsy znowu podajesz na bufory, tym razem na większą ilość.
    Tym razem ilość buforów trzeba dokładnie dobrać, żeby uzyskać opóźnienie dokładnie o połowę okresu.
    Bierzesz impulsy normalne i opóźnione.
    I potem to na bramkę AND. I teoretycznie mógłbyś w ten sposób powielić te 24MHz. Tyle że nie do 100MHZ, ale do 96MHz (ewentualnie do 120MHz, ale XCxxxx może nie wyrobić).
    Dobrze było by powielić jeszcze raz do 192MHz i na koniec podzielić przez 2, żeby uzyskać ładny przebieg o wypełnieniu 50%, ale XCxxxx na 192MHz nie pójdzie, a już na pewno nie na krótkich impulsach (które mają o wiele wyższe składowe).
    Trochę z tym zabawy. Ale chyba mniej niż z PLL.
  • Poziom 10  
    HEy!! serdeczne dzieki za odp!! Ta ostatnia wersja mi sie podoba. Jezeli ktoś ma inne pomysły to chętnie wysłucham... bede probował z tym ostatnim pomysłem. i bede na bierząco pisał. Moze komus sie jeszcze to przyda wiec, chętnie połącze siły:) pozdrawiam

    Dodano po 2 [minuty]:

    jeszce jkedno. XC9572XL ma czs propagacji 5ns i czestotliwosc pracy tak do 170MHz (nie pamietam dokłądnie) a słysze tu często ze koło 100MHz mogą być problemy... o co tu chodzi????
  • Poziom 43  
    O to że jak impuls ma 1ns, to choćby pojawiał się co jedną sekundę (czyli miał częstotliwość 1Hz) to układ CPLD go nie przeniesie.
  • Poziom 10  
    ahaa, no rozumem juz teraz(chyba)... czyli przy 100MHz mamy okres 10ns, czyli dwa impulsi (0,1) po 5ns?? tak?? czyli jak moj układ ma czas propagacji własnie 5ns to to wszystko moze juz nie zadziałac?? dobrze to rozumie???
  • Poziom 43  
    Tak. Tyle że te 5ns to czas propagacji od pinu do pinu. W środku CPLD może chodzić na trochę większej częstotliwością, pewnie na tej podanej 170MHz.
  • Poziom 10  
    ok, dzieki za uswiadomienie:) generatory 100MHz nie sa az tak drogie (ok 15zł) wiec chyba kupie i zobacze co z tego wyjdzie.
  • Poziom 43  
    Sam miałem to zaproponować.
    Nie wiem gdzie kupujesz, ale ja 66,7MHz kupiłem za 2zł. A u tego samego sprzedawcy były i 80MHz, i 100MHz.

    Dodano po 4 [minuty]:

    A. Javoreczek?
    Faktycznie ma po 15zł. Ale kiedyś miał po 2zł (ale innej firmy).
    Może kup ten 50MHz. Podwojenie częstotliwości będzie o wiele prostsze niż „zczterokrotnienie”.
  • Poziom 10  
    Generator kupie ale wystapił kolejny problem hehhe. Mam za zadania połączyć sie za pomocą SPI z mikrokontrolerem... troche mi to nie wychodzi:/ robił ktos juiz w VHDL'u SPI??? za każdą pomoc (przykłady, wskazówki) serdecznie dzieki.... P.S. Za 2zł 66,7MHz to zajefajna cena:) rozglądne sie jeszcze
  • Poziom 10  
    Mam jeszcze takie pytanie: czy jak podłącze generator 100MHz co może być za dużo dla tego układu to jakie jest prawdopodobieństwo, że go uszkodzę???
  • Poziom 43  
    Nie uszkodzisz.
    W różne sposoby można uszkodzić ale na pewno nie tak.
  • Poziom 10  
    atom1477: metoda z tym opóźnieniem i danie to na XOR działa, przynajmniej na symulacji.

    entity Trans is
    Port ( clk : in STD_LOGIC
    );
    end Trans;

    architecture Behavioral of Trans is


    signal clk_del : std_logic := '0';
    signal clk_del2 : std_logic := '0';
    signal clk_del3 : std_logic := '0';
    signal clk_del4 : std_logic := '0';

    begin
    clk_del<=clk after 5 ns;
    clk_del2<=clk xor clk_del;
    clk_del3<=clk_del2 after 2.5 ns;
    clk_del4<=clk_del2 xor clk_del3;
    end;
    W załączniki dałem przebiegi z symulacji. Zobacze w poniedziałek jak to na oscyloskiepie bedzie wyglądać. Ostatnio jak robiłem opóźnienie sygnału zegarowego to na oscyloskopie pokazywało mi sygnał bez przesunięcia tak jak by polecenie "after xx ns;" nie działało i nie wiem co jest... zobacze jak z tym bedzie, tylko może być problem bo przy tych częstotliwościach są duże zakłucenia w moim układzie i moze byc qp na oscyloskopie:/ o wynikach poinformuje... pozdrawiam
  • Poziom 15  
    Witam!
    Cytat:

    ... Ostatnio jak robiłem opóźnienie sygnału zegarowego to na oscyloskopie pokazywało mi sygnał bez przesunięcia tak jak by polecenie "after xx ns;" nie działało i nie wiem co jest...


    I nie będzie działać, taka składnia jest niesyntezowalna.

    Pozdrawiam
    Wojt
  • Poziom 10  
    Dlaczego?? to jak zrobic opoznienie sygnały tak zeby działało???
  • Poziom 15  
    Witam!
    Dzieje się tak, ponieważ nikt nie wie z jakim zegarem pracuje Twój układ, oraz jakie opóźnienia (dokładnie) występują w tym układzie. Wszystko to przecież zależy od rozmieszczenia bramek w FGPA/CPLD i nie ma nic wspólnego z językiem opisu sprzętu. Z tych powodów konstrukcje "after" są używane tylko do symulacji a nie do syntezy.

    Jednym ze sposobów na wprowadzenie znanego opóźnienia, to wykorzystanie układów sekwencyjnych. Możesz np. zliczać do pewnej ilości impulsów pochodzących z zegara i dopiero wtedy przepuścić (lub nie) sygnał dalej.

    Drugi sposób jaki mi się nasuwa na myśl to układ kombinacyjny. W torze sygnału wstawiasz dużą ilość buforów, które posiadają przecież jakieś opóźnienie. Jednak ta metoda wprowadza opóźnienie mocno zależne od sprzętu, no i trzeba zwrócić uwagę na to, aby syntezator nie wyciął niepotrzebnych jego zdaniem buforów.

    Pozdrawiam
    Wojt
  • Poziom 10  
    No ok, własnie poczytałem sobie o tym i znowu musze coś innego wymyślec:) ale mam juz cos na myśli, o wynikach poinformuje...
  • Poziom 43  
    Metoda ze zliczaniem przecież jest bez sensu. W takim przypadku potrzebny był by zegar w częstotliwości większej niż częstotliwość sygnału który byśmy opóźniali.
    Co do buforów to przecież pisałem.
    Ale faktycznie będzie problem z wycinaniem zbędnych sygnałów (buforów). Sam się zastanawiam jak to zrobić.
    Może sygnały pośrednie trzeba wypuszczać na piny i wtedy syntezator ich nie pousuwa?
    Code:

    entity Trans is
      CLK : In  STD_LOGIC;
      CLK_1 : Buffer  STD_LOGIC;
      CLK_2 : Buffer  STD_LOGIC;
      CLK_3 : Out  STD_LOGIC;
    end Trans;

    architecture Behavioral of Trans is
    begin
      CLK_1 <= CLK;
      CLK_2 <= CLK_1;
      CLK_3 <= CLK_2;
    end;
  • Poziom 15  
    Witam!

    Mój post raczej dotyczył różnych możliwości wprowadzania opóźnień, niż porady do konkretnego przypadku.

    Cytat:

    Może sygnały pośrednie trzeba wypuszczać na piny i wtedy syntezator ich nie pousuwa?


    Radzę raczej zainteresować się atrybutami ograniczającymi np. keep, syn_keep, keep_hierarchy, syn_noprune. Nie jestem pewien, które w konkretnym przypadku zdadzą egzamin, jednak z całą pewnością można ograniczyć zuchwałość syntezera.

    Pozdrawiam
    Wojt
  • Poziom 43  
    No właśnie też bym obstawiał nad wyższością odpowiednich ustawień nad kombinowaniem, ale skoro syntezator na przykład nie potrafi zsyntezować czegoś takiego jak "after" (a przecież ma ustawiony w opcjach projektu rodzaj układu programowalnego więc mógł by dobrać ilość buforów w celu uzyskania odpowiedniego opóźnienia) to myślałem że i na optymalizację nie ma bata.
  • Poziom 28  
    witam wszystkich po dluzszej nieobecnosci zwiazanej
    z pewna zawierucha zyciowa;

    kilka uwag do watku:
    - czesc cyfrowa cpld/fpga nie nadaje sie do podwyzszania
    czestotliwosci zegara wejsciowego, dlatego dodano do nich
    analogowo-cyfrowe uklady pll, jesli takiego konkretna kostka
    nie ma, powielenia czestotlowosci nie da sie zrobic;

    - za pomaca 'cyfrowki' mozna latwo podzielic czestotliwosc
    wejsciowa przez 2 [4,8 itd], stosunkowo latwo mozna tez
    pomnozyc zegar przez wielokrotnosc 2, ale te druga opcje
    nalezy unikac, o ile nie jest to absolutnie konieczne;

    - zapis: 'after 2.5 ns' sluzy symulatorowi, by wierniej
    odtwarzal zachowanie kodu rtl w realnej kosci, a nie
    syntetyzatorowi, by opoznil odpowiednio sygnal, 'after'
    jest przez narzadzie syntezy po prostu ignorowane, a to
    dlatego, ze opoznienie na 'bramkach' fpga i laczacych
    je sciezkach zalezy od wielu czynnikow [temperatura, zasilanie,
    obciazenie pradowe] i w obecnych fpga/cpld nie sposob
    zapewnic stalosci takich opoznien;

    - by zachowac bufor, ktory z punktu widzenia syntezy jest
    zbedny, trzeba zastosowac dyrektywe 'syn_keep';
    w verilogu wyglada to tak:
    . wire signal_delay /* synthesis syn_keep */;
    quartus altery respektuje te dyrektywe, jesli pracujesz
    z innym narzedziem, trzeba w manualu przeczytac, czy
    twoje narzedzie tez taki zapis uznaje;

    na koniec - jesli XC9572XL nie ma pll, to 100 MHz z 24MHz
    da sie zrobic tylko na zewnetrznej pll, inna opcja to
    zmienic uklad na taki, ktory pll ma;

    JA
  • Poziom 10  
    ok, dzieki za wszystkie uwagi. POszukam układu który pasuje do tej samej podstawki i ma PLL czy tam DCM. Kupiłem juz generator 100MHz i jutro dam znac co z tego wyszło. pozdrawiam
  • Poziom 10  
    Układ odpalił na generatorze 100MHz!!!!! Tym zegarem taktowany jest licznik a następnie po przez SPI wysyłam do ADuC'a i na oscyloskopie (taki za 40000zł:) ktory ma bajery jak SPI czy I2C) odczytuje mi warcości, tak jak by niby było ok.
  • Poziom 43  
    No ale to że odpalił na 100MHz to żadna rewelacja bo przecież nie masz żadnego powielacza częstotliwości. Wpuszczasz 100MHz i jest.
  • Poziom 10  
    to sie zgadza, ale byl problem, czy da rady na generatorze 100MHz i okazało sie za dał... z powieleniem częstotliwości na tym ukłądzie juz straciłem nadzieje:)
  • Poziom 10  
    Witam!!! zgłaszam sie z kolejnym problemem. Udało sie mi i koledze porozumieć miedzy ADuC a CPLD za pomocą SPI. Dalszy krok mojego zadania to zrobienie na CPLD czterech liczników 32 bitowych (100MHz). Problem jaki mi wyskoczył, to brak miejsca w układzie XC9572XL. Z jednym licznikiem jeszcze jakoś sobie poradzę, lecz o 4 a nawet o 2 licznikach nie ma mowy. Szef jest skłonny kupić jakiś większy układ, tylko ja mam wybrać jaki. Chciałbym cos w granicach do 70zł. Znalazłem takie układy CPLD tylko nie wiem wiem jak programator zrobić do takiego układu. Najwygodniej to jak bym znalazł CPLD w obudowie PLCC44 i za pomocą programatora z płytki Logicmaster go programował, ale nie wiem czy to jest możliwe?? Wszystkie układy na PLCC44 są takie same, lub słabsze od XC9572XL. Jeżeli ktoś spotkał sie z układem w tej cenie, gdzie zasoby by pozwoliły na stworzenie tych liczników i do tego ma schemat (lub cokolwiek) na temat programatora to serdecznie dziękuje!!!
  • Poziom 10  
    Poszukuję tego układu a dokładniej wersji XC95288XL-6 lub XC95288XL-7. Nigdzie tego w Polsce nie widziałem!!! Dlaczego??????????!!!!!!!!!!!!! Potrzebuję to do pracy mgr. pomocy!!!!!
  • Poziom 29  
    Witam,

    Wersje szybkie czyli -6,-7 są znacznie droższe niż podstawowa wersja -10

    np. dla Xc95288XL-10 kosztuje ok 15$ a wersja -6 już 30$.

    Dlatego w firmach katalogowych dostępne są tylko te podstawowe wersje.
    U dystrybutora dostaniesz te szybsze, ale mogą być problemy z pojedynczymi
    sztukami. W Polsce dystrybutorem jest Avnet-Silica.

    Alternatywne możesz zainteresować się układami firmy Lattice MACHXO (np LCMXO256C).
    Uwaga mają mylące oznaczenia szybkości (-5 najszybszy, -3 najwolniejszy).
    Ale i tak najwolniejszy ma czasy propagacji na poziomie 5ns.
    Zasilanie 3.3V, wejście nie są odporne na 5V !.

    Napisz coś więcej na temat tych liczników które masz zaimplementować.

    Pozdrawiam
    JarekC
  • Poziom 10  
    Witam!! Wielkie dzieki za odpowiedź!! W załączniku daje swój program. Są to 4 liczniki 32 bitowe, sterowane za pomącą 4 lini SS. Z mikrokontrolera dostaje np stan niski na SS1 i załącza mi sie licznik C1. Potem za pomocą SPI jest odczyt licznika. Liczniki muszą być taktowane generatorem 100MHz. Przetestowałem program na układzie z płytki Logicmaster (4 liczniki 8 bitowe) i jest niby ok. Teraz szukam większego układu aby wepchać 32bity. Poczytam trochę o Lattice MACHXO i może akurat... wielkie dzięki!!
    Załączniki:
  • Poziom 43  
    Jak byś zdjął prowizję to może by ktoś zajrzał i to jakoś skompresował.
  • Poziom 10  
    Tak jak teraz?? Nie bardzo się orientuję w tych punktach...