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?
źródło
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
always
bloki, 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.
źródło
Skończyłem wdrażanie 50% cyklu pracy dla nieparzystych współczynników podziału, stosując opisaną tutaj metodę .
źródło
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.
źródło