[FPGA] MAXimator - Licznik

MAXimatora – jak zacząć, sprzęt, oprogramowanie, pierwszy projekt, następne zaawansowane projekty, kursy itp.
Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

[FPGA] MAXimator - Licznik

Postautor: PROTON » środa 23 mar 2016, 21:24

Zanim przejdę do omówienia budowy i zasady działania licznika, omówię podstawowy element z którego się je buduje, przerzutnik D.
Przerzutnik typu D (data lub delay) występuje w dwóch wersjach, LATCH oraz FLIP-FLOP. Różnica polega na tym że LATCH jest wyzwalany poziomem a FLIP-FLOP zboczem.
LATCH w momencie podania sygnału wysokiego na wejście CLK (często jest zwane E od enable), przerzutnik jest przeźroczysty, każda zmiana stanów logicznych na wejściu D jest przekazywana na wyjście Q. W momencie zmiany sygnału zegarowego (CLK lub E) na niski, stan przerzutnika zostaje zatrzaśnięty i nie zmienia się w momencie zmiany stanu logicznego na wejściu D.
FLIP-FLOP ustala swój stan tylko w momencie zmiany sygnału zegarowego CLK z niskiego na wysoki, nazywa się to wyzwalanie zboczem narastającym. W tym momencie stan z wejścia D jest przekazywany na wyjście Q.
Obydwa przerzutniki posiadają dodatkowe wyjście QN, na tym wyjściu jest zanegowany stan wyjścia Q, czyli odwrotny, jeśli na Q jest 1, to na QN jest 0 i odwrotnie jak na Q jest 0 to na QN będzie 1.

Poniżej przedstawiam przerzutnik D FLIP-FLOP na bramkach NAND oraz wykres z symulacji.
D2.png
D1.png
D.7z


Do budowy układów nie polecam samodzielnie wykonanych przerzutników z bramek, odpowiednie przerzutniki są w bibliotekach Quartusa dla układów Altery oraz XILINX ISE/VIVADO dla układów Xilinxa.

Poniżej przerzutnik D-FF z biblioteki oraz wykres z symulacji.
D_FF2.png
D_FF1.png
D_FF.7z


Do budowy liczników i rejestrów przesuwnych, stosuje się przerzutniki D typu FLIP-FLOP, czyli tych wyzwalanych zboczem. Należy tylko przerobić taki przerzutnik na dzielnik częstotliwości, Wykonuje to się podłączając do wejścia D wyjście QN, takie sprzężenie zwrotne powoduje że przy każdym narastającym zboczu przerzutnik zmieni stan na przeciwny. Działa to tak, jeśli na wyjśiu Q mamy 1 to na wyjściu QN mamy 0 które jest podawane na wejście D, w momencie pojawienia się zbocza narastającego, stan z wejścia D (w tym momencie 0) jest przekazywany na wyjście Q. Skoro na wyjściu Q jest 0 to na QN będzie 1, ta jedynka będzie przekazywana na wejście D. W momencie pojawienia się kolejnego zbocza narastającego, jedynka z wejścia D będzie przekazana na wyjście Q... itd... itd...
Kilka przerzutników można połączyć w jeden większy n bitowy licznik, każdy przerzutnik odpowiada za jeden bit, poniższy schemat i symulacja 4 bitowego licznika powinna rozwiać wszelkie wątpliwości.

D_FF_LICZNIK2.png
D_FF_LICZNIK1.png
D_FF_LICZNIK.7z
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Gott weiß ich will kein Engel sein.

Awatar użytkownika
PROTON
Expert
Expert
Posty: 527
Rejestracja: czwartek 08 paź 2015, 18:35
Lokalizacja: Warszawa

Re: [FPGA] MAXimator - Licznik

Postautor: PROTON » środa 23 mar 2016, 22:18

Poniżej załączam przykład licznika w VHDL'u dla MAXimatora, do wejścia pdłączony jest przycisk L expandera, do wyjścia 4 diody LED na płycie głównej.
Mała UWAGA, nie jest zastosowany debouncer, każde naciśnięcie przycisku generuje kilka, kilkanaście impulsów przez co licznik nie jest w stanie zliczać pojedynczych naciśnień. Kod w VHDL generuje identyczny układ jak wyżej pokazany licznik z przerzutników D FF.

Kod: Zaznacz cały

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity counter is
    Port ( x : in  STD_LOGIC;
           y : out  STD_LOGIC_VECTOR(3 downto 0)
           );
end counter;

architecture logic of counter is
begin
   process(x)
      variable counter: STD_LOGIC_VECTOR (3 downto 0);
      begin
      if rising_edge(x) then
         counter := counter + 1;
      end if;
      y <= counter;
   end process;
end logic;


counter.7z
Nie masz wymaganych uprawnień, aby zobaczyć pliki załączone do tego posta.
Gott weiß ich will kein Engel sein.


Wróć do „FPGA - MAXimator”

Kto jest online

Użytkownicy przeglądający to forum: Obecnie na forum nie ma żadnego zarejestrowanego użytkownika i 1 gość