ˇ ´ vysoke ´ uc ˇen´ı technicke ´ v Praze Cesk e ´ Fakulta elektrotechnicka ˇ´ıd´ıc´ı techniky Katedra r
´ RSK ˇ ´ PRACE ´ BAKALA A
Propojen´ı FPGA s USB portem poˇ c´ıtaˇ ce
Studijn´ı rogram: Kybernetika a robotika Obor: Syst´ emy a ˇ r´ızen´ı ˇ Vedouc´ı pr´ ace: Ing. Richard Susta, Ph.D.
Praha, 2015
Autor: Jiˇ r´ı Kerner
Prohl´ aˇ sen´ı Prohlaˇsuji, ˇze jsem pˇredloˇzenou pr´aci vypracoval samostatnˇe a ˇze jsem uvedl veˇsker´e pouˇzit´e informaˇcn´ı zdroje v souladu s Metodick´ ym pokynem o dodrˇzov´an´ı etick´ ych princip˚ u pˇri pˇr´ıpravˇe vysokoˇskolsk´ ych z´avˇereˇcn´ ych prac´ı.
V Praze dne podpis
Podˇ ekov´ an´ı ˇ R´ad bych podˇekoval panu Ing. Richardu Sustovi, Ph.D. za odborn´e veden´ı, za pomoc a rady pˇri zpracov´an´ı t´eto pr´ace. D´ale bych r´ad podˇekoval sv´e rodinˇe a pˇr´ıtelkyni za podporu bˇehem cel´eho m´eho studia.
Abstrakt Bakal´aˇrsk´a pr´ace se zab´ yv´a USB komunikac´ı mezi v´ yvojovou deskou DE2-115 s FPGA a osobn´ım poˇc´ıtaˇcem s operaˇcn´ım syst´emem Windows. Pr´ace seznamuje s USB standardem a USB ˇcipem ISP 1362, kter´ ym je osazena deska DE2-115. D´ale popisuje USB modul napsan´ y ve VHDL a uˇzivatelsk´e rozhran´ı pro Windows urˇcen´e ke komunikaci s t´ımto modulem. Souˇca´st´ı pr´ace jsou d´ale uk´azky zapojen´ı modulu do projektu v programu Quartus II a popis ovl´ad´an´ı uˇzivatelsk´eho rozhran´ı. Kl´ıˇ cov´ a slova: USB, USB standard, USB komunikace, DE2-115, ISP 1362
Abstract This bachelor thesis deals with USB communication between development board DE2115 with FPGA and personal computer running Windows. This thesis introduces USB standard and USB chip ISP 1362, which is placed on DE2-115. It also describes USB module written in VHDL and user interface running under Windows that communicates with this module. Examples of connecting this module to project in Quartus II and description of user interface are next part of this thesis. Key words: USB, USB standard, USB communication, DE2-115, ISP 1362
Obsah ´ 1 Uvod
1
1.1
2
Motivace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Teoretick´ aˇ c´ ast 2.1
3
USB standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.1
Vznik a historie . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
2.1.2
Z´akladn´ı technick´a specifikace . . . . . . . . . . . . . . . . . . . .
4
2.1.3
Koncov´e body a roury . . . . . . . . . . . . . . . . . . . . . . . .
5
2.1.4
5
2.1.5
USB adresace . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ˇ ıd´ıc´ı pˇrenos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . R´
2.1.6
Blokov´ y pˇrenos . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
2.1.7
USB deskriptory . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.7.1
Deskriptor zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . .
8
2.1.7.2
Deskriptor konfigurace . . . . . . . . . . . . . . . . . . .
9
2.1.7.3
Deskriptor rozhran´ı . . . . . . . . . . . . . . . . . . . . .
9
2.1.7.4
Deskriptor koncov´eho bodu . . . . . . . . . . . . . . . .
10
Enumerace zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . . . .
12
2.2
Altera DE2-115 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
2.3
ISP1362 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
14
2.3.1
15
2.1.8
Device controller . . . . . . . . . . . . . . . . . . . . . . . . . . .
ˇ sen´ı projektu 3 Reˇ
6
18
3.1
V´ ychoz´ı stav projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
3.2
Souhrn ˇreˇsen´ ych probl´em˚ u . . . . . . . . . . . . . . . . . . . . . . . . . .
19
3.3
USB modul . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
3.3.1
Metoda pro strukturovan´ y VHDL design . . . . . . . . . . . . . .
20
3.3.2
hal.vhd
22
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . iv
3.4
3.5
3.3.3
devreq.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
23
3.3.4
drv.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ˇ ı dat z EP01 . . . . . . . . . . . . . . . . . . . . . . 3.3.4.1 Cten´
24 27
3.3.4.2
Z´apis dat na EP02 . . . . . . . . . . . . . . . . . . . . .
27
3.3.5
usb inc.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3.6
isp inc.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
27
3.3.7
usb.vhd . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
3.3.7.1
Zapojen´ı se zpˇetnou vazbou . . . . . . . . . . . . . . . .
30
3.3.7.2
Zapojen´ı s periodick´ ym z´apisem . . . . . . . . . . . . . .
30
3.3.7.3
Zapojen´ı s ˇr´ıd´ıc´ım obvodem . . . . . . . . . . . . . . . .
31
Uˇzivatelsk´e rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
32
3.4.1
DE2 USB Interface . . . . . . . . . . . . . . . . . . . . . . . . . .
32
3.4.2
DE2 USB Interface Table . . . . . . . . . . . . . . . . . . . . . .
33
3.4.3
DE2 USB Interface Mouse . . . . . . . . . . . . . . . . . . . . . .
34
N´avod na zprovoznˇen´ı USB modulu a uˇzivatelsk´eho rozhran´ı . . . . . . .
35
4 Testov´ an´ı
36
4.1
Rychlost z´apisu do USB modulu . . . . . . . . . . . . . . . . . . . . . . .
37
4.2
Rychlost ˇcten´ı z USB modulu . . . . . . . . . . . . . . . . . . . . . . . .
38
4.3
V´ ypoˇcet maxim´aln´ı rychlosti . . . . . . . . . . . . . . . . . . . . . . . . .
38
4.4
Spolehlivost pˇrenosu dat . . . . . . . . . . . . . . . . . . . . . . . . . . .
39
5 Z´ avˇ er
40
Literatura
42
A Seznam pouˇ zit´ ych zkratek
43
B Obsah pˇ riloˇ zen´ eho CD
44
C Grafick´ e uˇ zivatelsk´ e prostˇ red´ı
45
C.1 DE2 USB Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
C.2 DE2 USB Interface Table . . . . . . . . . . . . . . . . . . . . . . . . . .
46
C.3 DE2 USB Interface Mouse . . . . . . . . . . . . . . . . . . . . . . . . . .
47
Seznam obr´ azk˚ u 2.1
Typy USB konektor˚ u [6] . . . . . . . . . . . . . . . . . . . . . . . . . . .
5
2.2
Zapojen´ı hostitele a zaˇr´ızen´ı[6] . . . . . . . . . . . . . . . . . . . . . . . .
6
2.3
Propojeni FPGA a ISP1362 [5] . . . . . . . . . . . . . . . . . . . . . . .
14
2.4
ISP1362 [4] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
3.1
Blokov´e sch´ema USB modulu . . . . . . . . . . . . . . . . . . . . . . . .
20
3.2
Generick´ y obvod s dvˇema procesy . . . . . . . . . . . . . . . . . . . . . .
21
3.3
Koneˇcn´ y stavov´ y automat entity HAL . . . . . . . . . . . . . . . . . . .
23
3.4
Koneˇcn´ y stavov´ y automat entity DEVREQ . . . . . . . . . . . . . . . . .
24
3.5
Koneˇcn´ y stavov´ y automat entity DRV, automat GLOBAL . . . . . . . .
25
3.6
Koneˇcn´ y stavov´ y automat entity DRV, automat IRQ . . . . . . . . . . .
26
3.7
Symbol pro USB modul . . . . . . . . . . . . . . . . . . . . . . . . . . .
29
3.8
Zapojen´ı se zpˇetnou vazbou . . . . . . . . . . . . . . . . . . . . . . . . .
30
3.9
Zapojen´ı s periodick´ ym z´apisem . . . . . . . . . . . . . . . . . . . . . . .
31
3.10 Zapojen´ı s ˇr´ıd´ıc´ım obvodem . . . . . . . . . . . . . . . . . . . . . . . . .
31
4.1
Graf hustoty pravdˇepodobnosti - rychlost z´apisu . . . . . . . . . . . . . .
37
4.2
Graf hustoty pravdˇepodobnosti - rychlost ˇcten´ı . . . . . . . . . . . . . . .
38
C.1 DE2 USB Interface . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
C.2 DE2 USB Interface Table . . . . . . . . . . . . . . . . . . . . . . . . . .
46
C.3 DE2 USB Interface Mouse . . . . . . . . . . . . . . . . . . . . . . . . . .
47
vi
Seznam tabulek 2.1
Deskriptor zaˇr´ızen´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.2
Deskriptor konfigurace . . . . . . . . . . . . . . . . . . . . . . . . . . . .
9
2.3
Deskriptor rozhran´ı . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
2.4
Deskriptor koncov´eho bodu . . . . . . . . . . . . . . . . . . . . . . . . .
11
2.5
Propojen´ı FPGA a ISP1362 [5] . . . . . . . . . . . . . . . . . . . . . . .
15
2.6
Adresace na I/O portu [4] . . . . . . . . . . . . . . . . . . . . . . . . . .
17
vii
Kapitola 1 ´ Uvod Bakal´aˇrsk´a pr´ace se zab´ yv´a komunikac´ı mezi poˇc´ıtaˇcem s operaˇcn´ım syst´emem Windows a v´ yvojovou deskou DE2-115 [1]. Pro tento u ´ˇcel vyuˇz´ıv´a sbˇernici USB. V teoretick´e ˇca´sti je uveden popis USB standardu se zamˇeˇren´ım na popis USB zaˇr´ızen´ı. Je vysvˇetleno, jak je USB zaˇr´ızen´ı pops´ano sv´ ymi deskriptory, a tak´e jak´ ym zp˚ usobem prob´ıh´a pˇripojen´ı zaˇr´ızen´ı k hostiteli a n´asledn´a komunikace. D´ale je kr´atce pˇredstavena v´ yvojov´a deska DE2-115 a USB ˇcip ISP1362, kter´ ym je deska osazena. N´asleduj´ıc´ı kapitoly jsou zamˇeˇreny na v´ yvoj USB modulu a popisuj´ı jeho fungov´an´ı a zp˚ usob propojen´ı s dalˇs´ımi ˇc´astmi projektu v programu Quartus II, kter´ y se pouˇz´ıv´a pro v´ yvoj program˚ u pro DE2-115. N´asleduje popis uˇzivatelsk´eho rozhran´ı pro operaˇcn´ı syst´em Windows. V z´avˇeru pr´ace je cel´ y syst´em podroben testov´an´ı na rychlost a spolehlivost pˇrenosu. C´ılem bakal´aˇrsk´e pr´ace je vytvoˇrit funkˇcn´ı USB modul v jazyce VHDL pro DE2-115, kter´ y bude snadno pouˇziteln´ y, spolehliv´ y a jednoduˇse zaˇcleniteln´ y do projektu v programu Quartus II. D´ale pak vytvoˇrit program pro ovl´ad´an´ı VHDL modulu s grafick´ ym uˇzivatelsk´ ym prostˇred´ım, kter´ y umoˇzn´ı komunikaci mezi v´ yvojovou deskou a poˇc´ıtaˇcem.
1
´ KAPITOLA 1. UVOD
1.1
2
Motivace
Jednou z motivac´ı pro vytvoˇren´ı USB modulu ve VHDL je jeho pouˇzit´ı pro v´ yuku v pˇredmˇetu Struktury poˇc´ıtaˇcov´ ych syst´emu (A0B35SPS), kter´ y se vyuˇcuje na Katedˇre ˇ ˇr´ıd´ıc´ı techniky na FEL CVUT. Pro tento u ´ˇcel je zcela nedostaˇcuj´ıc´ı ˇreˇsen´ı od v´ yrobce DE2-115, firmy Altera. Ta ˇreˇs´ı USB komunikaci pomoc´ı ovladaˇce naprogramovan´eho pro procesor Nios II [2]. Toto ˇreˇsen´ı je n´aroˇcn´e na pouˇzitou logiku a pro jeho zprovoznˇen´ı je nutn´e b´ yt podrobnˇe sezn´amen s fungov´an´ım procesoru Nios II a t´ım, jak se programuje. Nav´ıc toto ˇreˇsen´ı nelze pouˇz´ıt pro projekty psan´e ve VHDL, kter´e studenti v r´amci pˇredmˇetu zpracov´avaj´ı. Bˇehem hled´an´ı st´avaj´ıc´ıch ˇreˇsen´ı byl nalezen pouze jeden projekt, kter´ y se tvorbou USB modulu ve VHDL pro DE2 zab´ yval, jedn´a se o ISP1362 VHDL interface for DE2 v1.0 od Mikhaila Zakhaova [3], pˇr´ıstupn´e pod GNU GPL licenc´ı [10]. Tento projekt byl znaˇcnˇe nedokonˇcen´ y, ale poskytoval dobr´ y v´ ychoz´ı bod pro dalˇs´ı v´ yvoj a tato pr´ace z nˇej vych´az´ı. Bliˇzˇs´ı popis stavu projektu pˇri pˇrevzet´ı poskytuje kapitola 3.1.
Kapitola 2 Teoretick´ aˇ c´ ast 2.1
USB standard
2.1.1
Vznik a historie
USB je technick´ y standard, kter´ y vznikl pˇribliˇznˇe v polovinˇe devades´at´ ych let minul´eho stolet´ı. D˚ uvodem jeho v´ yvoje byla snaha standardizovat pˇripojen´ı pro poˇc´ıtaˇcov´e periferie, kter´e dok´aˇze nejen zprostˇredkovat komunikaci, ale z´aroveˇ n i nap´ajet pˇripojen´e zaˇr´ızen´ı. Standard definuje konektory, kabel´aˇz, komunikaˇcn´ı protokol a tak´e pravidla pro zm´ınˇen´e nap´ajen´ı zaˇr´ızen´ı. V dneˇsn´ı dobˇe se USB standard pouˇz´ıv´a prakticky na vˇsech zaˇr´ızen´ıch, kter´e se pˇripojuj´ı k osobn´ım poˇc´ıtaˇc˚ um. Z´aroveˇ n vˇsak nach´az´ı sv´e uplatnˇen´ı v mnoha dalˇs´ıch odvˇetv´ıch, pˇredevˇs´ım pˇri programov´an´ı mikrokontrol´er˚ u nebo FPGA ˇcip˚ u. USB standard se neust´ale vyv´ıj´ı a existuje v nˇekolika verz´ıch, kter´e jsou spolu zpˇetnˇe kompatibiln´ı. • USB 1.1 - Existuj´ı dva typy zaˇr´ızen´ı, pomal´a (Low-Speed) s rychlost´ı 1,5 Mbit/s a rychl´a (Full-Speed) s pˇrenosovou rychlost´ı 12 Mbit/s. • USB 2.0 - Druh´a generace USB pˇriˇsla s nov´ ym reˇzimem Hi-Speed, kter´ y nab´ız´ı pˇrenosovou rychlost 480 Mbit/s. • USB 3.0 - Pˇrin´aˇs´ı do svˇeta USB zmˇenu v podobˇe dev´ıti vodiˇc˚ u m´ısto p˚ uvodn´ıch ˇctyˇr a d´ıky tomu nab´ız´ı rychlost aˇz 5 Gbit/s. Konektor je ovˇsem st´ale navrˇzen tak, aby zachoval kompatibilitu se starˇs´ımi verzemi zaˇr´ızen´ı.
3
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
4
Vzhledem k rozs´ahlosti materi´al˚ u, kter´e popisuj´ı USB standard (640 stran + pˇr´ılohy) by bylo nad r´amec t´eto pr´ace popsat vˇsechny detaily fungov´an´ı. Pozornost je proto zamˇeˇrena na t´emata, kter´a jsou kl´ıˇcov´a pro pochopen´ı dalˇs´ıch ˇca´st´ı pr´ace. Ostatn´ı informace lze nal´ezt bud’ v kompletn´ı technick´e dokumentaci [7], nebo ve zkr´acen´em v´ ytahu popisuj´ıc´ım kl´ıˇcov´e vlastnosti [6].
2.1.2
Z´ akladn´ı technick´ a specifikace
Pˇr´ıstroje zapojen´e pˇres USB se dˇel´ı na hostitele a zaˇr´ızen´ı. Hostitel je vˇzdy pouze jeden1 a ˇr´ıd´ı pohyb dat na sbˇernici, nach´az´ı se tedy v roli master. USB sbˇernice m´a hvˇezdicovou topologii a k jednomu hostiteli lze pˇripojit aˇz 127 zaˇr´ızen´ı. Tato zaˇr´ızen´ı jsou v roli slave a nemohou sama vyvolat komunikaci, pouze ˇcekaj´ı na poˇzadavky od hostitele. Do verze USB 2.0 jsou v USB kabelu pouˇzity ˇctyˇri vodiˇce. Prvn´ı dva jsou nap´ajec´ı (+5V a GND) a druh´e dva jsou kroucen´e dvojlinky slouˇz´ıc´ı jako datov´e vodiˇce. Konektory pro pˇripojen´ı k hostiteli a zaˇr´ızen´ı jsou mechanicky nezamˇeniteln´e. Nejv´ıce pouˇz´ıvan´e typy konektor˚ u se znaˇc´ı jako typ A (pouˇz´ıv´a se na stranˇe hostitele) a typ B (pouˇz´ıv´a se pro pˇripojen´ı zaˇr´ızen´ı), jak ukazuje obr´azek 2.1. Od verze USB 2.0 d´ale existuje miniUSB B konektor pouˇz´ıvan´ y napˇr´ıklad pro telefony a tablety. Pro zak´odov´an´ı s´eriov´eho pˇrenosu se pouˇz´ıv´a NRZI (Not Return to Zero Invert) k´odov´an´ı. USB zaˇr´ızen´ı je typu plug’n’play, uˇzivatel tedy pouze pˇripoj´ı zaˇr´ızen´ı k hostiteli, ten provede proces enumerace, naˇcte n´aslednˇe pˇr´ısluˇsn´ y ovladaˇc a zaˇr´ızen´ı je pˇripraveno k pouˇzit´ı. Ovladaˇce k dan´emu zaˇr´ızen´ı jsou rozliˇsov´any pomoc´ı PID/VID (Product ID/Vendor ID). VID jsou obchodovateln´a ˇc´ısla a je nutno takov´e ˇc´ıslo zakoupit, jestliˇze chceme na trh uv´est vlastn´ı USB zaˇr´ızen´ı. Pro nekomerˇcn´ı vyuˇzit´ı vˇetˇsinou v´ yrobci ˇcip˚ u d´avaj´ı k dispozici VID/PID o kter´em se v´ı, ˇze nen´ı pouˇzito v komerˇcn´ıch zaˇr´ızen´ıch. Jin´ı v´ yrobci ˇcip˚ u pak prod´avaj´ı pr´ava na pouˇzit´ı PID s jejich VID pro v´ yrobu komerˇcn´ıch zaˇr´ızen´ı. Dalˇs´ım aspektem, ve kter´em se USB odliˇsuje od jin´ ych pˇrenosov´ ych standard˚ u, jsou ˇ ıd´ıc´ı m´od slouˇz´ı pˇredevˇs´ım pro enumeraci zaˇr´ızen´ı po pˇripojen´ı, zat´ımco pˇrenosov´e m´ody. R´ izochronn´ı m´od pro pˇrenos stream˚ u (audio, video). Blokov´ y pˇrenos je urˇcen pro spolehliv´ y pˇrenos vˇetˇs´ıch blok˚ u dat bez podm´ınky pˇrenosu v re´aln´em ˇcase, ale na rozd´ıl od 1
Neplat´ı pro USB On the Go, kde se role mohou mˇenit za bˇehu
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
5
izochronn´ıho garantuje doruˇcen´ı vˇsech paket˚ u ve spr´avnem poˇrad´ı. Pˇreruˇsovac´ı pˇrenos je vyuˇzit v pˇr´ıpadˇe, kdy zaˇr´ızen´ı potˇrebuje odeslat data zˇr´ıdka, ale poˇzaduj´ı rychl´e doruˇcen´ı. Tento typ pˇrenosu garantuje pˇrenos dat v dan´em ˇcase a v pˇr´ıpadˇe chyby opakovan´e odesl´an´ı dat.
Obr´ azek 2.1: Typy USB konektor˚ u [6]
2.1.3
Koncov´ e body a roury
USB zaˇr´ızen´ı odes´ıl´a a pˇrij´ım´a data na definovan´ ych koncov´ ych bodech, hostitel pˇren´aˇs´ı data pomoc´ı rour. Roura je logick´e spojen´ı mezi hostitelem a koncov´ ym bodem zaˇr´ızen´ı. Roury lze podle typu pˇrenos˚ u rozdˇelit na dva druhy. • Stream pipes - Vyuˇz´ıvaj´ı se pro pˇrenosy typu blokov´e, izochronn´ı a pˇreruˇsovac´ı. Jsou pouze jednosmˇern´e a pˇren´aˇs´ı nestrukturovan´a data. • Message pipes - Slouˇz´ı pro ˇr´ıd´ıc´ı pˇrenosy, jsou obousmˇern´e a typicky pos´ılaj´ı strukturovan´a data. Jednotliv´e pˇrenosy prob´ıhaj´ı v sekvenci ˇza´dost - data - potvrzen´ı. Koncov´e body si lze pˇredstavit jako u ´st´ı roury, at’ uˇz vstupn´ı, nebo v´ ystupn´ı. Koncov´e body jsou oznaˇcov´any IN a OUT podle smˇeru pˇrenosu dat. Pokud hostitel odes´ıl´a data na koncov´ y bod s oznaˇcen´ım EP01, pak se koncov´ y bod oznaˇcuje EP01 OUT. Zaˇr´ızen´ı nem˚ uˇze samo iniciovat pˇrenos, protoˇze USB sbˇernice je typu Master-Slave, a proto zapisuje data do vyrovn´avac´ı pamˇeti na koncov´em bodu EP01 IN a n´aslednˇe ˇcek´a, dokud hostitel nezaˇsle IN paket s poˇzadavkem na data. Kaˇzd´ y koncov´ y bod je pˇresnˇe pops´an sv´ ym deskriptorem koncov´eho budu, o kter´em bude ˇreˇc d´ale.
2.1.4
USB adresace
Na obr´azku:2.2 vid´ıme zp˚ usob pˇripojen´ı USB zaˇr´ızen´ı k hostiteli (blok ”Host”). V bloku ”My Function”se pro kaˇzd´ y koncov´ y bod nach´az´ı vyrovn´avac´ı pamˇet’, kter´a ukl´ad´a pˇrijat´a
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
6
data, nebo data ˇcekaj´ıc´ı na odesl´an´ı. Pr˚ ubˇeh USB pˇrenosu m˚ uˇze vypadat napˇr´ıklad n´asledovnˇe. Hostitel vyˇsle paket na sbˇernici. USB zaˇr´ızen´ı podle adresy rozpoznaj´ı, pro kter´e z nich je paket urˇcen a n´aslednˇe dan´e zaˇr´ızen´ı nakop´ıruje pˇrijat´a data do pamˇeti koncov´eho bodu, kter´emu byl pˇrenos adresov´an. Zaˇr´ızen´ı po u ´spˇeˇsn´em uloˇzen´ı dat odeˇsle hostiteli ACK sign´al informuj´ıc´ı o u ´spˇeˇsn´em pˇrijet´ı (pouze izochronn´ı pˇrenos neinformuje hostitele o pˇrijet´ı, m˚ uˇze tedy doj´ıt ke ztr´atˇe dat). Z´aroveˇ n se v zaˇr´ızen´ı vytvoˇr´ı pˇreruˇsen´ı pro dan´ y koncov´ y bod, kter´e informuje zaˇr´ızen´ı o pˇr´ıtomnosti dat ve vyrovn´avac´ı pamˇeti koncov´eho bodu.
Obr´ azek 2.2: Zapojen´ı hostitele a zaˇr´ızen´ı[6]
2.1.5
ˇ ıd´ıc´ı pˇ R´ renos
ˇ ıd´ıc´ı pˇrenos je vˇetˇsinou pouˇzit pro enumeraci zaˇr´ızen´ı po pˇripojen´ı k hostiteli. Pro R´ Low-speed zaˇr´ızen´ı je d´elka paketu d´ana na 8 byt˚ u, pro High-speed zaˇr´ızen´ı m˚ uˇze b´ yt d´elka paketu 8, 16, 32 nebo 64 byt˚ u (definuje se v koncov´em bodu). Pˇri tomto pˇrenosu se pouˇz´ıv´a r˚ uznˇe dlouh´ ych blok˚ u dat a protokol se snaˇz´ı zajistit co nejvˇetˇs´ı pravdˇepodobnost spr´avn´eho doruˇcen´ı pomoc´ı sekvence ˇza´dost - data - potvrzen´ı.
2.1.6
Blokov´ y pˇ renos
Blokov´ y pˇrenos se typicky pouˇz´ıv´a pro pˇrenos velk´eho objemu dat, u kter´eho z´aleˇz´ı na spolehliv´em doruˇcen´ı vˇsech paket˚ u ve spr´avn´em poˇrad´ı. M˚ uˇze se jednat napˇr´ıklad o dokument k vytisknut´ı odes´ılan´ y tisk´arnˇe. Blokov´ y pˇrenos je moˇzn´e pouˇz´ıt pouze u Full a High-speed zaˇr´ızen´ı. Pˇrenos je jednosmˇern´ y a nen´ı garantovan´a pˇrenosov´a rychlost nebo minim´aln´ı latence, d˚ uleˇzit´ ym parametrem je bezchybn´ y pˇrenos vˇsech dat. K tomu se
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
7
vyuˇz´ıv´a CRC k´odov´an´ı, kter´e kontroluje vˇsechny pˇrijat´e pakety a pˇri chybˇe se pˇrenos opakuje.
2.1.7
USB deskriptory
Kaˇzd´e USB zaˇr´ızen´ı vyuˇz´ıv´a deskriptory k tomu, aby o sobˇe hostiteli podalo potˇrebn´e informace k enumeraci zaˇr´ızen´ı pˇri pˇripojen´ı. Tyto deskriptory obsahuj´ı napˇr´ıklad informaci o v´ yrobci, podporovan´e verzi USB, poˇctu koncov´ ych bod˚ u a typu konfigurace. USB zaˇr´ızen´ı popisuj´ı n´asleduj´ıc´ı deskriptory. • Deskriptor zaˇr´ızen´ı • Deskriptor konfigurace • Deskriptor rozhran´ı • Deskriptor koncov´eho bodu • Textov´ y deskriptor
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA 2.1.7.1
8
Deskriptor zaˇ r´ızen´ı
USB zaˇr´ızen´ı m˚ uˇze m´ıt pouze jeden deskriptor zaˇr´ızen´ı. Ten ud´av´a informace o v´ yrobci, VID, PID atd. Celkovou podobu deskriptoru zaˇr´ızen´ı ukazuje tabulka 2.1. Tabulka 2.1: Deskriptor zaˇr´ızen´ı
Offset
Pole
Velikost
Hodnota
Popis
0
bLength
1
Number
Velikost deskriptoru v bytech
1
bDescriptorType
1
Constant Deskriptor zaˇr´ızen´ı (0x01)
2
vcdUSB
2
BCD
Verze USB specifikace se kterou zaˇr´ızen´ı pracuje
4
bDeviceClass
1
Class
K´od tˇr´ıdy. Pokud je nulov´ y, kaˇzd´e rozhran´ı si specifikuje svou vlastn´ı tˇr´ıdu. Pokud je roven 0xFF, pak je k´od tˇr´ıdy specifikov´an v´ yrobcem.
5
bDeviceSubClass
1
SubClass
Subclass code pˇridˇelen od USB Org
6
bDeviceProtocol
1
Protocol
Protocol code pˇridˇelen od USB Org
7
bMaxPacketSize
1
Number
Maxim´aln´ı velikost paketu pro Endpoint 0
8
idVendor
2
ID
ID v´ yrobce (pˇridˇeluje USB Org)
10
idProduct
2
ID
ID produktu (pˇridˇeluje v´ yrobce)
12
bcdDevice
2
BCD
Verze zaˇr´ızen´ı
14
iManufacturer
1
Index
Index textov´eho deskriptoru popisuj´ıc´ı v´ yrobce
15
iProduct
1
Index
Index textov´eho deskriptoru popisuj´ıc´ı produkt
16
iSerialNumber
1
Index
Index textov´eho deskriptoru obsahuj´ıc´ıho seriov´e ˇc´ıslo
17
bNumConfiguratons
1
Integer
Poˇcet moˇzn´ ych konfigurac´ı
Textov´e deskriptory slouˇz´ı k poskytnut´ı bliˇzˇs´ıch informac´ı o v´ yrobci, produktu a s´eriov´em ˇc´ısle zaˇr´ızen´ı. Tyto poloˇzky jsou nepovinn´e, a pokud nejsou uvedeny, mˇel by pro nˇe b´ yt pouˇzit v deskriptoru nulov´ y index.
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA 2.1.7.2
9
Deskriptor konfigurace
Zaˇr´ızen´ı m˚ uˇze m´ıt v´ıce deskriptor˚ u konfigurace. Pˇr´ıkladem m˚ uˇze b´ yt zaˇr´ızen´ı, kter´e m´a vlastn´ı zdroj nap´ajen´ı, ale m˚ uˇze b´ yt nap´ajeno i pˇres USB bez pˇripojen´ı extern´ıho zdroje. U takov´ehoto zaˇr´ızen´ı se hostitel rozhodne mezi tˇemito dvˇema konfiguracemi podle toho, jak je zrovna zaˇr´ızen´ı zapojeno. Dalˇs´ım pˇr´ıpadem odliˇsn´ ych konfigurac´ı m˚ uˇze b´ yt pˇr´ıpad, kdy se dva konfiguraˇcn´ı deskriptory liˇs´ı v deskriptorech rozhran´ı a koncov´ ych bod˚ u. Vˇetˇsina pouˇz´ıvan´ ych zaˇr´ızen´ı je vˇsak jednoduch´a a maj´ı pouze jeden deskriptor konfigurace. Jeho strukturu ukazuje tabulka 2.2. Jakmile hostitel pˇrijme vˇsechny informace o konfiguraci zaˇr´ızen´ı, odeˇsle do zaˇr´ızen´ı pˇr´ıkaz SetConfiguration s nenulovou hodnotou, kter´a se rovn´a bConfigurationValue jedn´e z konfigurac´ı. Ve chv´ıli, kdy hostitel pˇreˇcte a potvrd´ı deskriptor konfigurace, vr´at´ı zaˇr´ızen´ı celou konfiguraˇcn´ı hierarchii, tedy vˇsechny deskriptory rozhran´ı a koncov´ ych bod˚ u spadaj´ıc´ı pod danou konfiguraci. Celkov´a d´elka odeslan´ ych dat je pak vyj´adˇrena v poli wTotalLength. Tabulka 2.2: Deskriptor konfigurace
Offset
Pole
Velikost
Hodnota
Popis
0
bLength
1
Number
Velikost deskriptoru v bytech
1
bDescriptorType
1
Constant Konfiguraˇcn´ı deskriptor (0x02)
2
wTotalLength
2
Number
Celkov´a d´elka odeslan´ ych dat
4
bNumberInterfaces
1
Number
Poˇcet rozhran´ı
5
bConfigurationValue
1
Number
Hodnota, kter´a se pouˇzije jako argument pro vybr´an´ı dan´e konfigurace
6
iConfiguration
1
Index
Index textov´eho deskriptoru popisuj´ıc´ı tuto konfiguraci
7
bmAttributes
1
Bitmap
D7 Nap´ajen´ı pˇres sbˇernici, D6 Vlastn´ı nap´ajen´ı, D5 Remote wakeup 2 , D4-D0 Rezervovan´e (0)
8
bMaxPower
2.1.7.3
1
mA
Maxim´aln´ı spotˇreba energie
Deskriptor rozhran´ı
Deskriptor rozhran´ı si lze pˇredstavit jako hlaviˇckov´ y soubor pro skupinu koncov´ ych bod˚ u. Napˇr´ıklad u tisk´arny lze m´ıt jedno rozhran´ı pro tisk, druh´e pro skener atd. Struk2
Zaˇr´ızen´ı m˚ uˇze probudit hostitele, kter´ y se nach´az´ı v suspend state
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
10
turu deskriptoru rozhran´ı ukazuje tabulka 2.3. Tabulka 2.3: Deskriptor rozhran´ı
Offset
Pole
Velikost
Hodnota
Popis
0
bLength
1
Number
Velikost deskriptoru v bytech
1
bDescriptorType
1
Constant Deskriptor rozhran´ı (0x04)
2
bInterfaceNumber
1
Number
Index dan´eho rozhran´ı
3
bAlternateSetting
1
Number
Hodnota pro v´ ybˇer alternativn´ıho nastaven´ı
4
bNumEndpoints
1
Number
Poˇcet koncov´ ych bod˚ u dan´eho interface
5
bInterfaceClass
1
Class
Class code (pˇridˇelen USB Org)
6
bInterfaceSubClass
1
SubClass
Subclass code (Pˇridˇelen USB Org)
7
bInterfaceProtocol
1
Protocol
Protocol code
8
iInterface
1
Index
Index textov´eho deskriptoru popisuj´ıc´ıho toto rozhran´ı
BInterfaceClass, bInterfaceSubClass a bInterfaceProtocol lze pouˇz´ıt pro specifikaci typu zaˇr´ızen´ı (napˇr´ıklad Mass storage device). D´ıky tomu lze vyuˇz´ıt ovladaˇce pro danou tˇr´ıdu zaˇr´ızen´ı a nen´ı nutn´e vytv´aˇret specifick´e ovladaˇce. 2.1.7.4
Deskriptor koncov´ eho bodu
Deskriptor koncov´eho bodu urˇcuje typ pˇrenosu, smˇer a maxim´aln´ı velikost paketu, kterou je schopen dan´ y koncov´ y bod pˇrijmout. Kontroln´ı koncov´ y bod EP0, pˇres kter´ y komunikuje hostitel se zaˇr´ızen´ım pˇri enumeraci, odpov´ıda na pakety s adresou nula a je ve standardu pˇresnˇe definov´an, proto pro nˇej nen´ı potˇreba definovat deskriptor koncov´eho bodu. Strukturu deskriptoru popisuje tabulka 2.4.
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
11
Tabulka 2.4: Deskriptor koncov´eho bodu
Offset
Pole
Velikost
Hodnota
Popis
0
bLength
1
Number
Velikost deskriptoru v bytech
1
bDescriptorType
1
Constant
Deskriptor koncov´eho bodu (0x05)
2
bIEndpointAdress
1
Endpoint Adresa koncov´eho bodu
3
bmAttributes
1
Bitmap
Vlastnosti koncov´eho bodu
4
wMaxPacketSize
2
Number
Maxim´aln´ı velikost paketu, kter´ y je koncov´ y bod schopen odeslat, nebo pˇrijmout
6
bInterval
1
Number
Interval pro kontrolu koncov´eho bodu hostitelem. Ud´av´a se v poˇctu r´amc˚ u. Pro blokov´e a kontroln´ı pˇrenosy se nevyuˇz´ıv´a, pro izochronn´ı je 1 a pro pˇreruˇsovac´ı m˚ uˇze nab´ yvat hodnoty 1 aˇz 255.
Adresa koncov´eho bodu je k´odovan´a n´asleduj´ıc´ım zp˚ usobem. Bity 0 aˇz 3 ud´avaj´ı ˇc´ıslo koncov´eho bodu, bity 4 aˇz 6 jsou rezervovan´e, hodnota se nastavuje na 0. Bit 7 ud´av´a smˇer. Pro OUT koncov´ y bod je hodnota 0 a pro IN koncov´ y bod 1. Vlastnosti koncov´eho bodu jsou zak´odovan´e v bytu takto. Bity 0 aˇz 1 ud´avaj´ı typ pˇrenosu. Kontroln´ı = 00, izochronn´ı = 01, blokov´ y = 10 a pˇreruˇsovac´ı = 11. Bity 2 aˇz 7 jsou rezervovan´e pro izochronn´ı koncov´e body.
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
2.1.8
12
Enumerace zaˇ r´ızen´ı
Enumerace je proces, pˇri kter´em hostitel zjiˇst’uje, jak´e zaˇr´ızen´ı bylo pˇripojeno na sbˇernici a jak´e m´a parametry. Typick´a enumerace zaˇr´ızen´ı v prostˇred´ı Windows prob´ıh´a n´asledovnˇe [8]. 1. Stabilizace portu - po dobu alespoˇ n 100ms nesm´ı nastat na portu zmˇena pˇripojen´ı. 2. Reset portu - hostitel resetuje port a um´ıst´ı zaˇr´ızen´ı do z´akladn´ıho stavu, to nyn´ı odpov´ıda na adrese 0. 3. Poˇzadavek na deskriptor zaˇr´ızen´ı - hostitel zaˇsle poˇzadavek na deskriptor zaˇr´ızen´ı, tento poˇzadavek je pouˇzit pouze k urˇcen´ı maxim´aln´ı velikosti kontroln´ıho paketu a po pˇreˇcten´ı prvn´ıch osmi byt˚ u zaslan´ ych zaˇr´ızen´ım doch´az´ı k druh´emu resetu USB portu. 4. Nastaven´ı USB adresy - v tomto kroku je USB zaˇr´ızen´ı pˇridˇelena adresa a hostitel ˇcek´a 10ms, neˇz se zaˇr´ızen´ı stabilizuje. 5. Druh´ y poˇzadavek na deskriptor zaˇr´ızen´ı - hostitel pˇreˇcte ze zaˇr´ızen´ı cel´ y deskriptor zaˇr´ızen´ı a nastav´ı pole bLength a bDescriptorType podle z´ıskan´ ych hodnot. 6. Poˇzadavek na konfiguraˇcn´ı deskriptor - z d˚ uvod˚ u kompatibility oˇcek´av´a hostitel d´elku konfiguraˇcn´ıho deskriptoru 255 byt˚ u. Po pˇreˇcten´ı cel´eho deskriptoru se spr´avnost pˇrijat´ ych dat ovˇeˇr´ı tak, ˇze poˇcet pˇrijat´ ych byt˚ u mus´ı b´ yt vˇetˇs´ı nebo roven poli wTotalLength. Pˇri spr´avn´em pˇreˇcten´ı cel´eho deskriptoru doch´az´ı k validaci zaˇr´ızen´ı a Windows zaˇcne hledat ovladaˇc pro dan´e zaˇr´ızen´ı pomoc´ı sluˇzby Windows update.
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
2.2
13
Altera DE2-115
Tato kapitola kr´atce seznamuje s v´ yvojovou a v´ yukovou deskou DE2-115 od firmy Altera [5], kter´a je urˇcena pro v´ yuku struktur poˇc´ıtaˇcov´ ych syst´em˚ u, digit´aln´ı logiky a FPGA technologie. Jedn´a se o zaˇr´ızen´ı s velk´ ym mnoˇzstv´ım periferi´ı a ˇsirok´ ym spektrem vyuˇzit´ı. Lze ho pouˇz´ıt na drobn´e ˇskoln´ı projekty, i na ˇreˇsen´ı komplexn´ıch probl´em˚ u a pro sloˇzitˇejˇs´ı n´avrhy. Deska je osazena FPGA ˇcipem Cyclone IV EP4CE115F29C7 a disponuje nˇekolika druhy pamˇet´ı, jmenovitˇe 128 MB SDRAM, 2MB SRAM a 8MB Flash. D´ale je moˇzn´e pamˇet’ rozˇs´ıˇrit pomoc´ı SD karty. Hodinov´ y sign´al je generov´an 50 MHz oscil´atorem, ale lze vyuˇz´ıt i extern´ı SMA vstup a v´ ystup. Zaˇr´ızen´ı je vybaveno I/O porty pro zprostˇredkov´an´ı komunikace s okol´ım. • Zabudovan´ y USB-Blaster pro konfiguraci FPGA • Mikrofon (24-bitov´ y Audio CODEC) • Video Out (VGA 8-bit DAC) • Video IN (NTSC/PAL/Multi-format) • RS232 • Vstupn´ı infraˇcerven´ y port • PS/2 port pro myˇs nebo kl´avesnici • 2x 10/100/1000 Ethernet • USB 2.0 (Typ A a B) • HSMC Z´aroveˇ n jsou k dispozici periferie pro zobrazov´an´ı dat a ovl´ad´an´ı v´ yvojov´e desky. Pro zobrazen´ı lze vyuˇz´ıt osm sedmisegmentov´ ych displej˚ u a 16 x 2 LCD displej. D´ale pak 18 ˇcerven´ ych LED a 9 zelen´ ych LED. Pro ovl´ad´an´ı je pˇripraveno 18 switch˚ u a 4 tlaˇc´ıtka.
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
2.3
14
ISP1362
Pro zprostˇredkov´an´ı USB komunikace u DE2-115 je na v´ yvojov´e desce Philips ISP1362 single-chip Universal Serial Bus (USB) On-The-Go (OTG) controller (d´ale ISP1362) [4]. Tento ˇcip je tvoˇren z Philips slave host controller (d´ale HC) a ISP1811B Device controller (d´ale DC). K ISP1362 jsou pˇripojeny dva USB porty, prvn´ı z nich je typu A a slouˇz´ı k pˇripojen´ı USB zaˇr´ızen´ı, pokud ˇcip slouˇz´ı jako hostitel. Druh´ y port je typu B a USB zaˇr´ızen´ı se pˇres nˇej pˇripojuje USB kabelem k hostiteli. ISP1362 podporuje i OTG specifikaci, kter´a umoˇzn ˇuje stˇr´ıd´an´ı rol´ı (Master-Slave) mezi dvˇema zaˇr´ızen´ımi na z´akladˇe vyjedn´avac´ıho protokolu k tomu urˇcen´eho. ISP1362 je plnˇe kompatibiln´ı s USB specifikac´ı 2.0 a v reˇzimu Full-speed podporuje pˇrenos dat v rychlosti 12 Mbit/s. Na obr´azku 2.3 lze vidˇet jak je FPGA Cyclone pˇripojen k ISP1362.
Obr´ azek 2.3: Propojeni FPGA a ISP1362 [5]
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
15
Tabulka 2.5 popisuje jednotliv´e sign´aly pouˇzit´e pˇri propojen´ı a jejich roli pˇri komunikaci mezi FPGA Cyclone a ISP1362. Tabulka 2.5: Propojen´ı FPGA a ISP1362 [5]
Sign´al
Smˇer
OTG ADDR[0]
output
Pouˇzit´ı Rozhoduje, zda se jedn´a o pˇr´ıkazovou ˇci datovou f´azi pˇri z´apisu, nebo ˇcten´ı registru.
OTG ADDR[1]
output
Vyb´ır´a mezi Host controller a Device controller (viz. obr.2.4).
OTG DATA[15..0] bidirectional Obousmˇern´a datov´a sbˇernice, pomoc´ı kter´e se lze pˇripojit k vnitˇrn´ım registr˚ um a k vyrovn´avac´ım pamˇet´ım v ISP1362. OTG CS N
output
Chip select rozhoduje, zda se pˇristupuje do registru, nebo do vyrovn´avac´ı pamˇeti.
OTG WR N
output
Pokud je OTG WR N aktivn´ı, lze zapisovat je do registru, nebo vyrovn´avac´ı pamˇeti
OTG RD N
output
Pokud je OTG RD N aktivn´ı, lze ˇc´ıst z registru nebo vyrovn´avac´ı pamˇeti.
OTG RST N
output
Vstupn´ı reset sign´al restartuje zaˇr´ızen´ı, to je znovu nakonfigurov´ano a pˇripojeno k hostiteli.
OTG INT[1..0]
input
Pˇreruˇsovac´ı sign´al od ISP1362, kter´ y informuje o zmˇenˇe ve vyrovn´avac´ı pamˇeti koncov´eho bodu
OTG DACK[1..0]
output
Vstup pro DMA - nen´ı pouˇzit
OTG DREQ[1..0]
input
V´ ystup pro DMA - nen´ı pouˇzit
OTG FSPEED
bidirectional USB Full Speed, 0 = Enable, Z = Disable
OTG LSPEED
bidirectional USB Low Speed, 0 = Enable, Z = Disable
2.3.1
Device controller
V bakal´aˇrsk´e pr´aci funguje DE2-115 v roli USB zaˇr´ızen´ı, komunikace je tedy ˇr´ızena obvodem ISP1811B Device controller. DC obsahuje 14 programovateln´ ych koncov´ ych bod˚ u a 2 kontroln´ı IN/OUT koncov´e body. Pˇr´ımo na ˇcipu je integrov´ano 2462 byt˚ u multikonfiguraˇcn´ı vyrovn´avac´ı pamˇeti a je podporov´an double buffering pro zv´ yˇsen´ı propustnosti a ulehˇcen´ı pˇrenos˚ u v re´aln´em ˇcase. ISP1362 se pˇripojuje k mikrokontrol´eru, nebo FPGA
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
16
ˇcipu (d´ale zmiˇ nov´ano jen jako mikrokontrol´er) pomoc´ı vysokorychlostn´ı ˇsestn´acti bitov´e sbˇernice s rychlost´ı pˇrenosu aˇz 10 MB/s. Na obr´azku 2.4 se je vidˇet blokov´e sch´ema USB ˇcipu.
Obr´azek 2.4: ISP1362 [4]
ISP1362 pouˇz´ıv´a I/O m´od pro pˇr´ıstup k vnitˇrn´ım registr˚ um a vyrovn´avac´ı pamˇet´ı pomoc´ı extern´ıho mikrokontrol´eru. Vyuˇz´ıv´a k tomu sign´aly popsan´e v tabulce2.5. ISP1362 nab´ız´ı i Direct Memory Acces (DMA) pˇr´ıstup, neboli pˇr´ım´ y pˇr´ıstup do pamˇeti, ale tento zp˚ usob nebude v pr´aci pouˇzit, proto nen´ı bl´ıˇze pops´an. V´ıce informac´ı lze nal´ezt v datasheetu v´ yrobku. Vyrovn´avac´ı pamˇet’ pro zaˇr´ızen´ı je rozdˇelen´a do ˇsestn´acti blok˚ u. Prvn´ı dva jsou urˇceny pro kontroln´ı vstupn´ı a v´ ystupn´ı koncov´e body a n´asleduje prostor pro dalˇs´ıch ˇctrn´act programovateln´ ych koncov´ ych bod˚ u. Pˇrestoˇze kontroln´ı koncov´e body maj´ı fixn´ı velikost danou v datasheetu produktu, je potˇreba urˇcit prostor ve vyrovn´avac´ı pamˇet´ı pro vˇsech ˇsestn´act koncov´ ych bod˚ u, neˇz dojde k rozdˇelen´ı vnitˇrn´ı vyrovn´avac´ı pamˇeti. Programova-
´ C ˇ AST ´ KAPITOLA 2. TEORETICKA
17
teln´e koncov´e body mohou m´ıt velikost od 16 do 1023 byt˚ u. D˚ uleˇzit´e je ale nepˇres´ahnout v souˇctu celkovou velikost vyrovn´avac´ı pamˇeti 2462 byt˚ u. Tabulka 2.6 ukazuje jednotliv´e kombinace na vstupu pro pˇr´ıstup do intern´ıch registr˚ u zaˇr´ızen´ı, nebo do vyrovn´avac´ı pamˇeti. Zat´ımco adresa pro pˇr´ıstup je dek´odov´ana ze sign´alu CS, A0 a A1, smˇer sign´alu je urˇcen pomoc´ı sign´al˚ u RD a WR. Pro u ´plnost je nutno dodat, ˇze oznaˇcen´ı L znaˇc´ı stav LOW(logick´a nula), zat´ımco H je zkratka pro stav HIGH(logick´a jedna).
Tabulka 2.6: Adresace na I/O portu [4]
CS A1
ˇıˇrka datov´e sbˇernice A0 Druh pˇr´ıstupu S´
Popis
L
L
L
R/W
16 bit˚ u
HC data port
L
L
H
W
16 bit˚ u
HC command port
L
H
L
R/W
16 bit˚ u
DC data port
L
H
H
W
16 bit˚ u
DC command port
Pˇr´ıstup k registru nebo do vyrovn´avac´ı pamˇeti zaˇr´ızen´ı prob´ıh´a ve dvou f´az´ıch. V prvn´ı f´azi se vyˇsle 16bitov´ y pˇr´ıkaz, kter´ y slouˇz´ı jako adresa registru, se kter´ ym bude komunikov´ano v datov´e f´azi. Pro urˇcen´ı registru se vyuˇz´ıv´a pouze niˇzˇs´ı byte, data ve vyˇsˇs´ım bytu jsou ignorov´ana. Pˇri druh´e f´azi doch´az´ı pˇrenosu dat mezi mikrokontrol´erem a vnitˇrn´ım registrem ISP1362. Vˇetˇsina registr˚ u v ISP1362 je 16bitov´a, ale ˇcip obsahuje i nˇekolik 32bitov´ ych registr˚ u. V jejich pˇr´ıpadˇe pak za pˇr´ıkazovou f´az´ı n´asleduj´ı dvˇe f´aze datov´e. Kompletn´ı seznam DC registr˚ u vˇcetnˇe jejich jmen, adres a v´ yznam˚ u jednotliv´ ych bit˚ uv nich lze nal´ezt v datasheetu, kap. 16. O zmˇen´ach ve vyrovn´avac´ı pamˇeti koncov´ ych bod˚ u informuje ISP1362 pˇr´ısluˇsn´ y mikrokontrol´er pomoc´ı hardwarov´eho pˇreruˇsen´ı. V z´akladn´ım nastaven´ı slouˇz´ı sign´al OTG INT[0] k pˇrenosu pˇreruˇsen´ı od HC a OTG INT[1] informuje o pˇreruˇsen´ı od DC. Pro kaˇzd´ y koncov´ y bod lze nastavit, zda m´a pos´ılat pˇreruˇsen´ı, kdyˇz dojde ke zmˇenˇe ve vyrovn´avac´ı pamˇeti.
Kapitola 3 ˇ sen´ı projektu Reˇ Praktick´a ˇca´st bakal´aˇrsk´e pr´ace sest´av´a ze dvou hlavn´ıch ˇca´st´ı. Prvn´ı z nich je vytvoˇrit USB modul napsan´ y ve VHDL do v´ yvojov´e desky, kter´ y bude snadno pouˇziteln´ y, spolehliv´ y a nen´aroˇcn´ y na pouˇzitou logiku. Druh´ ym u ´kolem je vytvoˇren´ı programu pro Windows, kter´ y bude zajiˇst’ovat komunikaci s v´ yvojovou deskou a poskytne uˇzivateli pohodln´e rozhran´ı pro ˇr´ızen´ı komunikace. Jak jiˇz bylo zm´ınˇeno v u ´vodu pr´ace, jako v´ ychoz´ı bod pro splnˇen´ı tˇechto u ´kol˚ u je pouˇzit projekt ISP1362 VHDL interface for DE2 v1.0 od Mikhaila Zakhaova. Tento projekt je volnˇe dostupn´ y k pouˇzit´ı a u ´pravˇe pod GNU GPL licenc´ı.
3.1
V´ ychoz´ı stav projektu
Zdrojov´e k´ody projektu jsou dostupn´e z [3]. Projekt byl naposled upraven v z´aˇr´ı roku 2012 a pˇri pˇrevzet´ı se nach´azel v n´asleduj´ıc´ım stavu v´ yvoje. • VHDL modul lze nahr´at do v´ yvojov´e desky DE2 pomoc´ı softwaru Quartus II. Po jej´ım pˇripojen´ı dojde k u ´spˇeˇsn´e enumeraci zaˇr´ızen´ı. Modul operuje pouze ve smyˇcce. To znamen´a, ˇze data odesl´ana hostitelem do zaˇr´ızen´ı, jsou zaˇr´ızen´ım pˇrijata a odesl´ana zpˇet hostiteli. Zcela chyb´ı moˇznost pˇripojit k modulu vstupn´ı sign´al, nebo z modulu pˇreˇc´ıst data. Na jeden USB pˇrenos lze odeslat nebo pˇrijmout dva byty dat pomoc´ı blokov´eho pˇrenosu. • Je navrhnuto pouˇzit´ı knihovny libusb-win32 v programovac´ım jazyce C pro obsluhu USB portu na stranˇe hostitele, tedy v osobn´ım poˇc´ıtaˇci [9].
18
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
19
• Jako program pro pˇripojen´ı k USB zaˇr´ızen´ı a n´aslednou komunikaci je pouˇzit upraven´ y uk´azkov´ y program dod´avan´ y spolu s libusb-win32. Tento program nab´ız´ı pouze moˇznost jednor´azov´eho pˇripojen´ı zaˇr´ızen´ı, odes´ıl´an´ı pˇredem dan´ ych dat do zaˇr´ızen´ı a jejich n´asledn´e pˇreˇcten´ı a vyps´an´ı do konzole. Pot´e je zaˇr´ızen´ı odpojeno a program konˇc´ı.
3.2
Souhrn ˇ reˇ sen´ ych probl´ em˚ u
USB modul v p˚ uvodn´ı verzi mˇel nˇekolik nedostatk˚ u, kter´e br´anili jeho propojen´ı s jin´ ymi ˇc´astmi projektu. Proto na nˇem byly uˇcinˇeny n´asleduj´ıc´ı zmˇeny. • D´avka dat pˇren´aˇsen´a v jednom USB pˇrenosu byla zv´ yˇsena z dvou byt˚ u na ˇctyˇri byty. D´ıky tomu lze pˇren´aˇset vˇetˇs´ı mnoˇzstv´ı informac´ı a z´aroveˇ n lze zak´odovat v´ıce u ´daj˚ u do jednoho pˇrenosu. Lze tak napˇr´ıklad pˇren´est v jednom pˇrenosu informaci o poloze kurzoru a stavu tlaˇc´ıtek na myˇsi. • Ovladaˇc USB modulu byl pˇreps´an tak, aby generoval ACK sign´aly pˇri pˇrijet´ı pˇreruˇsen´ı z koncov´ ych bod˚ u. • Pro propojen´ı USB modulu s projektem v Quartus II, bylo vytvoˇreno rozhran´ı umoˇzn ˇuj´ıc´ı rychle vloˇzen´ı modulu do projektu. Byl dops´an proces, kter´ y ˇr´ıd´ı pˇrenos dat ze vstupu USB modulu do vyrovn´avac´ı pamˇeti koncov´eho bodu EP02 a z´apis dat z koncov´eho bodu EP01 na v´ ystup modulu. O zmˇen´ach na koncov´ ych bodech je nyn´ı uˇzivatel informov´an pomoc´ı ACK sign´al˚ u a z´apis dat do pamˇeti lze ˇr´ıdit pomoc´ı vstupu DATA SEND REQ. • Pro ˇr´ızen´ı odes´ıl´an´ı dat hostiteli byly navrhnuty a implementov´any tˇri odes´ılac´ı m´ody. • Pro Windows bylo vytvoˇreno uˇzivatelsk´e rozhran´ı, kter´e umoˇzn ˇuje pˇripojen´ı k USB zaˇr´ızen´ı a z´aroveˇ n funguje jako TCP server. Uˇzivatel pak m˚ uˇze vyuˇz´ıt jednu z aplikac´ı, kter´a byla v r´amci t´eto pr´ace vytvoˇrena, nebo si m˚ uˇze napsat svou vlastn´ı a pomoc´ı socket˚ u se k rozhran´ı pˇripojit a komunikovat s v´ yvojovou deskou.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
3.3
20
USB modul
USB modul je popsan´ y ˇsesti VHDL zdrojov´ ymi soubory. Jednotliv´e soubory jsou usb inc.vhd (bal´ıˇcek obsahuj´ıc´ı USB deskriptory, konstanty a datov´e struktury), isp inc.vhd (bal´ıˇcek obsahuj´ıc´ı n´azvy a adresy registr˚ u v ISP1362). D´ale pak drv.vhd, devreq.vhd, hal.vhd a usb.vhd. Na obr. fig:modul je blokov´e sch´ema USB modulu. Propojen´ı jednotliv´ ych blok˚ u a propojen´ı s top-level entity je definov´ano v usb.vhd.
Obr´ azek 3.1: Blokov´e sch´ema USB modulu
3.3.1
Metoda pro strukturovan´ y VHDL design
Pˇri psan´ı souboru bylo vyuˇzito strukturovan´e metody pro psan´ı VHDL od Jiˇr´ıho Gaislera [11]. Podstatou t´eto metody je pouˇz´ıt´ı dvou proces˚ u pro kaˇzdou entitu. Graficky je tato myˇslenka zobrazena na obr´azku 3.2. Vstupy entity jsou oznaˇceny D a jsou pˇripojeny k procesu ”Combinational”. Vstupy pro proces ”Sequential”jsou oznaˇceny rin.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
21
V procesu ”Sequential”je vstup zkop´ırov´an na v´ ystup pˇri n´abˇeˇzn´e hranˇe hodin. C´ılem t´eto metody je pˇredevˇs´ım zlepˇsit ˇcitelnost k´odu a sjednotit design jednotliv´ ych VHDL entit. Prvn´ı proces, v obr´azku 3.2 oznaˇcen´ y jako ”Combinational”obsahuje vˇsechnu asynchronn´ı logiku, zat´ımco proces ”Sequential”obsahuje vˇsechnu sekvenˇcn´ı logiku (registry).
Obr´ azek 3.2: Generick´ y obvod s dvˇema procesy
V pˇr´ıpadˇe t´eto pr´ace je v entit´ach drv.vhd, devreq.vhd a hal.vhd definov´an v´ yˇctov´ y typ y obsahuje mnoˇzinu vˇsech stav˚ u a promˇenn´ ych. V architektuˇre dan´e entity jsou reg t, kter´ definov´any sign´aly r a rin typu reg t. V procesu ”Combinational”je vytvoˇren´a promnˇen´a v typu reg t. Proces ”Combinational”m´a typovˇe n´asleduj´ıc´ı strukturu. comb : process(r, D) variable v : reg_t; begin v := r; finite state machine; Q <= r; rin <= v; end process;
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
22
Proces ”Sequential”kop´ıruje vstupy (rin) na v´ ystup (r ) pˇri n´abˇeˇzn´e hranˇe hodin. Z´aroveˇ n pˇri kaˇzd´em pr˚ uchodu procesem kontroluje, zda uˇzivatel nepoˇza´dal o reset obvodu. Pokud ano, USB modul je resetov´an. seq : process(reset, clk) begin if (reset= ’1’) then r <= reset; elsif rising_edge(clk) then r <= rin end if; end process;
3.3.2
hal.vhd
HAL, neboli Hardware Abstract Layer se star´a o spr´avn´e ˇcasov´an´ı I/O operac´ı. Koneˇcn´ y stavov´ y automat typu Moore implementuje I/O ˇcasov´an´ı dan´e datasheetem ISP1362 (kapitola 20.1.2). Ten ˇr´ık´a, ˇze jeden cyklus ˇcten´ı mus´ı trvat minim´alnˇe 180 ns a jeden cyklus z´apisu mus´ı trvat minim´alnˇe 180 ns. V pˇr´ıkazov´e ˇc´asti z´apisu do registru je minim´aln´ı d´elka cyklu 205 ns. Hal z´ısk´av´a pˇr´ıkazy a data od ovladaˇce USB modulu (drv.vhd) a slouˇz´ı jako prostˇredn´ık pˇri komunikaci mezi ovladaˇcem a ISP1362. Koneˇcn´ y stavov´ y automat jak bylo ˇreˇceno je typu Moore 3.3, to znamen´a, ˇze v´ ystup je generov´an na z´akladˇe souˇcasn´eho stavu automatu a zmˇena na vstupu se na v´ ystupu projev´ı aˇz v n´asleduj´ıc´ıc´ım stavu. Sekvenˇcn´ı proces je ˇr´ızen hodinami o frekvenci 25MHz, proto kaˇzd´ y pˇrechod mezi stavy trv´a 40 ns. Po nahran´ı modulu do v´ yvojov´e desky vyˇsle HAL sign´al POR (power on reset), ˇc´ımˇz resetuje ISP1362 a pˇrech´az´ı do stavu idle st, ve kter´em ˇcek´a na pˇr´ıkazy od ovladaˇce. Pokud ovladaˇc odeˇsle pˇr´ıkaz pro ˇcten´ı nebo z´apis, pˇrejde stavov´ y automat do n´asleduj´ıc´ıho stavu (write st,nebo read st), nastav´ı pˇr´ısluˇsn´e hodnoty ˇr´ıd´ıch sign´al˚ u a provede poˇzadovanou akci. N´asleduj´ıc´ı stavy slouˇz´ı jako ˇcasov´a v´ yplˇ n pro dodrˇzen´ı poˇzadavk˚ u ISP1362 na d´elku cykl˚ u a pˇrechod mezi stavy prob´ıh´a pˇri n´abˇeˇzn´e hranˇe hodin.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
23
Obr´ azek 3.3: Koneˇcn´ y stavov´ y automat entity HAL
3.3.3
devreq.vhd
Entita DEVREQ obsluhuje poˇzadavky na deskriptory odeslan´e hostitelem na kontroln´ı koncov´ y bod pˇri enumeraci zaˇr´ızen´ı a odes´ıl´a deskriptory uloˇzen´e v usb inc. Komunikace s hostitelem bˇehem enumerace je ˇr´ızena koneˇcn´ ym stavov´ ym automatem typu Moore (obr´azek 3.4). Kdyˇz ovladaˇc obdrˇz´ı poˇzadavek na kontroln´ım koncov´em bodu, signalizuje tuto skuteˇcnost zmˇenou u ´rovnˇe na portu reg rdy na logickou jedna. Stavov´ y automat pˇrejde do stavu decode a pˇreloˇz´ı aktu´aln´ı poˇzadavek hostitele. N´aslednˇe pˇrejde do stavu wait rdy, ve kter´em setrv´a, dokud nen´ı aktu´aln´ı poˇzadavek vyˇr´ızen. Pot´e pˇrech´az´ı do stavu idle a z nˇej do stavu decode. Tento cyklus se opakuje, dokud nejsou vˇsechny deskriptory odesl´any a hostitel nepotvrd´ı konfiguraci. N´aslednˇe entita DEVREQ ohl´as´ı ovladaˇci, ˇze je zaˇr´ızen´ı nakonfigurov´ano a pˇred´a mu zpˇet ˇr´ızen´ı.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
24
Obr´ azek 3.4: Koneˇcn´ y stavov´ y automat entity DEVREQ
3.3.4
drv.vhd
Entita DRV (v textu d´ale jako ovladaˇc) ˇr´ıd´ı komunikaci mezi USB modulem a ISP1362 pomoc´ı pˇeti stavov´ ych automat˚ u typu Moore. • CFG - nakonfiguruje ISP1362 • GLOBAL - uchov´av´a aktu´aln´ı stav modulu • DEV - uchov´av´a aktu´aln´ı stav zaˇr´ızen´ı • IRQ - ˇr´ıd´ı z´apis na koncov´e body a obsluhuje pˇreruˇsen´ı od ISP1362 • TXFSM - pˇrij´ım´a data od uˇzivatele modulu a pˇred´av´a je k z´apisu do vyrovn´avac´ı pamˇeti EP02 USB modul se m˚ uˇze nach´azet ve tˇrech stavech, konfigurov´an´ı ISP1362, enumerace zaˇr´ızen´ı hostitelem a zaˇr´ızen´ı ˇcekaj´ıc´ı na poˇzadavky od hostitele. Informace o aktu´aln´ım stavu je uchov´ana ve stavov´em automatu GLOBAL. Stavov´ y diagram tohoto automatu je na obr´azku 3.5. D´ale je potˇreba zn´at i aktu´aln´ı stav USB zaˇr´ızen´ı. Tato informace je z´ısk´av´ana z aktu´aln´ıho stavu automatu DEV. Ten m˚ uˇze nab´ yvat bud’ stavu in reset (konfigurace ISP a enumerace), nebo stavu configured (zaˇr´ızen´ı je nakonfigurov´ano a pˇripojeno
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
25
k hostiteli).
Obr´ azek 3.5: Koneˇcn´ y stavov´ y automat entity DRV, automat GLOBAL
Po nahr´an´ı modulu do v´ yvojov´e desky se zaˇr´ızen´ı nach´az´ı ve stavu configure. V tomto stavu prob´ıh´a konfigurace ISP1362, o kterou se star´a koneˇcn´ y stavov´ y automat CFG. Ten nejdˇr´ıve nakonfiguruje USB ˇcip (povol´ı generov´an´ı pˇreruˇsen´ı a softconnect v registru DcMode a zak´aˇze pˇrechod zaˇr´ızen´ı do suspend state pˇri neˇcinnosti v registru DcHardwareConfiguration). N´aslednˇe se konfiguruj´ı jednotliv´e koncov´e body pomoc´ı z´apisu do jejich DcEndpointConfiguration registru. Pro kontroln´ı koncov´e body a koncov´e body EP01 a EP02 je vyˇclenˇena ˇc´ast vyrovn´avac´ı pamˇeti a nastaven jejich smˇer. Ostatn´ı koncov´e body je nutn´e tak´e nakonfigurovat a oznaˇcit je jako neaktivn´ı. Posledn´ım krokem konfigurace ISP1362 je z´apis do DcInterruptEnable registru a povolen´ı generov´an´ı pˇreruˇsen´ı na aktivn´ıch koncov´ ych bodech. T´ım je konfigurace ISP1362 kompletn´ı a zaˇr´ızen´ı pˇrejde do glob´aln´ıho stavu handle irq, ve kter´em ˇcek´a na pˇripojen´ı k hostiteli a jeho n´asledn´e poˇzadavky na deskriptory zaˇr´ızen´ı pˇri enumeraci. O zachycen´ı pˇreruˇsen´ı od ISP1362 a jeho obsluhu se star´a koneˇcn´ y stavov´ y automat IRQ. Jeho stavov´ y diagram je na obr´azku 3.6. Vzhledem k mnoˇzstv´ı stav˚ u dan´eho automatu jsou nˇekter´e stavy v diagramu sdruˇzeny do skupin. Mezi stavy v jednotliv´ ych skupin´ach se pˇrech´az´ı ve chv´ıli, kdy entita HAL signalizuje na vstupn´ım portu rdy dokonˇcen´ı I/O operace s ISP1362. Pokud dan´ y stav neobsahuje I/O operaci, mezi stavy se pˇrech´az´ı pˇri n´abˇeˇzn´e hranˇe hodin. Po nakonfigurov´an´ı ISP1362 je stavov´ y automat IRQ ve stavu wait irq a ˇcek´a na pˇreruˇsen´ı od ISP1362. Po zachycen´ı pˇreruˇsen´ı naˇcte ovladaˇc hodnotu z DcInterrupt registru (stavy serve irq - serve irq2). Ve stavu serve irq3 zjist´ı ovladaˇc, kter´ y koncov´ y bod pˇreruˇsen´ı vyvolal (pˇr´ıznakov´ y bit dan´eho koncov´eho bodu je v logick´e jedna), a n´aslednˇe obslouˇz´ı tento koncov´ y bod. Pˇred u ´spˇeˇsnou enumerac´ı
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
26
Obr´ azek 3.6: Koneˇcn´ y stavov´ y automat entity DRV, automat IRQ
zaˇr´ızen´ı lze komunikovat s hostitelem pouze na kontroln´ıch koncov´ ych bodech. Po vyhodnocen´ı, kter´ y koncov´ y bod vyslal pˇreruˇsen´ı, pˇreˇcte ovladaˇc DcEndpointStatus registr dan´eho koncov´eho bodu, t´ım vynuluje pˇreruˇsovac´ı bit v DcInterrupt registru. N´aslednˇe vyhodnot´ı byte z´ıskan´ y z DcEndpointStatus registru. Pokud se jednalo o kontroln´ı kocov´ y bod a ve vyrovn´avac´ı pamˇeti koncov´eho bodu je pˇr´ıtomen set-up paket, pak pˇrejde do stavu ctrl, kde ˇcte obsah kontroln´ıho koncov´eho bodu (poˇzadavky na deskriptor zaˇr´ızen´ı) a n´aslednˇe pˇred´a ˇr´ızen´ı entitˇe DEVREQ. Koneˇcn´ y stavov´ y automat GLOBAL pˇrech´az´ı do stavu gdev reg a v nˇem setrv´a, dokud nen´ı enumerace zaˇr´ızen´ı dokonˇcena. ´ eˇsn´a enumerace je signalizov´ana entitou DEVREQ na portu done logickou jedna. Uspˇ Koneˇcn´ y stavov´ y automat GLOBAL pˇrech´az´ı zpˇet do stavu handle irq a ˇr´ızen´ı je pˇred´ano automatu IRQ. Ten pˇrejde za stavu wait irq do stavu TxIni a inicializuje vyrovn´avac´ı pamˇet koncov´eho bodu EP02 z´apisem ˇctyˇr nulov´ ych byt˚ u. V tuto chv´ıli je USB modul plnˇe nakonfigurov´an a pˇripraven pˇrij´ımat a odes´ılat data. Nakonfigurovan´ y a pˇripojen´ y USB modul je ˇr´ızen automatem IRQ. Ten setrv´av´a ve stavu wait irq a ˇcek´a na pˇreruˇsen´ı od ISP1362, nebo na pokyn pro z´apis dat do vyrovn´avac´ı pamˇeti koncov´eho bodu EP02.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE 3.3.4.1
27
ˇ Cten´ ı dat z EP01
Pokud hostitel zap´ıˇse nov´a data na koncov´ y bod EP01, USB modul je o t´eto skuteˇcnosti informov´an pomoc´ı pˇreruˇsen´ı. Automat IRQ pˇreˇcte obsah DcInterrupt registru a zjist´ı, ˇze pˇreruˇsen´ı pˇriˇslo z koncov´eh´e bodu EP01. Ovladaˇc pˇreˇcte DcEndpointStatus registr dan´eho koncov´eho bodu, t´ım vynuluje interrupt bit z DcInterrupt registru, pot´e vyˇsle poˇzadavek pro pˇr´ıstup k vyrovn´avac´ı pamˇeti koncov´eho bodu EP01. Pot´e z pamˇeti pˇreˇcte pˇrijat´a data a zap´ıˇse je na v´ ystup SData. Nakonec vymaˇze obsah vyrovn´avac´ı pamˇeti a odeˇslˇe ACK sign´al Dfrom host ack entitˇe USB. 3.3.4.2
Z´ apis dat na EP02
Poˇzadavek na z´apis dat do EP02 vyjadˇruje entita USB pomoc´ı sign´alu RDy v logick´e jedna. Koneˇcn´ y stavov´ y automat TXFSM typu Moore ve stavu TxIdle ˇcek´a na tento RDy sign´al. Ve chv´ıli, kdy ho obdrˇz´ı, zap´ıˇse data ze vstupu do promˇenn´e Din a automat pˇrejde do stavu TxLoad. T´ım signalizuje automatu IRQ, ˇze data jsou pˇripraven´a k z´apisu do vyrovn´avac´ı pamˇeti EP02. Z´aroveˇ n se tak zabr´an´ı entitˇe USB poˇzadovat z´apis dalˇs´ıch dat, dokud nejsou aktu´aln´ı data u ´spˇeˇsnˇe zaps´ana do vyrovn´avac´ı pamˇeti. Automat IRQ pˇrejde do stavu TxLoads, pˇreˇcte DcEndpointStatus registr, t´ım vynuluje interrupt bit koncov´eho bodu. N´aslednˇe zap´ıˇse data a validuje obsah vyrovn´avac´ı pamˇeti. Validovan´a data jsou pˇripravena k odesl´an´ı, jakmile pˇrijde poˇzadavek od hostitele. Automat TXFSM pˇrejde do stavu TxIdle a ˇcek´a na dalˇs´ı poˇzadavek pro z´apis od entity USB a automat IRQ pˇrejde do stavu wait irq.
3.3.5
usb inc.vhd
Obsahuje deskriptory zaˇr´ızen´ı, konfigurace, rozhran´ı a koncov´eho bodu. Vytv´aˇr´ı z nich bal´ıˇcek, ze kter´eho ˇcerp´a entita DEVREQ data pˇri enumeraci zaˇr´ızen´ı.
3.3.6
isp inc.vhd
Obsahuje n´azvy a adresy registr˚ u a konstant DC interpretovan´ ych pro VHDL. Jednotliv´e registry a jejich podrobn´ y popis lze nal´ezt v datasheetu ISP1362, kapitola 16.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
3.3.7
28
usb.vhd
Slouˇz´ı k propojen´ı entit modulu, a z´aroveˇ n poskytuje rozhran´ı pro komunikaci mezi modulem a projektem, ve kter´em je vloˇzen´ y. Pro pˇrid´an´ı USB modulu do projektu je pˇripraven symbol usb.bsf (obr. 3.7), kter´ y lze snadno vloˇzit do blokov´eho sch´ematu v libovoln´em Quartus II projektu. Porty OTG se pˇripoj´ı k pˇr´ısluˇsn´ ym pin˚ um podle tabulky pin assignments dan´e DE2 (pro r˚ uzn´e verze desek se m˚ uˇze liˇsit). Tyto piny se mus´ı nach´azet v top-level entity dan´eho projektu, aby jim mohli b´ yt pˇriˇrazeny pˇr´ısluˇsn´e assignmenty. Ostatn´ı porty se pˇripojuj´ı n´asledovnˇe. • CLOCK50 - Vstup pro pˇrijen´ı hodinov´eho sign´alu o frekvenci 50MHz. • RESET USB - pokud je na vstup pˇrivedena logick´a nula, cel´ y USB modul je resetov´an, n´aslednˇe se automaticky znovu nakonfiguruje a ˇcek´a na enumeraci od hostitele. Na tento port je doporuˇceno pˇripojit jedno z tlaˇc´ıtek, lze ale pouˇz´ıt i sp´ınaˇc. ˇ ri byty dat • DATA TO HOST[31..0] - vstupn´ı port pro odes´ılan´ı dat hostiteli. Ctyˇ z portu jsou nahr´any do vyrovn´avac´ı pamˇeti koncov´eho bodu EP02 a n´aslednˇe ISP1362 ˇcek´a na poˇzadavek (IN token) od hostitele pro jejich odesl´an´ı. • DATA FROM HOST[31..0] - na v´ ystupn´ım portu lze pˇreˇc´ıst data odeslan´a hostitelem. Pˇr´ıtomnost nov´ ych dat je ohl´aˇsena na v´ ystupn´ım portu DATA RECEIVED ACK. • DATA RECEIVED ACK - Pokud jsou z vyrovn´avac´ı pamˇeti koncov´eho bodu EP01 pˇreˇctena nov´a data, pak je tato skuteˇcnost ozn´amena zmˇenou u ´rovnˇe na tomto v´ ystupn´ım portu do logick´e jedna po dobu jedn´e periody hodinov´eho sign´alu. • DATA SEND REQ - Tento port slouˇz´ı k ovl´ad´an´ı z´apisu do vyrovn´avac´ı pamˇeti koncov´eho bodu EP02. • DATA SEND ACK - Ve chv´ıli kdy hostitel pˇreˇcte data z vyrovn´avac´ı pamˇeti koncov´eho bodu EP02, je tato ud´alost signalizov´ana zmˇenou u ´rovnˇe na logickou jedna a v t´e setrv´a, dokud logick´a u ´roveˇ n na portu DATA SEND REQ nen´ı nula.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
29
Obr´ azek 3.7: Symbol pro USB modul
Proces p send ˇr´ıd´ı komunikaci mezi vnitˇrn´ı logikou USB modulu a vstupn´ımi sign´aly a pˇren´aˇs´ı data z USB modulu na v´ ystupn´ı porty. Pokud hostitel odeslal data na koncov´ y bod EP01, proces p send pˇreˇcte data z entity DRV a zap´ıˇse je na v´ ystupn´ı port DATA FROM HOST. Z´aroveˇ n je vygenerov´an potvrzovac´ı ACK sign´al a ten je odesl´an na port DATA RECEIVED ACK. Odesl´an´ı poˇzadavku na z´apis dat z portu DATA TO HOST do USB modulu je ˇr´ızeno pomoc´ı vstupu DATA SEND REQ. Pokud je DATA SEND REQ v u ´rovni logick´e jedna a pˇr´ıznakov´e bity bufferfull a acknowledge jsou v nule, data ze vstupn´ıho portu jsou odesl´ana do vyrovn´avac´ı pamˇeti koncov´eho bodu EP02 a je nastaven pˇr´ıznakov´ y bit bufferfull do logick´e jedna. Ve chv´ıli, kdy hostitel pˇreˇcte data z koncov´eho bodu, USB modul vyˇsle acknowledge sign´al a DATA SEND ACK je nastaven do u ´rovnˇe jedna, pˇr´ıznakov´ y bit acknowledge je nastaven do u ´rovnˇe jedna a bufferfull je vynulov´an. Pˇri pˇrechodu DATA SEND REQ do logick´e nuly jsou pˇr´ıznakov´e bity vynulov´any a modul je pˇripraven pro dalˇs´ı z´apis. USB modul lze zapojit tˇremi r˚ uzn´ ymi zp˚ usoby a z´ıskat tak rozd´ıln´e chov´an´ı.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE 3.3.7.1
30
Zapojen´ı se zpˇ etnou vazbou
V´ ystup DATA SEND ACK se pˇres hradlo NOT pˇripoj´ı ke vstupu DATA SEND REQ, jako na obr´azku 3.8. Pokaˇzd´e, kdyˇz hostitel pˇreˇcte data ze zaˇr´ızen´ı, nahraj´ı se do vyrovn´avac´ı pamˇeti koncov´eho bodu nov´a data ze vstupu DATA TO HOST. Pˇr´ıklad takov´eho zapojen´ı v Quartus II se nach´az´ı na pˇriloˇzen´em CD v projektu USB Module Method 1. V tomto i n´asleduj´ıc´ıch dvou uk´azkov´ ych projektech nejsou pouˇzity zdrojov´e soubory jak byly pops´any vyˇse, ale pro vˇetˇs´ı uˇzivatelsk´e pohodl´ı jsou sdruˇzeny do jednoho souboru, kter´ y lze do Quartus II projektu vloˇzit jako knihovnu. Modul se pak s projektem propojuje v blokov´em sch´ematu pomoc´ı bloku usb.bsf.
Obr´ azek 3.8: Zapojen´ı se zpˇetnou vazbou
V´ yhodou tohoto zapojen´ı je jeho jednoduchost. Nev´ yhodou je pak fakt, ˇze nelze reagovat na pˇr´ıchod nov´ ych dat na port DATA TO HOST a nelze ani pos´ıl´an´ı nov´ ych dat ˇr´ıdit, pokud ˇr´ıd´ıc´ı blok pouˇz´ıv´a jin´e hodiny neˇz 50 MHz. 3.3.7.2
Zapojen´ı s periodick´ ym z´ apisem
Na vstup DATA SEND REQ se pˇrivede hodinov´ y sign´al s maxim´aln´ı frekvenc´ı 0,625 MHz, viz. obr´azek 3.9. Tato frekvence nesm´ı b´ yt pˇrekroˇcena, protoˇze pˇri vyˇsˇs´ı frekvenci uv´azne modul v nekoneˇcn´e smyˇcce, kdy st´ale dokola pˇrepisuje data ve vyrovn´avac´ı pamˇeti EP02. Pˇri kaˇzd´e zmˇenˇe hodin z logick´e nula do logick´e jedna dojde k pˇrepsan´ı aktu´aln´ı hodnoty ve vyrovn´avac´ı pamˇeti EP02 novou hodnotou ze vstupu DATA TO HOST. Pˇr´ıklad takov´eho zapojen´ı se nach´az´ı na pˇriloˇzen´em CD v projektu USB Module Method 2. Toto zapojen´ı je ide´aln´ı pro projekty, kde chceme pˇri kaˇzd´em ˇcten´ı zn´at aktu´aln´ı hodnotu na portu DATA TO HOST v ˇcase ˇcten´ı.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
31
Obr´ azek 3.9: Zapojen´ı s periodick´ ym z´apisem
3.3.7.3
Zapojen´ı s ˇ r´ıd´ıc´ım obvodem
Uˇzival modulu vytvoˇr´ı zapisovac´ı entitu, kter´a ˇr´ıd´ı z´apis dat na port DATA TO HOST. K modulu se pˇripoj´ı jako na obr. 3.10
Obr´ azek 3.10: Zapojen´ı s ˇr´ıd´ıc´ım obvodem
Entita control send obsahuje proces, kter´ y podle stavu na vstupu ACK upravuje v´ ystupy. V logick´e u ´rovni nula na vstupu ACK se zap´ıˇse jedna na DATA SEND REQ. Pot´e se ˇcek´a, dokud na vstupn´ım portu ACK nen´ı logick´a jedna od DATA SEND ACK (hostitel pˇreˇcetl data z EP02). N´aslednˇe se zap´ıˇse nula na port DATA SEND REQ a entita USB zmˇen´ı hodnotu DATA SEND ACK na nula, ˇc´ımˇz signalizuje pˇripravenost na dalˇs´ı z´apis dat. Odes´ılac´ı rychlost je pak omezena pouze t´ım, jak rychle dok´aˇze hostitel data ˇc´ıst. Pˇri pouˇzit´ı tohoto postupu nedojde k z´avislosti na dvou hodin´ach a budou pˇreˇctena vˇsechna data ve spr´avn´em poˇrad´ı. Pˇr´ıklad takov´eho zapojen´ı v Quartus II se nach´az´ı na pˇriloˇzen´em CD v projektu USB Module Method 3. Pro spr´avn´e fungov´an´ı modulu v tomto zapojen´ı mus´ı uˇzivatel zajistit, aby frekvence vstupn´ıch hodin entity control send byla alespoˇ n o ˇra´d vˇetˇs´ı, neˇz pˇredpokl´adan´a frekvence pˇr´ıchoz´ıch poˇzadavk˚ u od hostitele. Pokud napˇr´ıklad pˇredpokl´ad´ame frekvenci poˇzadavk˚ u
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
32
od hostitele 1 kHz, frekvence ˇr´ıd´ıc´ıch hodin pro entitu control send by mˇela b´ yt alespoˇ n v ˇra´du des´ıtek kHz. Pˇri nedodrˇzen´ı t´eto podm´ınky m˚ uˇze doj´ıt k poklesu pˇrenosov´e rychlosti a nespr´avn´emu fungov´an´ı modulu.
3.4
Uˇ zivatelsk´ e rozhran´ı
Uˇzivatelsk´e rozhran´ı a aplikace jsou naprogramov´any v jazyce C/C++. Pro tvorbu grafick´eho uˇzivatelsk´eho prostˇred´ı byla pouˇzita knihovna Qt. Jedn´a se o multiplatformn´ı knihovnu urˇcenou pro tvorbu grafick´eho uˇzivatelsk´eho rozhran´ı. Pro programov´an´ı bylo vyuˇzito v´ yvojov´e prostˇred´ı Qt Creator. Uk´azka grafiky vytvoˇren´ ych program˚ u se nach´az´ı v pˇr´ıloze C. Pro komunikaci s USB zaˇr´ızen´ım je uˇzita knihovna libusb-win32, kter´a poskytuje jednoduch´e program´atorsk´e rozhran´ı pro pˇr´ıstup k USB zaˇr´ızen´ı. Jedn´a se o verzi knihovny libusb-1.0 pˇrepsan´e pro operaˇcn´ı syst´em Windows. V´ yhodou t´eto knihovny je pˇriloˇzen´ y program inf wizard, kter´ y vytvoˇr´ı ovladaˇc pro vybran´e USB zaˇr´ızen´ı a n´aslednˇe tento ovladaˇc nainstaluje. D´ıky tomu m˚ uˇze uˇzivatel rychle zaˇc´ıt pouˇz´ıvat USB komunikaci s DE2-115 aniˇz by musel podrobnˇe rozumˇet USB standardu.
3.4.1
DE2 USB Interface
DE2 USB Interface slouˇz´ı jako komunikaˇcn´ı rozhran´ı mezi DE2-115 a uˇzivatelskou aplikac´ı. Pˇri spuˇstˇen´ı programu je spuˇstˇen TCP server, kter´ y poslouch´a v m´ıstn´ı s´ıti (IP 127.0.0.1) na portu 4444 (pokud je port zabr´an, zkouˇs´ı dalˇs´ı porty, dokud nenajde voln´ y port). Uˇzivatelsk´a aplikace se m˚ uˇze k tomuto serveru pˇripojit a odes´ılat poˇzadavky na z´apis ˇci ˇcten´ı z DE2-115. V dan´ y ˇcas m˚ uˇze b´ yt k serveru pˇripojen maxim´alnˇe jeden klient. Toto ˇreˇsen´ı bylo zvoleno pˇredevˇs´ım pro zv´ yˇsen´ı variability vyuˇzit´ı spojen´ı s DE2-115. K DE2 USB Interface se m˚ uˇze pˇripojit program s TCP klientem napsan´ ym v jak´emkoliv programovac´ım jazyce a studenti um´ı s TCP sockety pracovat uˇz z kurz˚ u programov´an´ı. To jim d´av´a moˇznost vytvoˇrit si vlastn´ı program pro jejich konkr´etn´ı projekt, pokud by jim nestaˇcili moˇznosti program˚ u vytvoˇren´ ych v r´amci t´eto pr´ace. Pro pˇr´ıpadn´e pˇr´ımo spojen´ı jsou funkce pouˇz´ıvan´e pro pˇripojen´ı a komunikaci s USB zaˇr´ızen´ım ve zdrojov´em
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
33
souboru usbhandler.cpp. Pˇri startu programu je odesl´an poˇzadavek na pˇripojen´ı k DE2-115. Pokud USB zaˇr´ızen´ı nen´ı pˇripojeno, program odpov´ıd´a na poˇzadavky od TCP klienta zpr´avou ”USBdevice not connected”. Program pˇri sv´em bˇehu odchyt´av´a zpr´avy syst´emu Windows o zmˇen´ach v pˇripojen´ ych zaˇr´ızen´ıch. Pokud je zachycena zpr´ava t´ ykaj´ıc´ı se pˇripojen´ı, ˇci odpojen´ı USB zaˇr´ızen´ı (program rozezn´a DE2-115 podle VID a PID), je provedena pˇr´ısluˇsn´a akce. Pˇripojov´an´ı a odpojov´an´ı zaˇr´ızen´ı je tedy automatizovan´e a uˇzivatel programu nemus´ı nic sloˇzitˇe nastavovat. Pro jednoduch´e aplikace, nebo pro moˇznost rychl´eho ovˇeˇren´ı funkˇcnosti USB modulu jsou v programu k dispozici tlaˇc´ıtka Read a Write. Tlaˇc´ıtko Write odeˇsle data z textov´eho pole (lze zadat pouze maxim´alnˇe 32 bit˚ u v hexadecim´aln´ım tvaru). Tlaˇc´ıtko read pˇreˇcte data z USB modulu a zap´ıˇse je do konzole programu. TCP server reaguje na n´asleduj´ıc´ı poˇzadavky od klient˚ u. Pokud klient zaˇsle poˇzadavek zaˇc´ınaj´ıc´ı na ’w’ (0x77) n´asledovan´ y aˇz ˇctyˇrmi byty dat, tato data jsou n´aslednˇe zaps´ana do DE2-115 a klientovi je odesl´ana zpr´ava potvrzovac´ı zpr´ava ”write”. Pokud je v poˇzadavku odesl´ano m´enˇe dat neˇz ˇctyˇri byty, server dopln´ı odes´ılan´a data nulov´ ymi byty. Pokud je odesl´ano v´ıce byt˚ u neˇz ˇctyˇri, jsou nadbyteˇcn´a data serverem ignorov´ana. Pro ˇcten´ı dat z DE2-115 odes´ıl´a klient poˇzadavek ’r’ (0x72). Server pˇreˇcte ˇctyˇri byty dat z DE2115 a odeˇsle je klientovi. Pˇri ˇspatn´em form´atu poˇzadavku vrac´ı server n´avod na zad´an´ı poˇzadavku ve spr´avn´em tvaru.
3.4.2
DE2 USB Interface Table
Uˇzivatelsk´a aplikace s tabulkov´ ym editorem urˇcen´a k pouˇzit´ı s DE2 USB Interface (d´ale server). Umoˇzn ˇuje vytv´aˇret, otev´ırat a ukl´adat textov´e soubory obsahuj´ıc´ı 32 bitov´a ˇcisla v hexadecim´aln´ım tvaru. Do tabulky lze tak´e zad´avat z kl´avesnice 32 bitov´a ˇc´ısla v hexadecim´aln´ım tvaru. Pomoc´ı TCP klienta se lze pˇripojit k serveru a n´aslednˇe odes´ılat hodnoty z tabulky do DE2-115 pomoc´ı tlaˇc´ıtka Write a to i opakovanˇe. Stisknut´ım tlaˇc´ıtka Read je odesl´an poˇzadavek na server pro pˇreˇcten´ı hodnoty z DE2-115, hodnota vr´acen´a serverem je zaps´ana do vybran´eho ˇra´dku tabulky. ˇ ı a z´apis lze prov´adˇet i periodicky a periodu lze nastavit v rozmez´ı 1-1000 ms. Cten´
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
34
Pro periodick´e ˇcten´ı ˇci z´apis je nutno zaˇskrtnout CheckBox v prav´em doln´ım rohu programu. Kliknut´ım na poˇzadovanou akci je spuˇstˇen ˇcasovaˇc, kter´ y vˇzdy po uplynut´ı dan´e periody provede poˇzadovanou akci. Pouˇzit´ y ˇcasovaˇc garantuje minim´aln´ı dobu periody, tedy pˇri nastaven´ı periody 25 ms je tento u ´daj minim´aln´ı doba mezi proveden´ım dvou akc´ı, skuteˇcn´a doba mezi akcemi vˇsak m˚ uˇze b´ yt delˇs´ı.
3.4.3
DE2 USB Interface Mouse
Uˇzivatelsk´a aplikace pro sledov´an´ı polohy kurzoru myˇsi. Zm´aˇcknut´ım tlaˇc´ıtka Start se zaˇcne s periodou 40 Hz zjiˇst’ovat aktu´aln´ı poloha kurzoru myˇsi. Poloha je mˇeˇrena v r´amci textov´eho pole ve stˇredu programu. Nez´avisle na velikosti okna programu je pouˇzit pˇrepoˇcet na rozliˇsen´ı dan´eho monitoru a data jsou k´odov´ana podle kl´ıˇce, kter´ y je uveden v programu. Pokud se kurzor nach´az´ı mimo textov´e pole, je odesl´ana posledn´ı zn´am´a poloha kurzoru v r´amci textov´eho pole.
ˇ SEN ˇ ´I PROJEKTU KAPITOLA 3. RE
3.5
35
N´ avod na zprovoznˇ en´ı USB modulu a uˇ zivatelsk´ eho rozhran´ı
N´avod na zprovoznˇen´ı USB modulu a ovl´adac´ıch program˚ u na poˇc´ıtaˇci s operaˇcn´ım syst´emem Windows. N´avod se odkazuje na soubory na pˇriloˇzen´em CD. 1. Nejprve je potˇreba vytvoˇrit projekt v programu Quartus II a do jeho top-level entity vloˇzit USB modul a pˇripojit piny na pˇr´ısluˇsn´e porty. N´avod na pˇripojen´ı jednotliv´ ych port˚ u je v 3.3.7. Lze t´eˇz pouˇz´ıt jeden z uk´azkov´ ych projekt˚ u pˇripraven´ y na pˇriloˇzen´em CD. Hotov´ y projekt zkompilujte a nahrajte do desky. 2. Ve chv´ıli, kdy je program s USB modulem nahr´an v DE2-115, propojte USB kabelem port osobn´ıho poˇc´ıtaˇce s USB portem s oznaˇcen´ım DEVICE na DE2-115. Lze pouˇz´ıt kabel pomoc´ı kter´eho jste desku programovali, nebo i druh´ y nez´avisl´ y kabel. Operaˇcn´ı syst´em Windows by mˇel zaznamenat pˇripojen´ı nov´eho zaˇr´ızen´ı a zaˇc´ıt hledat ovladaˇc pro dan´e zaˇr´ızen´ı. 3. Ve sloˇzce libusb-win32-bin-1.2.6.0 ve sloˇzce bin zpust’te program inf-wizard, ze seznamu vyberte nezn´am´e zaˇr´ızen´ı s Vendor ID 0x09FB a Product ID 0x600A, vytvoˇrte ovladaˇc a nainstalujte ho na sv˚ uj poˇc´ıtaˇc. Po u ´spˇeˇsn´e instalaci lze dan´ y ovladaˇc nal´ezt ve Spr´avci zaˇr´ızen´ı pod libusb-win32 devices. 4. Nyn´ı spust’te program DE2Interface.exe. Po spuˇstˇen´ı programu se USB zaˇr´ızen´ı automaticky pˇripoj´ı a lze zaˇc´ıt komunikovat s DE2-115. Pokud pˇri spuˇstˇen´ı programu Windows nahl´as´ı chybˇej´ıc´ı knihovnu MSVCx110.dll, je nutno doinstalovat Visual C++ Redistributable Packages for Visual Studio 2013.
Kapitola 4 Testov´ an´ı V t´eto kapitole experiment´alnˇe ovˇeˇr´ım spr´avnou funkˇcnost modulu a zjist´ım maxim´aln´ı rychlosti pro z´apis a ˇcten´ı jak experiment´alnˇe, tak v´ ypoˇctem. Pro experiment´aln´ı mˇeˇren´ı jsem USB modul zapojil podle 3.3.7.3 a jako data se odes´ılaj´ı hodnoty ˇsestn´acti bitov´eho ˇc´ıtaˇce, kter´ y se inkrementuje po kaˇzd´em z´apisu dat do USB modulu. Data jsou pos´ıl´ana v r´amci dvou niˇzˇs´ıch byt˚ u, dva vyˇsˇs´ı byty jsou nulov´e. Testovac´ı sch´ema d´ale obsahuje ˇsestn´acti bitov´ y ˇc´ıtaˇc, kter´ y se inkrementuje pˇri kaˇzd´em pˇr´ıjet´ı potvrzovac´ıho pulsu DATA RECEIVED ACK a zobrazuje svou hodnotu na sedmisegmentov´e displeje (HEX7 - HEX4). Pˇrijat´a data (dva doln´ı byty) z portu DATA FROM HOST jsou zobrazov´ana na zbyl´ ych ˇctyˇrech sedmisegmentov´ ych displej´ıch (HEX3 - HEX0). Pro testov´an´ı jsem pouˇzil notebook ASUS N55S s operaˇcn´ım syst´emem Windows 7 Home Premium, procesorem Intel(R) Core(TM) i7 - 2670QM CPU @ 2.20 GHz a pamˇet´ı RAM 6GB. D´ale bylo vyuˇzito uˇzivatelsk´e rozhran´ı DE2 USB Interface vytvoˇren´e v r´amci t´eto pr´ace. Testovac´ı program se pˇres TCP socket pˇripoj´ı k rozhran´ı a spust´ı for cyklus, ˇ se mˇeˇr´ı od okamˇziku vstupu do for kter´ y provede 50 000 akc´ı (z´apis, nebo ˇcten´ı). Cas cyklu aˇz po jeho dokonˇcen´ı. 1. Pro mˇeˇren´ı rychlosti ˇcten´ı z DE2-115 je v kaˇzd´em pr˚ uchodu for cyklem odesl´an poˇzadavek na pˇreˇcten´ı hodnoty a ta je n´aslednˇe uloˇzena do pole integer˚ u. 2. Pro mˇeˇren´ı rychlosti z´apisu je v kaˇzd´em pr˚ uchodu for cyklem zaps´an do DE2-115 integer z pˇredem inicializovan´eho pole. 3. Pro ovˇeˇren´ı spr´avnosti pˇrenosu je v kaˇzd´em pr˚ uchodu for cyklem pˇreˇctena hodnota z DE2-115 a n´aslednˇe je tato hodnota zaps´ana zpˇet. Pˇri spr´avn´em fungov´an´ı 36
´ ´I KAPITOLA 4. TESTOVAN
37
je oˇcek´av´ano, ˇze poˇcet pr˚ uchod˚ u for cyklem bude roven poˇctu z´apis˚ u naˇc´ıtan´ ych ˇc´ıtaˇcem a posledn´ı pˇreˇcten´a hodnota se bude rovnat posledn´ı zapsan´e hodnotˇe. Pro kaˇzd´ y z test˚ u bylo provedeno deset nez´avisl´ ych mˇeˇren´ı. Pro kaˇzd´e mˇeˇren´ı bylo odesl´ano nebo pˇrijato 200 KB. V´ ysledn´e ˇcasy byly pˇrepoˇc´ıt´any na pˇrenosov´e rychlosti. Pˇrenosov´a rychlost je spojit´a n´ahodn´a veliˇcina u kter´e pˇredpokl´ad´am norm´aln´ı rozdˇelen´ı. Z namˇeˇren´ ych dat byla vypoˇctena stˇredn´ı hodnota a v´ ybˇerov´a smˇerodatn´a odchylka a z nich byl vytvoˇren graf hustoty pravdˇepodobnosti norm´aln´ıho rozdˇelen´ı. Pˇrenosov´a rychlost je pˇri kaˇzd´em spuˇstˇen´ı testovac´ıho programu r˚ uzn´a. Jej´ı hodnotu ovlivˇ nuje mnoho faktor˚ u, jako napˇr´ıklad zat´ıˇzen´ı CPU, obsazen´ı pamˇeti a v´ ypoˇcetn´ı ˇcas pˇridˇelen´ y operaˇcn´ım syst´emem. Toto mˇeˇren´ı slouˇz´ı pouze pro vytvoˇren´ı pˇredstavy, jak´e maxim´aln´ı rychlosti m˚ uˇzeme pˇri pouˇz´ıv´an´ı USB modulu oˇcek´avat.
4.1
Rychlost z´ apisu do USB modulu
Stˇredn´ı hodnota rychlosti z´apisu je 9,87 KB/s. V´ ybˇerov´a smˇerodatn´a odchylka je rovna 1,10 KB/s. V´ ysledn´ y graf hustoty pravdˇepodobnosti pˇrenosov´e rychlosti je na obr´azku 4.1. Graf hustoty pravdepodobnosti − rychlost zapisu 0.5 0.45 0.4 0.35 0.3 0.25 0.2 0.15 0.1 0.05 0 5
6
7
8
9
10
11
Prenosova rychlost [KB/s]
12
13
14
Obr´ azek 4.1: Graf hustoty pravdˇepodobnosti - rychlost z´apisu
15
´ ´I KAPITOLA 4. TESTOVAN
4.2
38
Rychlost ˇ cten´ı z USB modulu
Stˇredn´ı hodnota rychlosti z´apisu je 9,93 KB/s. V´ ybˇerov´a smˇerodatn´a odchylka je rovna 0,74 KB/s. V´ ysledn´ y graf hustoty pravdˇepodobnosti pˇrenosov´e rychlosti je na obr´azku 4.2.
Graf hustoty pravdepodobnosti − rychlost cteni 0.7
0.6
0.5
0.4
0.3
0.2
0.1
0 5
6
7
8
9
10
11
Prenosova rychlost [KB/s]
12
13
14
15
Obr´ azek 4.2: Graf hustoty pravdˇepodobnosti - rychlost ˇcten´ı
4.3
V´ ypoˇ cet maxim´ aln´ı rychlosti
Maxim´aln´ı rychlost pro ˇcten´ı a z´apis lze teoreticky vypoˇc´ıtat, protoˇze zn´ame dobu, po kterou ovladaˇc setrv´av´a v dan´em stavu pˇr´ısluˇsn´eho stavov´eho automatu IRQ. Seˇctou-li se ˇcasy pro jednotliv´e stavy stavov´eho automatu, v´ ysledkem je ˇcas, kter´ y ovladaˇc potˇrebuje, aby provedl kompletn´ı z´apis nebo ˇcten´ı na koncov´em bodu. Pro ˇcten´ı z pamˇeti koncov´eho bodu EP01 je celkov´ y ˇcas I/O operac´ı roven 2200 ns. Pro tento ˇcas by maxim´aln´ı frekvence pˇrenosu byla pˇribliˇznˇe 0,45 MHz, to odpov´ıd´a pˇrenosov´e rychlosti 13,7 Mbit/s. Maxim´aln´ı rychlost pro USB 2.0 ve full-speed reˇzimu je ovˇsem pouze 12 Mbit/s.
´ ´I KAPITOLA 4. TESTOVAN
39
Pro z´apis do pamˇeti koncov´eho bodu EP02 je celkov´ y ˇcas I/O operac´ı roven 1560 ns. Teoreticka maxim´aln´ı frekvence je tedy jeˇstˇe vyˇsˇs´ı neˇz v pˇredchoz´ım pˇr´ıpadˇe. Stejnˇe jako v pˇr´ıpadˇe ˇcten´ı teoretick´a rychlost z´apisu pˇresahuje moˇznosti pouˇzit´eho USB ˇcipu. USB modul je tedy teoreticky schopen ˇcten´ı a z´apisu maxim´aln´ı moˇznou rychlost´ı 12 Mbit/s.
4.4
Spolehlivost pˇ renosu dat
Testov´an´ı na spolehlivost pˇrenosu bylo provedeno v des´ıtce nez´avisl´ ych test˚ u a pˇri ˇza´dn´em z test˚ u nebyla zaznamen´ana ztr´ata dat, neproveden´ı akce, nebo pˇrijet´ı chybn´ ych dat. Z´aroveˇ n byla sledov´ana spr´avnost pˇrenesen´ ych dat i pˇri testech rychlosti z´apisu a ˇcten´ı a ani pˇri nich nebyl pozorov´an chybn´ y pˇrenos.
Kapitola 5 Z´ avˇ er V r´amci bakal´aˇrsk´e pr´ace byl vytvoˇren USB modul napsan´ y v jazyce VHDL, kter´ y umoˇzn ˇuje komunikovat s osobn´ım poˇc´ıtaˇcem bˇeˇz´ıc´ım pod operaˇcn´ım syst´emem Windows. Na jeden pˇrenos lze odeslat ˇctyˇri byty dat v blokov´em pˇrenosu. Je implementov´ano rozhran´ı pro ˇr´ızen´ı komunikace mezi modulem a zbytkem projektu. Modul lze do projektu zapojit ve tˇrech ˇr´ıd´ıc´ıch m´odech podle pl´anovan´eho pouˇzit´ı. Pˇri zapojen´ı s ˇr´ıd´ıc´ım obvodem lze kontrolovat pˇrenos dat a zajistit jejich spolehliv´e doruˇcen´ı pˇri pr˚ umˇern´e rychlosti pˇrenosu okolo 10 kB/s. Tato rychlost je pˇr´ımo z´avisl´a na frekvenci, s jakou hostitel vys´ıl´a poˇzadavky. Pro jednoduch´e ovl´ad´an´ı pˇrenosu v osobn´ım poˇc´ıtaˇci byl naps´an program s grafick´ ym uˇzivatelsk´ ym prostˇred´ım, kter´ y je pˇripojen k DE2-115 a z´aroveˇ n funguje jako TCP server v lok´aln´ı s´ıti. D´ıky tomu si kaˇzd´ y uˇzivatel m˚ uˇze napsat vlastn´ı program a s pomoc´ı jednoduch´e instrukˇcn´ı sady komunikovat se serverem, respektive s DE2-115. Pro z´akladn´ı u ´lohy a pr´aci byly vytvoˇreny dva uk´azkov´e uˇzivatelsk´e programy. Jedn´ım z nich je program umoˇzn ˇuj´ıc´ı odes´ılat periodicky u ´daj o poloze kurzoru myˇsi. Druh´ y je jednoduch´ y tabulkov´ y editor, kter´ y dovoluje pr´aci s daty v tabulce, pr´aci se soubory, odes´ıl´an´ı ˇci ˇcten´ı dat. Moˇzn´e dalˇs´ı rozˇs´ıˇren´ı t´eto pr´ace vid´ım v implementov´an´ı dalˇs´ıch koncov´ ych bod˚ u a jin´ ych typ˚ u USB pˇrenos˚ u. Zaj´ımav´ y by byl i projekt USB modulu v roli hostitele a propojen´ı dvou v´ yvojov´ ych desek pˇres USB.
40
Literatura [1] Altera: 2015.
DE2-115 [cit.
Development
2015-5-13].
and
Dostupn´e
Educational z:
Board.
[online],
http://www.terasic.com.tw/cgi-
bin/page/archive.pl?Language=English&No=502 [2] Altera:
Procesor
NIOS.
[online],
2015.
[cit.
2015-5-13].
Dostupn´e
z:
Dostupn´e
z:
http://www.altera.com/devices/processor/nios2/ni2-index.html [3] ISP1362
VHDL
interface
for
DE2
v1.0.
[online],
2012.
https://github.com/mzakharo/usb-de2-fpga [4] Philips:
ISP1362 datasheet.
http://www.cs.columbia.edu/
[online],
2004.
[cit.
2015-5-13].
Dostupn´e z:
sedwards/classes/2008/4840/Philips-ISP1362-USB-
controller.pdf [5] Altera:
DE2-115
stupn´e
z:
User
manual.
[online],
2010.
[cit.
2015-5-13].
Do-
ftp://ftp.altera.com/up/pub/Altera Material/12.1/Boards/DE2-
115/DE2 115 User Manual.pdf [6] Craig Peacock: USB in nutshell. [online], 2002. [cit. 2015-5-13]. Dostupn´e z:http://www.ru.lv/ peter/macibas/datoru arhitektura/usb.pdf [7] USB
-
ofici´aln´ı
webov´e
str´anky.
[online],
2015.
Dostupn´e
z:http://www.usb.org/developers/docs/ [8] USB Blog: USB enumerace ve Windows. [online], 2009. [cit. 2015-5-13]. Dostupn´e z:http://blogs.msdn.com/b/usbcoreblog/archive/2009/10/31/how-does-usbstack-enumerate-a-device.aspx [9] Libusb-win32.
[online],
2014.
Dostupn´e
win32/wiki/Home/
41
z:http://sourceforge.net/p/libusb-
LITERATURA [10] GNU
42 GPL.
[online],
2015.
[cit.
2015-5-13].
Dostupn´e
z:https://www.gnu.org/copyleft/gpl.html [11] Jiri Gaisler: A structured VHDL design method. [online], 2015. [cit. 2015-5-13]. Dostupn´e z:http://www.gaisler.com/doc/vhdl2proc.pdf
Pˇ r´ıloha A Seznam pouˇ zit´ ych zkratek USB - Universal Serial Bus ISP1362 - Philips ISP1362 single-chip Universal Serial Bus (USB) On-The-Go (OTG) controller DE2-115 - Altera DE2-115 Development and Education Board EP01 - koncov´ y bod 01 EP02 - koncov´ y bod 02 OUT koncov´ y bod - smˇer toku dat je od hostitele k zaˇr´ızen´ı IN koncov´ y bod - smˇer toku dat je od zaˇr´ızen´ı k hostiteli VHDL - Very High Speed Integrated Circuit Hardware Description Language GNU GPL - GNU General Public License FPGA - Field Programmable Gate Array VID - Vendor ID PID - Product ID OTG - On The Go HC - Host Controller DC - Device Controller DMA - Direct Memory Access ACK - Acknowledge TCP - Transmission Control Protocol I/O - Input/Output POR - Power On Reset
43
Pˇ r´ıloha B Obsah pˇ riloˇ zen´ eho CD / GUI Executables ....................................... Uˇzivatelsk´e programy GUI Source Codes......................Zdrojov´e k´ody uˇzivatelsk´ ych program˚ u DE2 USB Interface DE2 USB Interface Mouse DE2 USB Interface Table libusb-win32-bin-1.2.6.0....................................USB knihovna Text Bakal´ aˇ rsk´ a pr´ ace Jiˇ r´ ı Kerner 2015.pdf USB Module Method 1 .......... Quartus II projekt - zapojen´ı se zpˇetnou vazbou USB Module Method 2 ...... Quartus II projekt - zapojen´ı s periodick´ ym z´apisem USB Module Method 3 .......... Quartus II projekt - zapojen´ı s ˇr´ıd´ıc´ım obvodem VHDL Module Library.....Knihovna modulu pro vloˇzen´ı do Quartus II projektu VHDL Module Source Codes.......................Zdrojov´e k´ody USB modulu
44
Pˇ r´ıloha C Grafick´ e uˇ zivatelsk´ e prostˇ red´ı C.1
DE2 USB Interface
Obr´ azek C.1: DE2 USB Interface
45
ˇ ´ILOHA C. GRAFICKE ´ UZIVATELSK ˇ ´ PROSTRED ˇ ´I PR E
C.2
DE2 USB Interface Table
Obr´ azek C.2: DE2 USB Interface Table
46
ˇ ´ILOHA C. GRAFICKE ´ UZIVATELSK ˇ ´ PROSTRED ˇ ´I PR E
C.3
DE2 USB Interface Mouse
Obr´ azek C.3: DE2 USB Interface Mouse
47