ievgenii drozdov

90
Politechnika Warszawska Wydział Elektroniki i Technik Informacyjnych Instytut Systemów Elektronicznych IEVGENII DROZDOV 255353 Praca Magisterska OPTYMALIZACJA KOMUNIKACJI PRZEZ INTERFEJS SZEREGOWY Z BLOKAMI FUNKCJONALNYMI ZREALIZOWANYMI W UKŁADACH FPGA Praca wykonana pod kierunkiem: dra inż. Wojciecha Zabołotnego Warszawa, 2015

Upload: others

Post on 04-Apr-2022

7 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: IEVGENII DROZDOV

Politechnika Warszawska

Wydział Elektroniki i Technik Informacyjnych

Instytut Systemów Elektronicznych

IEVGENII DROZDOV255353

Praca Magisterska

OPTYMALIZACJA KOMUNIKACJI PRZEZ

INTERFEJS SZEREGOWY Z BLOKAMI

FUNKCJONALNYMI ZREALIZOWANYMI

W UKŁADACH FPGA

Praca wykonana pod kierunkiem:

dra inż. Wojciecha Zabołotnego

Warszawa, 2015

Page 2: IEVGENII DROZDOV
Page 3: IEVGENII DROZDOV

OPTYMALIZACJA KOMUNIKACJI PRZEZ INTERFEJS SZEREGOWY Z

BLOKAMI FUNKCJONALNYMI ZREALIZOWANYMI W UKŁADACH FPGA

Praca obejmuje opracowanie metody i implementację modułu opisanego w języku

VHDL służącego do optymalizacji komunikacji przez interfejs szeregowy z blokami

funkcjonalnymi zrealizowanymi w układach FPGA. Dodatkowo opisane są testy układu

przeprowadzone z pomocą symulatora oraz w sprzęcie.

Słowa kluczowe: SoC, VHDL, UART, Wishbone, Magistrala, Interfejs, Transmisja,

Szybkość, Scatter-gather.

OPTIMIZATION OF THE COMMUNICATION VIA SERIAL INTERFACE

WITH FUNCTIONAL BLOCKS THAT ARE IMPLEMENTED IN FPGA

DEVICES

This thesis covers a description of the method and implementation of the module

described in VHDL language for optimization of communication via serial interface

with functional blocks that are implemented in FPGA devices. Additionally it contains a

description of the tests performed with the help of simulator and in hardware.

Key words: SoC, VHDL, UART, Wishbone, Bus, Interface, Transmission, Speed,

Scatter-gather.

Page 4: IEVGENII DROZDOV
Page 5: IEVGENII DROZDOV

Życiorys

Urodziłem się 25 stycznia 1991 roku w Kijowie, gdzie

mieszkałem potem przez dwadzieścia lat. Tam też w latach

2004 – 2008 uczęszczałem do liceum „Intelekt” w klasie o

profilu matematyczno-fizycznym.

W roku 2008 rozpocząłem studia na Wydziale

Elektroniki Politechniki Kijowskiej. Po czwartym roku

studiów obroniłem pracę inżynierską zatytułowaną

„Implementacja urządzenia zdalnego sterowania systemem

Inteligentny Dom” z wyróżnieniem.

W roku 2012 rozpocząłem studia na Wydziale Elektroniki i Technik

Informacyjnych Politechniki Warszawskiej.

Jestem współautorem publikacji „Tworzenie interfejsu wymiany danych

pomiędzy dwoma procesami symulatora języka Verilog”, Kijów 2012.

W marcu 2014 roku rozpocząłem pracę w firmie Cadence Design Systems.

Zajmuję się implementacją środowisk weryfikacyjnych oraz architektur IP-Core.

Pragnę serdecznie podziękować

promotorowi, Panu doktorowi Wojciechowi

Zabołotnemu za wsparcie w ciągu całych moich

studiów w Polsce.

Jednocześnie składam serdeczne

podziękowania Tomaszowi Wojciechowskiemu

za pomoc w trakcie redagowania pracy

dyplomowej.

Page 6: IEVGENII DROZDOV
Page 7: IEVGENII DROZDOV

Spis treści

1. Akronimy i spis oznaczeń............................................................................................92. Wstęp...........................................................................................................................113. Przegląd zagadnienia.................................................................................................13

3.1. Opis problemu......................................................................................................133.2. Studia literaturowe...............................................................................................14

3.2.1. Analiza sekwencji programowych...............................................................143.2.2. USB 3.0 Command Ring..............................................................................17

3.3. Opis rozwiązania..................................................................................................214. Implementacja rozwiązania......................................................................................25

4.1. Wybór interfejsów................................................................................................254.2. Model sprzętowy..................................................................................................26

4.2.1. Schemat blokowy.........................................................................................264.2.2. Opis interfejsów...........................................................................................284.2.3. Pamięć komend............................................................................................284.2.4. Pamięć danych..............................................................................................284.2.5. Zestaw rejestrów..........................................................................................284.2.6. Rdzeń UCS...................................................................................................28

4.3. Zasady działania...................................................................................................294.3.1. Konfiguracja.................................................................................................294.3.2. Uruchomienie przetwarzania........................................................................304.3.3. Zakończenie przetwarzania..........................................................................31

4.4. Weryfikacja funkcjonalna....................................................................................324.5. Synteza.................................................................................................................35

5. Testowanie z portem UART......................................................................................375.1. Opis systemu testowego.......................................................................................375.2. Obliczenia teoretyczne.........................................................................................385.3. Porównanie wyników...........................................................................................40

6. Testowanie z portem Ethernet..................................................................................456.1. Opis systemu testowego.......................................................................................456.2. Obliczenia teoretyczne.........................................................................................486.3. Porównanie wyników...........................................................................................49

7. Kierunki dalszych prac.............................................................................................538. Podsumowanie...........................................................................................................559. Bibliografia.................................................................................................................57Aneks A. Opis portów modułu UCS.............................................................................59

Aneks A.1. Porty sterujące..........................................................................................59Aneks A.2. Porty Interfejsu Wishbone Slave..............................................................59Aneks A.3. Porty Interfejsu Wishbone Master............................................................60Aneks A.4. Porty Interfejsu WSGM...........................................................................61

Aneks B. God Mode.......................................................................................................63Aneks C. Interfejs programowy UCS..........................................................................65

Aneks C.1. Mapa rejestrów.........................................................................................65Aneks C.1.1. FLAGS – Flags (0h).........................................................................66Aneks C.1.2. DOORBELL – Doorbell (1h)...........................................................68Aneks C.1.3. CS0 – Command Set 0 (2h)..............................................................70Aneks C.1.4. CS1 – Command Set 1 (3h)..............................................................70

Strona 7

Page 8: IEVGENII DROZDOV

Aneks C.1.5. CS2 – Command Set 2 (4h)..............................................................71Aneks C.1.6. CS3 – Command Set 3 (5h)..............................................................71Aneks C.1.7. CS4 – Command Set 4 (6h)..............................................................72Aneks C.1.8. CS5 – Command Set 5 (7h)..............................................................72Aneks C.1.9. CS6 – Command Set 6 (8h)..............................................................73Aneks C.1.10. CS7 – Command Set 7 (9h)............................................................73Aneks C.1.11. CUMA – Command Unit Memory Address (Ah)..........................74Aneks C.1.12. CUO – Command Unit Options (Bh).............................................75Aneks C.1.13. CUAC – Command Unit Address/Count (Ch)...............................76Aneks C.1.14. CUDC – Command Unit Data/Count (Dh)....................................77Aneks C.1.15. DMD – Data Memory Data (Eh)....................................................77

Aneks C.2. Deskryptor CU.........................................................................................78Aneks C.3. Deskryptor CCU......................................................................................79

Aneks D. Cykle operacyjne Wishbone.........................................................................81Aneks D.1. Reset.........................................................................................................81Aneks D.2. Pojedynczy odczyt...................................................................................82Aneks D.3. Pojedynczy zapis......................................................................................86

Strona 8

Page 9: IEVGENII DROZDOV

1. Akronimy i spis oznaczeń

Spis oznaczeń stosowanych w pracy oraz akronimy są przedstawione

odpowiednio w Tablicy 1-1 oraz Tablicy 1-2.

• Wszystkie szesnastkowe liczby są oznaczone małą literą „h” na końcu

(Przykład: 40h). Nieistotne cyfry w liczbach szesnastkowych są zastąpione przez

wielką literę „X” (Przykład: 4Xh).

• Wszystkie dziesiątkowe liczby nie są oznaczone przez żadną literę.

• Wszystkie dwójkowe liczby są oznaczone przez małą literę „b” na końcu

(Przykład: 0101_0101b). Nieistotne cyfry w liczbach dwójkowych są zastąpione

przez małą literę „x” (Przykład: 0x01_010xb).

• Interfejs typu „Master” magistrali jest oznaczony wielką literą „M”.

• Interfejs typu „Slave” magistrali jest oznaczony wielką literą „S”.

• Interfejs typu „Slave” dla trybu „God Mode” jest oznaczony wielkimi literami

„S_GM”.

Tablica 1-1: Spis oznaczeń

Oznaczenie Opis

Master Moduł który inicjuje transakcję na magistrali

Slave Moduł który przyjmuje transakcję na magistrali

Bajt Wartość 8-bitowa

Słowo Wartość 8-bitowa

Host System sterujący

Tablica 1-2: Akronimy

Akronim Opis

FPGA Field-Programmable Gate Array

SoC System on Chip

DMA Direct Memory Access

xHCI Extensible Host Controller Interface

USB Universal Serial Bus

UCS Universal Command Scheduler

UART Universal Asynchronous Receiver/Transmitter

Strona 9

Page 10: IEVGENII DROZDOV

Akronim Opis

PHY PHYsical layer

GPIO General-Purpose Input/Output

MM2S Memory-Mapped to Stream

FIFO First In, First Out

xHC Extensible Host Controller

CD Command Descriptor

TRB Transfer Request Block

CCE Command Completion Event

PCS Producer Cycle State

CCS Consumer Cycle State

CRCR Command Ring Control Register

VHDLVery high speed integrated circuit Hardware Description Language

AXI Advanced eXtensible Interface

OCP Open Core Protocol

WSGM Wishbone Slave for God Mode

CU Command Unit

CS Command Set

CCU Control Command Unit

ptr pointer

LUT Look-Up Table

BRAM Block Random Access Memory

LED Light-Emitting Diode

Strona 10

Page 11: IEVGENII DROZDOV

2. Wstęp

Rozwiązania typu System on Chip (SoC) są szeroko stosowane do gromadzenia,

przetwarzania i przesyłania danych. Przykładowe zastosowanie tych systemów to:

inteligentne domy, centra danych, stacje meteo, centra rozrywki, itp. Taka złożoność

wymaga sprawnego połączenia między różnymi podsystemami. Na przykład: stacja

meteo wymaga podsystemu zbierania danych z czujników, podsystemu

przetwarzającego dane do postaci czytelnej dla użytkownika oraz do dalszej analizy.

Połączenie nie zawsze może być wewnętrzne (w jednym układzie scalonym), ponieważ

podsystemy mogą zostać umieszczone w pewnej odległości od siebie. W tym przypadku

interfejs zewnętrzny (ścieżka na płytce drukowanej, kabel) może stać się wąskim

gardłem i ograniczyć przepustowość. W większości przypadków cały system staje się

tak wolny jak najwolniejszy podsystem.

W przypadku działania systemu w jednej domenie zegarowej wewnętrzna

magistrala lub połączenie w układzie scalonym jest znacznie szybsze niż zewnętrzny

interfejs. Jednym z rozwiązań zwiększających wydajność jest przekazanie największej

części pracy blokom wewnętrznym i korzystanie z interfejsu zewnętrznego głównie do

zbierania danych. Nie jest to nowa koncepcja: dobrym przykładem jest wymiana danych

pomiędzy procesorem i blokiem, który musi wykonać pewne operacje na pamięci. Aby

zmniejszyć obciążenie procesora jest używana technologia Direct Memory Access

(DMA). Nie zmniejsza ona ilości informacji przesyłanej przez magistralę, ale pozwala

procesorowi wykonać dodatkową pracę podczas przesyłania danych z pamięci do bloku

funkcjonalnego.

Obecnie stał się popularny specjalny typ DMA – scatter-gather DMA. Pozwala on

na przeniesienie dużej ilości danych między pamięcią i blokami funkcjonalnymi i nie

wymaga przerwania procesora na końcu każdego bloku danych. Jest to zrobione za

pomocą techniki adresacji wektorowej, która jest oparta na deskryptorach. Technika ta

może być stosowana nie tylko dla surowych danych, ale również dla poleceń.

Przykładem takiego wykorzystania jest kolejka Command Ring w interfejsie extensible

Host Controller Interface (xHCI) dla magistrali Universal Serial Bus 3.0 (USB3.0).

Nie ma dostępnych uniwersalnych otwartych rozwiązań podobnego problemu.

Problem staje się jeszcze bardziej istotny, gdy liczba bloków funkcjonalnych w systemie

SoC rośnie. Każdy blok musi być inicjalizowany oraz uczestniczyć w wymianie

Strona 11

Page 12: IEVGENII DROZDOV

danych. Istnieje potrzeba uniwersalnego rozwiązania, które można łatwo modyfikować i

łatwo zintegrować w układzie. W pracy przedstawiono konfigurowalne i elastyczne

rozwiązanie problemu opisanego powyżej – Universal Command Scheduler (UCS).

Strona 12

Page 13: IEVGENII DROZDOV

3. Przegląd zagadnienia

3.1. Opis problemu

Większość płyt dostarczanych przez producentów układów FPGA zawiera kilka

domen zegarowych. Niektóre interfejsy zewnętrzne działają znacznie szybciej niż zegar

systemowy (Ethernet, USB, itd.), a inne – wolniej (Universal Asynchronous

Receiver/Transmitter – UART).

Jednym z przykładów jest płyta Spartan-3AN Starter Kit firmy Xilinx która ma

następujące charakterystyki:

• Zegar systemowy: 50 MHz [1].

• Ethernet w trybie 100Base-TX: 100 Mb/s [1].

• RS-232 (UART): do 20 Kb/s według standardu [2].

Wszystkie interfejsy w podobnych płytach są dostarczane razem ze zintegrowaną

warstwą Physical layer (PHY).

W przypadku interfejsu wolniejszego od zegara systemowego ograniczeniem

szybkości jest najniższa warstwa – PHY. Jednym z rozwiązań problemu jest

wykorzystanie interfejsu tylko dla inicjalizacji i zbierania danych. W tym przypadku

niezbędne jest buforowanie komend w pamięci systemowej.

Interfejs szybszy niż zegar systemowy jest zależny od powyższych warstw

sprzętowych, które są taktowane przez ten zegar. W tym przypadku ograniczeniem jest

sterownik interfejsu w systemie. Jednym z rozwiązań tego problemu jest

zrównoleglenie zadań na poziomie sterownika lub samego systemu. Wąskim gardłem w

podobnych SoC jest magistrala systemowa. Jednym z rozwiązań problemu jest użycie

kilku magistral systemowych obsługą których zajmuję się osobny moduł – arbiter.

Rozwiązanie zaproponowane pracy pozwoli na zwiększenie szybkości działania

systemu w obu wymienionych przypadkach.

Strona 13

Page 14: IEVGENII DROZDOV

3.2. Studia literaturowe

3.2.1. Analiza sekwencji programowych

Firma Xilinx udostępnia dobrze udokumentowaną bibliotekę modułów do

tworzenia systemów SoC którą można wykorzystać do analizy najczęściej używanych

sekwencji komend. Do analizy zostały wybrane trzy kategorie modułów:

1. Interfejsy:

◦ Kontroler portów General-Purpose Input/Output (GPIO).

◦ Sterownik magistrali USB2.0.

2. Kontrolery pamięci:

◦ DMA.

3. Inne

◦ Monitor systemowy.

◦ Zegar / licznik.

Oznaczenia przedstawione w Tablicy 3-1 są stosowane do opisu komend.

Tablica 3-1: Oznaczenie do opisu komend

Oznaczenie Opis

OUT Zapis danych pod adresem docelowym

IN Odczyt danych z adresu źródłowego

CMPPorównanie dwóch wartości (ustawia flagę „zero” jeśli są równe)

JNZ Przejście jeśli flaga „zero” nie jest ustawiona

$REGISTER Adres rejestru

data Adres albo dane (zmienna lokalna)

Nie ma potrzeby analizy procesu inicjalizacji, ponieważ jest on wykonywany

tylko na początku pracy modułu i rzadko się powtarza (po resecie albo zmianie

konfiguracji). Sekwencje opisane poniżej są głównie operacjami odczytu/zapisu przez

interfejsy, rozpoczęcia transferu danych przez magistralę, rozpoczęcia monitorowania i

odczytu danych. We wszystkich przypadkach przerwania nie są wykorzystywane.

Strona 14

Page 15: IEVGENII DROZDOV

W Tablicach 3-2 i 3-3 pokazane są najczęściej używane komendy przy sterowaniu

kontrolerem GPIO.

Tablica 3-2: Sterowanie kontrolerem GPIO. Porty w trybie wejściowym [3]

OUT $GPIOx_TRI, 1IN  data, $GPIOx_DATA

Tablica 3-3: Sterowanie kontrolerem GPIO. Porty w trybie wyjściowym [3]

OUT $GPIOx_TRI, 0OUT $GPIOx_DATA, data

W Tablicach 3-4 i 3-5 pokazane są najczęściej używane komendy przy sterowaniu

kontrolerem USB2.0.

Tablica 3-4: Sterowanie kontrolerem USB2.0. Obsługa transakcji IN typu Bulk/Isochronous [4]

OUT dpram_addr, in_packetOUT $BUFFER_COUNT, packet_countOUT $BUFFER_READY, 1WAIT:IN  AX, $BUFFER_READYCMP AX, 0JNZ WAIT

Tablica 3-5: Sterowanie kontrolerem USB2.0. Obsługa transakcji OUT typu Bulk/Isochronous [4]

WAIT:IN  AX, $BUFFER_COMPLETECMP AX, 1JNZ WAITIN  AX, $PACKET_COUNT_RECEIVEDIN  BX, $PACKET_COUNTCMP AX, BXJNZ WAITIN  out_packet, dpram_addressOUT $BUFFER_READY, 1

Strona 15

Page 16: IEVGENII DROZDOV

W Tablicach 3-6 i 3-7 pokazane są najczęściej używane komendy do inicjalizacji i

uruchomienia kanału Memory-Mapped to Stream (MM2S) przy sterowaniu kontrolerem

DMA.

Tablica 3-6: Sterowanie kontrolerem DMA. Tryb klasyczny [5]

OUT $MM2S_DMACR.RS, 1OUT $MM2S_SA, source_addressOUT $MM2S_LENGTH, bytes_number

Tablica 3-7: Sterowanie kontrolerem DMA. Tryb scatter-gather [5]

OUT $CURRENT_DESCRIPTOR, address_startOUT $MM2S_DMACR.RS, 1OUT $TAIL_DESCRIPTOR, address_tail

Tablica 3-8 pokazuje najczęściej używane komendy przy sterowaniu monitorem

systemowym (cykliczne działanie w trybie sekwencyjnym).

Tablica 3-8: Sterowanie monitorem systemowym [6]

IN on_chip_temperature, $C_BASEADDR + 0x200IN v_ccint, $CBASEADDR + 0x204IN v_ccaux, $CBASEADDR + 0x208

W Tablicach 3-9 i 3-10 pokazane są najczęściej używane komendy przy

sterowaniu 64-bitowym zegarem/licznikiem odpowiednio w trybie generacji i

klasycznym.

Tablica 3-9: Sterowanie zegarem/licznikiem. Tryb generacji [7]

OUT $TCSR0, 0OUT $TCSR1, 0OUT $TLR0, lower_loadOUT $TLR1, higher_loadOUT $TCSR0.CASC, 1OUT $TCSR0.EN, 1

Strona 16

Page 17: IEVGENII DROZDOV

Tablica 3-10: Sterowanie zegarem/licznikiem. Tryb klasyczny [7]

IN  AX, $TCR1REPEAT:IN  BX, $TCR0IN  DX, $TCR1CMP AX, DXJNZ REPEAT

Analizując przedstawione powyżej sekwencje komend możemy zrobić listę

najczęściej używanych operacji w kolejności malejącej:

1. Operacja zapisu wartości do rejestru.

2. Operacja odczytu wartości z rejestru.

3. Oczekiwanie zakończenia operacji (monitorowanie flag).

W celu minimalizacji czasu wysyłania powyższych sekwencji komend przez

zewnętrzny interfejs z zachowaniem funkcjonalności można posłużyć się następującymi

metodami:

1. Buforowanie komend (wykorzystując metodę First In, First Out – FIFO) –

eliminuje potrzebę oczekiwania na koniec wykonania komendy.

2. Metoda scatter-gather – zapewnia automatyczne pobieranie komend z pamięci

za pomocą deskryptorów.

3. Buforowanie wyników – umożliwia zbieranie danych wyjściowych z modułów

do pamięci, a potem odczyt pamięci systemem sterującym.

4. Uniwersalny rejestr flag – wykorzystuje dodatkowy moduł z wewnętrznym

rejestrem flag. Zbiera on wszystkie flagi (status, zakończenie operacji) z innych

modułów. W tym przypadku system sterujący musi monitorować tylko jeden

rejestr zamiast wielu.

W pracy zostały zaimplementowane sposoby 2 i 3, co pozwoliło zminimalizować

nie tylko czas wykonania najczęściej używanych sekwencji komend, ale również czas

wykonania inicjalizacji oraz każdej komendy.

3.2.2. USB 3.0 Command Ring

USB3.0 jest jednym z najbardziej skomplikowanych współczesnych standardów

interfejsu komunikacyjnego. Do analizy technik używanych do wysyłania i buforowania

komend wybrane zostały wyłącznie sekwencje komunikacyjne pomiędzy

Strona 17

Page 18: IEVGENII DROZDOV

oprogramowaniem i sprzętem (konfiguracja, transfer danych, obsługa przerwań, itd.).

Opis można znaleźć w standardach USB2.0, USB3.1 oraz specyfikacji interfejsu Intel

xHCI [8].

Dla zarządzania kontrolerem xHC i urządzeniami podłączonych do niego,

standard xHC zapewnia niezależny interfejs Command Ring będący kołową kolejką

struktur danych. Jednostką działania w kolejce Command Ring jest deskryptor

Command Descriptor (CD). Działanie kolejki Command Ring jest podobne do działania

kolejki Transfer Ring, który zarządza transferami danych. Oprogramowanie inicjuje

komendę kontrolera xHC umieszczając deskryptor CD do kolejki Command Ring i

ustawiając odpowiednią flagę w rejestrze Doorbell. Rozmiar kolejki Command Ring

może być zmodyfikowany za pomocą mechanizmu Transfer Request Block (TRB),

który też jest wykorzystywany dla kolejki Transfer Ring.

Wszystkie komendy powodują wprowadzenie deskryptora Command Completion

Event (CCE) do kolejki Event Ring, w którym jest zgłoszony stan zakończenia

wykonania komendy.

Komendy są wykonywane przez kontroler xHC w takiej kolejności, w jakiej

zostały umieszczone w kolejce Command Ring. Oprogramowanie systemowe może

dodawać deskryptory CD do kolejki Command Ring podczas działania, ale wykonanie

deskryptora CD musi być przerwane jeżeli oprogramowanie żąda wykasowania albo

zmiany kolejności (na przykład podwyższenie priorytetu) zaplanowanych deskryptorów

CD. Specjalne kontrolne komendy w kolejce Command Ring pozwalają na zatrzymanie

lub przerwanie pracy.

W dalszej części tego rozdziału opisany został algorytm zarządzania kolejką

Transfer Ring w kontrolerze xHC. Działanie kolejki Command Ring jest analogiczne do

działania kolejki Transfer Ring z pewnymi wyjątkami.

Rysunek 3-1 przedstawia schemat zarządzanie wskaźnikami kolejki Transfer

Ring. System sterujący (host), wprowadza elementy do kolejki Transfer Ring z pomocą

wskaźnika Enqueue Pointer, a odbiornik (kontroler xHC) usuwa elementy z kolejki

Transfer Ring z pomocą wskaźnika Dequeue Pointer.

Strona 18

Page 19: IEVGENII DROZDOV

Zmiana wartości pola bitowego Cycle w strukturze TRB wskazuje na lokalizację

wskaźnika Enqueue Pointer w kolejce Transfer Ring, eliminując potrzebę definiowania

dodatkowego fizycznego rejestru Enqueue Pointer. Oprogramowanie wykorzystuje i

utrzymuje własne kopie wskaźników Enqueue Pointer i Dequeue Pointer dla każdej

kolejki Transfer Ring .

Na początku inicjalizacji wskaźniki Enqueue Pointer i Dequeue Pointer wskazują

na adres pierwszej struktury TRB w kolejce Transfer Ring. Wskaźnik Enqueue Pointer

określa lokalizację następnego elementu roboczego w kolejce Transfer Ring.

Oprogramowanie przesuwa swoją kopię wskaźnika Enqueue Pointer przez zwiększenie

o wielkość struktury TRB.

Kontroler xHC również utrzymuje własne kopie wskaźników Enqueue Pointer i

Dequeue Pointer dla każdej kolejki Transfer Ring. Kontroler wykorzystuje wskaźnik

Dequeue Pointer, żeby określić skąd pobrać następny element roboczy z kolejki

Transfer Ring. Kontroler xHC przesuwa swoją kopię wskaźnika Dequeue Pointer przez

zwiększenie o wielkość struktury TRB.

Kontroler xHC stosuje kolejkę Event Ring dla zgłoszenia aktualnej wartości

wskaźnika Dequeue Pointer do oprogramowania systemowego. Każde zdarzenie

Strona 19

Rysunek 3-1: Zarządzanie wskaźnikami kolejki Transfer Ring [8]

Page 20: IEVGENII DROZDOV

transferu umieszczonego w kolejce Event Ring wskazuje na strukturę TRB, która go

wygenerowała. Oprogramowanie interpretuje wartość wskaźnika z najpóźniejszego

zdarzenia transferu jako wartość bieżącą Dequeue Pointer.

Kontroler xHC wykorzystuje wskaźnik Enqueue Pointer żeby określić czy kolejka

Transfer Ring jest pusta. Po pobraniu struktury TRB z kolejki Transfer Ring kontroler

xHC sprawdza, czy bit Cycle został zmieniony. Jeśli wykryto przejście od „0” do „1”

albo od „1” do „0” – kolejka Transfer Ring jest pusta.

Oprogramowanie wykorzystuje wskaźnik Dequeue Pointer żeby określić kiedy

kolejka Transfer Ring jest pełna. Po obróbce zdarzenia transferu kopia wskaźnika

Dequeue Pointer zostaje aktualizowana wartością pola wskaźnika w strukturze TRB

zdarzenia transferu. Jeśli następny wskaźnik Enqueue Pointer będzie równy Dequeue

Pointer to znaczy że kolejka Transfer Ring jest pełna i oprogramowanie musi czekać na

zdarzenie transferu które przesunie wskaźnik Dequeue Pointer.

Wskaźnik Enqueue Pointer jest zarządzany przez producenta (oprogramowanie), a

wskaźnik Dequeue Pointer – przez konsumenta (kontroler xHC). Producent zachowuje

flagę Producer Cycle State (PCS), która oznacza wartość przeznaczoną do zapisania do

bitu Cycle w strukturze TRB. Konsument zachowuje flagę Consumer Cycle State

(CCS), którą porównuje do bitu Cycle w strukturze TRB pobieranego z pamięci. Jeśli

flaga CCS jest równa wartości bitu Cycle w strukturze TRB to konsument ma prawo

przetwarzać strukturę TRB na którą wskazuje Dequeue Pointer. Jeśli flaga CCS nie jest

równa wartości bitu Cycle w strukturze TRB to konsument musi zatrzymać

przetwarzanie struktury TRB i czekać na następne uruchomienie przetwarzania.

Wyjątki dla kolejki Command Ring:

• Jeśli rejestr Command Ring Control Register (CRCR) jest zapisywany podczas

gdy kolejka Command Ring jest zatrzymana, kontroler xHC musi inicjalizować

wskaźnik Dequeue Pointer dla kolejki Command Ring wartością pola wskaźnika

Command Ring Pointer.

• Gdy rejestr Doorbell jest zapisywany oprogramowaniem systemowym, kontroler

xHC musi zacząć przetwarzać strukturę Command TRB na którą wskazuje

wskaźnik Dequeue Pointer. Kontroler xHC przetwarza strukturę Command TRB

inkrementując wskaźnik Dequeue Pointer do momentu gdy kolejka Command

Ring jest pusta.

Strona 20

Page 21: IEVGENII DROZDOV

• Położenie wskaźnika Dequeue Pointer dla kolejki Command Ring jest zgłaszane

przez kolejkę Event Ring.

Pozostałe aspekty zarządzania kolejką Command Ring są identyczne z tymi, które

są opisane dla kolejki Transfer Ring.

Krótki opis struktury TRB jest pokazany na Rysunku 3-2.

Struktura TRB składa się z 3 podstawowych elementów: Parameter, Status i

Control.

Transmisja pakietów pomiędzy hostem, a urządzeniem odbywa się za

pośrednictwem warstwy Link Layer [8].

3.3. Opis rozwiązania

UCS jest osobnym modułem typu „master” który może być stosowany w

systemach SoC do zapisu oraz odczytu danych do/z rejestrów wewnętrznych modułów

typu „slave” (wysyłanie komend z modułu UCS). Może być zastosowany do

zmniejszenia obciążenia interfejsu zewnętrznego w systemie.

Zaplanowane komendy są zapisywane do pamięci przez sterownik interfejsu.

Następnie sterownik interfejsu inicjuje wysyłanie poleceń do kolejnych modułów slave.

Po zakończeniu operacji UCS pozostaje w stanie nieaktywnym do momentu, gdy

sterownik interfejsu zainicjuje kolejną sesję lub stworzy nową.

Mechanizm jest podobny do scatter-gather lub wektorowego DMA.

Typowe bloki funkcjonalne w systemie SoC to: magistrala systemowa, moduły

slave i master, sterowniki interfejsów oraz zewnętrzny interfejs który jest podłączony do

innego systemu wysyłającego komendy, dane oraz odbierającego i analizującego

otrzymane informacje.

System z kilkoma modułami master jest pokazany na Rysunku 3-3. Blok

Wishbone Serial Bus musi zawierać dekoder adresu oraz arbiter dla pracy z kilkoma

Strona 21

Rysunek 3-2: Szablon struktury TRB [8]

Page 22: IEVGENII DROZDOV

modułami master. W tym przypadku moduł UCS może zapisywać oraz odczytywać

dane z rejestrów dwóch kontrolerów GPIO jak również działać w systemie z innym

modułem master – kontrolerem DMA. Komendy są wysyłane do Pamięci komend w

module UCS przez zewnętrzny system za pośrednictwem interfejsu UART, który jest

podłączony do sterownika UART z interfejsem Wishbone Master.

Inny przykład systemu z module UCS jest pokazany na Rysunku 3-4 . W tym

przypadku moduł UCS jest wykorzystywany jako most pomiędzy dwoma magistralami

Wishbone. Dwie magistrale mogą operować jednocześnie (przykład: sterownik Ethernet

wysyła komendę do sterownika USB i jednocześnie moduł UCS wysyła komendę do

jednego z kontrolerów GPIO). W takim zastosowaniu działanie jest podobne do

systemów wieloprocesorowych, ale główną różnicą jest to że moduł UCS zajmuje mniej

zasobów w układzie FPGA niż rdzeń procesora.

Strona 22

Rysunek 3-3: Przykład systemu z modułem UCS

Page 23: IEVGENII DROZDOV

Metoda scatter-gather która jest wykorzystana w sposobie działania modułu UCS

jest bardzo elastyczna. Pozwala ona nie tylko zdefiniować sekwencje często używanych

komend, ale również cały algorytm pracy poprzez różne kombinację wskaźników w

Zestawie rejestrów.

Strona 23

Rysunek 3-4: Moduł UCS jako most

Page 24: IEVGENII DROZDOV

Strona 24

Page 25: IEVGENII DROZDOV

4. Implementacja rozwiązania

Moduł UCS został zaprojektowany i opisany w języku opisu sprzętu VHDL.

Techniki które wykorzystano przy projektowaniu to:

• Opis behawioralny każdego podmodułu.

• Opis strukturalny całego modułu UCS.

• Weryfikacja funkcjonalna w środowisku testowym napisanym w języku VHDL.

Symulację układu przeprowadzono z pomocą symulatorów ModelSim oraz

ISim.

• Weryfikacja sprzętowa za pomocą płyt Xilinx Spartan-3AN Starter Kit oraz

Atlys Spartan-6 Design Platform.

Projektowanie odbywało się ramach podejścia top-bottom (najpierw został

zaimplementowany moduł główny, a później poszczególne podmoduły).

4.1. Wybór interfejsów

Przed implementacją przeprowadzono badanie najbardziej popularnych

dostępnych standardów magistrali, które mogą być wykorzystane w module UCS. Do

zbadania zostały wybrane 3 magistrale:

1. Advanced Extensible Interface 4.0 (AXI4.0) [9].

2. Open Core Protocol 3.0 (OCP3.0) [10].

3. Wishbone [11].

Wszystkie 3 standardy są dobrze udokumentowane.

Zaletą standardów OCP i AXI jest to, że są one wspierane i rozwijane przez firmy

Accelera i ARM, co zapewnia zwiększenie funkcjonalności i ułatwienie implementacji.

Wadą jest to, że są to standardy zamknięte i dostęp do dokumentacji jest ograniczony.

Zaletą standardu Wishbone jest to, że on jest otwarty i dokumentacja jest dostępna

bez żadnych ograniczeń. Standard jest rozwijany przez organizację OpenCores

wykorzystywany w dużej liczbie projektów związanych z systemami SoC.

Z powodów wymienionych powyżej wszystkie interfejsy komunikacyjne modułu

UCS zostały zaprojektowane zgodnie ze standardem Wishbone.

W systemie z interfejsami innymi niż Wishbone, moduł UCS można podłączyć za

pomocą wrapperów. Rysunek 4-1 pokazuje, jak sterownik Ethernet z interfejsem OCP

może komunikować się z magistralą systemową AXI za pośrednictwem modułu UCS z

Strona 25

Page 26: IEVGENII DROZDOV

interfejsami Wishbone.

4.2. Model sprzętowy

4.2.1. Schemat blokowy

Schemat blokowy modułu UCS jest pokazany na Rysunku 4-2.

Moduł UCS zawiera 7 bloków funkcjonalnych: Interfejs Wishbone Slave, Interfejs

Wishbone Master, Interfejs Wishbone Slave dla God Mode (WSGM), Rdzeń UCS,

Zestaw rejestrów, Pamięć komend i Pamięć danych.

Strona 26

Rysunek 4-1: Wrappery w systemie z UCS

Page 27: IEVGENII DROZDOV

Interfejs Wishbone Slave, Master i WSGM są zgodne ze standardem magistrali

Wishbone (wersja B4) [11].

Rdzeń UCS jest głównym blokiem operacyjnym który zarządza przetwarzaniem

komend, inicjalizacją i działaniem po resecie. Blok ten zarządza także ścieżką danych

od interfejsu slave do master przy działaniu w trybie God Mode.

Zestaw rejestrów zawiera flagi i niezbędne dane dla inicjalizacji i działania.

Pamięć komend zawiera deskryptory Command Unit (CU) które muszą być

wysłane do interfejsu master.

Pamięć danych zawiera dane które zostały otrzymane od modułów slave podczas

przetwarzania deskryptora CU z komendą odczytu.

Strona 27

Rysunek 4-2: Schemat blokowy modułu UCS

Page 28: IEVGENII DROZDOV

4.2.2. Opis interfejsów

Charakterystyki Interfejsu Wishbone Slave oraz Interfejsu WSGM:

• 8-bitowa linia danych.

• 8-bitowa linia adresu.

• Operacje pojedynczego zapisu i pojedynczego odczytu.

• Reset synchroniczny.

Charakterystyki Interfejsu Wishbone Master:

• 8-bitowa linia danych.

• 8-bitowa linia adresu.

• Operacje pojedynczego zapisu i pojedynczego odczytu.

• Reset synchroniczny.

• Brak rozwiązywania przy blokadzie linii ack przez moduł slave (ustawienie

stałego wartości „1” na linii).

4.2.3. Pamięć komend

Moduł UCS ma 96-bajtową Pamięć komend która może zawierać 32 deskryptory

CU (3 bajty każdy). Dostęp do pamięci zapewniają pola rejestrowe CUMA.CUMA,

CUO.CUO, CUAC.CUAC. CUDC.CUDC i flagi FLAGS.WCMD, FLAGS.RCMD.

4.2.4. Pamięć danych

Pamięć danych w module UCS jest zaimplementowana w formie kolejki FIFO i

może zawierać 32 8-bitowe słowa danych. Danę mogą być przeczytane po kolei z pola

rejestrowego DMD.DMD.

4.2.5. Zestaw rejestrów

Moduł UCS zawiera 15-bajtowy Zestaw rejestrów z 15 8-bitowymi rejestrami.

Dostęp do rejestrów zapewnia Interfejs Wishbone Slave.

4.2.6. Rdzeń UCS

Rdzeń UCS wykonuje przetwarzanie zbiorów deskryptorów CU – Command

Set (CS).

Strona 28

Page 29: IEVGENII DROZDOV

4.3. Zasady działania

4.3.1. Konfiguracja

Konfiguracja modułu UCS składa się z zapisu zestawów deskryptorów CS do

Pamięci komend i zapisu adresów bazowych zestawów deskryptorów CS do

odpowiednich rejestrów CSx (tworzenie przestrzeni wektorowej CS), jak jest pokazane

na Rysunku 4-3.

Zapis deskryptorów CU do Pamięci komend składa się z następujących etapów:

1. Zapis adresu deskryptora CU w Pamięci komend do rejestru CUMA.

2. Zapis pola OPTIONS w deskryptorze CU do rejestru CUO.

3. Zapis adresu rejestru wewnętrznego modułu slave (pole ADDRESS w

deskryptorze CU) do rejestru CUAC.

Strona 29

Rysunek 4-3: Konfiguracja modułu UCS

Page 30: IEVGENII DROZDOV

4. Zapis danych które muszą być wysłane w przypadku komendy zapisu do

modułu slave (pole DATA w deskryptorze CU) do rejestru CUDC.

5. Ustawienie flagi FLAGS.WCMD i oczekiwanie na moment zanegowania flagi

przez sprzęt. Kiedy flaga zostaje zanegowana to znaczy, że komenda zapisu

deskryptora do Pamięci komend została wykonana.

Zapis deskryptorów Control CU (CCU) do Pamięci komend składa się z

następujących etapów:

1. Zapis adresu deskryptora CCU w Pamięci komend do rejestru CUMA.

2. Zapis pola OPTIONS w deskryptorze CCU do rejestru CUO.

3. Zapis dolnych 8 bitów licznika CS (pole COUNT0 w deskryptorze CCU) do

rejestru CUAC.

4. Zapis górnych 8 bitów licznika CS (pole COUNT1 w deskryptorze CCU) do

rejestru CUDC.

5. Ustawienie flagi FLAGS.WCMD i oczekiwanie na moment zanegowania flagi

przez sprzęt. Kiedy flaga zostaje zanegowana to znaczy, że komenda zapisu

deskryptora do Pamięci komend została wykonana.

Uwaga: Każdy zestaw deskryptorów CS musi mieć deskryptor CCU pod ostatnim

adresem. Wskazuje on na koniec iteracji przetwarzania zestawu CS.

Kiedy wszystkie zestawy CS zostały załadowane do Pamięci komend, adres

bazowy zestawu CS musi być zapisany do odpowiedniego rejestru Csx.

4.3.2. Uruchomienie przetwarzania

Po zakończeniu etapu inicjalizacji (Pamięć komend została uzupełniona

deskryptorami i wektor adresów bazowych zestawów deskryptorów CS został

skonfigurowany) przetwarzanie może być uruchomione.

Rysunek 4-4 przedstawia przykład uruchamiania przetwarzania zestawu

deskryptorów CS.

Przetwarzanie zaczyna się od ustawiania odpowiedniej flagi DOORBELL.CSBx.

Każda flaga DOORBELL odpowiada adresowi bazowemu zestawu CS w rejestrach

CSx (przykład: ustawienie flagi DOORBELL.CSB7 uruchamia przetwarzanie zestawu

CS z adresem bazowym CS7.CSA7). Pobieranie komend zaczyna się od adresu

bazowego zestawu deskryptorów CS do deskryptora CCU (ostatni adres każdego CS) i

Strona 30

Page 31: IEVGENII DROZDOV

powtarza się COUNT razy (w deskryptorach CCU COUNT – konkatenacja pól

COUNT1 i COUNT0).

Jeśli kilka flag DOORBELL jest jednocześnie ustawionych to przetwarzanie

zaczyna się od młodszej do starszej flagi.

W celu odczytania danych zebranych w Pamięci danych podczas przetwarzania

deskryptora CU z bitem OPTIONS.RW równym „0” w deskryptorze (komenda

odczytu) wykorzystuje się rejestr DMD. Dane są odczytywane po kolei po 8 bitów

zaczynając od pierwszych odebranych (kolejka FIFO). Dane muszą być odczytane

zanim zostanie ustawiona flaga FLAGS.DF, ponieważ moduł UCS będzie wstrzymany

przed następną komendą odczytu (kolejka FIFO jest pełna). Aby zignorować flagę

FLAGS.DF musi być ustawiona flaga FLAGS.DO, w tym przypadku stare dane zostaną

pominięte i będą zastąpione nowymi (stosuje się w systemach czasu rzeczywistego).

4.3.3. Zakończenie przetwarzania

Przetwarzanie kończy się, kiedy każdy zestaw deskryptorów CS zostanie

wykonany COUNT razy (w deskryptorach CCU COUNT – konkatenacja pól COUNT1

i COUNT0).

Strona 31

Rysunek 4-4: Przykład uruchamiania przetwarzania zestawów deskryptorów CS

Page 32: IEVGENII DROZDOV

Kiedy przetwarzanie zestawu CS jest zakończone, odpowiednia flaga

DOORBELL zostaje ustawiona na „0” przez sprzęt.

Przetwarzanie wszystkich zestawów CS jest zakończone, kiedy wszystkie flagi

DOORBELL są ustawione na „0”.

4.4. Weryfikacja funkcjonalna

Weryfikacja funkcjonalna modułu UCS została przeprowadzona w środowisku

weryfikacyjnym w języku VHDL z pomocą techniki zaproponowanej przez organizacją

Synthworks w [12]. Do tworzenia wirtualnych interfejsów dla pobudzenia portów

modułu UCS zostały wykorzystane bufory trójstanowe.

Głównym kryterium dla implementacji środowiska było pokrycie jak największej

części funkcjonalności modułu UCS.

W Tablicy 4-1 jest pokazane 12 testów, które sprawdzają poprawność działania

modułu UCS.

Tablica 4-1: Testy modułu UCS w środowisku weryfikacyjnym

Nazwa testu Opis

rw_reg_testSprawdzenie poprawności zapisu i odczytu z rejestrów typu RW.

illegal_reg_testSprawdzenie odczytu wartości 0000_0000b z rejestrów z nieprawidłowym adresem (powyżej Eh).

rst_reg_testSprawdzenie wartości wszystkich rejestrów w Zestawie rejestrów po resecie.

rw_cmd_test

Sprawdzenie zapisu i odczytu deskryptorów CU z Pamięci komend oraz sprawdzenie zapisu i odczytu deskryptorów z nieprawidłowych adresów (powyżej 20h). Po odczycie deskryptora CU z nieprawidłowych adresów musi być zwrócony deskryptor z ustalonym polem OPTIONS.VALID na „0”.

fetch_cmd_test

Sprawdzenie poprawności działania mechanizmu przetwarzania zestawów deskryptorów CS, cyklu zapisu/odczytu na Interfejsie Wishbone Master oraz przetwarzania deskryptorów CCU na końcu każdego zaestawu CS.

Strona 32

Page 33: IEVGENII DROZDOV

Nazwa testu Opis

fetch_cmd_count_test

Sprawdzenie poprawności działania mechanizmu przetwarzania zestawów deskryptorów CS, cyklu zapisu/odczytu na Interfejsie Wishbone Master w przypadkucyklicznego powtarzania działania z pomocą licznika w deskryptorze CCU (konkatenacja CCU.COUNT1 i CCU.COUNT0).

overload_cmd_test

Sprawdzenie poprawności działania mechanizmu przetwarzania zestawów deskryptorów CS, cyklu zapisu/odczytu na Interfejsie Wishbone Master bez deskryptora CCU na końcu zestawu CS. W tym przypadku moduł UCS musi zostać zatrzymany przy wyjściu poza zakres adresowy Pamięci komend (pole OPTIONS.VALID deskryptora CU ustawione na „0”).

rw_datmem_testSprawdzenie poprawności zapisu/odczytu danych z Pamięcidanych przy przetwarzaniu deskryptora CU z polem OPTIONS.RW ustawionym na „0” (komenda odczytu).

overflow_datmem_testSprawdzenie zatrzymania modułu UCS przy wypełnieniu Pamięci danych przy fladze FLAGS.DO ustawionej na „0” (nadpisywanie danych zabronione).

overwrite_datmem_testSprawdzenie mechanizmu nadpisywania starych danych przy wypełnieniu Pamięci danych przy fladze FLAGS.DO ustawionej na „1” (nadpisywanie danych aktywowane).

gm_path_testSprawdzenie poprawności przejścia sygnałów z Interfejsu Wishbone Slave do Wishbone Master w trybie God Mode (flaga FLAGS.GM ustawiona na „1”).

gm_off_testSprawdzenie mechanizmu wyłączenia trybu God Mode przez Interfejs WSGM.

Strona 33

Page 34: IEVGENII DROZDOV

Na Rysunku 4-5 jest pokazane środowisko weryfikacyjne oraz połączenia testów

do interfejsów modułu UCS.

Po przeprowadzeniu testowania modułu UCS za pomocą wszystkich testów

wymienionych powyżej zostały wyeliminowane błędy generowane przez asercje oraz

warunki poprawności.

Strona 34

Rysunek 4-5: Schemat blokowy środowiska weryfikacyjnego

Page 35: IEVGENII DROZDOV

4.5. Synteza

Synteza układu została przeprowadzona za pomocą narzędzia Xilinx ISE 14.7 dla

układów FPGA Spartan-3AN oraz Spartan-6. Synteza zakończyła się bez błędów, jej

wyniki przedstawione są w Tablicach 4-2 i 4-3.

Tablica 4-2: Zużycie zasobów w układzie FPGA Spartan-3AN

Zasoby FPGA Liczba Zużycie

Slice Reg 1024 8,7 %

LUT 1436 12,2 %

Slice 1168 19,8 %

BRAM 1 5 %

Tablica 4-3: Zużycie zasobów w układzie FPGA Spartan-6

Zasoby FPGA Liczba Zużycie

Slice Reg 976 1,8 %

LUT 820 3 %

Slice 455 6,7 %

BRAM 1 0,4 %

W Tablicach 4-2 i 4-3:

• Slice Reg – logika sekwencyjna w układzie FPGA (przerzutniki).

• Look-Up Table (LUT) – logika kombinacyjna w układzie FPGA.

• Slice – bloki zawierające w sobie rejestry Slice Reg oraz logikę LUT.

• Block Random Access Memory (BRAM) – blok pamięci w układzie FPGA.

Strona 35

Page 36: IEVGENII DROZDOV

Strona 36

Page 37: IEVGENII DROZDOV

5. Testowanie z portem UART

5.1. Opis systemu testowego

Na Rysunku 5-1 jest pokazany system testowy. System był syntezowany na płycie

Spartan-3AN Starter Kit.

System testowy ma na celu sprawdzenie działania modułu UCS przy sterowaniu

systemu przez magistralę szeregową wolniejszą od zegara systemowego.

Opis systemu testowego z portem UART:

• Częstotliwość zegara systemowego – 50 MHz.

Strona 37

Rysunek 5-1: Układ testowy wykorzystujący port UART

Page 38: IEVGENII DROZDOV

• Dwa moduły slave GPIO z 8-bitowymi rejestrami podłączone do czterech diod

LED każdy.

• Moduł Wishbone Interconnect z dekoderem adresu dla maksymalnie czterech

modułów slave. Mapa adresowa jest pokazana w Tablicy 5-1. Struktura modułu

Wishbone Interconnect jest opisana w [11].

• Moduł UCS jako jedyny master w systemie.

• Sterownik UART dostępny w [13] z otwartą licencją. Szybkość transmisji –

115200 (bit/s).

Tablica 5-1: Mapa adresowa w systemie testowym

Moduł Slave Adres

GPIO0 00h – 01h

GPIO1 10h – 11h

UCS (interfejs WSGM) 30h

Program sterujący został napisany w środowisku Matlab i uruchomiony w

systemie operacyjnym Linux.

Inicjalizacja systemu składa się z następujących etapów:

1. Przeprowadzenie modułu UCS w tryb God Mode.

2. Ustawienie portów kontrolera GPIO w tryb wyjściowy (zapis wartości 00h do

rejestrów GPIO_TRI każdego modułu GPIO)

Program emuluje podwójny licznik modulo 16 (dwa liczniki modulo 16) zapisując

do rejestru GPIO_DATA każdego modułu GPIO wartości od 0 do 15.

5.2. Obliczenia teoretyczne

Obliczenia zostały przeprowadzone w środowisku Matlab.

f =50 MHz – częstotliwość zegara systemowego.

t rw – czas operacji zapisu/odczytu (4 cykle zegara) na magistrali Wishbone.

t rw=4f

(5-1)

Strona 38

Page 39: IEVGENII DROZDOV

f uart=115200 bit /s – szybkość transmisji danych.

tuart – czas transmisji 10 bitów danych przez port UART (1 start-bit, 8 bitów danych,

1 stop-bit).

tuart=10f uart

(5-2)

t reg – czas zapisu/odczytu 8-bitowego rejestru z 8-bitowym adresem (2 cykle

zapisu/odczytu, 2 cykle transmisji – adres oraz dane)

t reg=2(trw+t uart) (5-3)

t noucsteor – czas wykonania jednego cyklu dwóch liczników modulo 16 (2 zapisy do

rejestrów przy inicjalizacji oraz 32 zapisy wartości do portów wyjściowych GPIO).

N – liczba cykli podwójnego licznika modulo 16.

t noucsteor=32 t reg⋅N+2t reg (5-4)

Ustawienie modułu UCS w tryb God Mode pomijany jest przy obliczeniach

czasu, aby oszacować czas działania systemu bez modułu UCS.

Podstawienie wartości:

Do (5-1): t rw=4

50000000=8⋅10−8

(s)

Do (5-2): tuart=10

115200≈8.68⋅10−5

(s)

Do (5-3): t reg=2(8⋅10−8+8,68⋅10−5

)=1,74⋅10−4(s)

Do (5-4): t noucsteor=32⋅1,74⋅10−4⋅N+2⋅1,74⋅10−4

=5,57⋅10−3⋅N+3,48⋅10−4

Jak widać ze wzoru (5-4) czas wykonania programu liniowo narasta w zależności

od liczby cykli podwójnego licznika.

Dla obliczenia czasu trwania testów z modułem UCS w trybie z wyłączonym God

Mode jest potrzebny czas zapisu deskryptorów komend ( t cmd ) do Pamięci komend.

Dla zapisu deskryptora CU do Pamięci komend jest potrzebne 5 zapisów do rejestrów:

1. Zapis do rejestru CUMA.

2. Zapis do rejestru CUO.

3. Zapis do rejestru CUAC.

4. Zapis do rejestru CUDC.

Strona 39

Page 40: IEVGENII DROZDOV

5. Ustawienie flagi FLAGS.WCMD na „1”.

t cmd=5 t reg (5-5)

Żeby oszacować czas jednej iteracji testu ( tucsteor ) trzeba dodać czas trwania 6

zapisów do rejestrów ( t reg ), 33 zapisów do Pamięci komend ( t cmd ) (włącznie z

zapisem deskryptora CCU na końcu zestawu CS) oraz czas 32⋅N operacji zapisu na

magistrali systemowej ( t rw ).

tucsteor=32t rw⋅N+6 treg+33 t cmd (5-6)

Podstawienie wartości:

Do (5-5): t cmd=5⋅1,74⋅10−4=8,67⋅10−4

(s )

Do (5-6): tucsteor=32⋅8⋅10−8⋅N+6⋅1,74⋅10−4

+33⋅8,7⋅10−4=2,56⋅10−6

⋅N+2,98⋅10−2

Jak widać ze wzoru (5-6) czas wykonania programu liniowo narasta w zależności

od liczby cykli podwójnego licznika.

Porównując teoretyczny czas przy działaniu systemu z modułem UCS oraz bez:

μteor=t noucsteor

t ucsteor

=5,57⋅10−3

⋅N+3,48⋅10−4

2,56⋅10−6⋅N+2,98⋅10−2 (5-7)

Powyższy wzór (5-7) dla μteor świadczy o tym, że wraz ze zwiększeniem liczby

powtarzających się operacji szybkość działania wzrasta prawie liniowo.

5.3. Porównanie wyników

Na Rysunku 5-2 są pokazane zmierzone eksperymentalne wartości czasu

wykonania 100 testów z liczbą cykli podwójnego licznika od 1 do 100. Niebieską linią

jest zaznaczony czas działania zmierzony w systemie bez modułuUCS ( t noucs ).

Czerwoną linią – czas zmierzony przy przeprowadzeniu testu w systemie z modułem

UCS ( tucs ).

Strona 40

Page 41: IEVGENII DROZDOV

Na wykresie prawie nie widać nachylenia linii wykresu czasu działania systemu z

modułem UCS. Jest to spowodowane tym, że czas operacji zapisu na magistrali

systemowej ( t rw ) jest znacznie mniejszy od czasu transmisji danych przez port

UART.

Można zauważyć, że przy wartościach N od 1 do 5 konfiguracja systemu z

modułem UCS działa wolniej. Jest to spowodowane tym, że zapisów do rejestrów przez

port UART (czas których jest stosunkowo duży) jest więcej dla konfiguracji z modułem

UCS dla tych wartości N .

Strona 41

Rysunek 5-2: Porównanie wyników w systemie bez modułu UCS oraz z modułem UCS

Page 42: IEVGENII DROZDOV

Na Rysunku 5-3 jest pokazana zależność zwiększenia szybkości od liczby iteracji

N . Niebieską linią jest pokazana charakterystyka teoretyczna, czerwoną – zmierzona

w sprzęcie.

W Tablicy 5-2 są pokazane wybrane wartości dla porównania zwiększenia

szybkości w zależności od liczby iteracji.

Strona 42

Rysunek 5-3: Zależności zwiększenia szybkości działania systemu od liczby iteracji w systemie z portemUART

Page 43: IEVGENII DROZDOV

Tablica 5-2: Porównanie zwiększenia szybkości dla wybranych wartości liczby iteracji

N μteor μexp

1 0,21 0,21

10 1,89 1,84

20 3,76 4,04

30 5,62 6,09

40 7,48 7,65

50 9,34 9,65

60 11,19 11,19

70 13,04 12,77

80 14,89 15,18

90 16,74 17,27

100 18,58 20,05

Im większa liczba iteracji tym większy stosunek czasu działania systemu bez

modułu UCS do czasu działania systemu z modułem UCS.

Strona 43

Page 44: IEVGENII DROZDOV

Strona 44

Page 45: IEVGENII DROZDOV

6. Testowanie z portem Ethernet

6.1. Opis systemu testowego

Na Rysunku 6-1 jest pokazany system testowy. System był syntezowany na płycie

Atlys Spartan-6 Design Platform [14].

Do testowania zostały przeanalizowane dwa sterowniki interfejsu Ethernet:

„fade”, opisany w [15] oraz IPbus opisany w [16]. Został wybrany sterownik IPbus ze

względu na wygodę użycia.

System testowy ma na celu sprawdzić działanie UCS przy sterowaniu systemu

przez magistralę szeregową szybszą od zegara systemowego.

Strona 45

Page 46: IEVGENII DROZDOV

Strona 46

Rysunek 6-1: Układ testowy wykorzystujący port Ethernet

Page 47: IEVGENII DROZDOV

Opis systemu testowego z portem Ethernet:

• Częstotliwość zegara systemowego – 125 MHz.

• Moduł Wishbone Interconnect 1 z dekoderem adresu dla maksymalnie czterech

modułów slave, do którego są podłączone:

◦ Moduł slave GPIO0 z 8-bitowymi rejestrami podłączony do czterech diod

LED.

◦ Sterownik Ethernet IPbus jako master. Szybkość transmisji – 1 Gbit/s.

◦ Moduł UCS podłączony przez Interfejs Wishbone slave oraz WSGM.

• Moduł Wishbone Interconnect 2 z dekoderem adresu dla maksymalnie czterech

modułów slave, do którego są podłączone:

◦ Moduł slave GPIO1 z 8-bitowymi rejestrami podłączony do czterech diod

LED.

◦ Moduł UCS jako master.

Mapy adresowe są pokazane w Tablicy 6-1 oraz 6-2. Struktura modułu Wishbone

Interconnect jest opisana w [11].

Tablica 6-1: Mapa adresowa dekodera adresu modułu Wishbone Interconnect 1

Moduł Slave Adres

GPIO0 00h – 01h

UCS (interfejs Wishbone slave) 10h – 1Eh

UCS (interfejs WSGM) 20h

Tablica 6-2: Mapa adresowa dekodera adresu modułu Wishbone Interconnect 2

Moduł Slave Adres

GPIO1 00h – 01h

Program sterujący został napisany języku C++ z pomocą bibliotek

uHAL v2.3.3 [17], skompilowany i uruchomiony w systemie operacyjnym Linux.

Inicjalizacja systemu składa się z następujących etapów:

1. Przeprowadzenie modułu UCS w tryb God Mode.

2. Ustawienie portów kontrolera GPIO w tryb wyjściowy (zapis wartości 00h do

rejestrów GPIO_TRI każdego modułu GPIO)

Strona 47

Page 48: IEVGENII DROZDOV

Program emuluje podwójny licznik modulo 16 (dwa liczniki modulo 16) zapisując

do rejestru GPIO_DATA każdego modułu GPIO wartości od 0 do 15.

6.2. Obliczenia teoretyczne

Ze względu na to, że program testujący jest napisany w języku C++, który

wspiera wielowątkowość oraz wykorzystywany standard do transmisji danych, który

zawiera kilka warstw protokołu, trudno jest szacować dokładny czas teoretyczny pracy

systemu z modułem UCS oraz bez.

Żeby wyeliminować maksymalną liczbę błędów oceniono zwiększenie szybkości

wykonania w zależności od liczby iteracji N .

Obliczenia zostały przeprowadzone w środowisku Matlab.

f =125 MHz – częstotliwość zegara systemowego.

t reg – czas operacji zapisu/odczytu (4 cykle zegara) na magistrali Wishbone oraz

IPbus.

t reg=4f

(6-1)

Ustawienie modułu UCS w tryb God Mode jest pomijane przy obliczeniach czasu,

aby oszacować czas działania systemu bez UCS.

t noucsteor – czas wykonania jednego cyklu dwóch liczników modulo 16 (4 zapisy do

rejestrów przy inicjalizacji oraz 32 zapisy wartości do portów wyjściowych kontrolera

GPIO) w systemie bez modułu UCS.

t noucsteor=32 t reg⋅N+2t reg (6-2)

t cmd – czas zapisu deskryptorów komend do Pamięci komend.

t cmd=5 t reg (6-3)

tucsteor – czas wykonania jednego cyklu dwóch liczników modulo 16 (6 zapisów do

rejestrów przy inicjalizacji, 16 zapisów deskryptorów CU do Pamięci komend, 1 zapis

deskryptora CCU do Pamięci komend oraz32⋅N

2zapisów wartości (2 równoległe

cykli licznika) do portów wyjściowych kontrolera GPIO w systemie z modułem UCS.

Strona 48

Page 49: IEVGENII DROZDOV

tucsteor=6 treg+17 t cmd+(16 t reg+16 t reg

2)⋅N=16 treg⋅N+91 t reg (6-4)

μteor – zwiększenie szybkości działania w zależności od liczby iteracji N .

μteor=t noucsteor

t ucsteor

=32 t reg⋅N+2t reg

16 t reg⋅N+91t reg(6-5)

Podstawienie wartości:

Do (6-1): t reg=4

150⋅106=3,2⋅10−8

Do (6-5): μ teor=32⋅3,2⋅10−8

⋅N+2⋅3,2⋅10−8

16⋅3,2⋅10−8⋅N+91⋅3,2⋅10−8 =

102,4⋅N+6,451,2⋅N+291,2

6.3. Porównanie wyników

Na Rysunku 6-2 są pokazane zmierzone eksperymentalne wartości czasu

wykonania 1000 iteracji z liczbą cykli podwójnego licznika od 1 do 1000. Niebieską

linią jest zaznaczony czas działania zmierzony w systemie bez modułu UCS ( t noucs ).

Czerwoną linią – czas zmierzony przy przeprowadzeniu testu w systemie z UCS

( tucs ).

Strona 49

Page 50: IEVGENII DROZDOV

Na Rysunku 6-3 są pokazane zależności zwiększenia szybkości działania systemu

od liczby iteracji. Niebieską linią jest pokazana charakterystyka teoretyczna,

czerwoną – zmierzona w sprzęcie.

Strona 50

Rysunek 6-2: Zmierzone eksperymentalne wartości czasu wykonania w systemie z portem Ethernet

Page 51: IEVGENII DROZDOV

Ze względu na to że przy wywołaniu funkcji systemowych oraz bibliotek dla

pracy z portem Ethernet system operacyjny przeprowadza optymalizację

(wielowątkowość, przetwarzanie pakietów) na Rysunku 6-2 oraz 6-3 widać skoki.

W Tablicy 6-3 są pokazane wybrane wartości dla porównania zwiększenia

szybkości w zależności od liczby iteracji.

Strona 51

Rysunek 6-3: Zależności zwiększenia szybkości działania systemu od liczby iteracji w systemie z portemEthernet

Page 52: IEVGENII DROZDOV

Tablica 6-3: Porównanie zwiększenia szybkości dla wybranych wartości liczby iteracji

N μ teor μexp

1 0,32 0,4

100 1,89 2,1

200 1,95 1,9

300 1,96 2,44

400 1,97 2,09

500 1,98 1,94

600 1,98 2,63

700 1,98 1,84

800 1,98 1,3

900 1,99 1,5

1000 1,99 1,84

Przy małej liczbie iteracji eksperymentalne zwiększenie szybkości jest mniejsze

niż jeden. Spowodowane jest to większą liczbą operacji inicjalizacji (włączenie i

wyłączenie trybu God Mode, zapis deskryptorów do Pamięci komend) w systemie z

modułem UCS, niż w systemie bez modułu UCS.

Przy większej liczbie iteracji zwiększenie szybkości osiąga stałą wartość i zależy

od poziomu zrównoleglenia (liczby równoległych procesów) w systemie.

Strona 52

Page 53: IEVGENII DROZDOV

7. Kierunki dalszych prac

Przedstawiona w pracy wersja modułu UCS ma kilka wad, które można poprawić

za pomocą następujących metod:

1. Rozszerzenie szerokości słowa do 32 bitów (linia adresu oraz danych, słowa

Pamięci komend i Pamięci danych, długość rejestrów).

Pozwoli to na zwiększenie wektora adresów CSx oraz na dodatkowe możliwości

zmniejszenia czasu zapisu/odczytu deskryptorów z Pamięci komend.

2. Implementacja trybu Burst w Interfejsie Wishbone Slave [11].

Przy wykonaniu komend odczytów rejestrów modułów slave jest niezbędne

odczytanie jednego rejestru DMD, co nie powoduje zwiększenia szybkości wykonania

operacji odczytu. Tryb Burst w Interfejsie Wishbone Slave pozwoli na odczytanie całej

Pamięci danych naraz.

Tryb ten jest też korzystny dla szybkiego zapisywania/odczytywania

deskryptorów CU z Pamięci komend, inicjalizacji wektora adresów CSx w Zestawie

rejestrów.

3. Implementacja trybu Burst w Interfejsie Wishbone Master [11].

Pozwoli na wczytanie dużej ilości danych do Pamięci danych z modułów slave,

które wspierają tryb Burst.

4. Używanie mechanizmu Tag w Interfejsie Wishbone Slave [11].

Wyeliminuje potrzebę używania Interfejsu WSGM oraz potrzebę zarezerwowania

dodatkowego adresu w systemie dla modułu UCS podłączonego przez Interfejs WSGM.

5. Używanie mechanizmów kompresji/dekompresji.

Pozwoli na dodatkowe zmniejszenie ilości informacji przesyłanej przez

zewnętrzny interfejs.

6. Optymalizacja wykorzystania zasobów układu FPGA.

Pozwoli na zmniejszenie zużycia zasobów przez moduł UCS w układzie FPGA.

Strona 53

Page 54: IEVGENII DROZDOV

Strona 54

Page 55: IEVGENII DROZDOV

8. Podsumowanie

W pracy przeprowadzono badanie systemów sterowanych przez interfejs

zewnętrzny. Zbadano najczęściej używane komendy wysyłane do popularnych

modułów systemowych w układach FPGA oraz jedno z rozwiązań w kontrolerze

USB3.1 – xHC.

Dla zwiększenia szybkości wysyłania komend do modułów zrealizowanych w

układach FPGA zostało zaproponowane rozwiązanie uniwersalnego modułu

funkcjonalnego – UCS. Zaprojektowano całą syntezowalną architekturę urządzenia oraz

sprawdzono poprawność jego działania za pomocą weryfikacji funkcjonalnej. Testy

przeprowadzone za pomocą symulatorów ModelSim oraz ISim zapewniają maksymalne

pokrycie funkcjonalności modułu UCS. Testy w symulatorach nie wykazały błędów.

Zaprojektowano systemy testowe które zostały zrealizowane w układzie FPGA:

system z interfejsem zewnętrznym wolniejszym od zegara systemowego oraz system z

interfejsem szybszym od zegara systemowego. Dla przykładowych systemów obliczono

teoretyczną funkcję zwiększenia czasu działania w zależności od różnych wartości

liczby iteracji. Następnie przeprowadzono testowanie systemów w sprzęcie za pomocą

płyty Spartan-3AN Starter Kit oraz Atlys Spartan-6 Design Platform i porównano

wyniki z teoretycznymi. Porównanie to pokazuje, że obliczenia teoretyczne

przeprowadzono poprawnie.

Zastosowanie modułu UCS w systemach przynosi następujące korzyści:

• Zmniejszenie czasu wykonania często powtarzających się operacji.

• Możliwość zbierania danych do pamięci FIFO i odczytanie ich z tylko jednego

rejestru, a nie z wielu rejestrów modułów w systemie (znacznie upraszcza

program sterujący).

• Możliwość planowania operacji z pomocą wektorów adresowych i ich

kombinacji (metoda scatter-gather).

• Możliwość dynamicznego wyłączenia modułu UCS z pomocą trybu God Mode

(przy wykonaniu rzadko powtarzających się komend).

Teoretyczne obliczenia dają podstawy, aby stwierdzić że przy zwiększeniu liczby

powtarzających się operacji zwiększenie szybkości pracy będzie liniowe dla

przykładowego systemu z interfejsem wolniejszym od zegara systemowego. Udało się

osiągnąć zmniejszenie czasu działania w sprzęcie systemu 20,05 razy dla 100 iteracji.

Strona 55

Page 56: IEVGENII DROZDOV

Dla przykładowego systemu z interfejsem szybszym od zegara systemowego

przy zwiększeniu liczby powtarzających się operacji zwiększenie szybkości pracy

będzie stałe. Udało się osiągnąć zmniejszenie czasu działania w sprzęcie

przykładowego systemu 1,89 razy dla 1000 iteracji z pomocą zrównoleglenia zadań

sterownikiem interfejsu oraz modułem UCS.

Dla obu typów interfejsów zewnętrznych udało się zwiększyć szybkość działania

systemu, co pozwala stwierdzić, że cel pracy został osiągnięty.

Strona 56

Page 57: IEVGENII DROZDOV

9. Bibliografia

[1] Spartan-3A/3AN FPGA Starter Kit Board User Guide, Xilinx 2008.

[2] EIA standard RS-232-C: Interface between Data Terminal Equipment and Data

Communication Equipment Employing Serial Binary Data Interchange, Electronic

Industries Association. Engineering Dept. 1969.

[3] LogiCORE IP AXI GPIO v2.0 Product Guide, Xilinx 2014.

[4] AXI Universal Serial Bus (USB) 2.0 Device v5.0 LogiCORE IP Product Guide,

Xilinx 2014.

[5] LogiCORE IP AXI DMA v7.1 Product Guide, Xilinx 2014.

[6] LogiCORE IP AXI SYSMON ADC v2.00a, Xilinx 2011.

[7] LogiCORE IP AXI Timer v2.0 Product Guide, Xilinx 2014.

[8] eXtensible Host Controller Interface for Universal Serial Bus (xHCI) rev1.1, Intel

2013.

[9] AMBA 4 AXI and ACE protocol specification, ARM 2011.

[10] Open Core Protocol v3.0 Specification, Accellera 2009.

[11] WISHBONE SoC Interconnection Architecture for Portable IP Cores vB4,

OpenCores 2010.

[12] VHDL Testbench Techniques that Leapfrog SystemVerilog, SynthWorks 2013.

[13] Peter Bennett: VHDL UART, https://github.com/pabennett/uart, czerwiec 2013.

[14] Atlys Board Reference Manual, Digilent 2013.

[15] Wojciech M. Zabołotny: Optimized Ethernet transmission of acquired data from

FPGA to embedded system, http://opencores.org/project,fade_ether_protocol,

październik 2013.

[16] C. Ghabrous Larrea, K. Harder, D. Newbold, D. Sankey, A. Rose, A. Thea and

T. Williams: IPbus, a flexible Ethernet-based control system for xTCA hardware,

doi:10.1088/1748-0221/10/02/C02019, luty 2015.

[17] CERN uHAL v2.3.3, https://svnweb.cern.ch/trac/cactus, październik 2014.

Strona 57

Page 58: IEVGENII DROZDOV

Strona 58

Page 59: IEVGENII DROZDOV

Aneks A. Opis portów modułu UCS

Aneks A.1. Porty sterujące

Porty sterujące są pokazane w Tablicy A-1.

Tablicа A-1: Porty sterujące modułu UCS

Nazwaportu

KierunekDługość(bitów)

Stanaktywny

Opis

rst_i wejście 1 wysoki Reset synchroniczny.

clk_i wejście 1zbocze

narastająceZegar główny modułu UCS, wyzwala wszystkie podbloki.

Aneks A.2. Porty Interfejsu Wishbone Slave

W module UCS jest zaimplementowana minimalna konfiguracja Interfejsu

Wishbone Slave, która jest pokazana w Tablicy A-2.

Tablicа A-2: Porty Interfejsu Wishbone Slave [11]

Nazwaportu

KierunekDługość(bitów)

Stanaktywny

Opis

adr_i_s wejście 8 wysokiWejściowy port adresu służy do przekazywania adresu binarnego rejestru w Zestawie rejestrów.

dat_i_s wejście 8 wysokiWejściowy port danych używany do przekazywania danych binarnych z rejestru w Zestawie rejestrów.

dat_o_s wyjście 8 wysoki

Wyjściowy port danych służy do przekazywania danych binarnych, które muszą być zapisane do rejestruw Zestawie rejestrów.

we_i_s wejście 1 wysoki

Wskazuje na typ cyklu obecny na magistrali. Sygnał jest ustawiony na „1” podczas cyklu zapisu lub na „0” podczas cyklu odczytu.

stb_i_s wejście 1 wysokiWskazuje na to, że moduł UCS jest wybrany dla operacji na magistrali.

ack_o_s wyjście 1 wysokiSygnał wyjściowy ustawiony na „1” oznacza zakończenie cyklu na magistrali.

Strona 59

Page 60: IEVGENII DROZDOV

Nazwaportu

KierunekDługość(bitów)

Stanaktywny

Opis

cyc_i_s wejście 1 wysoki

Sygnał ustawiony na „1” wskazuje, że na magistrali wykonuje się ważnycykl. Sygnał jest ustawiony na „1” podczas wszystkich cykli na magistrali od pierwszej transmisji danych do ostatniej.

Aneks A.3. Porty Interfejsu Wishbone Master

W module UCS jest zaimplementowana minimalna konfiguracja Interfejsu

Wishbone Master która jest pokazana w Tablicy A-3.

Tablicа A-3: Porty Interfejsu Wishbone Master [11]

Nazwaportu

KierunekDługość(bitów)

Stanaktywny

Opis

adr_o_m wyjście 8 wysoki

Wyjściowy port adresu służy do przekazywania adresu binarnego do magistrali z Pamięci komend (pole ADDRESS w deskryptorze CU).

dat_i_m wejście 8 wysokiWejściowy port danych służy do odczytania danych z magistrali do Pamięci danych.

dat_o_m wyjście 8 wysoki

Wyjściowy port danych używany do przekazywania danych binarnych z Pamięci komend (pole DATA w deskryptorze CU).

we_o_m wyjście 1 wysoki

Wskazuje na to jaki typ cyklu jest obecny na magistrali. Sygnał jest ustawiony na „1” podczas cyklu zapisu lub na „0” podczas cyklu odczytu.

stb_o_m wyjście 1 wysoki

Wskazuje na ważny cykl transmisji. Jest stosowany żeby zakwalifikowaćinne sygnały w interfejsie. Moduł slave musi ustawić na „1” sygnał ACK jako odpowiedź na każde ustawienie na „1” sygnału stb_o_m.

ack_i_m wejście 1 wysokiSygnał wejściowy ustawiony na „1” oznacza zakończenie cyklu na magistrali.

Strona 60

Page 61: IEVGENII DROZDOV

Nazwaportu

KierunekDługość(bitów)

Stanaktywny

Opis

cyc_o_m wyjście 1 wysoki

Sygnał ustawiony na „1” wskazuje, że na magistrali wykonuje się ważnycykl. Sygnał jest ustawiony na „1” podczas wszystkich cykli na magistrali od pierwszej transmisji danych do ostatniej.

Aneks A.4. Porty Interfejsu WSGM

W module UCS jest zaimplementowana minimalna konfiguracja Interfejsu

WSGM która jest pokazana w Tablicy A-4.

Tablicа A-4: Porty Interfejsu WSGM [11]

Nazwaportu

KierunekDługość(bitów)

Stanaktywny

Opis

adr_i_s_gm wejście 8 wysokiWyjściowy port adresu służy do przekazywania adresu binarnego rejestru FLAGS (0h).

dat_i_s_gm wejście 8 wysokiWejściowy port danych służy do odczytania wartości flagi FLAGS.GM.

dat_o_s_gm wyjście 8 wysoki

Wyjściowy port danych służy do przekazywania danych binarnych które muszą być zapisane do pola FLAGS.GM w rejestrze FLAGS.

we_i_s_gm wejście 1 wysoki

Wskazuje na to jaki typ cyklu jest obecny na magistrali. Sygnał jest ustawiony na „1” podczas cyklu zapisu lub na „0” podczas cyklu odczytu.

stb_i_s_gm wejście 1 wysokiWskazuje na to że moduł UCS jest wybrany dla operacji na magistrali.

ack_o_s_gm wyjście 1 wysokiSygnał wyjściowy ustawiony na „1” oznacza zakończenie cyklu na magistrali.

Strona 61

Page 62: IEVGENII DROZDOV

Nazwaportu

KierunekDługość(bitów)

Stanaktywny

Opis

cyc_i_s_gm wejście 1 wysoki

Sygnał ustawiony na „1” wskazuje, że na magistrali wykonuje się ważnycykl. Sygnał jest ustawiony na „1” podczas wszystkich cykli na magistrali od pierwszej transmisji danych do ostatniej.

Strona 62

Page 63: IEVGENII DROZDOV

Aneks B. God Mode

W trybie God Mode Interfejs Wishbone Master jest podłączony do Interfejsu

Wishbone Slave w sposób pokazany na Rysunku B-1.

Kiedy flaga FLAGS.GM jest ustawiona na „1” Zestaw rejestrów nie jest dostępny

i działanie modułu UCS jest wstrzymane.

Wyłączyć God Mode można tylko przez Interfejs WSGM. Wspomniany interfejs

musi być podłączony do magistrali systemowej i działa jak osobny moduł slave ze

swoim unikalnym adresem, który dekoder adresu systemu musi zarezerwować.

Wspomniany wirtualny moduł slave zawiera tylko rejestr FLAGS (pod adresem 0h), w

którym tylko flaga GM jest widoczna ze strony oprogramowania.

Strona 63

Rуsunek B-1: Połączenie interfejsów w God Mode

Page 64: IEVGENII DROZDOV

Strona 64

Page 65: IEVGENII DROZDOV

Aneks C. Interfejs programowy UCS

Aneks C.1. Mapa rejestrów

Mapa rejestrów jest pokazana w Tablicy C-1.

Tablicа C-1: Mapa rejestrów UCS

Nazwa rejestru Adres

FLAGS 0h

DOORBELL 1h

CS0 2h

CS1 3h

CS2 4h

CS3 5h

CS4 6h

CS5 7h

CS6 8h

CS7 9h

CUMA Ah

CUO Bh

CUAC Ch

CUDC Dh

DMD Eh

W Tablicy C-2 przedstawiono typy dostępu do rejestrów zaimplementowane w

module UCS.

Tablicа C-2: Typy dostępu do rejestrów

Typ dostępu Opis

RW Read/Write – zapis oraz odczyt.

RO Read Only – tylko odczyt.

W1HCWrite „1” Hardware Clear – zapis „1” przez oprogramowanie,ustawienie „0” przez sprzęt. Zapis „0” przez oprogramowanie jestignorowany.

RWHLRead/Write Hardware Load – zapis oraz odczyt. Nadpisanie danychprzez sprzęt.

Strona 65

Page 66: IEVGENII DROZDOV

Typ dostępu Opis

ROHLRead Only Hardware Load – tylko odczyt. Zapis danych przezsprzęt.

Aneks C.1.1. FLAGS – Flags (0h)

7 6 5 4 3 2 1 0

Reserved DO DF DE RCMD WCMD GM

Pola bitowe rejestru FLAGS są przedstawione w Tablicy C-3.

Tablicа C-3: Pola bitowe rejestru FLAGS

Numerbitów

Nazwapola

Typdostępu

Opis

5 DO RW

DO – Data Overwrite

Flaga pozwala na nadpisywanie starych danych w Pamięci danych na nowe.„1” – Nadpisywanie danych aktywowane„0” – Nadpisywanie danych zabronione

W przypadku gdy nadpisywanie danych jest zabronione oraz Pamięć danych jest pełna przetwarzanie komend jest zawieszone. W tym przypadku moduł UCS czeka na odczyt danych przez oprogramowanie z rejestru DMD.

4 DF ROHL

DF – Data Full

„1” wskazuje na to że Pamięć danych jest pełna.

Po ustawieniu na „1” oraz kiedy FLAGS.DO jest ”0” przetwarzanie komend jest zawieszone do momentu, gdy oprogramowanie odczytuje dane z rejestru DMD.

3 DE ROHL

DE – Data Empty

„1” wskazuje na to że Pamięć danych jest pusta i dane w rejestrze DMD są nieważne.

Strona 66

Page 67: IEVGENII DROZDOV

Numerbitów

Nazwapola

Typdostępu

Opis

2 RCMD W1HC

RCMD – Read Command

Zapis „1” powoduje odczyt deskryptora CU z Pamięci komend z adresem umieszczonym w rejestrze CUMA do następujących rejestrów:CUO <= CU.OPTIONSCUAC <= CU.ADDRESS/COUNT0CUDC <= CU.DATA/COUNT1

Sprzęt automatycznie ustawia ten bit na „0” po zakończeniu operacji odczytu z Pamięci komend.

1 WCMD W1HC

WCMD – Write Command

Ustawienie na „1” powoduje zapis deskryptora CU który składa się z pól w rejestrach CUO (CU.OPTIONS), CUAC (CU.ADDRESS/COUNT0) i CUDC (CU.DATA/COUNT1) do komórki Pamięci komend z adresem w rejestrze CUMA.

Sprzęt automatycznie ustawia ten bit na „0” po zakończeniu operacji zapisu do Pamięci komend.

0 GM RW

GM – God Mode

Flaga która aktywuje God Mode.„1” – God Mode jest aktywowany„0” – God Mode jest wyłączony

Aktywacja God Mode powoduje przekazanie wszystkich danych wprost od Interfejsu Wishbone Master do Interfejsu Wishbone Slave. W tym trybie Zestaw rejestrów nie jest dostępny.Żeby wyłączyć God Mode trzeba ustawić flagę FLAGS.GM na „0” przez Interfejs WSGM.Tylko flaga FLAGS.GM jest dostępna przez Interfejs WSGM.

Strona 67

Page 68: IEVGENII DROZDOV

Aneks C.1.2. DOORBELL – Doorbell (1h)

7 6 5 4 3 2 1 0

CSB7 CSB6 CSB5 CSB4 CSB3 CSB2 CSB1 CSB0

Pola bitowe rejestru DOORBELL są przedstawione w Tablicy C-4.

Tablicа C-4: Pola bitowe rejestru DOORBELL

Numerbitów

Nazwapola

Typdostępu

Opis

7 CSB7 W1HC

CSB7 – Command Set Bell 7

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS7.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

6 CSB6 W1HC

CSB6 – Command Set Bell 6

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS6.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

5 CSB5 W1HC

CSB5 – Command Set Bell 5

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS5.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

4 CSB4 W1HC

CSB4 – Command Set Bell 4

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS4.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

Strona 68

Page 69: IEVGENII DROZDOV

Numerbitów

Nazwapola

Typdostępu

Opis

3 CSB3 W1HC

CSB3 – Command Set Bell 3

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS3.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

2 CSB2 W1HC

CSB2 – Command Set Bell 2

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS2.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

1 CSB1 W1HC

CSB1 – Command Set Bell 1

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS1.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

0 CSB0 W1HC

CSB0 – Command Set Bell 0

Zapis „1” powoduje uruchomienie przetwarzania zestawu deskryptorów CS z adresem bazowym w rejestrze CS0.Sprzęt automatycznie ustawia flagę na „0” po zakończeniu przetwarzania zestawu deskryptorów CS.

Strona 69

Page 70: IEVGENII DROZDOV

Aneks C.1.3. CS0 – Command Set 0 (2h)

7 6 5 4 3 2 1 0

CSA0

Pola bitowe rejestru CS0 są przedstawione w Tablicy C-5.

Tablicа C-5: Pola bitowe rejestru CS0

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA0 RW

CSA0 – Command Set Address 0

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB0.

Aneks C.1.4. CS1 – Command Set 1 (3h)

7 6 5 4 3 2 1 0

CSA1

Pola bitowe rejestru CS1 są przedstawione w Tablicy C-6.

Tablicа C-6: Pola bitowe rejestru CS1

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA1 RW

CSA1 – Command Set Address 1

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB1.

Strona 70

Page 71: IEVGENII DROZDOV

Aneks C.1.5. CS2 – Command Set 2 (4h)

7 6 5 4 3 2 1 0

CSA2

Pola bitowe rejestru CS2 są przedstawione w Tablicy C-7.

Tablicа C-7: Pola bitowe rejestru CS2

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA2 RW

CSA2 – Command Set Address 2

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB2.

Aneks C.1.6. CS3 – Command Set 3 (5h)

7 6 5 4 3 2 1 0

CSA3

Pola bitowe rejestru CS3 są przedstawione w Tablicy C-8.

Tablicа C-8: Pola bitowe rejestru CS3

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA3 RW

CSA3 – Command Set Address 3

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB3.

Strona 71

Page 72: IEVGENII DROZDOV

Aneks C.1.7. CS4 – Command Set 4 (6h)

7 6 5 4 3 2 1 0

CSA4

Pola bitowe rejestru CS4 są przedstawione w Tablicy C-9.

Tablicа C-9: Pola bitowe rejestru CS4

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA4 RW

CSA4 – Command Set Address 4

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB4.

Aneks C.1.8. CS5 – Command Set 5 (7h)

7 6 5 4 3 2 1 0

CSA5

Pola bitowe rejestru CS5 są przedstawione w Tablicy C-10.

Tablicа C-10: Pola bitowe rejestru CS5

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA5 RW

CSA5 – Command Set Address 5

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB5.

Strona 72

Page 73: IEVGENII DROZDOV

Aneks C.1.9. CS6 – Command Set 6 (8h)

7 6 5 4 3 2 1 0

CSA6

Pola bitowe rejestru CS6 są przedstawione w Tablicy C-11.

Tablicа C-11: Pola bitowe rejestru CS6

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA6 RW

CSA6 – Command Set Address 6

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB6.

Aneks C.1.10. CS7 – Command Set 7 (9h)

7 6 5 4 3 2 1 0

CSA7

Pola bitowe rejestru CS7 są przedstawione w Tablicy C-12.

Tablicа C-12: Pola bitowe rejestru CS7

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CSA7 RW

CSA7 – Command Set Address 7

Adres bazowy zestawu deskryptorów CS, przetwarzanie którego uruchamia się przez ustawienie na „1” flagi DOORBELL.CSB7.

Strona 73

Page 74: IEVGENII DROZDOV

Aneks C.1.11. CUMA – Command Unit Memory Address (Ah)

7 6 5 4 3 2 1 0

CUMA

Pola bitowe rejestru CUMA są przedstawione w Tablicy C-13.

Tablicа C-13: Pola bitowe rejestru CUMA

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CUMA RW

CUMA – Command Unit Memory Address

Adres deskryptora CU lub CCU, który może być odczytany z Pamięci komend po ustawieniu na „1” flagi FLAGS.RCMD.CU.OPTIONS => CUOCU.ADDRESS/COUNT0 => CUACCU.DATA/COUNT1 => CUDC

Adres deskryptora CU lub CCU, który może być zapisany do Pamięci komend po ustawieniu na „1” flagi FLAGS.WCMD.CUO => CU.OPTIONSCUAC => CU.ADDRESS/COUNT0CUDC => CU.DATA/COUNT1

Strona 74

Page 75: IEVGENII DROZDOV

Aneks C.1.12. CUO – Command Unit Options (Bh)

7 6 5 4 3 2 1 0

CUO

Pola bitowe rejestru CUO są przedstawione w Tablicy C-14.

Tablicа C-14: Pola bitowe rejestru CUO

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CUO RWHL

CUO – Command Unit Options

Zawiera pole OPTIONS deskryptora CU oraz CCU, które po ustawieniu flagi FLAGS.RCMD na„1”, jest odczytywane z komórki Pamięci komend zadresem w rejestrze CUMA.

Zawiera pole OPTIONS deskryptora CU oraz CCU, które po ustawieniu flagi FLAGS.WCMD na„1”, jest zapisywane do komórki Pamięci komend zadresem w rejestrze CUMA.

Strona 75

Page 76: IEVGENII DROZDOV

Aneks C.1.13. CUAC – Command Unit Address/Count (Ch)

7 6 5 4 3 2 1 0

CUAC

Pola bitowe rejestru CUAC są przedstawione w Tablicy C-15.

Tablicа C-15: Pola bitowe rejestru CUAC

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CUAC RWHL

CUAC – Command Unit Address/Count

Zawiera pole ADDRESS deskryptora CU lub COUNT0 deskryptora CCU, które po ustawieniu flagi FLAGS.RCMD na „1”, jest odczytywane z komórki Pamięci komend z adresem w rejestrze CUMA.

Zawiera pole ADDRESS deskryptora CU lub COUNT0 deskryptora CCU, które po ustawieniu flagi FLAGS.WCMD na „1”, jest zapisywane do komórki Pamięci komend z adresem w rejestrze CUMA.

Strona 76

Page 77: IEVGENII DROZDOV

Aneks C.1.14. CUDC – Command Unit Data/Count (Dh)

7 6 5 4 3 2 1 0

CUDC

Pola bitowe rejestru CUDC są przedstawione w Tablicy C-16.

Tablicа C-16: Pola bitowe rejestru CUDC

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] CUDC RWHL

CUDC – Command Unit Data/Count

Zawiera pole DATA deskryptora CU lub COUNT1 deskryptora CCU, które po ustawieniu flagi FLAGS.RCMD na „1”, jest odczytywane z komórki Pamięci komend z adresem w rejestrze CUMA.

Zawiera pole DATA deskryptora CU lub COUNT1 deskryptora CCU, które po ustawieniu flagi FLAGS.WCMD na „1”, jest zapisywane do komórki Pamięci komend z adresem w rejestrze CUMA.

Aneks C.1.15. DMD – Data Memory Data (Eh)

7 6 5 4 3 2 1 0

DMD

Pola bitowe rejestru DMD są przedstawione w Tablicy C-17.

Tablicа C-17: Pola bitowe rejestru DMD

Numerbitów

Nazwapola

Typdostępu

Opis

[8:0] DMD ROHL

DMD – Data Memory Data

Rejestr zawiera najstarsze dane które zostały zapisane do Pamięci danych. Podczas odczytu rejestru dane są usuwane z Pamięci danych (kolejka FIFO).Pole nie jest ważne, gdy flaga FLAGS.DE jest ustawiona na „1”.

Strona 77

Page 78: IEVGENII DROZDOV

Aneks C.2. Deskryptor CU

Deskryptor CU określa operację, która musi być wykonana na Interfejsie

Wishbone Master. Deskryptor składa się z trzech pól 8-bitowych: OPTIONS,

ADDRESS i DATA jak pokazano na Rysunku C-1.

7 6 5 4 3 2 1 0

OPTIONS

ADDRESS

DATA

Rуsunek C-1: Deskryptor CU

Pole OPTIONS – zawiera flagi pokazane na Rysunku C-2 które są niezbędne do

poprawnego przetwarzania deskryptora CU.

Pole ADDRESS – adres wewnętrznego rejestru modułu slave podłączonego do

magistrali systemowej.

Pole DATA – dane które muszą być wystawione na magistrali dla zapisu do

wewnętrznego rejestru modułu slave podłączonego do magistrali systemowej. Jeśli

flaga OPTIONS.RW jest ustawiona na „0” (komenda odczytu) to pole jest ignorowane

przez sprzęt.

7 6 5 4 3 2 1 0

RW CTRL VALID Reserved

Rуsunek C-2: Flagi pola OPTIONS w deskryptorze CU

Flaga OPTIONS.RW – wskazuje na typ komendy:

• „1” – komenda zapisu

• „0” – komenda odczytu

Flaga OPTIONS.CTRL – musi być ustawiona na „0” dla deskryptora CU.

Strona 78

Page 79: IEVGENII DROZDOV

Flaga OPTIONS.VALID – wskazuje na to czy deskryptor jest ważny:

• „1” – deskryptor jest ważny

• „0” – deskryptor jest nieważny. W tym przypadku deskryptor będzie

zignorowany, a przetwarzanie zestawu deskryptorów CS – przerwane.

Uwaga: pola „Reserved” są ignorowane przez sprzęt.

Aneks C.3. Deskryptor CCU

Deskryptor CCU musi być na końcu każdego zestawu deskryptorów CS. Zawiera

trzy 8-bitowe pola: OPTIONS, COUNT0 oraz COUNT1 jak pokazano na Rysunku C-3.

7 6 5 4 3 2 1 0

OPTIONS

COUNT0

COUNT1

Rуsunek C-3: Deskryptor CCU

Pole OPTIONS – zawiera flagi pokazane na Rysunku C-4, które są niezbędne do

poprawnego przetwarzania deskryptora CCU.

Pole COUNT0 – dolne 8 bitów 16-bitowego licznika, który określa ile razy

zestaw deskryptorów CS musi być wykonany zaczynając od adresu bazowego.

Pole COUNT1 – górne 8 bitów 16-bitowego licznika, który określa ile razy

zestaw deskryptorów CS musi być wykonany zaczynając od adresu bazowego.

7 6 5 4 3 2 1 0

Reserved CTRL VALID Reserved

Rуsunek C-4: Flagi pola OPTIONS w deskryptorze CCU

Flaga OPTIONS.CTRL – musi być ustawiona na „1” dla deskryptora CCU.

Strona 79

Page 80: IEVGENII DROZDOV

Flaga OPTIONS.VALID – wskazuje na to czy deskryptor CCU jest ważny:

• „1” – deskryptor jest ważny

• „0” – deskryptor jest nieważny. W tym przypadku deskryptor będzie

zignorowany, a przetwarzanie zestawu deskryptorów CS – przerwane.

Uwaga: pola „Reserved” są ignorowane przez sprzęt.

Strona 80

Page 81: IEVGENII DROZDOV

Aneks D. Cykle operacyjne Wishbone

Aneks D.1. Reset

Podczas resetu wszystkie sprzętowe interfejsy są inicjalizowane do początkowego

stanu. Jest to realizowane ustawieniem linii rst_i na „1”. Ustawienie jest możliwe w

dowolnym momencie. Cykl resetu jest pokazany na Rysunku D-1.

Wszystkie interfejsy Wishbone są inicjalizowane podczas narastającego zbocza

sygnału clk_i po ustawieniu sygnału rst_i na „1”. Interfejsy pozostają w początkowym

stanie do ustawienia rst_i na „0” podczas narastającego zbocza clk_i. rst_i musi być

ustawiony na „1” przez co najmniej jeden takt zegara.

Następujące sygnały Interfejsu Wishbone Master są ustawione na „0” po resecie:

stb_o_m, cyc_o_m. Wartości wszystkich innych sygnałów interfejsów po resecie są

niezdefiniowane.

Dane z Zestawu rejestrów oraz Pamięci danych są usuwane po resecie.

Uwaga: Dane z Pamięci komend są zachowane po resecie.

Strona 81

Rуsunek D-1: Cykl resetu [11]

Page 82: IEVGENII DROZDOV

Aneks D.2. Pojedynczy odczyt

Pojedynczy odczyt wykonuje jeden transfer danych naraz.

Rysunek D-2 pokazuje diagram czasowy dla cyklu pojedynczego odczytu na

Interfejsie Wishbone Master w module UCS. Główne etapy:

Narastające zbocze zegara 0:

• Moduł UCS ustawia ważny adres na linii adr_o_m.

• Moduł UCS ustawia na „0” sygnał we_o_m, co wskazuje na cykl odczytu.

• Moduł UCS ustawia na „1” sygnał cyc_o_m, co wskazuje na początek cyklu.

• Moduł UCS ustawia na „1” sygnał stb_o_m, co wskazuje na początek fazy.

Narastające zbocze zegara 1:

• Moduł slave dekoduje wejścia.

• Moduł slave ustawia ważne dane na linii dat_i_m.

• Moduł slave ustawia na „1” sygnał ack_i_m jako odpowiedź na sygnał stb_o_m,

co wskazuje na ważne dane.

• Moduł UCS sprawdza linie ack_i_m i przygotowuje się do zatrzaskiwania

danych na linii dat_i_m.

Narastające zbocze zegara 2:

• Moduł UCS zatrzaskuje dane na linii dat_i_m.

• Moduł UCS ustawia na „0” sygnał stb_o_m oraz cyc_o_m, co wskazuje na

zakończenie cyklu.

• Moduł slave ustawia sygnał ack_i_m na „0” jako odpowiedź na ustawienie

stb_o_m na „0”.

Strona 82

Page 83: IEVGENII DROZDOV

Rysunek D-3 pokazuje diagram czasowy dla cyklu pojedynczego odczytu na

Interfejsie Wishbone Slave w module UCS. Główne etapy:

Narastające zbocze zegara 0:

• Moduł master ustawia ważny adres na linii adr_i_s.

• Moduł master ustawia na „0” sygnał we_i_s, co wskazuje na cykl odczytu.

• Moduł master ustawia na „1” sygnał cyc_i_s, co wskazuje na początek cyklu.

• Moduł master ustawia na „1” sygnał stb_i_s, co wskazuje na początek fazy.

Narastające zbocze zegara 1:

• Moduł UCS dekoduje wejścia.

• Moduł UCS ustawia ważne dane na linii data_o_s.

• Moduł UCS ustawia sygnał ack_o_s na „1” jako odpowiedź na ustawienie na

„1” sygnału stb_i_s, co wskazuje na ważność danych.

• Moduł master sprawdza linie ack_o_s i przygotowuje się do zatrzaskiwania

danych na linii dat_o_s.

Strona 83

Rуsunek D-2: Cykl pojedynczego odczytu na Interfejsie Wishbone Master w module UCS [11]

Page 84: IEVGENII DROZDOV

Narastające zbocze zegara 2:

• Moduł master zatrzaskuje dane na linii dat_o_s.

• Moduł master ustawia na „0” sygnał stb_i_s oraz cyc_i_s, co wskazuje na

zakończenie cyklu.

• Moduł UCS ustawia sygnał ack_o_s na „0” jako odpowiedź na ustawienie

stb_i_s na „0”.

Rysunek D-4 pokazuje diagram czasowy dla cyklu pojedynczego odczytu na

Interfejsie WSGM w module UCS. Główne etapy:

Narastające zbocze zegara 0:

• Moduł master ustawia ważny adres na linii adr_i_s_gm.

• Moduł master ustawia na „0” sygnał we_i_s_gm, co wskazuje na cykl odczytu.

• Moduł master ustawia na „1” sygnał cyc_i_s_gm, co wskazuje na początek

cyklu.

• Moduł master ustawia na „1” sygnał stb_i_s_gm, co wskazuje na początek fazy.

Strona 84

Rуsunek D-3: Cykl pojedynczego odczytu na Interfejsie Wishbone Slave w module UCS [11]

Page 85: IEVGENII DROZDOV

Narastające zbocze zegara 1:

• Moduł UCS dekoduje wejścia.

• Moduł UCS ustawia ważne dane na linii data_o_s_gm.

• Moduł UCS ustawia sygnał ack_o_s_gm na „1” jako odpowiedź na ustawienie

na „1” sygnału stb_i_s_gm, co wskazuje na ważność danych.

• Moduł master sprawdza linie ack_o_s_gm i przygotowuje się do zatrzaskiwania

danych na linii dat_o_s_gm.

Narastające zbocze zegara 2:

• Moduł master zatrzaskuje dane na linii dat_o_s_gm.

• Moduł master ustawia na „0” sygnał stb_i_s_gm oraz cyc_i_s_gm, co wskazuje

na zakończenie cyklu.

• Moduł UCS ustawia sygnał ack_o_s_gm na „0” jako odpowiedź na ustawienie

stb_i_s_gm na „0”.

Strona 85

Rуsunek D-4: Cykl pojedynczego odczytu na Interfejsie WSGM w UCS [11]

Page 86: IEVGENII DROZDOV

Aneks D.3. Pojedynczy zapis

Pojedynczy zapis wykonuje jeden transfer danych naraz.

Rysunek D-5 pokazuje diagram czasowy dla cyklu pojedynczego zapisu na

Interfejsie Wishbone Master w module UCS. Główne etapy:

Narastające zbocze zegara 0:

• Moduł UCS ustawia ważny adres na linii adr_o_m.

• Moduł UCS ustawia ważne dane na linii dat_o_m.

• Moduł UCS ustawia na „1” sygnał we_o_m, co wskazuje na cykl zapisu.

• Moduł UCS ustawia na „1” sygnał cyc_o_m, co wskazuje na początek cyklu.

• Moduł UCS ustawia na „1” sygnał stb_o_m, co wskazuje na początek fazy.

Narastające zbocze zegara 1:

• Moduł slave dekoduje wejścia.

• Moduł slave przygotowuje się do zatrzaskiwania danych na linii dat_o_m.

• Moduł slave ustawia na „1” sygnał ack_i_m jako odpowiedź na sygnał stb_o_m,

co wskazuje na ważne dane.

• Moduł UCS sprawdza linie ack_i_m i przygotowuje się do zakończenia cyklu.

Narastające zbocze zegara 2:

• Moduł slave zatrzaskuje dane na linii dat_o_m.

• Moduł UCS ustawia na „0” sygnał stb_o_m oraz cyc_o_m, co wskazuje na

zakończenie cyklu.

• Moduł slave ustawia sygnał ack_i_m na „0” jako odpowiedź na ustawienie

stb_o_m na „0”.

Strona 86

Page 87: IEVGENII DROZDOV

Rysunek D-6 pokazuje diagram czasowy dla cyklu pojedynczego zapisu na

Interfejsie Wishbone Slave w module UCS. Główne etapy:

Narastające zbocze zegara 0:

• Moduł master ustawia ważny adres na linii adr_i_s.

• Moduł master ustawia ważne dane na linii dat_i_s.

• Moduł master ustawia na „1” sygnał we_i_s, co wskazuje na cykl zapisu.

• Moduł master ustawia na „1” sygnał cyc_i_s, co wskazuje na początek cyklu.

• Moduł master ustawia na „1” sygnał stb_i_s, co wskazuje na początek fazy.

Narastające zbocze zegara 1:

• Moduł UCS dekoduje wejścia.

• Moduł UCS przygotowuje się do zatrzaskiwania danych na linii dat_i_s.

• Moduł UCS ustawia na „1” sygnał ack_o_s jako odpowiedź na sygnał stb_i_s,

co wskazuje na ważne dane.

• Moduł master sprawdza linie ack_o_s i przygotowuje się do zakończenia cyklu.

Strona 87

Rуsunek D-5: Cykl pojedynczego zapisu na Interfejsie Wishbone Master w module UCS [11]

Page 88: IEVGENII DROZDOV

Narastające zbocze zegara 2:

• Moduł UCS zatrzaskuje dane na linii dat_i_s.

• Moduł master ustawia na „0” sygnał stb_i_s oraz cyc_i_s, co wskazuje na

zakończenie cyklu.

• Moduł UCS ustawia sygnał ack_o_s na „0” jako odpowiedź na ustawienie

stb_i_s na „0”.

Rysunek D-7 pokazuje diagram czasowy dla cyklu pojedynczego zapisu na

Interfejsie WSGM w module UCS. Główne etapy:

Narastające zbocze zegara 0:

• Moduł master ustawia ważny adres na linii adr_i_s_gm.

• Moduł master ustawia ważne dane na linii dat_i_s_gm.

• Moduł master ustawia na „1” sygnał we_i_s_gm, co wskazuje na cykl zapisu.

• Moduł master ustawia na „1” sygnał cyc_i_s_gm, co wskazuje na początek

cyklu.

• Moduł master ustawia na „1” sygnał stb_i_s_gm, co wskazuje na początek fazy.

Strona 88

Rуsunek D-6: Cykl pojedynczego zapisu na Interfejsie Wishbone Slave w UCS [11]

Page 89: IEVGENII DROZDOV

Narastające zbocze zegara 1:

• Moduł UCS dekoduje wejścia.

• Moduł UCS przygotowuje się do zatrzaskiwania danych na linii dat_i_s_gm.

• Moduł UCS ustawia na „1” sygnał ack_o_s_gm jako odpowiedź na sygnał

stb_i_s_gm, co wskazuje na ważne dane.

• Moduł master sprawdza linie ack_o_s_gm i przygotowuje się do zakończenia

cyklu.

Narastające zbocze zegara 2:

• Moduł UCS zatrzaskuje dane na linii dat_i_s_gm.

• Moduł master ustawia na „0” sygnał stb_i_s_gm oraz cyc_i_s_gm, co wskazuje

na zakończenie cyklu.

• Moduł UCS ustawia sygnał ack_o_s_gm na „0” jako odpowiedź na ustawienie

stb_i_s_gm na „0”.

Strona 89

Rуsunek D-7: Cykl pojedynczego zapisu na Interfejsie WSGM w module UCS [11]

Page 90: IEVGENII DROZDOV

Strona 90