Zegar czasu rzeczywistego (Remote Lab)

Zadanie: Zaprojektować i wykonać układ zegara czasu rzeczywistego, wyświetlającego czas w postaci : HH.MM. Kropka powinna migać z częstotliwością 1 Hz.

  • Wirtualny przycisk BTN0 - ustawianie godzin.
  • Wirtualny przycisk BTN1 - ustawianie minut.
  • Wirtualny przycisk BTN2 - przycisk testowy, powodujący przyspieszone (np. 1000 razy) działanie zegara w celu sprawdzenia działania zegara na laboratorium.
  • Wirtualny przycisk BTN3 - reset asynchroniczny.

Wirtualnymi przyciskami steruje się poprzez emulator przycisków fpga_remote_lab - patrz instrukcja.

Uwaga: Układ należy zabezpieczyć przed drganiami przycisków (nie dotyczy resetu)! Założyć, że po naciśnięciu przycisku, styki przycisku mogą drgać przez czas do 50 ms.

Napisać testbench.

Przed implementacją wykonać symulację układu z wykorzystaniem pliku testbench.

Więcej szczegółów, schematy itp. znajdziesz w instrukcji obsługi płytki Nexys A7, na stronach 13, 22-24.

Plik "constraints" w formacie XDC do zadania, płytka Digilent Nexys A7, układ Artix-7 XC7A100T-1CSG324C (obudowa: CSG324, speed grade:-1):

#########################################################################################
# CLOCK:
set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports {clk_i} ];
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {clk_i}];
#########################################################################################
# Virtual RESET (BTN3):
set_property -dict { PACKAGE_PIN G17 IOSTANDARD LVCMOS33 } [get_ports {rst_i} ];  #virtual BTN3
#########################################################################################
# Virtual BUTTONS (BTN0-BTN2):
set_property -dict { PACKAGE_PIN C17 IOSTANDARD LVCMOS33 } [get_ports { button_hr_i }]; #virtual BTN0
set_property -dict { PACKAGE_PIN D18 IOSTANDARD LVCMOS33 } [get_ports { button_min_i }]; #virtual BTN1
set_property -dict { PACKAGE_PIN E18 IOSTANDARD LVCMOS33 } [get_ports { button_test_i }];  #virtual BTN2
#########################################################################################
# LED 7-SEGMENT DISPLAY:
set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[7] }];
set_property -dict { PACKAGE_PIN R10 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[6] }];
set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[5] }];
set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[4] }];
set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[3] }];
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[2] }];
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[1] }];
set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports { led7_seg_o[0] }];

set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[0] }];
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[1] }];
set_property -dict { PACKAGE_PIN T9 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[2] }];
set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[3] }];

set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[4] }];
set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[5] }];
set_property -dict { PACKAGE_PIN K2 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[6] }];
set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports { led7_an_o[7] }];
#########################################################################################