odczytu i zapisu pamięci RAM. Z funkcji tej korzysta kolejny moduł odpowiedzialny za wyświetlanie znaków na monitorze oraz poprawne ich rozmieszczenie. Zawiera wbudowaną pamięć ROM, w której zdefiniowane są struktury każdej z liter. Pojedynczy znak zdefiniowany został za pomocą 64-bitów które ułożone są w 8 liniach po 8pikseli każda. Struktura ta przedstawiona jest na rysunku 4.
_####### |
0x7F |
## # |
0x31 |
0x34 | |
0x3C | |
0x34 | |
__##___# |
0x31 |
_####### |
0x7F |
Rys. 4. Komórka tablic}' reprezentująca znak [4]
Zawarte w układzie bloki pamięci RAM pozwalają na zapamiętanie 72kbitów danych. Jest to zdecydowanie zbyt mało pamięci, aby bezpośrednio mapować na jej podstawie ekran o rozdzielczości 640x480 pikseli. Możliwość wypełnienia całości ekranu tekstem zrealizowana jest poprzez podział ekranu na bloki odpowiadające wielkości wyświetlanych liter. Proces obsługi VGA oblicza adres obecnie wyświetlanego bloku. Poprzez złożenie indeksu bloku pionowego i poziomego otrzymujemy magistralę adresującą aktualnie wyświetlany znak. Tak pozyskane dane stanowią część adresu fizycznego konkretnego, aktualnie wyświetlanego piksela. Taki sposób wyświetlania w znaczący sposób zmniejsza zużycie pamięci RAM w odniesieniu do mapowania bezpośredniego. Całkowite zużycie pamięci RAM w naszym układzie wynosi 40kbity. Na zbliżonej zasadzie odbywa się wyświetlanie ruchomej bitmapy. W zależności od ustawień jednego z multiplekserów możliwe jest wyświetlanie bitmapy ponad tekstem, lub w tle tekstu.
Na podstawie kodu języka VHDL odbywa się synteza do postaci schematu logicznego układu. Środowisko Xilinx ISE pozwala na wygenerowanie takiego schematu, którego fragment przedstawiający blok generowania sygnałów synchronizacji VGA i liczników pikseli widoczny jest na rysunku 5. Warto zauważyć, że jest to tylko jeden z wielu bloków. Wynika z tego fakt, że próba tworzenia takiego układu w postaci schematu logicznego byłaby bardzo czasochłonna i mało efektywna. Dodatkowo podczas procesu syntezy stworzony opis sprzętu jest optymalizowany i w zależności od zastosowanej składni języka HDL wykorzystane zostają dodatkowe zasoby układu tj. rejestry przesuwne, czy też bloki pamięci RAM. Znacząco obniża to całkowity obszar zużytych bloków logicznych (CLB) wewnątrz układu.
15