Sterowanie wyświetlaczem LED z wykorzystaniem procesora PicoBlaze

Zadanie: Celem ćwiczenia jest opracowanie systemu mikroelektronicznego z procesorem PicoBlaze, w którym część sprzętowa realizuje multipleksowane wyświetlanie na wyświetlaczu LED. Do zadań oprogramowania należy odczyt przycisków i w zależności od tego zwiększanie lub zmniejszanie licznika i wysłanie tej informacji na wyświetlacz LED.

 

Rys. 1  Proponowany podział projektu na moduły. Na rysunku nie zaznaczono połączeń pomiędzy modułami.

 

Dokładny opis działania:

Po resecie wyświetlacz powinien wyświetlić "0000".

Dla uproszczenia zakładamy, że regulacji podlega tylko 1 cyfra (najmniej znacząca), wyświetlana w postaci szesnastkowej.

Naciśnięcie przycisku BTNU powinno zwiększać o 1 wyświetlaną wartość, np. "0000" → "0001".

Naciśnięcie przycisku BTND powinno zmniejszać o 1 wyświetlaną wartość, np. "000a" → "0009".

Po przepełnieniu licznik powinien się przekręcać, tj. "000f" + 1 → "0000", "0000" - 1 → "000f".

Należy w podstawowym zakresie zabezpieczyć się przed drganiami przycisków.

Procesor PicoBlaze należy taktować zegarem systemowym o częstotliwości 100 MHz.

Reset jest podłączony do przełącznika SW7.

Procesor PicoBlaze posiada synchroniczne wejście resetu (aby reset zadziałał musi pojawić się zbocze zegara).

 

Możliwości usprawnienia ćwiczenia (dla chętnych – za dodatkowe punkty):

Ustawianie wszystkich cyfr, a nie tylko jednej (przyciskami BTNL i BTNR można zmieniać, która cyfra podlega regulacji).

Tryb wyświetlania i edycji: standardowo wyświetlacz tylko wyświetla wprowadzone wartości bez możliwości ustawiania (tryb wyświetlania), ale po dłuższym naciśnięciu przycisku BTNL (np. przez ponad 0.5 sek.) następuje wejście do trybu edycji, gdzie możemy przyciskami zmieniać wartości cyfr. W trybie edycji aktualnie ustawiana cyfra powinna migać. Wyjście z trybu edycji - także przez dłuższe naciśnięcie przycisku BTNL.

 

W użyciu jest prawa połowa (4 cyfry) wyświetlacza 7-segmentowego (lewa połowa może także coś wyświetlać – ignorujemy to).


Wejścia i wyjścia układu:
clk_i – zegar 100MHz,
rst_i – wejście resetu,
button_i – wejście przycisków,
led7_an_o – wyjście sterujące anodami wyświetlaczy LED.

led7_seg_o – wyjście sterujące segmentami wyświetlaczy LED.

Uwaga:
button_i(3) – przycisk BTNL

button_i(2) – przycisk BTNR

button_i(1) – przycisk BTNU

button_i(0) – przycisk BTND

 

Należy zweryfikować układ praktycznie poprzez zaprogramowanie płytki testowej. Symulacja nie jest obowiązkowa, ale jest zalecana.

Ostrzeżenia ”[Synth 8-3332] Sequential element (....) is unused and will be removed from module (....)” w tym ćwiczeniu można zignorować.

 

Strona z aktualnym kodem VHDL procesora PicoBlaze do pobrania, pełną dokumentacją i prezentacjami typu screencast (login i hasło poda prowadzący laboratorium):  PicoBlaze

 

Fragment głównego pliku projektowego VHDL z deklaracją sygnałów:

 

entity top is

    Port ( clk_i : in STD_LOGIC;

           rst_i : in STD_LOGIC;

           button_i : in STD_LOGIC_VECTOR (3 downto 0);

           led7_an_o : out STD_LOGIC_VECTOR (3 downto 0);

           led7_seg_o : out STD_LOGIC_VECTOR (7 downto 0));

end top;


Plik z ograniczeniami projektowymi dla płytki Nexys-A7 (układ FPGA xc7a100tcsg324-1):  isp6s.xdc