Generator parzystości

Zadanie: Należy zaprojektować układ generujący bit parzystości słowa 8-bitowego. Słowo bitowe podawać poprzez przełączniki SW15-SW0 znajdujące się na płytce prototypowej. Parzystość wyświetlać na wyświetlaczu LED: E - parzysta liczba "jedynek" w 8-bitowym słowie wejściowym (ang. even), O - nieparzysta liczba jedynek (ang. odd).
 

Widok płytki


Zadania do wykonania:

  1. opisać układ za pomocą języka HDL,
  2. napisać testbench i wykonać symulację funkcjonalną,
  3. opisać ograniczenia (constraints) w formacie XDC,
  4. wykonać praktyczną realizację poprzez zaprogramowanie płytki testowej.

 

Na płytce prototypowej znajduje się 8 wyświetlaczy siedmiosegmentowych o wspólnej anodzie połączonych w sposób multipleksowany. Wynik należy wyświetlić na dowolnym jednym wyświetlaczu. Połączenie multipleksowane jest wykonane poprzez wspólne połączenie wszystkich wyprowadzeń segmentowych tj. połączenie segmentów A w 8 wyświetlaczach, połączenie segmentów B w 8 wyświetlaczach itd. Wspólne anody służą do aktywacji danego znaku. Poszczególne segmenty pojedynczego wyświetlacza uaktywniane są podaniem stanu niskiego na wyprowadzenia A - G. Włączenie poszczególnych wyświetlaczy aktywowane jest stanem niskim na wyprowadzeniach AN7 - AN0 (zanegowana wspólna anoda). Przykładowo, jeśli chcemy wygasić wyświetlacze 0-2 wówczas na wyprowadzenia AN0 - AN2 należy podać '1'. Jeśli równocześnie na wyświetlaczu nr 3 chcemy wyświetlić znak "A", wówczas dodatkowo należy podać następujące sygnały: AN3='0' oraz A='0', B='0', C='0', D='1', E='0', F='0', G='0', DP='1'.
Więcej szczegółów, schematy itp. znajdziesz w instrukcji obsługi płytki Nexys A7, na stronach 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):

#########################################################################################
# DIP SW:
set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports  sw_i[0] ]
set_property -dict { PACKAGE_PIN L16 IOSTANDARD LVCMOS33 } [get_ports  sw_i[1] ]
set_property -dict { PACKAGE_PIN M13 IOSTANDARD LVCMOS33 } [get_ports  sw_i[2] ]
set_property -dict { PACKAGE_PIN R15 IOSTANDARD LVCMOS33 } [get_ports  sw_i[3] ]
set_property -dict { PACKAGE_PIN R17 IOSTANDARD LVCMOS33 } [get_ports  sw_i[4] ]
set_property -dict { PACKAGE_PIN T18 IOSTANDARD LVCMOS33 } [get_ports  sw_i[5] ]
set_property -dict { PACKAGE_PIN U18 IOSTANDARD LVCMOS33 } [get_ports  sw_i[6] ]
set_property -dict { PACKAGE_PIN R13 IOSTANDARD LVCMOS33 } [get_ports  sw_i[7] ]
set_property -dict { PACKAGE_PIN T8  IOSTANDARD LVCMOS33 } [get_ports  sw_i[8] ]
set_property -dict { PACKAGE_PIN U8  IOSTANDARD LVCMOS33 } [get_ports  sw_i[9] ]
set_property -dict { PACKAGE_PIN R16 IOSTANDARD LVCMOS33 } [get_ports  sw_i[10]]
set_property -dict { PACKAGE_PIN T13 IOSTANDARD LVCMOS33 } [get_ports  sw_i[11]]
set_property -dict { PACKAGE_PIN H6  IOSTANDARD LVCMOS33 } [get_ports  sw_i[12]]
set_property -dict { PACKAGE_PIN U12 IOSTANDARD LVCMOS33 } [get_ports  sw_i[13]]
set_property -dict { PACKAGE_PIN U11 IOSTANDARD LVCMOS33 } [get_ports  sw_i[14]]
set_property -dict { PACKAGE_PIN V10 IOSTANDARD LVCMOS33 } [get_ports  sw_i[15]]
#########################################################################################
#7-SEG LED:
set_property -dict { PACKAGE_PIN J17 IOSTANDARD LVCMOS33 } [get_ports  an_o[0]]
set_property -dict { PACKAGE_PIN J18 IOSTANDARD LVCMOS33 } [get_ports  an_o[1]]
set_property -dict { PACKAGE_PIN T9  IOSTANDARD LVCMOS33 } [get_ports  an_o[2]]
set_property -dict { PACKAGE_PIN J14 IOSTANDARD LVCMOS33 } [get_ports  an_o[3]]
set_property -dict { PACKAGE_PIN P14 IOSTANDARD LVCMOS33 } [get_ports  an_o[4]]
set_property -dict { PACKAGE_PIN T14 IOSTANDARD LVCMOS33 } [get_ports  an_o[5]]
set_property -dict { PACKAGE_PIN K2  IOSTANDARD LVCMOS33 } [get_ports  an_o[6]]
set_property -dict { PACKAGE_PIN U13 IOSTANDARD LVCMOS33 } [get_ports  an_o[7]]
set_property -dict { PACKAGE_PIN T10 IOSTANDARD LVCMOS33 } [get_ports  seg_o[7]]
set_property -dict { PACKAGE_PIN R10 IOSTANDARD LVCMOS33 } [get_ports  seg_o[6]]
set_property -dict { PACKAGE_PIN K16 IOSTANDARD LVCMOS33 } [get_ports  seg_o[5]]
set_property -dict { PACKAGE_PIN K13 IOSTANDARD LVCMOS33 } [get_ports  seg_o[4]]
set_property -dict { PACKAGE_PIN P15 IOSTANDARD LVCMOS33 } [get_ports  seg_o[3]]
set_property -dict { PACKAGE_PIN T11 IOSTANDARD LVCMOS33 } [get_ports  seg_o[2]]
set_property -dict { PACKAGE_PIN L18 IOSTANDARD LVCMOS33 } [get_ports  seg_o[1]]
set_property -dict { PACKAGE_PIN H15 IOSTANDARD LVCMOS33 } [get_ports  seg_o[0]]
#########################################################################################