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 BTN0 powinno zwiększać o 1 wyświetlaną wartość, np. "0000" → "0001".

Naciśnięcie przycisku BTN1 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 BTN3 i BTN2 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 BTN3 (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 BTN3.

 

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 BTN3-BTN0,
led7_an_o – wyjście sterujące anodami wyświetlaczy LED.

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

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 takie same jak do dostępu do laboratorium zdalnego):  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):  isp6.xdc