Interfacekomunikacyj..
Transkrypt
Interfacekomunikacyj..
Interface komunikacyjny PCI-FPGA dla modułu SPYDER Opis wstępny Interface komunikacyjny SPYDER_INTERFACE zapewnia komunikację poprzez magistralę PCI z modułami cyfrowymi załadowanymi do układu FPGA znajdującego się na płycie uruchomieniowej Spyder-Virtex –X2. Fizycznie jest to element biblioteczny opisany w VHDL i dostępny jako biblioteka programu Active HDL firmy Aldec. W praktyce element ten jest dołączany do projektu uruchamianego na platformie Spyder i jako jego część stanowi część konfiguracji układu FPGA. Element SPYDER_INTERFACE zapewnia dekoder lokacji adresowej pod którą znajduje się układ FPGA w przestrzeni adresowej PCI oraz dzięki wbudowanej logice umożliwia kontrolę przepływu danych od magistrali PCI do modułów FPGA. Opis elementu SPYDER_INTERFACE component spyder_interface generic( inputport_width : integer := 32; outputport_width : integer := 32 ); port ( FIO_CS_0 : in STD_LOGIC; FRD : in STD_LOGIC; FWR : in STD_LOGIC; LA : in STD_LOGIC_VECTOR(31 downto 2); LDA : inout STD_LOGIC_VECTOR(31 downto 0); LBE : in STD_LOGIC_VECTOR(3 downto 0); OUTPUTPORT : in STD_LOGIC_VECTOR(OUTPUTPORT_WIDTH-1 downto 0); INPUTDATAVALID : out STD_LOGIC; INPUTPORT : out STD_LOGIC_VECTOR(INPUTPORT_WIDTH-1 downto 0); OUTPUTPORTREADY : out STD_LOGIC; LOADOUTPUTINTERFACE : in STD_LOGIC; GNET2_GRESET_0 : in STD_LOGIC; SYS_CLK : in STD_LOGIC ); end component; Patrametry GENERIC elementu input_port_width output_port_width szerokość rejestru wejściowego danych (szerokość magistrali danych INPUTPORT Szerokość rejestru wyjściowego danych (szerokość magistrali danych OUTPUTPORT) Sygnały sterowane przez układy płyty SPYDER. Nie dostępne dla projektu w FPGA FIO_CS_0 FRD FWR LA LDA LBE SYS_CLK Sygnał wejściowy wyboru układu FPGA do zapisu lub odczytu (chip select). Strob odczytu danych z FPGA Strob zapisu danych do FPGA Magistrala adresowa mostka PCI Magistrala danych mostka PCI Flagi wyboru zapisywanych odczytywanych bajtów danych Zegar systemu SPYDER. Przeważnie częstotliwość wynosi 33MHz (patrz dokumentacja SPYDER). Należy podpiąć do sygnału zegarowego uruchamianego w FPGA systemu. GNET_GRESET_0 Sygnał zerujący układ cyfrowy załadowany do FPGA. Powinien być podłączony do sygnału inicjalizującego RESET uruchamianego w FPGA systemu. Sygnały dostępne dla modułów wewnątrz układu FPGA INPUTPORT INPUTDATAVALID Wyjścia rejestru wejściowego danych Flaga określająca czy dane na magistrali INPUTPORT są ważne. Aktywne poziomem ‘1’ Uwaga. W przypadku aktywności tej flagi należy daną odczytać z rejestru INPUTPORT już w następnym takcie zegara bowiem. SPYDER interface nie zapewnia buforowania danych w przypadku ciągłego wpisu danych z PCI Wejście wyjściowego rejestru danych Flaga gotowości rejestru OUTPOTRT do przyjęcia nowych danych. Poprzednie dane zostały przez PCI odczytane. LOADOUTPUTINTERFACE Strob zapisu danych do rejestru wyjściowego. Wejście aktywne poziomem’1’. Zapis aktywnym narastającym zboczem zegara SYS_CLK. OUTPUTPORT OUTPUTPORTREADY Komunikacja PCI z elementem SPYDER_INTERFACE Komunikację z elementem SPYDER_INTERFACE „od strony PCI” zapewnia sterownik programowy działający pod kontrolą systemu operacyjnego Windows NT opracowany przez producent płyty SPYDER. Opis wykorzystania i instalacji tego drivera należy szukać materiałach znajdujących się w pakiecie softwar’owym płyty. Element biblioteczny interface’u lokuje się w przestrzeni FPGA zaczynając od adresu 00000000h. Przestrzeń zapisu i odczytu są rozdzielone. Ilość zajętych lokalizacji wyznacza szerokość magistrali INPORT i OUTPORT. Tak więc parametr generic inputport_width decyduje ile lokacji adresowych zajmie FPGA w przestrzeni wyjścia PCI. Przy czym, ilość lokacji jest zawsze zaokrąglana do pełnej wielokrotności liczby 4. Tak więc dla wartości inputport_width z zakresu od 1 do 32 FPGA zajmuje zawsze 4 lokacje adresowe (od 00h do 03h). Dla wartości z zakresu 33 do 64 zajmuje 8 lokacji adresowych itd. Podobnie oblicza się lokacje adresowe dla przestrzeni wejścia PCI. Parametr generic outputport_width, czyli szerokość magistrali OUTPORT decyduje o liczbie bajtów w przestrzeni adresowej. Wartość wynikająca z liczby bitów należy zaokrąglić do wielokrotności liczby 4. W przestrzeni wejściowej FPGA wyróżniono adres FCh. Bajt odczytany spod tej lokacji na pierwszym bicie informuje o tym, czy system FPGA wpisał do rejestru OUTPORT nowe dane. Zerowanie tej flagi następuje kiedy odczytamy wszystkie lokacje adresowe przypisane do portu wyjściowego OUTPORT, a więc odczytamy wszystkie bity tego portu. Dla uproszczenia konstrukcji interfacu założono, że rejestry wejściowe/wyjściowe są zapisywany i odczytywane po podwójnym słowie. To znaczy, że aby zapewnić właściwe działanie flag ważności danych do odczytu, zapisu oraz dekodera adresu należy używać funkcji zapisu/odczytu typy ReadDWORD/WriteDWORD. Aby odczytać na przykład lokację adresową 01h, 02h, 03h musimy zaadresować lokację 00h i odczytać podwójne słowo (32bit). Odpowiednie bajty składające się na odczytaną 32 bitową wartość odpowiadają kolejnym lokajom adresowym od 00h do 03h. Komunikacja FPGA z elementem SPYDER_INTERFACE System FPGA czyta dane przekazane przez PCI z rejestru INPORT. O tym, że znajdujące się w rejestrze dane są ważne, informuje wysoki poziom logiczny na linii INPUTDATAVALID. Flaga linii INPUTDATAVALID jest utrzymywana tylko przez jeden takt zegara!!!. Zaleca się wykorzystanie tego sygnału jako sygnału Clock Enable systemu FPGA. Dane przeznaczone do odczytania przez PCI są wpisywane do rejestru OUTPUTPORT. Wysoki poziom flagi OUTPUTPORTREADY oznacza, że dane poprzednio wpisane zostały przez PCI odczytane. Zapis do rejestru OUTPORT odbywa się aktywnym zboczem zegara SYS_CLK przy wystawionym wysokim poziomie na linii LOADOUTPUTPORT. Wykorzystanie biblioteki SpyderLibrary w programie ActiveHDL Zaleca się następujący sposób „podpięcia” elementu SPYDER_INTERFACE do projektu FPGA. W pierwszej kolejności należy realizowany system zamknąć w „czarnej skrzynce o wyprowadzeniach adekwatnych do wyprowadzeń interfacu: INPUTPORT, INPUTDATAVALID, OUTPUTPORT, OUTPUTPORTREADY, LOADOUTPUTINTERFACE, SYS_CLK, GNET_GRESET_0. Następnie w projekcie programu ActiveHDL należy uruchomić „Library Manager” i dołączyć (Attach) bibliotekę spyderlibrary.lib Należy także dodać odpowiedni element do element do biblioteki z graficzną reprezentacją komponentów. Można to zrobic przy pomocy polecenia Add to Symbol ToolBox. Na tym etapie wygodnie jest skorzystać z gotowego pliku spyderinterfacetemplate.bde zawierającego gotowy schemat z elementem SPYDER_INTERFACE podłączonym do wyprowadzeń magistrali PCI. Zaleca się nie bezpośrednie wykorzystanie tego pliku ale przeniesienie jego zawartości poprzez kopiowanie (Ctrl-C/Ctrl-V) do nowo utworzonego arkusza. Dzięki temu możliwe będzie korzystanie z nowej, unikalnej dla realizowanego projektu nazwy. Na schemacie powstałym z spyderinterfacetemplate.bde umieścić „czarną skrzynkę” ze swoim projektem i połączyć z interfacem. Przed przystąpieniem do kompilacji(syntezy) należy dodać pliki źródłowe VHDL z opisem interface’u do bibliotek w opcjach kompilacji. Są to pliki: ../spyderlibrary/src/input_interface.vhd ../spyderlibrary/src/output_interface.vhd ../spyderlibrary/compile/spyder_interface.vhd Po wejściu do opcji kompilacji przechodzimy do zakładki Libraries tworzymy nową nazwę biblioteki (Add alias) i dodajemy wyżej wymienione pliki do utworzonej biblioteki (Add Files). Nazwa dodanej biblioteki powinna być „spyderinterface” Paweł Russek 4.11.2002