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

ISE WEBPACK - ISE WEBPACK implementacja dodatkowych opóźnień

23 Lis 2016 23:15 2781 5
  • Poziom 19  
    MAM pytanie - moze ktoś bylby w stanie pomóc.

    MAmy układ edytowany na poziomie schematu.
    W układzie mamy przykładowo dwa wyjścia - wyjście A i B.
    SYgnały z tych wyjśc podane są na bramkę wyjsciową.

    Jednak w wyniku wyscigów logicznych pojawia sie standardowy problem - przesunięcie czasowe impulsów oraz w efekcie generowanie dodatkowych szpilek na wyjściu tejże bramki podczas przelączania.

    W normalnej sytuacji problem rozwiązuje sie prosto - dodatkowa/e bramka/i na jednym z wejśc i po sprawie.

    Tutaj jednak k ompilator chyba uznaje - ze "wtrącone" na jednym z wejśc w szeregu bramki mozna ominąć i chyba to własnie robi.

    jest na to jakiś spoosob - aby wygenerować dodatkowe opoźnienie rzędu 15-20ns - bez angażowania dodatkowych przerzutników zegara i ewentualnej synchronizacji?

    Układ tworzę w wersji schematowej
    (ogolnie układ działa bez zarzutu - jedynie te krótkie szpilki dają sie we znaki)
  • AM TechnologiesAM Technologies
  • Poziom 20  
    Dodanie "jednej bramki" może nie pomóc, ponieważ w zależności od ułożenia logiki w FPGA, opóźnienia ze źródeł sygnałów A i B do wejścia funkcji logicznej mogą się znacznie różnić. Do tego te czasy będą się zmieniały między buildami.

    W normalnej sytuacji w układach FPGA problem rozwiązuje się prosto: dodaj przerzutnik na wyjście :wink:

    Możesz podać więcej informacji o projekcie? Sygnały A i B są asynchroniczne? Jaka funkcja wykonywana jest na bramce wyjściowej?
  • AM TechnologiesAM Technologies
  • Poziom 19  
    Już tłumaczę dokładniej - w czym rzecz.
    Poniżej mamy uproszczony schemat układu.
    Jest to jeden ze stopni wyjściowych generatora przebiegów PWM.

    Gotowy sygnal PWM trafia na wejście PWM (jakże by inaczej :))
    A stąd - na dwie bramki AND (moga byc w innej konfiguracji - w zaleznosci od wymagan). NA druga bramke trafia sygnał zanegowany . (sterowanie dolnym i górnym tranzystorem mocy.

    Ten sam sygnal PWM trafia równiez na wejscie układu generującego czas martwy (dead time).

    Jest to układ programowanego licznika - ktory wykorzystujac sygnał zegarowy - generuje impulsy o szerokości do 2uS. Zatem mamy mozliwosc ustawienia czasu martwego w granicach0...2uS (mniej wiecej - w zal. od Fclk i stopnia podzialu)

    Zarówno caly układ PWM jak i DEAD TIME działa bardzo ladnie - jest pelna regulacja obu parametrów.

    A problem pojawia sie w momentach widocznych na rysunku (czerwone szpilki - o szer. do 20ns bodajże).

    Probowalem juz roznych trików - dostawianie bramek, przekonfigurowywanie całego układu - no nic nie chce menda współpracować.

    Nie wiem czy uda mnie sie jeszcze "wysupłać" tutaj jakiś dodatkowy przerzutnik - układ i tak został okrojony - wszystkie makrocele są wykorzystane.

    Jest jeszcze mozliwośc przerzucenia układu do wersji XC9572XL (obecnie to XC9572) Tam są chyba trochę wieksze mozliwosci
    przekonfigurowania połączeń.
  • Poziom 28  
    o ile wlasciwie rozumiem twoj opis, to oczekiwana funkcje
    mozna zapisac jakos tak:

    if (dead_time_counter > MAX) then
    dead_time = 1;
    else
    dead_time = 0'

    if (dead_time = 1) then
    pwm_1 = pwm;
    pwm_2 = NOT(pwm)

    twoj problem prawdopodobnie bierze sie stad, ze sygnal
    'dead_time' wychodzi wprost z komparatora licznika,
    a gdy licznik przelacza sie z jednej wartosci na druga,
    przez moment ma wartosc 'dowolna', byc moze rowniez ta,
    ktorej oczekuje komparator;
    rozwiazaniem (jak zwykle) jest poprawna synchronizacja,
    w zadnym wypadku nie dokladanie bramek opoznien

    sygnal PWM1 powinien byc przerzutnikiem o wejsciach:
    .clk = CLK
    .clk_enable = DB
    .d = PWM
    sygnal PWM2 powinien byc przerzutnikiem o wejsciach:
    .clk = CLK
    .clk_enable = DB
    .d = NOT(PWM)
    sygnal DB powinien byc przerzutnikiem o wejsciach:
    .clk = CLK
    .d = 1 if (dead_time_counter >= MAX-1)
    else
    .d = 0

    powodzenia
    JA

    ==========================

    P.S
    a moze licznik 'zwykly' zastapic licznikiem, ktory, przelaczajac sie, nie generuje
    stanow posrednich [np. z 0xF na 0x0, 0x7 na 0x8]? jak Gray?
    j.
  • Poziom 20  
    To że wszystkie makrocele są użyte, nie oznacza że wszystkie przerzutniki są zajęte. Jest duża szansa że makrocele realizujące wyjściowe "andy" mają ominięte przerzutniki, więc dodanie ich może nic nie kosztować