Zadanie:
Należy zaprojektować moduł generujący sygnały VGA. Działanie modułu powinno być następujące:
należy generować następujące sygnały: jednobitowe kolory
R (red_o),
G (grn_o), oraz
B (blu_o),
synchronizację pionową (vs_o) i poziomą (hs_o);
sygnały należy generować zgodnie z normą dla standardu VGA 60Hz, 640x480 pikseli;
na ekranie VGA powinno być widoczne tło o kolorze wybieranym trzema
przełącznikami na płytce SPARTAN3, każdy z przełączników powinien
włączać pojedynczy kolor tj. SW5_i powinien włączać kolor czerwony,
sw6_i kolor zielony oraz sw7_i kolor niebieski;
w środku ekranu powinien być wydzielony prostokąt o wymiarach 256 x 96 pikseli;
w prostokącie opisanym powyżej powinien być wyświetlany
obraz pobierany z synchronicznej pamięci ROM w której zapisany jest plik graficzny typu BMP;
pamięć ROM opisaną powyżej należy wygenerować za pomocą
programu Xilinx ISE8.1i Core Generator;
dodatkowymi sygnałami wejściowymi modułu są zegar 50MHz (clk_i)
oraz asynchroniczny reset (rst_i).
Należy wykonać symulację funkcjonalną przy użyciu Testbencha oraz zaprogramować
płytkę testową SPARTAN3 i praktycznie sprawdzić działanie układu.
Plik ucf do zadania, płytka Digilent Spartan-3, układ Spartan-3 3S200 FT256-4:
# Clock:
NET "clk_i" LOC = "T9" ; # 50 MHz clock
NET "clk_i" TNM_NET = "clk";
TIMESPEC "TS_clk" = PERIOD "clk" 15 ns HIGH 50 %;
# Push-buttons:
NET "rst_i" LOC = "L14" ; # pressed high BTN3
# VGA port:
NET "blu_o" LOC = "R11" ;
NET "grn_o" LOC = "T12" ;
NET "red_o" LOC = "R12" ;
NET "hs_o" LOC = "R9" ; # horisontal sync
NET "vs_o" LOC = "T10" ; # vertical sync
# Slide switches
NET "sw5_i" LOC = "J13" ; # active high when in UP position
NET "sw6_i" LOC = "K14" ; # active high when in UP position
NET "sw7_i" LOC = "K13" ; # active high when in UP position