1 Technická univerzita v Košiciach Fakulta elektrotechniky a inforatiky Katedra elektroniky a ultiediálnych telekounikácií ECC knižnica pre signálový procesor ADSP Blackfin Vedúci diploovej práce: doc. Ing. Miloš Drutarovský, CSc. Diploant: Milan Kalinka Konzultant diploovej práce: Mgr.Daniela Kravecová Košice 004
2 Čestné prehlásenie Prehlasuje, že so diploovú prácu vypracoval saostatne s využití uvedenej odbornej literatúry. V Košiciach dňa vlastnoručný podpis
3 Na toto ieste bude vložené zadanie diploovej práce
4 Poďakovanie Ďakuje vedúceu diploovej práce doc.ing. Milošovi Drutarovskéu.Csc a konzultantke Mgr. Daniele Kravecovej za odbornú pooc a usernenie, ktoré i poohli pri vypracovaní diploovej práce. Vyjadruje vďaku a uznanie svoji rodičo za podporu počas celého štúdia na Fakulte elektrotechniky a inforatiky Technickej univerzity v Košiciach.
5 Názov práce : ECC knižnica pre signálový procesor ADSP 1535 Balckfin Katedra : Katedra elektroniky a ultiediálnych telekounikácií, TU FEI Košice Autor : Milan Kalinka Vedúci DP : doc. Ing. Miloš Drutarovský, CSc. Konzultant DP : Mgr.Daniela Kravecová Dátu : Kľúčové slová : ADSP-1535 Blackfin, ECC, ECDSA, L1, L, EZ-KIT lite, Anotácia : Táto diploová práca sa zaoberá vytvorení kryptografickej knižnice na báze eliptických kriviek, pre 16-bitový signálový procesor ADSP-1535 Blackfin od firy Analog Devices. Pre dosiahnutie efektívnej ipleentácie bola knižnica optializovaná v jazyku asebler a prispôsobená pre prácu v prostredí jazyka C. Funkčnosť optializovanej knižnice bola overená poocou kryptografického algoritu digitálneho podpisu s využití eliptických kriviek (ECDSA).
6 Thesis title : ECC library for signal processor ADSP 1535-Blackfin Departent : Departent of Electronics and Multiedia Counications, TU FEI Košice Author : Milan Kalinka Supervisor : doc. Ing. Miloš Drutarovský, CSc. Tutor : Mgr.Daniela Kravecová Date : Keywords : ADSP-1535 Blackfin, ECC, ECDSA, L1, L, EZ-KIT lite, Annotation : This thesis deals with creation of cryptographic library based on elliptic curve, for 16-bit signal processor ADSP Blackfin by Analog Devices. To achieve effective ipleentation, library was optiized in assebler language and adapted to work in C language environent. Functionality of this optiized library was verified using elliptic curve digital signature algorith (ECDSA).
7 Zozna použitých skratiek CBLBs CCLK CLKIN CSYNC DMA DSP DSS ECC ECDLP ECDSA EEA FIPS GPI L1 L LDF LP LSB LSW MMR MMU MSB MSW NIST NMI SCLK SRAM SIMD SSYNC PLL RISC ROM RTC UART Cacheability Protection Lookside Buffers Core Clock, - frekvencia jadra Input Clock, - vstupný hodinový signál Core Synchronization, - synchronizácie jadra Direct Meory Access, - priay prístup do paäte Digital Signal Processor, - digitálny signálový procesor Digital Signature Standards, - štandard pre digitálne podpisy Elliptic Curve Cryptography, - kryptografia s využití eliptických kriviek Elliptic Curve Discrete Logarith Proble, - problé diskrétneho algoritu Elliptic Curve Digital Signature Algorith, - algoritus digitálneho podpisu s využití eliptických kriviek Extended Euclidean Algorith, - rozšírený Euklidov algoritus Federal Inforation Processing Standarts Publication General-Purpose Interrupt, prerušenia pre všeobecné použitie Level 1, - označenie typu paäte Level, - označenie typu paäte Linker Description File, - linkovanie popisujúci súbor Linear Profiling, - lineárne profilovanie, nástroj vo VDSP++ Least Significant Bit, - najenej význaový bit Least Significant Word, - najenej význaové slovo Meory Mapped Register Meory Manageent Unit, - jednotka riadenia paäte Most Significant Bit, - najviac význaový bit Most Significant Word, - najviac význaové slovo National Institute of Standarts and Technology Non-Maskable Interrupt, - neaskovateľné prerušenie Syste Clock, - frekvencia systéu Static Rando Access Meories Single-Instruction Multiple-Data Syste Synchronization, - synchronizácia systéu Phase Locked Loop, - fázový záves Reduced Instruction Set, - redukovaná inštrukčná sada Read Only Meory Real Tie Clock, - zdroj reálneho času Universal Asynchronous Serial Receiver/Transitter
8 Obsah 1. Úvod Procesor ADSP-1535 Blackfin ECC Úvod do kryptografie eliptických kriviek Systé s verejný kľúčo Krivky NIST nad binárnyi poliai Teória ECC Konečné polia Konečné pole F Eliptické krivky nad F Problé diskrétneho logaritu na eliptickej krivke (ECDLP) Základné paraetre ECC Algoritus digitálneho podpisu s využití eliptických kriviek (ECDSA) Generácia a overenie platnosti kľúča Algoritus ECDSA Vybrané algority pre konštrukciu ECDSA Násobenie bodu kp Sčítanie dvoch rôznych bodov, Q+P Sčítanie dvoch rovnakých bodov P=P+P Násobenie v F Uocnenie v F Inverzia v F Modulárna redukcia v F Príprava správy Výpočet odtlačku správy SHA Paäťový systé Architektúra paäte Paäť L Inštrukčná paäť L Dátová paäť L Poocná (scratchpad) dátová paäť Kešovanie a ochrana paäte Paäť L Paäť L na čipe Paäť L io čip, externá paäť Viac taktové inštrukcie a oneskorenie Viac taktové inštrukcie Inštrukčné oneskorenie Pozastavenie, dátovej paäte L Synchronizačné inštrukcie Linkovanie popisujúci súbor (LinLinker Description File) Periférie Zdroj reálneho času (Real-Tie Clock) Dohliadací obvod (Watchdog Tier) UART... 8
9 6. Ipleentácia ECDSA na procesor ADSP-1535 Blackfin Kobinácia jazyka aseblér a jazyka C/C Volanie aseblérovských podprograov z prograu C/C Volanie C/C++ funkcií z aseblérovského prograu Používanie ziešaných C/C++ a aseblérovských poenovaní Dynaické riadenie výkonu procesora Módy procesora Knižničná funkcia na zenu napätia jadra, CCLK a SCLK Počítadlo taktov (Cycle Counter) Sledovanie počtu taktov vykonaných v siulátore Sledovanie počtu taktov na EZ-KIT lite Štartovací (startup) kód Základný štartovací kód (basiccrt.s) crtcfps535.s Štartovací kód v ojej ipleentácií Využitie portu UART Prijatie a spracovanie dát z portu UART Forát dát Použitie poocnej (scratchpad) paäte Navrhnutá ipleentácia, rozbor kritických častí ipleentovaných algoritov ECDSA Násobenie bodu na krivke kp Sčítanie dvoch rôznych bodov Sčítanie dvoch rovnakých bodov Násobenie v F Uocnenie v F Inverzia v F Modulárna redukcia v F SHA Porovnanie ipleentácie Záver Zozna použitej literatúry Zozna príloh Zozna obrázkov a tabuliek... 61
10 FEI TU v Košiciach Diploová práca List č Úvod Otázka súkroia je stará ako človek sá a preto sa neožno diviť, že sa preniesla aj do elektronickej fory. Pre tieto účely bolo vytvorených nožstvo algoritov pre šifrovanie dát. Nehovorí teraz o štátnej bezpečnosti, ale o súkroí jednotlivcov. Každý človek chce ať istotu, že keď pošle e-ail bude ho ôcť čítať len adresát a na druhej strane, bude požiadavka ať istotu, že uvedený odosielateľ tento e-ail naozaj odoslal (autenticita pravosť elektronických dokuentov) a počas prenosu nedošlo k jeho zene. Aby sa tieto operácie vykonali v čo najkratšo čase, uvedené algority usia spĺňať aj požiadavku ich rýchleho spracovania. V tejto diploovej práci je autenticita zabezpečená poocou vybraného algoritu digitálneho podpisu s využití eliptických kriviek (ECDSA) a pre spracovanie je použitý procesor ADSP-1535 Blackfin. Pre ipleentáciu boli navrhnuté knižničné funkcie pre prácu so sériový porto, funkcie pre ECDSA a funkcie pre prácu s vývojovou doskou ADSP-BF535 EZ-KIT lite. Progray boli písané vo vývojovo prostredí VisualDSP++ verzia 3.5. V úvodnej časti diploovej práce je opísaný procesor ADSP-1535 Blackfin, ktorý je porovnávaný s posledný vydaný procesoro skupiny Blackfin ADSP Blackfin. Probleatika eliptických kriviek spolu vybranýi algoritai pre ipleentáciu ECDSA sa nachádza v druhej kapitole. V tejto kapitole sú riešené aj otázky výberu vhodných algoritov z hľadiska výpočtovej náročnosti na procesore a spolu s porovnaniai s inýi enej efektívnyi algoritai. Nesledujúca časť je venovaná paäťovéu systéu procesora ADSP Procesor ADSP-1535 Blackfin uožňuje kešovanie (cache) dát aj inštrukcií, čo do značnej iery ovplyvní rýchlosť vykonávnia prograu. V ďalšej kapitole je navrhnutá ipleentácia, rozbor časovo kritických časti prograu a poznatky získané počas ipleentácie. Záver tvoria dosiahnuté výsledky a porovnania s existujúcii dostupnýi iplenetáciai. Výsledky diploovej práce budú prezentované v ráci www stránky DSP laboratória.
11 FEI TU v Košiciach Diploová práca List č.. Procesor ADSP-1535 Blackfin Procesor ADSP-1535 patrí do skupiny digitálnych signálových procesorov (DSP) Blackfin. Architektúra jadra procesora je tvorená kobináciou dvojnásobnej MAC jednotky, ortogonálnou inštrukčnou sadou typu RISC a režio kedy obidve vykonávacie jednotky vykonávajú rovnakú inštrukciu, ale pracujú s rozdielnyi dátai (SIMD). DSP Blackfin poskytuje funkciu dynaickej správy výkonu tj. schopnosť eniť napätie a frekvenciu a zabezpečiť tak zníženie spotreby energie. Procesor Hodiny (MHz) MMACS Paäť ( kb) Napajanie ( V ) ADSP-BF561 x ADSP-BF535P ADSP-BF ADSP-BF ADSP-BF Tabuľka.1: Porovnanie procesorov skupiny Blackfin. Posledný procesoro rodiny Blackfin DSP spoločnosti Analog Devices je procesor s označení ADSP-1561 Balckfin. Je zložený z dvoch 750MHz procesorov, poskytujúcich dvojnásobný výkon spracovania signálov oproti ADSP-BF533. Kľúčové paraetre ADSP-1535 ADSP-1561 Frekvencia jadra 350 MHz x750 MHz Počet 16 bitových MAC jednotiek 4 Počet 40 bitových ALU jednotiek 4 Počet 40 bitových posúvacích jednotiek 1 Počet 8 bitových videu ALU 4 8 Tabuľka.: Porovnanie kľúčových paraetrov ADSP-1535 a ADSP Jadro ADSP-1535 obsahuje dve MAC jednotky, dve 40-bitové ariteticko-logické jednotky (ALU), štyri 8-bitové video, ariteticko-logické jednotky a jedenu posúvaciu jednotku. Výpočtové jednotky spracovávajú 8-, 16-, alebo 3-bitové dáta zo súboru dátových registrov. Jadro procesora ADSP-1535 obsahuje súbor ôsich 3-bitových dátových registrov (R0-7) a dva akuulátory (A0-1). Dva generátory dátových adries (DAG) poskytujú adresy pre výber operandov z paäte. Generátory dátových adries pracujú so súboro 3-bitových indexových registrov (I0-3), odifikačných registrov (M0-3), registrov dĺžky (L0-3) a registrov základnej adresy bufra (B0-3). Na adresovanie dát v paäti slúži aj súbor ôsich 3-bitových P (pointer) registrov[1].
12 FEI TU v Košiciach Diploová práca List č. 3 Paäť jadra ADSP-1535 ADSP-1561 Inštrukčná L1 SRAM/keš 16kB x3kb Dátová L1 SRAM/keš 3kB x64kb poocná L1 SRAM 4kB x4kb L SRAM 56kB x18kb Tabuľka.3: Porovnanie veľkosti paäti jadra ADSP-1535 a ADSP Procesor ADSP-1535 podporuje odifikovanú Harvardskú architektúru v kobinácií s hierarchickou štruktúrou paäte. Prístup do paäte prvej úrovne (Level 1- L1), trvá jeden hodinový takt, tvorí ju 5kB SRAM a zahŕňa inštrukčnú paäť, dve dátové 16kB paäte a rýchlu poocnú paäť (scratchpad). Paäť prvej úrovne, okre poocnej paäte, ôže byť konfigurovaná ako RAM, alebo ako keš (cache) paäť. Prístup do paäte druhej úrovne (Level L), trvá viac ako jeden hodinový takt, tvorí ju 56 kb a ôže obsahovať inštrukcie alebo dáta. Obrázok.1: Blokový diagra ADSP-1535.
13 FEI TU v Košiciach Diploová práca List č. 4 Procesor ADSP-BF535 obsahuje nasledujúce periférie: univerzálny asynchrónny prijíač vysielač (UART) rozhrania sériových periférií (SPI) dva sériové porty (SPORT) univerzálne časovače hodiny reálneho času (RTC) univerzálne vstupy/výstupy dohliadací obvod (watchdor) časovač univerzálnu sériovú zbernicu (USB) PCI zbernicu Procesor ADSP-1535 ôže pracovať v troch ódoch: užívateľký ód (User) dohliadací ód (Supervisor) eulačný ód (Eulation.) Užívateľský ód neposkytuje prístup ku všetký systéový prostriedko. V užívateľsko óde neôžu byť obsluhované prerušenia a nie je ožné eniť systéové registre. Tý sa vytvára chránené prostredie pre užívateľský kód. Ak procesor pracuje v dohliadaco, alebo v eulačno óde, pre prístup k systéový prostriedko neexistuje žiadne obedzenie.
14 FEI TU v Košiciach Diploová práca List č ECC 3.1 Úvod do kryptografie eliptických kriviek Kryptografia na báze eliptických kriviek (Elliptic Curve Cryptography ECC) bola navrhnutá nezávisle Viktoro Millero a Nealo Koblitzo v roku Odvtedy bolo uskutočnených veľké nožstvo výskuov zaeraných na bezpečnosť a efektívnu ipleentáciu. V posledných rokoch sa ECC stala viac koerčne uznávanou, vďaka jej zaradeniu edzi štandardy organizáciai ako ANSI, IEEE, ISO a NIST. Hlavný dôvodo prečo je ECC atraktívna, je fakt že neexistuje žiadny znáy sub-exponenciálny algoritus, ktorý by vyriešil problé diskrétneho algoritu (Elliptic curve discrete logarith proble ECDLP) na vhodne vybratej krivke. To znaená, že ôžu byť použité oveľa enšie dĺžky paraetrov ECC (napr. enšie dĺžky kľúčov zrýchlia výpočet, vyžadujú enší príkon, enšia spotreba paäte) ako v systéoch na báze RSA a DSA, pričo je dodržaný porovnateľný stupeň bezpečnosti. Pre tieto výhody je ipleentácia ECC vhodná aj v prostrediach s obedzenýi zdroji ako napr. PDA, obilné telefóny, čipové (sart) karty. Uvádza porovnanie dĺžky kľúča (v bitoch) rôznych kryptografických systéov s porovnateľný stupňo bezpečnosti, proti znáy útoko, [4] Tab Dĺžka kľúča syetrickej šifry Použitý algoritus Dĺžka kľúča v ECC pre zachovanie rovnakej bezpečnosti Dĺžka kľúča v DSA / RSA pre zachovanie rovnakej bezpečnosti 80 SKIPJACK Triple-DES bit AES bit AES bit AES Tabuľka 3.1: Porovnanie dĺžok kľúčov pre ECC, DSA a RSA. Pred saotnou ipleentáciou ECC systéu by ali byť vykonané rozhodnutia, ktoré sa týkajú výberu základných paraetrov eliptickej krivky (výber konečného poľa, reprezentácia poľa, eliptická krivka), výber vhodných algoritov. Výber ôže byť ovplyvnený úvahou o bezpečnosti, aplikačnou platforou (software, alebo hardware), zvážení výpočtových prostriedkov (napr. rýchlosť spracovania, ROM, RAM, počet hradiel, spotreba energie) a zohľadnení kounikačného prostredia. Finálne riešenie je koproiso nožstvá požiadaviek a obedzení. 3. Systé s verejný kľúčo Whitfield Diffie a Martin Hellan predstavili v roku 1975 koncept systéu s verejný kľúčo. Existujú dôkazy, že tento systé bol pre vojenské účely vyvinutý o niekoľko rokov skôr. Systéy s verejný kľúčo [1] sú asyetrické a používajú dva kľúče: verejný kľúč (public key), ktorý slúži na zašifrovanie a korešponduje so súkroný kľúčo
15 FEI TU v Košiciach Diploová práca List č. 6 (secret key), slúžiaci na dešifrovanie. Verejný kľúč je zverejnený, zatiaľ čo súkroný kľúč nesie byť zverejnený. Ak niekto získa súkroný kľúč, je schopný dešifrovať všetky dáta, ktoré ali zostať utajené. Na základe súčastných znalostí a výpočtového výkonu je taker neožné získať súkroný kľúč z verejného kľúča. Hlavnou výhodou systéu s verejný kľúčo je, že povoľuje bezpečnú výenu dát bez nutnosti ať k dispozícii zabezpečený kanál. Kľúč je užívateľovi priradený na základe požiadaviek na bezpečnosť, výpočtové prostredie atď. Všetky kounikácie vyžadujú len verejný kľúč, súkroný kľúč nie je nutné nikdy vyieňať, alebo zdieľať. Ukážkou takéhoto systéu je ElGaal, RSA, DSA. EC sa používajú na odifikované verzie algoritov ECDSA. 3.3 Krivky NIST nad binárnyi poliai Organizácia NIST v februári 000 upravila FIPS tak aby zahrňovala algoritus digitálneho podpisu ECDSA ako je to špecifikované v ANSI X9.6 s ďalší odporúčaní pre výber základného konečného poľa a eliptických kriviek, tento štandard je nazvaný FIPS 186- [10]. FIPS-186- obsahuje 10 odporúčaných konečných polí: 5 prvočíselných polí a binárne polia F 163, F 33, F 83, F 409, F 576. Ďalej sa bude zaoberať už len uvedenýi binárniy poliai F, pretože sú cieľo ojej diploovej práce. Paraetre doporučených kriviek uvedených stupňov je ožné nájsť v prílohe. Krivky NIST sú charakterizované takýi paraetrai ECC, aby odolávali všetký znáy druho útokov. 3.4 Teória ECC Konečné polia Grupa je alegbraický systé pozostávajúci z nožiny G spolu s binárnou operáciou o definovanou na G splňajúcou nasledujúce axióy [4]: uzavretosť: pre všetky x,y G platí x o y G ; asociatívnosť: pre všetky x,y,z G je ( x o y) o z = x o ( y o z) ; neutrálny prvok: v G existuje prvok e taký, že pre každé x G je x o e = e o x = x ; inverzia: ku každéu x G existuje y G také, že x o y = y o x = e. ak naviac binárna operácia o vyhovuje abelovskej podienke: pre všetky x,y G je x o y = y o x, systé (G, o ) nazývae abelovská grupa. Konečné pole je algebraický systé pozostávajúci z konečnej nožiny F spolu s dvoa binárnyi operáciai + a, definovanýi na F, splňujúcii nasledujúce axióy: F je abelovská grupa vzhľado na + ; F \ {0} (nožina F io prvku 0) je abelovská grupa vzhľado na ; distributívnosť: pre všetky x,y,z F platí: ( y z) = ( x y) + ( x z) x
16 FEI TU v Košiciach Diploová práca List č. 7 ( x y) z = ( x z) + ( y z). Rádo konečného poľa nazývae počet prvkov poľa a počet prvkov poľa je vždy ocninou prvočísla F p k Konečné pole F Ak prvočíslo je, konečné pole F sa nazýva binárne konečné pole. Môžee ho brať ako vektorový priestor rozeru nad F. To znaená, že existuje nožina prvkov { α 0, α 1,..., α 1 } v F také že, každý prvok a F ôžee jednoznačne zapísať v tvare [4]: 1 a i i= 0 a = α, kde a { 0,1}. i Teda nožina { α 0, α 1,..., α 1 } generuje všetky prvky z F a nazýva sa báza poľa F nad F. Takto ôže byť každé a reprezentované ako binárny vektor ( a,a,..., ). Polynoiálna báza[4] [9]. Nech i 1 fi i= 0 i f(x) = x + x (kde f i { 0, 1} 0 1 a 1, pre i=0,...,-1) je ireducibilný polynó stupňa nad F. Polynó f(x) sa nazýva redukčný polynó. Pre každý takýto redukčný polynó existuje bázová reprezentácia. V takejto reprezentácii, každý prvok F prislúcha binárneu polynóu stupňa enšieho ako. Takže pre každé a F, existuje čísiel a { 0,1 } i 1 1x + K a + a x + a 1 1 takých že: Prvok poľa a F je obyčajne vyjadrený poocou bitového reťazca ( a 1 K a1a 0 ) o dĺžke. Sčítanie a násobenie je v polynoiálnej báze vyjadrené nasledovne: sčítanie: a + b = (c 1 K c1c 0 ), kde ci = (ai + bi )od násobenie: b = (c Kc c ), kde polynó 1 c(x) i = c i x je zvyšok po delení a polynóu i i a ix bix polynóo f(x). (všetky koeficienty polynóu sú i= 0 i= 0 redukované odulo ) V softvérových ipleentáciách rozdeľujee bitovú reprezentáciu prvku poľa = (a 1 K a1a ) do blokov rovnakej dĺžky. Nech w je dĺžka slova používaná v počítači (typické hodnoty sú w=8,16,3,64) a s je počet slov potrebných pre rozdelenie a na slová. Poto s = a ôžee a zapísať ako sw-bitové číslo zložené z s slov, kde w každé á dĺžku w. Môžee zapísať: = (A KA A ), kde každé A i á dĺžku w a a 0 a s Ai = (aiw+ w 1 K aiw+ 1aiw ) F iw iw+ j V polynoiálno vyjadrení a (x) = A (x)x = a x. s 1 i= 0 i 0 s 1 w 1 i= 0 j= 0 w. i= 0 iw+ j
17 FEI TU v Košiciach Diploová práca List č Eliptické krivky nad F Eliptická krivka ( F ) E nad F,definovaná paraetrai a,b F, b 0, pozostáva z nožiny bodov P = ( x,y) kde x,y F pre ktoré platí: y + xy = x 3 + ax spolu so špeciálny bodo O nazývaný bodo v nekonečne. Použitie v eliptickej krivky E ( F ) v kryptografii uožňuje skutočnosť, že (E(F ),+) je grupa. Operácia sčítania je definovaná následovne: 1. P + O = O + P = P pre všetky P E(F ).. Nech P = ( x,y) E(F ), poto ( x,y) + ( x, y) = O. Bod ( x, y) E(F ) je označený -P a nazýva sa opačný bodo k P. 3. Nech P = ( x,y ) E(F ) a Q = ( x,y ) E(F ), kde P ± Q. Poto P Q = (x,y ), kde: = λ + λ + x1 + x a, y 3 = λ (x1 + x3 ) + x3 + y1 a x b y + y 1 λ =. x + x1 4. Nech P = ( x,y ) E(F ). Poto + P = P = (x,y ), kde: x 1 1 = λ + λ a, y 3 = λ (x1 + x 3 ) + x3 + y1 a 3 + P 3 3 x λ = x 1 + y 1 1 Operácia delenia napr. x 1, je v vykonaná vypočítaní inverzného prvku y 1 1 odn y1 kde n je rád bodu. Tento inverzný prvok je násobený prvko x 1. Naiesto operácie delenia sa tak vykonala operácia výpočtu inverzného prvku a násobenia. E F nutných pre vykonanie V Tab. 3. [4] je ožné nájsť počty operácií v ( ) operácie sčítania dvoch rovnakých, alebo rôznych bodov na krivke. Inforácie v tejto tabuľke sa vzťahujú na body, ktorých súradnice sú zadané v afínno (affine) súradnicovo systée. Operácia # násobení # uocnení # inverzií # sčítaní P P+Q Tabuľka 3.: Počet operácií pre sčítanie dvoch bodov v ( F ) E pre afínne súradnice. Najnáročnejšou operáciou v F je delenie, teda výpočet inverzného prvku. Preto je snahou odstrániť túto operáciu, alebo aspoň obedziť je výskyt na iniu, aj na úkor toho, že sa do určitej iery zvýši počet iných operácii. Moja diploová práca využíva algority pracujúce s bodi zadanýi v projektývnych (projective) súradniciach. Využití projektívnych súradníc sa zenia počty násobení, uocnení a inverzií nutných pre výpočet súčtu dvoch bodov. V Tab. 3.3 [4] sú počty operácií pre projektívne súradnice. Výhodou projektívnych súradníc je vynechanie operácie inverzie.,
18 FEI TU v Košiciach Diploová práca List č. 9 Operácia Projektívne Z=1 Z 1 súradnice # násobení # uocnení # násobení # uocnení P X/Z, Y/Z P+Q X/Z, Y/Z Tabuľka 3.3: Sčítanie rovnakých a rôznych bodov na krivke Problé diskrétneho logaritu na eliptickej krivke (ECDLP) Bezpečnosť ECC je založená na problée diskrétno logaritu a eliptickej E F q, P E( F q ) Q, problé spočíva v určení takého celého čísla k, 0 k n 1, pre krivke. Tento problé je definovaný následovne: daná eliptická krivka ( ) rádu n a bod E( F q ) ktoré platí Q=kP, pod podienkou, že také číslo existuje. Existuje niekoľko ožných útokov na ECDLP (Elliptic Curve Discrete Logarith Proble), niektoré sú rýchlejšie ako iné a niektoré vyžadujú špeciálne typy kriviek [], [3]. Jeden z najznáejších útokov vyžadujúcich π n operácií eliptickej grupy je nazývaný Pollard-ρ. Čas výpočtu ECDLP pre jednotlivé krivky je v Tab. 3.4 []. Veľkosť poľa v bitoch Veľkosť n v bitoch π n MIPS roky x x x x x Základné paraetre ECC Tabuľka 3.4: Výpočtová náročnosť ECDLP. V tejto kapitole opíše základné paraetre eliptických kriviek nad konečný poľo F. Tieto základné paraetre sú: T=(q,FR,a,b,G,n,h) q q=. FR reprezentácia poľa (Field Representation), určuje použitú etódu pre reprezentáciu prvkov poľa F. 3 a,b sú to prvky F ktoré určujú rovnicu y + xy = x + ax + b eliptickej krivky E nad F. G základný bod G=, y ) E F. ( g g x na ( )
19 FEI TU v Košiciach Diploová práca List č. 10 n rád bodu G. h celé číslo, predstavujúce kofaktor h=# E ( F ) # E ( F ) - počet bodov na krivke (rád krivky). /n. Existuje nožstvo algoritov pre generáciu a overenie správnosti základných paraetrov ECC. Základný paraetro bezpečnosti je n a teda dĺžka kľúča ECC je daná bitovou dĺžkou n. 3.5 Algoritus digitálneho podpisu s využití eliptických kriviek (ECDSA) V tejto kapitole opíše saotný - algoritus digitálneho podpisu s využití eliptických kriviek ( Elliptic Curve Digital Signature Algorith ECDSA), rovnako ako aj algority z ktorých je algoritus ECDSA zostavený Generácia a overenie platnosti kľúča Podľa nasledujúceho postupu je vygenerovaný verejný aj súkroný kľúč: 1. Výber náhodného, alebo pseudo-náhodného celého čísla d z intervalu [1,n-1].. Výpočet Q=dG. 3. Verejný kľúč je Q, súkroný kľúč je d. 1) V ojej knižnici nie je zahrnutý generátor náhodného čísla. Ipleentovať dobrý generátor je náročná úloha, pre ktorú nebol dostatočný priestor. Existuje nožstvo takýchto generátorov, ale len niektoré z nich sa dajú použiť v kryptografii [17][15]. Poocou nasledujúceho postupu je ožné uistiť sa, že verejný kľúč Q=(x Q,y Q ) vyhovuje podienka eliptickej krivky: 1. Overenie platnosti Q O.. Overenie že x Q a y Q sú správne reprezentované prvky poľa F. 3. Overenie že Q leží na eliptickej krivke definovanej poocou a a b. 4. Overenie platnosti nq = O Algoritus ECDSA ECDSA [], [4] je špecifický algoritus, ktorý predstavuje podpis správy analogický z algorito DSA poocou operácií na eliptickej krivke ( F ) E. Aby bolo ožné generovať a overiť podpis poocou ECDSA, je nutné predpokladať, že podpisovateľ A á základné paraetre D=(q,FR,a,b,G,n,h) a verejný kľúč Q A. Ďalej je predpoklad, že B a autentickú kópiu D a Q A.
20 FEI TU v Košiciach Diploová práca List č. 11 Pre podpísanie správy usí A vykonať nasledujúce kroky: 1. Výber náhodného celého čísla d z intervalu [1,n-1].. Vypočítaj kg = (x1,y1) a r = x1 odn. Ak r=0, napäť do bodu Vypočítaj k 1 odn. 4. Vypočítaj e=sha-1() Vypočítaj s = k { e + da r} odn. Ak s=0, napäť do bodu Podpis podpisovateľa A, správy je (r,s). Pre overenie podpisu (r,s), správy, B usí vykonať nasledujúce kroky: 1. Over, že r a s sú celé čísla z [1,n-1].. Vypočítaj e=sha-1() Vypočítaj w = s odn. 4. Vypočítaj u 1 = ew odn a u = rw odn. 5. Vypočítaj u1 G + uqa = (x1,y1). 6. Vypočítaj v = x1 odn. 7. Akceptuj správu len a len ak v=r. Najväčšíi časovýi konzuenti sú kg = (x1,y1), u 1 = ew odn, u = rw odn. 3.6 Vybrané algority pre konštrukciu ECDSA Násobenie bodu kp Táto operácia sa tiež nazýva skalárne násobenie a v algorite ECDSA zaberá prevažnú väčšinu času. V operácii kp je k celé číslo a P je bod na krivke. Najjednoduchšia etóda výpočtu kp je založená na binárnej reprezentácii k. Ak l je 1 j k = k j, pre každé k j { 0,1 }, poto kp ôže byť vypočítané následovne: = j 0 l 1 kp = k j P = (k1p + (k P + (k P + (k 3P (kl P + k l 1P)...)))) + k 0P j= 0 j Táto etóda vyžaduje l zdvojení a w k -1 sčítaní, kde w k je váha (počet jednotiek) binárnej reprezentácie k. Algoritus 1: Binárna etóda násobenia bodu [3] Vstup: k = (k t -1,...,k1,k 0 ), P E( F q ) Výstup: Q = kp ( ) E F q 1. Q O. Pre i od t-1 do 0 vykonaj.1 Q Q. Ak k i = 1poto Q Q + P 3. vráť (Q).
21 FEI TU v Košiciach Diploová práca List č. 1 Existuje nožstvo ďalších algoritov, ktorých úlohou je zníženie počtu operácii sčítania bodu na krivke a tý zníženia trvania výpočtu[3], [4] Sčítanie dvoch rôznych bodov, Q+P Nech P = ( x 0, y 0 ) a Q = ( x ) 1, y 1 sú bodi krivky E( F ), ( P Q). V tejto kapitole bude opísaná operácia sčítania P + Q = ( x, y ) takto definovaných dvoch bodov. Pre túto operáciu boli zvolené nasledujúce projektívne súradnice x = X Z a y = X Z. V to prípade platí: P=(X 0,Y 0,Z 0 ), Q=(X 1,Y 1,Z 1 ); P+Q=(X,Y,Z ). Poto sa eliptická krivka E(F ) stáva nožinou riešení ( X, Y,Z) vyhovujúcich rovnici: Y + XYZ = X Z + ax Z + bz Body so Z = 0 vyhovujúce tejto rovnici ako napr. ( X,0,0 ) odpovedajú bodu v nekonečne O. Konverzia bodu zadaného v afínnych súradniciach ( x,y) do bodu v projektívnych súradniciach vyzerá následovne X=x,Y=y,Z=1. Opačná konverzia tak ako so už uviedol x = X Z a y = X Z. 3 4 Algoritus : Súčet bodov P+Q [5] A 0 =X 0 Z 1, A 1 =X 1 Z 0, B 0 = A 0, B 1 = A 1, C=A 0 +A 1, D=B 0 +B 1, E 0 =Y 0 Z 1, E 1 =Y 1 Z 0, F=E 0 +E 1, G=FC, Z =Z 0 Z 1 D, X =A 0 (E 1 +B 1 )+A 1 (E 0 +B 0 ), Y =(A 0 G+DE 0 ).D+X (G+Z ). Výhoda, v počte operácii, požitého algoritu oproti algorito používajúci iné znáe projektívne súradnice je ukázaná v tabuľke 3.5. (() ak a=0, alebo a=1). Algoritus Projektívne Z 1 Z=1 súradnice # násobení # uocnení # násobení # uocnení IEEE [7] X/Z, Y/Z 3 15(14) 5 10(9) 4 Lopez [6] X/Z, Y/Z 14(13) 6 10(9) 4 Súčet bodov P+Q X/Z, Y/Z Tabuľka 3.5: počet operácií v algorite súčtu bodov P+Q. Navrhnutý algoritus, ktorý so ipleentoval, vyžaduje 13 násobení a 4 uocnenia [5] v prípade, že z-ová súradnica jedného z bodov vstupujúcich do operácie
22 FEI TU v Košiciach Diploová práca List č. 13 sčítania nie je rovná jednej. V prípade, že z-ová súradnica je rovná jednej, počet operácii násobenia klesne na 10 a uocnenia na 3. V ojej ipleentácii je jeden zo vstupujúcich bodov do operácie násobenia ajúci z-ovú súradnicu rovnú jednej. Týto spôsobo došlo k značnej úspore spotrebovaných taktov Sčítanie dvoch rovnakých bodov P=P+P Pre operáciu sčítania dvoch rovnakých bodov bol opäť vybraný algoritus vyžadujúci najenší počet operácií násobení a uocnení, Tab.3.6 Vstupo tohto algoritu je bod P=(X 1,Y 1,Z 1 ), patriaci krivke E( F ), a výstupo je pod P=(X,Y,Z ) patriaci krivke E( F ). Algoritus 3: Súčet bodov P=P+P [6] Z = Z1 X 1, X = X 1 4 +b Z 1 4, Y =b Z 4 1 Z + ( ) 4 X az + Y1 + bz1. Počet operácií v algorite súčtu bodov P=P+P je znázornený [6] v Tab Projektívne súradnice Z 1 Z=1 Algoritus # násobení # uocnení # násobení # uocnení Súčet bodov P+P X/Z, Y/Z Tabuľka 3.6: počet operácií v algorite súčtu bodov P=P+P. Ak predpokladá, a=1, alebo a=0, [6][5] nie je nutná operácia násobenia az. Počet operácií klesne následovne, Tab.3.7. Projektívne súradnice Z 1 Z=1 Algoritus # násobení # uocnení # násobení # uocnení Súčet bodov P+P X/Z, Y/Z Súčet bodov P+P X/ Z, Y/ Z Súčet bodov P+P X/Z, Y/Z Tabuľka 3.7: Počet operácií v algorite súčtu bodov P=P+P, ak a=0, alebo 1. Pre algoritus sčítania dvoch rovnakých bodov nie je ožné zabezpečiť Z=1 pretože tento algoritus nepracuje s počiatočný bodo P ale s vypočítaní bodo P ktorý á Z Násobenie v F Pre násobenie v F bol vybraný algoritus [8], ktorý je v porovnaní s inýi algoritai pre násobenie najrýchlejší. Tento algoritus využíva pre svoje násobenie tabuľku pred výpočtových hodnôt.
23 FEI TU v Košiciach Diploová práca List č. 14 Algoritus 4: Násobenie v F [9] Vstup: a = (A s 1KA1A 0 ), b = (B s 1 KB1B 0 ), f = (Fs 1 KF1F 0 ). Výstup: = (C K C C ) ab od f. c s = 1. pre j od 0 do 15 vykonaj 3 Nastav P 16 [j] (j3x j0 )b(x), j = (j3 j j1j0 ). Nastav T i 0; i = 0,...,s 1 3. pre j od w / 4 1do 0 vykonaj pre i od 0 do s-1 vykonaj 4j nastav ui,j A i / od16 pre k od 0 do s-1 vykonaj nastav Tk + i Tk + i P16 [ui, j ][k] 4 ak j 0 poto T x T 4. Nastav c T od f 5. Vráť (c) Časovo náročnou rutinou v toto algorite je výpočet tabuľky pred výpočtových hodnôt. Tabuľka obsahuje 16 riadkov, každý riadok obsahuje toľko bitov ako redukčný polynó. Nultý riadok predstavuje saé nuly, prvý riadok predstavuje jeden zo vstupných polynóov a ďalšie sú tvorené postupný násobení 4. bitový polynóo. Po vykonaní operácie násobenia je na výsledok aplikovaná operácia odulárnej redukcie. Výpočet všetkých riadkov by znaenal štrnásť násobení a odulárnych redukcií. Ak vypočíta druhý riadok, tretí dostane poocou operácie XOR aplikovanej na druhý a prvý riadok. Týto spôsobo so odstránil jednu operáciu násobenia a odulárnej redukcie pre tretí riadok a vyenil so ju za operáciu XOR. Táto operácie zaberá oveľa enej taktov, ktorých počet závisí od stupňa do operácie vstupujúcich polynóov. Pre výpočet celej tabuľky je potrebné poocou násobenia a odulárnej redukcie vypočítať len riadky dva, štyri a ose, všetky ostatné riadky je ožné získať rovnaký spôsobo ako to bolo opísané pre riadok tri. Naviac, výpočet riadkov dva, štyri a ose je založený len na posunutí polynóu o dve, tri a štyri iesta, pretože sa jedná o polynóy s váhou jedna. Vybraná časť algoritu 4, je riešená v prílohe diploovej práce Uocnenie v F Uocnenie polynóov je oveľa rýchlejšie ako obyčajné násobenie polynóov, keďže uocnenie je lineárna operácia v F, takže ak 1 a (x) i = a i x, poto 1 i= 0 i a (x) = a x. Binárnu reprezentáciu a(x) je ožné získať vložení bitu 0 edzi dva i po sebe idúce bity binárnej reprezentácie a(x). Vybraná časť algoritu 5, je riešená v prílohe diploovej práce. i= 0
24 FEI TU v Košiciach Diploová práca List č. 15 Algoritus 5: Uocnenie v F [3] Vstup: a F. Výstup: a od f(x). 1. Predvýpočet. Pre každý byt v = (v 7,...v 1,v 0 ), vypočítaj 16 bitovú veličinu T(v) = (0,v 7,...,0,v 1,0,v 0 ).. Pre i od 0 do t-1 vykonaj Nech A[i] = (u3,u,u1,u0 ) kde každé u j je byt. C[i] (T(u1),T(u0 )),C[i + 1] (T(u3 ),T(u )). 3. Vypočítaj b (x) = c(x)od f(x). 4. Vráť (b) Inverzia v F Tento algoritus vypočíta inverziu z nenulového prvku poľa a F použití rozšíreného Euclidovho algoritu (Extended Euclidean Algorith EEA) pre polynóy. Algoritus zachováva invarianty ba+df=u a ca+ef=v pre nejaké d a e, ktoré nie sú explicitne počítané. V každej iterácii kedy je deg( u) deg(v), je vykonané čiastočné delenie u /v poocou odčítania x j v od u, kde j = deg(u) deg(v). Takto je stupeň u znížený o jeden alebo dva. Algoritus skončí ak deg(u)=0, kedy je u=1 a 1 ba+df=1, b a od f(x) =. Algoritus 6: Inverzia v F [3] Vstup: a F, a 0. 1 Výstup: b = a od f(x) 1. b 1,c 0,u a,v f,k 0.. Pokiaľ deg( u) 0 vykonaj.1 j = deg(u) deg(v).. ak j<0 poto u v,b c, j j. j j.3 u u + x v,b b + x c. 3. Vráť (b). Inverzia je na procesore veľi náročnou úlohou. Algoritus inverzie je dĺžkou trvania náročnejší ako násobenie, v celej ipleentácii algoritu ECDSA sa, použití projektívnych súradníc, vyskytuje len 8 krát plus 6 krát pri generovaní kľúča. Vybraná časť algoritu 6, je riešená v prílohe diploovej práce Modulárna redukcia v F Tento algoritus pracuje na princípe nulovania MSW vstupujúceho polynóu a(x) pre každé opakovanie bodu 1. Vybraný násobok redukčného polynóu f(x) je pričítaný (funkcia XOR) k a(x), čo zapríčiní zníženie stupňa a(x) o počet bitov w. Počet operácií XOR závisí na váhe redukčného polynóu f(x).
25 FEI TU v Košiciach Diploová práca List č. 16 Algoritus 7: Modulárna redukcia v F [9] Vstup: a = ( A n-1a n... A 0 ), f = ( Fs-1F s... F0 ). Výstup: c = ( Cs-1C s... C0 ). 1. pre i od n-1 do s vykonaj Nastav d i w - w 1 d d+ j Nastav t A ( x) x f( x) = a x f( x) i j= 0 // t = ( T i...ti s...0), kde i Ai pre j od i do i-s vykonaj Nastav A A T j sw-1- j T = // j. Nastav t a x f( x) = + j j= 0 // t = ( Ti s... T0 ) // 3. pre j od s-1 do 0 vykonaj Nastav A A T 4. Vráť ( c = ( A A... A )) j s-1 s j 0 j j iw+ j Vybraná časť algoritu 7, je riešená v prílohe diploovej práce. SHA-1 Hašovací algoritus SHA-1 [8] sa používa na výpočet odtlačku správy (zhustenej reprezentácie správy). Vstupo ôže byť ľubovoľná správa s dĺžkou bitov < 64. Ako výstup SHA-1 poskytuje 160-bitov, nazývaných odtlačok správy (essage digest). Ten ôže byť poto vstupo algoritov digitálnych podpisov, ktoré vytvárajú alebo kontrolujú podpis danej správy. Správu, ktorá je vstupo algoritu treba považovať za postupnosť bitov a poto jej dĺžka je počet bitov správy. Keďže SHA-1 spracováva postupne bloky 51- tich bitov, tak prvý kroko je rozšírenie správy na dĺžku násobku 51. Rozšírenie správy znaená: 1 nasledovaná postupnosťou 0 a 64 biti dĺžky správy je pripojená na koniec správy tak, aby po pripojení bola celková dĺžka násobko Príprava správy Príprava správy pozostáva z troch krokov: 1. Pripojenie zakončovacieho bitu 1. Príklad: Ak áe pôvodnú správu , poto po úprave dostávae Pripojenie núl 0. Počet pripájaných núl N je najenšie nezáporné číslo (N ôže byť rovné 0) vyhovujúce nasledujúcej rovnici: { 51 [( ML ) od 51] } od51 N = +
26 FEI TU v Košiciach Diploová práca List č. 17 kde ML je dĺžka pôvodnej správy 1 označuje ukončovací bit 64 označuje dĺžku správy 51 vyjadruje veľkosť bloku od je operátoro zvyšku po delení 3. Pripojenie dĺžky správy na koniec správy. Dĺžka správy je vyjadrená na 64 bitoch. V prípade, že dĺžka správy je < 3 bitov, poto prvých 3 bitov budú nuly. binárny XOR binárny AND binárny OR bitová negácia + sčítanie odulo 3 n R bitový posun v pravo o n bitov n CL cyklická rotácia vľavo o n bitov n CR cyklická rotácia vpravo o n bitov Výpočet odtlačku správy SHA-1 Po príprave správy nasleduje saotný výpočet odtlačku správy. Výpočet sa vykonáva po blokoch s veľkosťou 51 bitov (16 slov). Algoritus využíva preenné A, B, C, D, E, preenné H 0, H 1, H, H 3, H 4, postupnosť preenných označených W 0,...,W 79 a preennú TEMP. Ako prvé sú inicializované hodnoty preenných H (východiskový odtlačok správy): H 0 = H 1 = EFCDAB89 H = 98BADCFE H 3 = H 4 = C3DE1F0 Správu tvorí postupnosť blokov M 1,M,...,M n, ktoré sú postupne spracovávané. Spracovanie bloku je nasledovné: 1. Blok M i sa rozdelí na 16 slov W 0, W 1...,W 15.. Pre t=16 až 79 vykonaj 1 = CL (W W W W ); Wt t 3 t 8 t 14 t A = H0, B = H1, C = H, D = H3, E = H4 4. Pre t=0 až 79 vykonaj 5 = CL (A) + ft (B, C,D) + E + Wt K t ; 30 TEM + E = D ; D = C ; C = CL (B) ; B = A ; A = TEMP ; = H, H1 = H1 + B, H = H + C, = H D, = H E 5. A H0 0 + H3 3 + H4 4 +
27 FEI TU v Košiciach Diploová práca List č. 18 Kde f t (B, C,D) = (B C) ( B D) ( 0 t 19) f t (B, C,D) = B C D ( 0 t 39) f t (B, C,D) = (B C) (B D) (C D) ( 40 t 59) f t (B, C,D) = B C D ( 60 t 79) K t = 5A87999 ( 0 t 19) K t = 6ED9EBA1 ( 0 t 39) K t = 8F1BBCDC ( 40 t 59) K t = CA6C1D6 ( 60 t 79) Po spracovaní posledného bloku M n, je odtlačok správy 160 bitov reprezentovaných piatii slovai H 0, H 1, H, H 3, H 4.
28 FEI TU v Košiciach Diploová práca List č Paäťový systé Jednou z podienok efektívneho prograovania je dobrá znalosť paäťového systéu. Je potrebné prispôsobiť progra tak, aby vyhovoval podienka kapacity paäte rovnako ako aj jej rýchlosti. ADSP-1535 Blackfin podporuje hierarchický paäťový odel, s rôznyi paraetrai rýchlosti a veľkosti paätí, ktoré závisia od uiestnenia paäti v hierarchii. Paäte úrovne 1 (L1) sú rýchle a uiestnené na jadra procesora, zatiaľ čo paäte úrovne (L) sú ďalej od jadra a vykazujú počas prístupu väčšie oneskorenie. Rýchlejšie L1 paäte, ktoré zahŕňajú inštrukčnú, dátovú a poocnú paäť sú sprístupnené počas jedného hodinového taktu. L paäť zahŕňa SRAM na čipe, io čipové synchrónne a asynchrónne paäťové adresovanie a adresovanie PCI zariadení. Paäte typu L sú schopné uchovávať dáta aj inštrukcie, ale vykazujú vyššie oneskorenie. 4.1 Architektúra paäte ADSP-1535 DSP á zjednotený 4GB adresný priestor, ktorý zahŕňa kobináciu paäti na čipe aj io neho a paäťovo apované I/O zdroje [1] Paäť L1 Táto paäť je priao sprístupnená jadro s veľi alý oneskorení a veľkou priepustnosťou, edzi paäťou podsystéu a jadro. Paäte typu L1 pracujú na frekvencii jadra (Core Clock - CCLK). L1 paäť [1] ôže pracovať ako keš paäť, čo odstraňuje potrebu explicitne riadiť prenosy z a do L1 paätí. ADSP DSP L1 paäť poskytuje: Modifikovanú Harvardskú architektúru, povoľujúcu tri prístupy paäti jadra v jedno hodinovo cykle ( vykonanie 64-bitovej inštrukcie a dva 3-bitové dátové prístupy) Súčastný prístup systéu DMA a jadra. Rýchly SRAM prístup pre kritické DSP algority a rýchle prepínanie kontextu. Inštrukčné a dátové kešovanie Inštrukčná paäť L1 16 kb L1 inštrukčná paät pozostáva zo štyroch 4 kb sub-bánk. Táto paäť ôže byť konfigurovaná ako SRAM alebo keš, ale usí tak byť nastavená celá paäť a nie len niektorá zo sub-bánk. Inštrukčná L1 SRAM [1]. Jadro procesora číta z inštrukčnej paäte cez 64- bitov širokú zbernicu. Všetky adresy z tejto zbernice sú zarovnané na 64 bitov. Takto ôžu nastať rôzne kobinácie dĺžok inštrukcií (napr. štyri 16-bitové inštrukcie, alebo dve 16-bitové inštrukcie a jedna 3-bitová inštrukcia, alebo jedna 64-bitová inštrukcia). L1 inštrukčná cache [1]. Paäť L1 ôže byť nastavená ako keš, pričo v toto óde neôže byť priao prístupná. Je nutné definovať paäťové stránky s (Cacheability Protection Lookside Buffers - CPLBs), ktoré definujú počiatočné
29 FEI TU v Košiciach Diploová práca List č. 0 adresy, veľkosť a atribúty oblastí paäte pre ktoré je uožnený prístup, vrátane toho či daná oblasť á byť kešovaná Dátová paäť L1 Procesor ADSP-1535 obsahuje aj dve 16 kb, L1 SRAM dátové banky [1], dátovú banku A a dátovú banku B. Každá 16 kb L1 dátová banka pozostáva zo štyroch 4 kb sub-bánk. Takto organizovaná paäť zabezpečuje súčastný prístup systéu DMA a jadra k SRAM, pričo obidve banky ôžu pracovať aj ako keš. Možné nastavenia jednotlivých bánk: 3 kb L1 dátová SRAM 3 kb L1 dátová cache 16 kb L1 dátová SRAM a 16 kb L1 dátová cache Aj keď je jedna 16 kb L1 dátová paäťová banka nastavená ako SRAM, druhá banka ôže fungovať ako keš Poocná (scratchpad) dátová paäť Táto paäť je zložená z jednej 4 kb dátovej SRAM banky [1]. Jej nastavenie je nezávislé od nastavenia ostatných paäťových L1 bánk a neôže byť nastavená ako keš. Najvhodnejšie je použiť túto paäť v iestach s požiadavkou na čo najväčšiu rýchlosť. Vhodné je do tejto paäte uiestniť napríklad zásobník, ale je nutné dať si pozor aby zásobník nepretiekol Kešovanie a ochrana paäte Procesor Blackfin uožňuje kešovanie externej paäti, alebo L SRAM paäte do L1 SRAM pre inštrukcie a dáta [18]. Vďaka kešovaniu je ožné využiť veľký paäťový priestor externej paäti a inializovať oneskorenie počas prístupu do tejto paäti. Kešovanie inštrukcií a dát ôže byť nastavené súčastne alebo saostatne. Nastavenie keše je definované poocou hárdveru pre ochranu paäte, použití tabuliek ktoré definujú CPLBs. Tieto CPLBs definujú počiatočnú adresu, veľkosť a vlastnosti oblastí v paäti pre ktoré je povolené prístup, vrátane toho či á byť daná oblasť paäte cacheovaná. Jednotka riadenia paäte (Meory Manageent Unit -MMU) zabezpečuje ochranu paäte, v zysle ochrany systéových registrov pred neplánovaný prístupo, pre saostatné úlohy ktoré sa ôžu vykonávať na procesore. Podpora CPLBs je realizovaná globálnou celo číselnou preennou cplb_ctrl. Táto preenná sa používa poocou akier z hlavičkového súboru cplb.h: CPLB_ENABLE_ICPLBS zapína inštrukčné CPLBs CPLB_ENABLE_ICACHE zapína inštrukčné kešovanie CPLB_ENABLE_DCPLBS zapína dátové CPLBs CPLB_ENABLE_DCACHE zapína dátové kešovanie do dátovej banky A CPLB_ENABLE_DCACHE zapína dátové kešovanie do dátovej banky B
30 FEI TU v Košiciach Diploová práca List č. 1 Ak je zapnuté kešovanie do dátovej banky B, usí byť zapnuté aj kešovanie do do dátovej banky A. Nasledujúca ukážka povolí CPLBs a zapne kešovanie inštrukcií. #include <stdio.h> #include <cplb.h> int cplb_ctrl = CPLB_ENABLE_ICPLBS CPLB_ENABLE_ICACHE; int ain(void) { printf("hello world\n"); return 0; } // povolenie CPLBs // zapnutie cache pre inštrukcie V prípade že je poocou cplb_ctrl indikovaná požiadavka na použitie CPLBs, štartovací kód volá rutinu _cplb_init. Táto rutina nastaví inštrukčné a dátové CPLBs z tabuľky a povolí hardvér pre ochranu paäti. Aby bolo ožné keš používať je ešte nutné povoliť ju v súbore opisujúco linkovanie (Linker Description File LDF), ktoréu je venovaná vlastná kapitola Paäť L Paäť L na čipe Táto paäť poskytuje 56 kb paäte s nízky oneskorení, ale vyšší ako oneskorenie paäte L1. Uiestnení prograu do tejto paäte a kešovaní do paäti typu L1, je ožné využiť výhody veľkého priestoru, ktorý L SRAM poskytuje a pri to požívať rýchlu paäti L1. Architektúra tejto paäte je tak ako aj pre paäť L1 banková. Je zložená z ôsich SRAM bánk, každá banka á kapacitu 3 kb. Do tejto paäte je ožné pristupovať paralelne, v prípade že sa pristupuje do rôznych bánk. Do L je ožné pristupovať priao z jadra procesora, ale aj poocou na čipe uiestneného DMA radiča a radiča PCI, pracujúceho na frekvencii systéu (Serial Clock SCLK). Procesor ADSP-1535 DSP á vyhradenú 64-bitovú dátovú cestu do L SRAM paäte, pracujúcu na frekvencii jadra tj. 300MHz, so špičkový toko dát.4gb/s Paäť L io čip, externá paäť Externý paäťový priestor tvoria až štyri banky synchrónnej DRAM (SDRAM), až štyri banky pre asynchrónnu paäť, vrátane paäti flash, EPROM, ROM, SRAM, a eory-apped I/O zariadenia. Veľkosť každej SDRAM banky je prograovateľná a ôže sa pohybovať od 16 MB do 18 MB. Počiatočná adresa banky 0 je 0x Počiatočné adresy bánk 1, a 3 súvislo nadväzujú na koncovú adresu predchádzajúcej banky. Ak nie sú všetky štyri bank plne obsadené, zvyšok adresného priestoru je rezervovaný od konca banky 3 až do adresy 0x
31 FEI TU v Košiciach Diploová práca List č. 4. Viac taktové inštrukcie a oneskorenie Táto kapitola opisuje viac taktové inštrukcie a oneskorenie pre ADSP-1535 Blackfin procesor. Viac taktové inštrukcie sú také inštrukcie, ktoré vyžadujú viac ako jeden takt na vykonanie. Tieto takty naviac ôžu byť odstránené len odstránení saotnej inštrukcie, nijaký iný spôsob neexistuje. Oneskorenie sa ôže vyskytnúť ak dve inštrukcie vyžadujú extra takt pre svoje dokončenie, pretože sú veľi blízko pri sebe v aseblérovo prograe. Týto nadbytočný takto je ožné sa v prograe vyhnúť vhodný usporiadaní inštrukcií. Ďalšou ožnosťou vzniku oneskorenia je od pozastavenie (stall) paäte [0] Viac taktové inštrukcie V tejto kapitole sú opísané inštrukcie ktoré vyžadujú viac ako jeden takt pre svoje vykonanie. Všetky ostatné typy inštrukcií, ktoré tu nebudú spoenuté sú jendno taktové inštrukcie. Skupinu viac taktových inštrukcií tvoria nasledujúce inštrukcie: Typ viac taktovej inštrukcie Náhodne vybraná Počet cyklov pre inštrukcia pre daný typ vykonanie Push Multiple/Pop Multiple [--SP]=(R7:0,P5:0); 14, závisí na počte registrov 3-bit Multiply (odulo 3 ) R0*=R1; 5 Call CALL 0x; 4 Jup JUMP(P0); 4 Return RTS; 4 Core and Syste Synchronization CSYNC; 7 Linkage UNLINK; 3 Interrupts and Eulation RAISE 10; 3 Tabuľka 4.1: Multi-taktové inštrukcie. 4.. Inštrukčné oneskorenie Inštrukčné oneskorenie závisí na uiestnení inštrukcie vzhľado k inej inštrukcii, kvôli ktorej vznikajú takty naviac. Vhodný vsunutí inštrukcií edzi takéto inštrukcie je ožné zabrániť takto naviac. Napríklad, ak pár inštrukcií spôsobí dva oneskorovacie takty, tieto ôžu byť odstránené uiestnení dvoch inštrukcií edzi ne. Zvýraznený text znaená vznik inštrukčného oneskorenia. Popis - dreg = preg - sysreg = dreg Ukážka R0 = P0; ASTAT = R0; <Počet cyklov + pozastavenie> <1> <1+1> Tabuľka 4.: Oneskorenie presuno registrov.
32 FEI TU v Košiciach Diploová práca List č. 3 Popis - dreg = AregDreg Op - shift/rotate, dreg použitý ako zdrojový reg. Ukážka R4.L = (A0 = R3.H*R1.H); R1 = ROT R BY R4.L; <Počet cyklov + pozastavenie > <1> <1+1> Tabuľka 4.3: Oneskorenie spôsobená akuulátoro a dátový registro. Popis - dreg = CC - if CC dreg = dreg Ukážka R0 = CC; if CC R1 = R0; <Počet cyklov + pozastavenie > <1> <1+1> Tabuľka 4.4: Latencia podienený presuno a presuno CC Pozastavenie, dátovej paäte L1 Pozastavenie sa ôže vyskytnúť aj počas prístupu do paäti L1. Prístup ôže byť explicitný (ak je dátová paäť nastavená ako SRAM), alebo iplicitný (ak je dátová paäť nastavená ako keš). Niektoré z týchto pozastavení sú spôsobené viac taktovýi inštrukciai a niektoré inštrukčný oneskorení. L1 paäť je nastavená ako SRAM: Pozastavenie v podobe jedného taktu naviac sa vyskytne v prípade súčastného prístupu viacnásobnej inštrukcie do rovnakej sub-banky. Príklad (I0 adresa: 0xFF , I1 adresa: 0xFF ) R1 = R4.L * R5.H (IS) R = [I0++] [I1++] = R3; <Takty + pozastavenie > <1+1> Tabuľka 4.5: Pozastavenie viacnásobnou inštrukciou v rovnakej sub-banke. L1 paäť je nastavená ako keš: Pozastavenie v podobe jedného taktu naviac sa vyskytne v prípade ak je adresa viacnásobného prístupu, počas kešovania dát, v ráci jednej sub-banky v paäti.
33 FEI TU v Košiciach Diploová práca List č. 4 Príklad (I0 adresa: 0xFF80 348, I1 adresa: 0xFF80 994) R1 = R4.L * R5.H (IS) R = [I0++] [I1++] = R3; <Takty + pozastavenie > <1+1> Tabuľka 4.6: Pozastavenie viacnásobný prístupu, počas kešovania dát, v ráci jednej sub-banky v paäti L1 nastavenej ako keš. 4.3 Synchronizačné inštrukcie V prípade výskytu väčšieho nožstva požiadaviek na čítanie a zapisovanie do a z paäte je vhodné použiť inštrukciu synchronizácie jadra (Core Synchronization - CSYNC ) alebo synchronizáciu systéu (Syste Synchornization - SSYNC). Použitie inštrukcie CSYNC spôsobí, že všetky nedokončený operácie v jadre budú dokončené a vyrovnávacia paäť jadra, uiestnená edzi jadro procesora a paäťai L1, bude pred vykonaní nasledujúcej inštrukcie vyprázdnená. Medzi nedokončenýi operáciai ôžu byť nedokončené prerušenia, rôzne stavy napr. vetvenie. Nasledujúci príklad využíva inštrukciu CSYNC. IF CC JUMP.navestie_1; csync; R0=[P0]; // podieneny skok // csync // citanie z paäte.navestie_1: Pred vykonaní inštrukcie čítania z paäte sú použití inštrukcie CSYNC dokončené všetky nedokončené prerušenia. Inštrukcia SSYNC vykoná tú istú funkciu ako CSYNC, naviac SSYNC vyprázdni vyrovnávaciu paäť edzi paäťou L1 a rozhraní systéu. 4.4 Linkovanie popisujúci súbor (LinLinker Description File) Každý DSP projekt vyžaduje jeden linkovanie popisujúci súbor (Linker Description File LDF). Tento súbor definuje ako á byť projekt linkovaný, vďaka ktoréu linker vie ako vytvoriť spustiteľný kód pre daný systé. LDF špecifikuje aj rozdelenie všetkých druhov paäti, s ktorýi procesor ôže pracovať. Linker poto apuje progra a dáta v ráci presne definovanej paäte. LDF ôže obsahovať aritetické výrazy, ktoré používajú rovnaký typ zápisu ako aký je použitý v C/C++ jazyku. Ďalej nasleduje ukážka LDF, poocou oblastí MEMORY{}, SECTIONS{} je vyhradená prograová paäť L1. Detailnejší opis je ožné nájsť v [].
34 FEI TU v Košiciach Diploová práca List č. 5 ARCHITECTURE(ADSP-BF535) SEARCH_DIR( $ADI_DSP/Blackfin/lib ) // určuje architektúru procesora // určuje cestu kde hľadať objektové // súbory a knižnice $OBJECTS = CRT, $COMMAND_LINE_OBJECTS,cplbtab535.doj ENDCRT; // ukážka užívateľo definovateľného akra #define USE_CACHE #define USE_FILEIO MEMORY {.... } MEM_L1_CODE { /* L1 Instruction SRAM/Cache - 16K */ TYPE(RAM) WIDTH(8) START(0xFFA00000) END(0xFFA03FFF) } SECTIONS { L1_code { #ifdef USE_CACHE /* { */ l1_code_cache = 1; #else l1_code_cache = 0; INPUT_SECTION_ALIGN() // zarovnanie v paäti INPUT_SECTIONS ( $OBJECTS(L1_code) $LIBRARIES(L1_code)) #endif /* USE_CACHE } */ } >MEM_L1_CODE } V oblasti MEMORY{} je ožné špecifikovať paäťovú apu daného systéu. Jednoduchšie povedané vyhradí sa rozsah, začiatočná a koncová adresa v paäti, ktorú je nutné poenovať aby bolo ožné sa na ňu ďalej odvolávať. Odvolať sa na ne je ožné v oblasti SECTIONS{}. Na poenovania zavedené v ráci sekcie je ožné odvolávať sa priao v prograe. Paäť L1 prograová aj dátová ôže pracovať ako keš paäť. Pre toto nastavenie je potrebné definovať ju v LDF súbore. Aj keď to ožno na prvý pohľad znie zložito, s jednoduchší riešiteľný probléo so sa na toto procesore nestretol. Kešovania sa zapína definovaní USE_CACHE v súbore LDF takto: #define USE_CACHE. Ďalej už len zapnúť kešovanie príslušných paätí, tak ako to je opísané v kapitole Definovaní USE_FILEIO sa počas linkovania vytvorí požiadavka pre podporu súboru I/O (fopen, taď.). Ďalšou veľi dôležitou otázkou je zarovnanie v paäti ALIGN(nuber). Poocou tohto príkazu je ožné zarovnať adresu aktuálnej pozície čítača na ďalšiu
35 FEI TU v Košiciach Diploová práca List č. 6 adresu, ktorá je násobko nuber, kde nuber je ocnina dvojky. Číslo nuber závisí od dĺžky slova paäti v ktorej je použité ALIGN(). Od správneho nastavenia LDF závisí nie len bezprobléový chod prograu, ale jeho vhodný nastavení ožné aj zrýchliť tento beh. Ako príklad ôže slúžiť zapnutie kešovanie prograu aj dát, ktoré znaená značné zrýchlenie.
36 FEI TU v Košiciach Diploová práca List č Periférie Procesor ADSP-1535 DSP obsahuje niekoľko druhov periférií [1]. Tieto periférie sú spojené s jadro procesora poocou zberníc s vysokou priepustnosťou. V ojej práci budú opísané len periférie s ktorýi so sa dostal do styku počas písania prograu. 5.1 Zdroj reálneho času (Real-Tie Clock) Zdroj reálneho času (Real-Tie Clock RTC) procesora Blackfin obsahuje perifériu pre aktuálny čas, stopky a alar. Ako zdroj taktovacej frekvencie používa externý 3,768 khz kryštál [1]. Aby bol RTC schopný pracovať aj v čase kedy je procesor v nízkonapäťovo stave, na jeho napájanie sú vyhradené saostatné vývody procesora. RTC poskytuje niekoľko prograovateľných nastavení prerušení, ako je prerušenie po uplynutí sekundy, inúty, dňa alebo keď vyprší nastavené počítadlo (stopwatch). Vstupná taktovacia frekvencia 3.768kHz ôže byť delená deličkou na 1 Hz. Počítadlo je zložené zo štyroch počítadiel: 6 bitové počítadlo sekúnd, 6 bitové počítadlo inút, 5 bitové počítadlo hodín a 8 bitové počítadlo dní. Ak je zapnutá funkcia alaru, je generované prerušenie ak je výstup časovača (tier) totožný s nastavenou hodnotou v registri alaru. Počítadlo odpočítava z naprograovanej hodnoty v inútových intervaloch a vytvorí prerušenie ak uplynie nastavený čas. 5. Dohliadací obvod (Watchdog Tier) ADSP-1535 DSP obsahuje 3 bitový časovač, ktorý ôže byť použitý pri ipleentácii softvérovej funkcie dohliadacieho obvodu [1]. Softvérový dohliadací obvod ôže zvýšiť spoľahlivosť systéu uvedení procesora do znáeho stavu generovaní hardvarového resetu, neaskovateľného prerušenia (NMI), alebo prerušenia pre všeobecné použite (GPI) v prípade, že časovač uplynie skôr ako bude softvérovo resetovaný. Vznik prerušenia sa dosiahne nastavení čítača časovača na nejakú hodnotu, nastavení požadovaného druhu prerušenia a zapnutí časovača. Zabráneniu vzniku prerušenia je ožné docieliť opätovný softvérový nastavení čítača pred odpočítaní nastavenej hodnoty až do nuly. Počas činnosti procesora ôžu nastať nedefinované stavy, spôsobené nekorektný prograo, alebo vonkajšíi rušivýi vplyvi. Procesor sa ale ôže nachádzať v stave nečinnosti (idle), ktorý je potrebný na zenu pracovných nastavení procesora. Takýto stav je ožné odstrániť poocou prerušenia. Ak bol aktivovaný softvérový dohliadací obvod a nastal nedefinovaný stav, čítač časovača nebude nastavený na novú hodnotu a po dopočítaní do nuly, dôjde k vzniku požadovaného prerušenia. Ak je prerušenie nastavené na generáciu hardverového resetu, časovač ôže byť nastavený len na resetovanie ADSP-1535 CPU, alebo CPU a periférií. Po resete je ožné softvérovo detekovať zdroj resetu, pretože ak bol zdrojo resetu dohliadací obvod, nastavil sa stavový bit v kontrolno registri časovača (watchdog control register).
37 FEI TU v Košiciach Diploová práca List č. 8 V ojej práci so využil dohliadací obvod ako súčasť prograu pre zenu nastavenia paraetrov procesora, kde slúži na generáciu prerušenia po vyvolano stave nečinnosti. 5.3 UART Procesor ADSP-1535 DSP poskytuje dva plne duplexné nezávisle UART porty: UART0 a UART1. UART0 podporuje polo-duplexný protokol IrDA SIR (9.6/115. Kbps) [1]. UART podporuje plne duplexný, s podporou DMA, asynchrónny prenos sériových dát. Každý z portov UARTu podporuje: 5 až 8 dátových bitov 1 alebo dva stop bity žiadnu, párnu alebo nepárnu paritu UART0 podporuje dva operačné ódy: Prograované I/O Procesor prijía a vysiela dáta zapisovaní a čítaní do vysielacích a prijíacích registrov apovaných z I/O. DMA Kontrolér DMA prenáša vysielané aj prijíané dáta cez DMA kanály zo zdrojových do cieľových paätí. Vďaka tou sa zníži frekvencia výskytov prerušení z dôvodu prenosu dát z alebo do paäti. Každý UART á dva vyhradené DMA kanály, jeden na vysielanie a jeden na prijíanie dát. Tieto DMA kanály ajú nižšiu prioritu ako väčšina ostatných DMA kanálov, z dôvodu ich relatívne nízkych prenosových využití. Prenosová rýchlosť v baudoch, sériový forát dát, generácia chybového kódu a prerušenia ôžu byť naprograované tak aby podporovali: Široký rozsah bitových rýchlostí od baudov. Foráty dát od 7-1 bitov na ráec. Operácia vysielania aj prijíania generuje askovateľné prerušenie.
38 FEI TU v Košiciach Diploová práca List č Ipleentácia ECDSA na procesor ADSP-1535 Blackfin 6.1 Kobinácia jazyka aseblér a jazyka C/C++ Volanie aseblérovskych podprograov z prograu C a používanie rovnakých preenných v prograe asebléra a C [18] sa vyskytuje veľi často v prograoch, na ktoré sú kladené vysoké požiadavky na čo najenšiu veľkosť prograu a časovú náročnosť Volanie aseblérovských podprograov z prograu C/C++ Pred saotný volaní aseblérovského prograu z prograu C/C++, je vhodné vytvoriť prototyp, aby bola jasná definícia arguentov pre progra aseblér a C/C++. Registre procesora Blackfin sú rozdelené, v ráci spolupráce s jazyko C a asebléru, do troch skupín[18]. 1. Poocné (scratch) registre, tieto registre ôžu byť použité vnútri aseblérovských prograov úplne voľne, tj. bez ohľadu na ich obsah pri vstupe do prograu, alebo pri návrate do prograu C/C++. Poocné registre tvoria: P1,P,P0 - adresa, ktorú drží P0 sa používa pre návrat R0-R3 - prvé tri arguenty sú prenesené do registrov R0-R, R3 sa na prenos paraetrov nepoužíva. LB0,LB1,LC0,LC1,LT0,LT1, ASTAT,A0,A1,I0-I3,B0-B3,M0-M3. Uchovávacie (preserved) registre (P3-P5,R4-R7), tieto registre ôžu byť použité v aseblérovsko prograe, ale ich obsah usí byť pred prepísaní odložený a pred návrato do prograu C/C++ obnovený. Vhodný riešení je uložiť hodnoty týchto registrov do paäte poocou zásobníka. 3. Špecializované (dedicated) registre alebo registre zásobníka (SP,FP,L0-L3), tieto registre ôžu byť použité v aseblérovsko prograe, ale ali by byť použité len na to, na čo sú určené. To znaená že kopilátor, debager a rutiny prerušení vyžadujú ať nastavený zásobník, tj. registre SP a FP. Registre L0-L3 usia obsahovať nulu pred návrato do prograu C/C++. Nasleduje ukážka prenosu paraetrov do registrov spolu s návratovou hodnotou, Tab.6.1. Prototyp funkcie Prenos paraetrov Návratová hodnota a - R0, R0 b - R1, Int test(char a, char b, char c, char d) c - R, d - [SP+1], Tabuľka 6.1: Prenos paraetrov funkcie. Je dobré napísať si krátky progra a na jeho základe sa naučiť ako volať aseblérovksý progra. Pre tento účel so vypracoval projekt, ktorého preštudovaní
39 FEI TU v Košiciach Diploová práca List č. 30 sa dajú získať znalosti potrebné pri volaniach aseblérovských prograov. Tento projekt sa nachádza na CD, pod označení Voalnie as_func Volanie C/C++ funkcií z aseblérovského prograu Dá sa povedať, že pri takoto type volania platia pravidlá zavedené v predchádzajúcej kapitole, ale zo strany asbléru. Opäť sa registre rozdelia do troch skupín, v krátkosti ich opíše. 1. Poocné (scratch) registre, v prípade že obsah týchto registrov je dôležitý je nutné ich pred volaní C/C++ funkcie nieka uložiť, pretože volaná C/C++ funkcia ich ôže bez varovania prepísať.. Uchovávacie (preserved) registre, ich obsah neusí byť odložený, volaná C/C++ funkcia ich obsah odloží a pred návrato obnovný. 3. Špecializované (dedicated) registre, neali by byť používané na iný účel aký ajú predurčený Používanie ziešaných C/C++ a aseblérovských poenovaní Aby bolo ožné použiť názvy funkcií a preenných z C/C++ v aseblérovsko kóde, je nutné deklarovať ich ako globálne v prograe C. Ich iportovanie do aseblérovského kódu sa vykoná deklaráciou poocou direktívy.extern v kóde asebléru. Pri požiadavke na použitie aseblérovskej funkcie, alebo preennej v C/C++ prograe, je nutné ju deklarovať poocou direktívy.global v aseblérovskej rutine a iportovať ju deklaráciou ako extern v C prograe. Direktíva.TYPE spôsobí, že aseblér zení predvolený typ sybolu vybraného objektu. Možné typy sybolov STT_* sú v ELF.h, predvolene sa pre funkcie používa direktíva STT_FUNC a pre preenné, alebo paäťové oblasti (buffer) direktíva STT_OBJECT. Direktíva.BYTE deklaruje iplicitnú dĺžku paäťovej oblasti a inicializuje ju na 1-bytovú. Znak _ usí byť vložený pred poenovanie funkcie alebo preennej v prípade, že á byť použiteľná v prograe C/C++ a bola definovaná v prograe asebléru, alebo bola definovaná v prograe C/C++ a á byť použiteľná v prograe asebléru. V Tab. 6. je uvedených niekoľko ukážok pre požívanie ziešaných názvov. V prograe C/C++ int c_var; // deklarovaná globálne void c_func(void); extern int as_var; extern void as_func(void); V aseblérovskej subrutine.extern _c_var;.type _c_var, STT_OBJECT;.global _c_func;.type _c_func, STT_FUNC;.global _as_var;.type _as_var, STT_OBJECT;.byte = 0x00,0x00,0x00,0x00.global _as_func;.type _as_func, STT_OBJECT; _as_func: Tabuľka 6.: Používanie ziešaných C/C++ a aseblérovských názvov.
40 FEI TU v Košiciach Diploová práca List č. 31 Nasleduje ukážka prograu, pochopení ktorého je ožné získať základné znalosti volania aseblérovského prograu z prograu C. int a,c; extern int b; int test(int a, int b); void ain (void) { a=1; b=; c=test(a,b); // definovane v asebléry // prototyp funkcie // volanie aseblérovského prograu } while(1); // nekonečná slučka // - // aseblérovský progra.section progra;.align ;.global _test;.type _test,stt_func; _test: R=R0+R1; R0=R; RTS;._test.end:.section data1;.align 8;.global _b;.type _b,stt_object;.byte _b; // použije L paäť // zarovná progra v paäti na adresy deliteľne číslo // bez zvyšku // globálna definícia funkcie // začiatok funkcie // a+b // návratová hodnota // návrat // koniec funkcie // zarovná dáta v paäti na adresy deliteľne číslo // 8 bez zvyšku // globálna definícia // direktíva definujúca paäťovú oblasť 6. Dynaické riadenie výkonu procesora Procesor ADSP-1353 Blackfin je vhodný aj do prostredí s obedzenýi zdroji energie. Výkon procesora je ožné eniť priao poocou aplikácie bez nutnosti vypínania procesora. Takto je ožné axializovať úsporu energie. Dynaické riadenie výkonu zahŕňa: Softvérovú kontrolu frekvencie jadra (CCLK) [1]. Softvérovú kontrolu frekvencie systéu (SCLK). Softvérovú kontrolu fázového závesu (PLL). Dynaickú kontrolu napätia poocou rozhrania s externý riadení zdroja napätia. Zeny v napájaco napätí [19] a frekvencii ajú za následok značné úspory spotreby energie. Tieto úspory sa dajú vyjadriť poocou nasledujúcej rovnice:
41 FEI TU v Košiciach Diploová práca List č. 3 P R /P N =(F CR /F CN )(V DDR /V DDN )(T FR / T FN ) P R /P N je poer redukovaného výkonu k noinálneu F CN noinálna frekvencia jadra F CR redukovaná frekvencia jadra V DDN noinálna hodnota vnútorného napájacieho napätia V DDR redukovaná hodnota vnútorného napájacieho napätia T FR prevádzková doba na frekvencii F CR T FN prevádzková doba na frekvencii F CN Nasledujúci príklad deonštruje výhodu použitia dynaickej správy výkonu [19]: F CN = 300 MHz F CR = 100 MHz V DDN = 1.5 V V DDR = 1.0V T FR = 3 T FN = 1 (P R /P N )=(100/300)(1.0/1.5)²(3/1) = 0.44 => úspora je 56% Procesor Blackfin uožňuje prograovateľne eniť nie len frekvenciu ale aj napájacie napätie. Týto spôsobo ôže vzniknúť úspora energie aj v prípade kedy je čas potrebný pre vykonanie prograu dlhší pri nižšej frekvencii, alebo aj nižšo napätí, ako pri spustení prograu pri vyššej frekvencii. Ďalšia redukcia spotreby energie je ožná softvérovou kontrolou taktovania periférií. V prípade, že sa daná periféria nepoužíva, nie je nutné aby ala sprístupnený hodinový signál. Hodinový signál ôže byť periférii sprístupnený len v prípade požiadavky na jej použitie, nastavení bitu v registri povoľujúco, alebo zakazujúco sprístupnenie hodinového signálu danej periférií [1] Módy procesora Vstupný hodinový signál CLKIN, zabezpečuje hodinovú frekvenciu pre napájanie jadra a systéu. Signál CLKIN je poto poocou PLL násobený, násobkai 1 až 31, na požadovanú frekvenciu jadra. Existujú štyri ožné operačné ódy, ktorých účelo je úspora energie: Plný (Full-On Mode) ód: V toto óde sú povolené PLL, CCLK a SCLK, nie je ožná zena CCLK zenou nastavenia násobiteľa PLL. Z tohto ódu procesor ôže prejsť do ľubovoľného z ostatných troch ódov. Tento ód zabezpečuje axiálny výkon. Aktívny (Active Mode) ód: V toto óde sú povolené CCLK a SCLK, PLL je obídené (is in bypass), CCLK pracuje na polovičnej frekvencii CLKIN. Z tohto ódu procesor ôže prejsť do ľubovoľného z ostatných troch ódov. Mód so snížený príkono (Sleep Mode) ód: V toto óde sú povolené PLL a SCLK, CCLK je vypnuté. Podľa toho aký bol predchádzajúci stav, PLL ôže byť obídené alebo povolené. Keďže CCLK je vypnuté, SCLK pracuje na frekvencii nastavenej v predchádzajúco stave. V toto óde procesor spotrebúva značne enšie nožstvo energie. Z tohto ódu sa procesor ôže
42 FEI TU v Košiciach Diploová práca List č. 33 dostať len do plného a aktívneho ódu. Tento prechod do iného stavu sa dá uskutočniť len poocou prebudenia (wakeup event). Mód s veľi nízki príkono (Deep Sleep Mode): V toto óde sú vyradené PLL a SCLK a CCLK. Tento ód zabezpečí axiálnu ožnú úsporu energie. Z tohto ódu sa procesor ôže dostať len do aktívneho ódu poocou prerušenia od RTC. Do plného, alebo aktívneho ódu sa procesor ôže dostať len poocou hardverového resetu. 6.. Knižničná funkcia na zenu napätia jadra, CCLK a SCLK V ojej ipleentácii so využil ožnosť eniť CCLK, SCLK aj úroveň napätia. Pre zenu týchto paraetrov so napísal rutinu s nasledujúci prototypo : void set_pll(short ul, short SCLKx, short Vcc); Poocou tejto rutiny je ožné jednoducho eniť všetky tri paraetre poocou preddefinovaných hodnôt. Napätie usí byť enené opatrne, je na užívateľovi, aby nevznikol stav kedy bude nastavená nižšia úroveň napätia ako je iniálna ožná pre danú frekvenciu. To znaená, pri zene frekvencie z vyššej na nižšiu, by alo byť napätie enené až po zene frekvencie a pri zene frekvencie z vyššej na nižšiu usí byť napätie enené pred zenou frekvencie. Tento problé oja funkcia rieši, z pohľadu užívateľa je potrebné len nastaviť správnu úroveň napätia pre požadovanú frekvenciu jadra. Funkcia set_pll vykonáva nasledujúce kroky, na to aby zenila frekvenciu z vyššej na nižšiu a zenila napätie [19]: Pripraví dohliadací obvod, ktorý poocou wakeup event dostane procesor zo stavu nečinnosti (idle). Do tohto stavu je nutné uviesť procesor aby bola platná zena nastavení. Ďalší kroko je obísť PLL, pretože len ak je obídené je ožné nastaviť novú ultiplikačný faktor. Spustí sekvenciu, ktorá spôsobí preostenie PLL. cli r7; idle; ssync; sti r7; // vypne prerušenia a uloží ich aktuálny stav do reg. R7 // stavu nečinnosti // vyčistí vyrovnávaciu paäť, vstup do stavu nečinnosti // obnoví prerušenia z registra R7 Teraz sa procesor nachádza v aktívno óde, je ožné nastaviť nový ultiplikačný faktor, tj. SCLK, CCLK. Odstráni preostenie PLL, nový nastavení v kontrolno registri. Pripraví dohliadací obvod tj. obnoví čítač a povolí pre dohliadací obvod wakeup event. Spustí sekvenciu ktorá odstráni obídenie PLL. Vyradí dohliadací obvod. Zení nastavenie napätia. Vstupnýi paraetrai funkcie set_pll ôžu byť len preddefinované hodnoty, ktoré naviac v prípade voľby úrovne napätia usia byť volené tak ako je opísané vyššie. Nasleduje prehľad vstupných paraetrov funkcie set_pll, definovaných v cclk.h:
43 FEI TU v Košiciach Diploová práca List č. 34 // Multiplicator in. Vcc (V) frekvencia (MHz) #define MUL_1x 0x // #define MUL_x 0x // #define MUL_3x 0x // #define MUL_4x 0x // #define MUL_5x 0x00000B00 // #define MUL_6x 0x00000D00 // #define MUL_7x 0x00000F00 // #define MUL_8x 0x // #define MUL_9x 0x // #define MUL_10x 0x // #define MUL_11x 0x // #define MUL_1x 0x // #define MUL_13x 0x00001B00 // #define MUL_14x 0x00001D00 // #define MUL_15x 0x00001F00 // // Napätie #define Vcc_1_0 1 // Vcc=1.0V #define Vcc_1_1 // Vcc=1.1V #define Vcc_1_ 3 // Vcc=1.V #define Vcc_1_3 4 // Vcc=1.3V #define Vcc_1_4 5 // Vcc=1.4V #define Vcc_1_5 6 // Vcc=1.5V // SCLK #define SCLK_ 0 // SCLK=CCLK/ #define SCLK 5 1 // SCLK=CCLK/.5 #define SCLK_3 // SCLK=CCLK/3 #define SCLK_4 3 // SCLK=CCLK/4 Pri testovaní na doske EZ-KIT lite osadenej procesoro ADSP-1355 Blackfin, so sa stretol s probléo, kedy jadro procesora alo byť nastavené na frekvenciu 300 MHz, ale jej skutočná hodnota bola len 60 MHz. Keďže SCLK je závislé na CCLK podľa vzorca SCLK = CCLK n, kde n=,.5,3,4. Vznikol problé, pri práci s porto UART0, kedy bola nastavená iná hodnota prenosovej rýchlosti ako so predpokladal. 6.3 Počítadlo taktov (Cycle Counter) Veľi dôležitou otázkou pri prograovaní je vedieť ako rýchlo sa progra vykoná. Návrhári procesora Blackfin s tý počítali a vytvorili registre, ktoré počítajú takty počas behu prograu. Počítané sú všetky takty, tj vykonávanie prograu, čakacie stavy a prerušenia. Toto počítanie sa deje len v užívateľsko a dohliadaco óde, v eulačno óde počítanie nie je ožné. Počítadlo taktov je 64-bitové a inkreentuje sa v každo takte. Počet taktov je uložený v dvoch 3-bitových registroch označených ako CYCLES a CYCLES. Najenej význaových 3-bitov je uložených v registri CYCLES a 3 najviac význaových bitov je uložených v registri CYCLES. V užívateľsko óde je ožné len čítanie z týchto registrov, ale v dohliadaco óde je ožný aj zápis. V ojo prograe je počítadlo inicializovné poocou funkcie cycles následovne:
44 FEI TU v Košiciach Diploová práca List č. 35 void cycles(void) { as("r0 = SYSCFG; // nahrá aktuálny stav z SYSCFG BITSET(R0,1); // povolí počítadlo taktov SYSCFG = R0; // uloží nové nastavenie do SYSCFG R0 = 0; // 0 CYCLES = R0; // vyčistí dolných 3 bitov CYCLES = R0;"); // vyčistí dolných 3 bitov } Počítadlo taktov je ožné zapnúť v spusteno ADSP-1535 siulátore (Siulator), rovnako ako aj na spustenej ADSP-1535 EZ-KIT lite. Medzi týito dvoa prostrediai dochádza k rozporu v počte taktov, pre inštrukcie vykonávajúce sa jeden alebo viac taktov. Tento rozpor sa vzťahuje aj na siulátor a literatúru [0]. Tieto rozpory budú ďalej opísané detailnejšie, pričo dopredu tvrdí, že v siulátore sa nedajú získať správne výsledky počtu taktov pre vykonávanie jednotlivých inštrukcií Sledovanie počtu taktov vykonaných v siulátore Procesor Blackfin obsahuje inštrukcie, ktoré sa vykonávajú dlhšie ako jeden takt, tak ako to je opísané v [0], ale aj kapitole Prevažná väčšina inštrukcií vyžaduje pre svoje vykonanie len jeden takt, v prípade uiestnenia do rýchlej L1 paäte. Rozhodujúci faktoro ovplyvňujúci nožstvo taktov potrebných pre vykonanie inštrukcie by al druh paäte v ktorej je daný kód uiestnený, s ohľado na skutočnosť, že rôzne paäte ajú rôzne oneskorenie. Z toho dôvodu by kód uiestnený v paäti s nižší oneskorení usí ísť rýchlejšie ako v paäti s vyšší oneskorení. Siulátor túto vlastnosť paäti zohľadňuje a najrýchlejšie vykonáva progra uiestnený v paäti L1, poalšie počas kešovania z paäti L a najpoalšie z paäti uiestnených na čipe je progra spúšťaný z paäti L. Otázkou zostáva len doba vykonávania jednotlivých inštrukcií. Prístup do paäti L1 trvá jeden takt, takže aj inštrukcie uiestnené v tejto paäti by ali trvať, v prípade že sa jedná o jednotaktové inštrukcie, jeden takt. Táto vlastnosť v siulátore počas zapnutého počítadla taktov neplatí. Počítadlo taktov ukazuje rozdielne počty taktov aj v porovnaní s nástrojo lineárneho profilovania ( LP - Linear Profiling). Počas erania taktov poocou LP sa počet taktov blíži správneu. Za správny počet považuje počty taktov získané z [0]. Počet taktov získaných poocou LP je ale nižší ako skutočný. Napr. ak je progra uiestnený v paäti L1, inštrukcia csync by ala trvať 7 taktov ale v LP trvá len 4, inštrukcia unlink by ala trvať 3 takty ale v LP trvá len. V literatúre [18] (str ) je uvedené, že počas vzorkovania počítadla taktov sa do výpočtu vnáša aj istý druh aproxiácie, pretože sa nedá presne určiť koľko taktov sa uskutoční edzi prvou inštrukciou funkcie a vzorkou získanou vzorkovaní počítadal taktov.. Vzhľado na to nedoporučuje za vzťažný počet taktov uvažovať počty získané v spustení ADSP-1535 siulátora. Počas práce s paäťou so sprístupnil aj paäť SDRAM, uiestnil do nej progra a sledoval počty taktov pripadajúce na jednotlivé inštrukcie. Paäť sa javila ako porovnatelne rýchla s L1. Tento problé so odoslal do spoločnosti Analog Devices, ktorá toto vývojové prostredie vytvorila. Ich odpoveďou bolo, že o toto problée súčastnej verzie siulátora vedia a budú a inforovať ak sa i ho podarí v ďalších verziách odstrániť.
45 FEI TU v Košiciach Diploová práca List č. 36 V Tab. 6.3 je porovnanie počtu vykonaných taktov Siulátoro a EZ-KIT lite. Podienky testovania boli v obidvoch prípadoch rovnaké, progra bol volaný v obidvoch prípad niekoľko krát, výsledná hodnota počtu taktov je získaná ako prieerná hodnota všetkých volaní. Uiestnenie v paäti Siulátor EZ-KIT lite Zdroj taktov Registre počítadla L1 taktov CYCLES LP Registre počítadla L na čipe, zapnuté taktov CYCLES. kešovanie LP Registre počítadla L na čipe taktov CYCLES LP Tabuľka 6.3: Rozdiely v počet taktov edzi Siulátoro a EZ-KIT lite Sledovanie počtu taktov na EZ-KIT lite Zapnutí počítadla taktov a spustení ADSP-1535 EZ-KIT lite je ožné získať skutočný počet taktov nutných pre vykonanie jednotlivých inštrukcií. Do úvahy je potrebné zobrať skutočnosť, že na zastavenie procesora je potrebných 6 taktov. Tieto takty sú pričítané do počítadla taktov, takže ak napr. inštrukcia trvá jeden takt a progra krokuje po jednotlivých inštrukciách, táto jednotaktová inštrukcia sa bude javiť ako sede taktová. Na doske EZ-KIT lite je ožne overiť počty taktov pre vykonanie viactaktových inštrukcií uvedených v kapitole Počas siulácie na EZ-KIT lite je ožné zapnúť nástroj štatistického profilovania (statistical profiling - SP), ktorý inforuje o spotrebe taktov jednotlivých rutín. Poocou tohto nástroja nie je ožné erať spotrebu taktov jednotlivých inštrukcií. 6.4 Štartovací (startup) kód Kopilátor jazyka C pre Blackfin je vybavený štartovací kódo, ktorý je vyžadovaný keď sa procesor spúšťa. Tento kód nastaví predvolené prostredie ešte pre volaní funkcie ain(). Zdroj pre základný štartovací kód je uiestnený...\blackfin\lib\src\libc\crt\basiccrt.s. Tento súbor je ožné eniť a prispôsobiť si ho vlastní požiadavká. Základný štartovací kód uiestnený v súbore basiccrt.s obsahuje nožstvo nastavení na vytvorenie rôznych crt*.doj [18] súborov uiestnených v...\blackfin\lib. Predvolený.LDF súbor nalinkuje jeden z týchto crt*.doj súborov podľa požiadavky Základný štartovací kód (basiccrt.s) Základný štartovací kód je procedúra v jazyku asebler, ktorá inicializuje procesor a nastaví vlastnosti procesora pre základné prostredie. Inicializačný kód vykonáva nasledujúce operácie:
46 FEI TU v Košiciach Diploová práca List č Restovanie registrov.. Inicializuje tabuľku prerušení (Event Vector Table). 3. Nastaví zásobník a povolí počítadlo taktov. 4. Vyžiada si rutiny na inicializáciu dát a inicializuje globálne dáta. 5. Inicializuje súbor (file) I/O podporu. 6. V prípade potreby vyvolá inicializáciu keš a CPLB. 7. Povolí prerušenie IVG Prepne ód procesora z priority reset na prioritu IVG15 (najnižšia priorita v supervisor óde). 9. V prípade požiadavky inicializuje profilovanie. 10. V prípade požiadavky inicializuje C/C++ knižnicu. 11. Inicializuje každý globálny C++ objekt. 1. Inicializuje argc a argv pole. 13. Zavolá ain(), štart prograu. 14. Zavolá exit(). 15. Funkcia atexit vyaže akuulované dáta a vypne podporu I/O crtcfps535.s Každý štartovací súbor crt*.s obsahuje okre spoločného názvu crt aj písenkovú príponu pozostávajúcu zo štyroch písen, ktorá sybolizuje vlastnosti spúšťacieho súboru a číslo sybolizujúce architektúru cieľového procesora ako v toto prípade 535, pre ADSP-1535 Blackfin. Písenková prípona [18] je z hľadiska orientácie veľi dôležitá. Prípona súboru crt Význa c Štartovací súbor použitý pre aplikácie C++ f Štartovací súbor povoľujúci podporu I/O poocou stdio.h p Štartovací súbor pre aplikácie, ktoré boli kopilované s profilovaní. s Štartovací súbor pre aplikácie spúšťané v dohliadaco óde. Tabuľka 6.4: Písenková prípona súboru crt Štartovací kód v ojej ipleentácií Predvolené nastavenie súboru LDF je linkovať podporu pre I/O (fopen, atď.). Toto nastavenie je zabezpečené nasledujúcou časťou (výpis so súboru LDF) kódu: #ifndef USE_FILEIO /* { */ #define USE_FILEIO 1 #endif /* } */ tento úsek kódu á za následok, definovanie takého crt, aby vytvoril podporu I/O. Ak nedôjde k definovaniu USE_FILEIO, ani žiadneho z profilov, zdrojový kód súboru LDF sa postará o definovanie nasledujúceho súboru: #define CRT crtsc535.doj
47 FEI TU v Košiciach Diploová práca List č. 38 neskôr použitého v : $OBJECTS = CRT, $COMMAND_LINE_OBJECTS,cplbtab535.doj ENDCRT; Vypnutie podpory I/O teda spočíva len v zabránení definovania USE_FILEIO v súbore LDF. Aby bolo ožné odstrániť podporu aplikácií C++, je nutné definovať správne crt, bez prípony c, takže crts535.doj. Pre tento úkon je už nutný väčší zásah do súboru LDF, pretože predvolený LDF súbor neobsahuje podporu pre štartovací súbor crts535.doj. Vyriešil so to prepísaní vyššie uvedeného riadku so štartovací súboro podporujúci C++ aplikácie na: #define CRT crts535.doj Štartovací súbor vo svojo treťo kroku vykoná zapnutie počítadla taktov, začne sa počítanie taktov. Poocou toho je ožné zerať počet taktov nutných pre inicializáciu procesora, tak ako je to v Tab Všetky erania sa uskutočnili pri zapnutej podpore kešovania. Typ crt Počet taktov pre inicializáciu procesora. Počet taktov čas (s) pre generáciu kľúča, podpis a overenie správy v F 163 crtsfc535.s crtsf535.s crts535.s Tabuľka 6.5: Použité crt súbory. Zvolení vhodného crt súboru je ožné odstrániť nadbytočnosti, ktoré by boli zavádzané počas inicializácie a čiastočne, aj keď naozaj len iniálne, spoaľovali proces výpočtu. Poocou LDF súboru je ožné zapnúť aj profilovanie. Jedná sa o rôzne nastavenia, ktorých základný popis je priao v LDF súbore. 6.5 Využitie portu UART Prijatie a spracovanie dát z portu UART0 Dáta na spracovanie, paraetre eliptickej krivky atď., sú prenášané do cieľového zariadenia, v ojo prípade siulačnej dosky ADSP-1535 EZ-KIT lite, poocou sériového rozhrania UART0. UART0 pracuje s baudový rýchlosťai od baudov [1], s chybou enšou ako 0.5%. Pre väčšie rýchlosti značne narastá aj chyba. V ojej ipleentácii je použitý plne duplexný port UART0, ktorý á nastavené prerušenia tak aby uožňoval, prerušenie obslúžiť a vrátiť sa k prijíaniu dát. Používaní takto pracujúceho portu UART0 je ožné okažite spracovávať
48 FEI TU v Košiciach Diploová práca List č. 39 prijíané dáta. Spracovávanie zahŕňa prevod prijatých dát v ASCII kóde do hexadeciálneho forátu a ich úpravu na forát vhodný pre zápis do paäte. Dáta sú prenášané v ASCII kóde, z toho dôvodu je nutné ich previesť do hexadeciálneho tavru. Pre tento úkon je použitá funkcia sscanf, tak ako je to na nasledujúcej ukážke, spolu s uložení do paäte: char ax[8]; int hexa,tep[18] ; // prijatie požadovaného počtu sybolov, ktoré sú uložené v ax[]. hexa=0; sscanf(ax,"%x",&hexa); tep[]=hexa; ++; // vyazanie výstupu // konverzia z ASCII do hexadeciálneho forátu // uloží výstup (hexadeciálny) // inkreentovanie počítadla slov, zároveň poloha // aktuálneho slova v poli... // ukončenie prenosu, tj. prijatie požadovaného paraetru napr. x-ovej súradnice bodu change(tep,a,); // konvertuje dáta na forát vhodný pre oju // ipleentáciu algoritu ECDSA Funkcia change, realizuje konverziu dát do forátu vhodného pre oju ipleentáciu, ktorá vyžaduje špecifický forát dát. Tento forát nie je ožné získať vhodnou zenou poradia prijíaných sybolov, bez zásahu do forátu vstupných dát vysielaných na port UART0. Táto funkcia zaberá len niekoľko bytov v paäti a spotrebuje zanedbateľné nožstvo taktov, pričo ale slúži aj na vyazanie dočasnej paäte označenej ako tep. Prijatie a spracovanie dát je ilustrované na Obr Obrázok 6.1: Prijatie a spracovanie dát z portu UART0.
49 FEI TU v Košiciach Diploová práca List č. 40 Vstupná postupnosť, v hexadeciálno foráte, je vysielaná do vysielacieho kanálu v ASCII kóde. Na prijíacej strane je prijíaná postupnosť týchto znakov. Po prijatí 16 ASCII znakov je vyvolané prerušenie, tieto znaky sú konvertovane do hexadeciálneho forátu a uložené do paäti. Každé 3 bitové slovo je do paäti uložené Obr. 6.: Obrázok 6.: Forát dát v paäti. Táto konverzia sa vykonáva iplicitne, procesoro ADSP-1535 Blackfin, pri požiadavke o zápis do paäte Forát dát Maxiálny počet číslic v jedno riadku je 64, po prekročení tohto počtu je nutné riadok rozdeliť, tak aby počet číslic v každo riadku bol deliteľný ôsii bez zvyšku. Pridávané sú nuly od najviac význaového bitu sero k najenej význaovéu bitu. Príklad, ak počet znakov vstupného paraetra je 71, do výstupného súboru usí byť zapísaný následovne: Obrázok 6.3: Rozdelenie vstupného paraetru (s počto znakov viac ako 64), do vstupného súboru. Ukážka vstupného súboru ec.txt obsahujúceho paraetre (redukčný polynó, a, b) pre krivku E(F 163 ) je na Obr. 6.4, všetky dáta usia byť v hexadeciálno foráte. Význa jednotlivých riadkov:
50 FEI TU v Košiciach Diploová práca List č. 41 Riadky 1-4. predstavujú paraetre redukčného polynóu, prvý riadok predstavuje jeho stupeň, a ďalšie tri riadky predstavujú bitové pozície logických 1. Ak uvažuje príklad na Obr. 6.4, poto redukčný polynó á tvar: f (x) = x + x + x + x + x = C9 LSB je vždy rovný logickej 1, keďže všetky redukčné polynóy ajú tento bit nastavený, nie je zahrnutý vo vstupno súbore. Riadok 5. predstavuje paraeter a. Riadok 6. predstavuje počet riadkov, v jedno riadku axiálne 64 hexadeciálnych číslic, z ktorých je zložený každý zo vstupných paraetrov. Vstupné paraetre sú (b,n,xp,yp,k,d). Riadok 7. paraeter b. Obrázok 6.4:Vstupný dátový súbor paraetrov krivky. Ukážka vstupného súboru sign.txt obsahujúceho paraetre pre podpis (n,xp,yp,k,d) pre krivku E(F 163 ) je na Obr. 6.5, všetky dáta usia byť v hexadeciálno foráte. Význa jednotlivých riadkov: Riadok 8. paraeter n. Riadok 9. paraeter Xp súradnica bodu. Riadok 10. paraeter Yp súradnica bodu. Riadok 11. paraeter k - náhodné číslo. Riadok 1. paraeter d náhodné číslo. Riadok 13. predstavuje počet riadkov, v jedno riadku axiálne 64 hexadeciálnych číslic, z ktorých je zložená správa. Riadok 14,15... správa. Obrázok 6.5: Vstupný dátový súbor paraetrov krivky.