Korzystanie z obu krawędzi zegara


10

Programuję Altera Cyclone IV przy użyciu Verilog i Quartus II. W swoim projekcie chciałbym użyć obu krawędzi zegara, aby móc dokonać podziału zegara według nieparzystego współczynnika przy 50% cyklu pracy. Oto fragment mojego kodu:

  always @(posedge low_jitter_clock_i or negedge low_jitter_clock_i or posedge reset_i) begin
    if(reset_i) begin
      fixed_clock <= 1'b0;
      divider_dummy <= 'b0;
    end else begin
      fixed_clock <= fixed_clock_next;
      divider_dummy <= divider_dummy_next;
    end
  end

Teraz, kiedy to skompiluję, Quartus II zgłasza następujący błąd:

Błąd Verilog HDL Always Construct w adc_clocking.v (83): kontrola zdarzeń nie może przetestować zarówno dodatnich, jak i ujemnych krawędzi zmiennej „low_jitter_clock_i”

Jak mogę wykorzystać zarówno dodatnią, jak i ujemną krawędź danego zegara w moim projekcie?

Odpowiedzi:


7

Kiedy przypisujesz do rejestru w bloku zawsze wrażliwym na krawędzie, definiujesz flip-flop. Układy FPGA nie mają przerzutników, które mogą zadziałać na obu krawędziach zegara.

Aby zrobić to, co chcesz, będziesz musiał mieć dwa oddzielne bloki zawsze, po jednym dla każdej krawędzi zegara, a następnie wymyślić sposób łączenia wyników dwóch bloków bez tworzenia błędów.

Na przykład jeden blok zawsze może zawierać programowalny dzielnik. Zaprojektuj go w taki sposób, aby wyjściowy cykl roboczy był mniejszy niż 50%, gdy podano liczbę nieparzystą. Użyj drugiego zawsze bloku (na drugiej krawędzi zegara), aby opóźnić wyjście pierwszego bloku o 1/2 zegara, a następnie LUB oba wyjścia razem. Wyłącz wyjście drugiego bloku, aby uzyskać równe wartości dzielnika.


Powodem, dla którego chcę używać zarówno dodatnich, jak i ujemnych krawędzi zegara, jest cykl pracy 50%.
Randomblue,

Tak, rozumiem Moja odpowiedź bezpośrednio to rozwiązuje. Zakładałem, że już wiesz, jak uzyskać 50% cykl pracy, gdy wartość dzielnika jest równa. Co nie jest jasne?
Dave Tweed,

Brak podwójnych klapek? Nie ma tego nieodłącznego powodu. Okazuje się, że nikt ich nie wytwarza (a przynajmniej nikt, kogo znamy). Jak zauważa Martin, istnieje CPLD, który obsługuje flip- flopy o
Philippe

3

Jeśli dotyczy to logiki wewnętrznej, prawdopodobnie będziesz musiał pisać znacznie bliżej dostępnych flipflops. Z wyjątkiem Coolrunner-II nie znam żadnej programowalnej logiki z wrodzonymi rejestrami o podwójnej krawędzi.

Dlatego będziesz musiał utworzyć dwa alwaysbloki, jeden dla negowania i jeden dla pozy, i połączyć ich wyniki z pewną kombinatoryczną logiką.

Lub użyj PLL, aby podwoić czas, a następnie możesz użyć konwencjonalnej logiki jednosiecznej.



1

Jak zauważa Dave Tweed, chyba że FPGA zawiera sprzęt typu flip flop, który może działać na obu krawędziach zegara, konieczne będzie napisanie własnej logiki w celu wdrożenia pożądanego zachowania przy użyciu konwencjonalnych flip-flopów z pojedynczą krawędzią. Chociaż istnieje wiele różnych sposobów realizacji obwodu, który zachowuje się bardzo podobnie do flip-flopa z podwójną krawędzią, takie obwody ogólnie dodają pewne ograniczenia czasowe, które są inne niż te związane z flip-flopem.

Na przykład prostym podejściem jest posiadanie modułu łączącego dwa xory z 2 wejściami i parę przerzutników „T” (gdzie stan wejścia, gdy nadchodzi impuls zegarowy wskazuje, czy ta krawędź zegara powinna przełączać wyjście), jeden wyzwalany przez zbocze narastające i jeden wyzwalany przez zbocze opadające. Wyjściem modułu będzie xor wyjść przerzutników, a wejściem do obu przerzutników będzie xor wyjścia modułu i jego danych wejściowych.

Obwód zaprojektowany w ten sposób będzie działał zasadniczo jak dwustronny flip-flop, chociaż z dłuższymi czasami konfiguracji i propagacji, ale z dodatkowym ograniczeniem czasowym. Normalny flip-flop, który nie znajduje się na ścieżce sprzężenia zwrotnego, nie będzie miał nic przeciwko, jeśli początek krawędzi zegara zawiera wiązkę impulsów uruchomieniowych, pod warunkiem, że zegar ustabilizuje się na prawidłowym poziomie i pod warunkiem, że ograniczenie czasowe ustawienia, mierzone przed pierwszy impuls biegowy oraz ograniczenia czasu podtrzymania i czasu aktywnego zegarowego, mierzone od czasu, gdy impuls zegarowy jest stabilnie aktywny, są spełnione. Zachowanie wyjścia flip-flop będzie niezdefiniowane w czasie, gdy zegar będzie niestabilny, ale zostanie określone po ustabilizowaniu się zegara. Moduł podwójnego xor-podwójnego flopa dodałby dodatkowe ograniczenie taktowania, że ​​każde zbocze zegara, które zmieniałoby wyjście, musi znajdować się w bezpiecznej odległości od dowolnego innego zbocza zegara, który mógłby to zrobić. Niespełnienie tego ograniczenia, np. Posiadanie trzech bardzo blisko siebie krawędzi zegara, podczas gdy dane wejściowe nie pasują do danych wyjściowych, może pozostawić dane wyjściowe w stanie nieokreślonym lub metastabilnym (należy pamiętać, że scenariusze obejmujące parzystą liczbę krawędzi nie stanowią problemu , ponieważ takie scenariusze obejmowałyby wyłącznie impulsy runt; przypadek trójnożny (lub inne przypadki nieparzystej liczby większe niż jeden) stanowią problem, ponieważ po impulsach runt wystąpiłby prawidłowy puls.

Alternatywną konstrukcją obwodu byłoby posiadanie dwóch klapek jak wyżej, ale doprowadzenie ich wyjść do multipleksera. Obwód ten nie zostałby wrzucony do złego stanu przez impulsy wykonawcze, a jego ograniczenia taktowania byłyby takie same jak leżące u jego podstaw zatrzaski, ale miałoby to tę wadę, że wyjście, które było wysokie i powinno pozostać (lub było niskie i powinno pozostać niskie ), więc może na chwilę zepsuć się krawędź zegara. W niektórych obwodach nie miałoby to znaczenia, ale w innych miałoby to znaczenie.

Prawdopodobnie byłoby możliwe, aby narzędzia do syntezy logicznej automatycznie wdrażały klapki dwustronne, analizując, które ograniczenia czasowe zostały określone jako ważne, ale byłoby to nieco trudne. Zwiększyłoby to również ryzyko, że niewielka zmiana w projekcie może spowodować poważną zmianę we wdrażaniu, a tym samym spowodować znaczącą i nieoczekiwaną zmianę zachowania.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.