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

Podobne dokumenty