Miernik częstotliwości

Zadanie: Zaprogramować układ FPGA tak, aby na ekranie VGA wyświetlana była wartość częstotliwości sygnału dostarczanego do wejścia fin. Wyświetlany rezultat ma składać się z dziesięciu znaków, przy czym co najmniej 6 z nich musi reprezentować cyfry, a pozostałe mają wyświetlać jednostkę oraz punkt dziesiętny. Kształty znaków prezentowanych na ekranie należy odczytać z zewnętrznej pamięci RAM. Każdy ze znaków zapisany jest na polu o wymiarach 8 x 16 pikseli. Pod pierwszym adresem przypisanym danemu znakowi znajduje się osiem bitów odpowiadających górnej linii. Najbardziej znaczący bit odpowiada punktowi położonemu najbardziej na lewo, itd. Kolejne linie są umieszczone pod kolejnymi adresami pamięci. Każdy znak zajmuje łącznie 16 bajtów.

Znak Adres [hex] odpowiadający pierwszej linii znaku (górnej)
0 0x00
1 0x10
2 0x20
3 0x30
4 0x40
5 0x50
6 0x60
7 0x70
8 0x80
9 0x90
puste 0xA0
punkt dziesiętny 0xB0
H 0xC0
z 0xD0
k 0xE0
M 0xF0

Zadanie należy wykonać etapowo, dodając kolejne porcje projektu. Przykładowy podział pracy: Projekt można wzbogacić o następujące funkcje (nie obowiązkowe):

W celu przetestowania projektu należy zaprogramować go na płytce testowej. Do zaprogramowania należy użyć wygenerowanego pliku *.bit oraz pliku zawierającego kształty znaków zad_mier.hex W pierwszym podejściu jako sygnał mierzony podłączyć hsyncb (powinno być około 31.5kHz) lub vsyncb (powinno być 60Hz).

Informacje dodatkowe:


Plik ucf do zadania, płytka XS40, układ XC4010XL PC84:
net clk loc=p13;
net rst loc=p44;
net data<0> loc=p41;
net data<1> loc=p40;
net data<2> loc=p39;
net data<3> loc=p38;
net data<4> loc=p35;
net data<5> loc=p81;
net data<6> loc=p80;
net data<7> loc=p10;
net address<0> loc=p3;
net address<1> loc=p4;
net address<2> loc=p5;
net address<3> loc=p78;
net address<4> loc=p79;
net address<5> loc=p82;
net address<6> loc=p83;
net address<7> loc=p84;
net address<8> loc=p59;
net address<9> loc=p57;
net address<10> loc=p51;
net address<11> loc=p56;
net address<12> loc=p50;
net address<13> loc=p58;
net address<14> loc=p60;
net ceb loc=p65;
net web loc=p62;
net oeb loc=p61;
net rgb<0> loc=p25;
net rgb<1> loc=p26;
net rgb<2> loc=p24;
net rgb<3> loc=p20;
net rgb<4> loc=p23;
net rgb<5> loc=p18;
net hsyncb loc=p19;
net vsyncb loc=p67;
net cpu_rst loc=p36;
net fin loc=p7;