• Nie Znaleziono Wyników

szybkich generatorów pseudolosowych Wykorzystanie zasobów FPGA do budowy

N/A
N/A
Protected

Academic year: 2021

Share "szybkich generatorów pseudolosowych Wykorzystanie zasobów FPGA do budowy"

Copied!
164
0
0

Pełen tekst

(1)

POLITECHNIKA POZNAŃSKA WYDZIAŁ ELEKTRONIKI I TELEKOMUNIKACJI

Wykorzystanie zasobów FPGA do budowy szybkich generatorów pseudolosowych

Rozprawa doktorska Michał Jaworski

Promotor: dr hab. inż. Mieczysław Jessa

Poznań 2016

(2)
(3)

Strona 1 z 162

Spis treści

Lista kluczowych skrótów i oznaczeń ... 4

Streszczenie ... 5

Abstract ... 6

1 Wstęp ... 7

2 Zjawisko losowości ... 10

2.1 Podstawowe pojęcia ... 10

2.1.1 Determinizm ... 10

2.1.2 Losowość ... 10

2.1.3 Generator rzeczywiście losowy ... 10

2.1.4 Generator pseudolosowy ... 10

2.1.5 Jakość ciągu wyjściowego generatora ... 11

2.1.6 M-ciąg ... 11

2.2 Natura losowości ... 11

2.3 Uznane za losowe ... 12

2.4 Pomiar losowości ... 13

2.5 Testy statystyczne ... 15

2.6 Zastosowania generatorów ciągów pseudolosowych ... 19

2.6.1 Obliczenia statystyczne i analiza danych ... 20

2.6.2 Symulacje komputerowe ... 21

2.6.3 Kryptografia ... 22

3 Układy FPGA ... 23

3.1 Wprowadzenie ... 23

3.2 Architektura ... 24

3.2.1 Konfigurowalny blok logiczny (CLB / LAB) ... 24

3.2.2 Komórki wejścia / wyjścia (IOB) ... 25

3.2.3 Generatory wewnętrznych sygnałów zegarowych ... 27

3.2.4 Wbudowane bloki cyfrowego przetwarzania sygnałów (DSP) ... 28

3.2.5 Bloki pamięci RAM ... 29

3.3 Projektowanie układów cyfrowych... 30

3.3.1 Opis strukturalny ... 32

3.3.2 Opis behawioralny ... 32

3.3.3 Języki opisu sprzętu ... 33

3.4 Konfiguracja ... 33

(4)

Strona 2 z 162

3.5 Obszary aplikacji ... 35

3.6 FPGA i generatory liczby pseudolosowych ... 35

4 Przegląd rozwiązań generatorów pseudolosowych ... 38

4.1 Generatory liniowe ... 38

4.1.1 Liniowy generator kongruencyjny ... 38

4.1.2 Wielokrotnie rekursywny generator liniowy ... 39

4.1.3 Opóźniony generator Fibonacciego ... 39

4.1.4 Generatory Add-with-Carry, Subtract-with-Borrow, Multiply-with-Carry ... 40

4.1.5 LFSR (generator Tausworthe’a) ... 42

4.1.6 GFSR –uogólniony generator z rejestrem przesuwnym ze sprzężeniem zwrotnym ... 43

4.1.7 TGFSR – skręcony uogólniony generator z rejestrem przesuwnym ze sprzężeniem zwrotnym ... 44

4.1.8 WELL ... 45

4.2 Generatory nieliniowe ... 46

4.2.1 Odwrócony generator kongruencyjny ... 46

4.2.2 Generator Blum Blum Shub ... 46

4.3 Generatory łączone ... 46

4.3.1 Super -Duper ... 47

4.3.2 KISS ... 48

4.3.3 Generator Wichamanna i Hilla ... 48

4.3.4 Generatory łączone zaproponowane przez L’Ecuyera ... 49

4.3.5 Generator kurczący ... 49

4.3.6 Generator o zmiennym kroku ... 50

4.4 Inne ... 51

4.4.1 Generatory bazujące na funkcjach skrótu i elementach algorytmów szyfrujących ... 51

4.4.2 Xorshift ... 52

4.4.3 Generatory oparte o automaty komórkowe ... 53

4.4.4 Generatory wykorzystujące zjawisko chaosu... 54

5 Własności statystyczne i implementacje wybranych generatorów ... 56

5.1 Liniowy generator kongruencyjny ... 57

5.2 Wielokrotnie rekursywny generator liniowy ... 59

5.3 Opóźniony generator Fibonacciego ... 59

5.4 Generatory Add-with-Carry, Substract-with-Borrow oraz Multiply-with-Carry ... 60

5.5 LFSR ... 61

(5)

Strona 3 z 162

5.6 GFSR ... 62

5.7 TGFSR ... 62

5.8 WELL ... 63

5.9 Generatory nieliniowe ... 63

5.10 Inne ... 64

5.10.1 Generatory bazujące na funkcji skrótu ... 64

5.10.2 Xorshift ... 64

5.10.3 Generatory oparte o automaty komórkowe ... 64

5.10.4 Generatory wykorzystujące zjawisko chaosu... 65

6 Metoda ... 67

6.1 Poprawa własności statystycznych wytwarzanych ciągów ... 67

6.2 Łączony generator pseudolosowy ... 68

6.3 Skalowalność ... 71

7 Implementacja generatora skalowalnego ... 72

7.1 Analiza potencjalnych rodzin generatorów ... 72

7.1.1 MCG ... 74

7.1.2 LFSR ... 77

7.1.3 Xorshift ... 81

7.1.4 LHCA ... 83

7.1.5 Podsumowanie analizy rodzin generatorów ... 85

7.2 Implementacje rodzin generatorów w układzie FPGA ... 87

7.2.1 Implementacja generatora MCG ... 87

7.2.2 Implementacja generatora Xorshift ... 91

7.2.3 Implementacja metody poprawiającej własności statystyczne ... 93

7.2.4 Implementacja generatorów z metodą poprawy własności statystycznych ... 96

7.2.5 Implementacja generatora skalowalnego ... 103

7.3 Moduł generatora skalowalnego ... 125

8 Podsumowanie i wnioski ... 130

9 Bibliografia ... 132

Załącznik A... 144

Załącznik B ... 162

(6)

Strona 4 z 162

Lista kluczowych skrótów i oznaczeń

3DES - Triple DES

ABEL - Advanced Boolean Expression Language AHDL - Altera Hardware Description Language ASIC – Application Specific Integrated Circuit AWC - Add with Carry

BBS - Blum Blum Shub CA – Cellular Automata

CLB - Configurable Logic Blocks

CPRNG - Combined Pseudorandom Number Generator DCM - Digital Clock Manager

DDR - Double Data Rate

DES - Data Encryption Standard DSP - Digital Signal Processing

FIPS - Federal Information Processing Standard FPGA – Field Programmable Gate Array GFSR - Generalized Feedback Shift Register GPL - General Public License

HDL - Hardware Description Language

i.i.d - independent and identically distributed random variables KISS - Keep It Simple Stupid

LAB - Logic Array Block

LCG - Linear Congruential Generator LFG - Lagged Fibonacci Generator LFSR - Linear Feedback Shift Register LHCA – Linear Hybrid Cellular Automata LUT - Look-up Table

MCG - Multiplicative Congruential Generator MxCG - Mixed Congruential Generator MWC - Multiply-with-Carry

NGD - Native Generic Database

NIST - National Institue of Standards and Technology PLL - Phase-Locked Loop

PRNG - Pseudo-random Number Generator RC4 - Rivest Cipher No 4

SoC - System on Chip SWB - Subtract with Borrow TGFSR – Twisted GFSR

TRNG - True Random Number Generator

WELL - Well Equidistributed Long-period Linear

(7)

Strona 5 z 162

Streszczenie

Rozprawa dotyczy wykorzystania układów FPGA do budowy szybkich i skalowalnych generatorów pseudolosowych. Podstawowym wymaganiem stawianym wytwarzanym ciągom bitowym jest spełnianie baterii testów statystycznych NIST. W tym celu dokonano przeglądu rozwiązań istniejących generatorów pseudolosowych z punktu widzenia cech przydatnych w implementacji sprzętowej w układach reprogramowalnych FPGA. Przegląd ten posłużył do wyboru rodzin generatorów, które poddano testom statystycznym. Ponieważ część generatorów o dużym potencjale implementacyjnym nie wytwarza ciągów spełniających wszystkie testy NIST, badania rozszerzono o generatory z dodatkowym przetwarzaniem, tzw.

postprocessingiem, którego zadaniem jest poprawa właściwości statystycznych ciągów wyjściowych. Wybrane rodziny to generatory MCG, LFSR, Xorshift32 oraz LHCA.

Relatywnie dużą liczbę generatorów, które mogą pracować równolegle, a których ciągi wyjściowe bez lub z prostym postprocessingiem spełniają wszystkie testy NIST oferują rodziny MCG oraz Xorshift32. Właśnie te rodziny zostały wybrane do testowej implementacji skalowalnego generatora pseudolosowego. Po sprawdzeniu podstawowych właściwości ciągów wyjściowych oraz parametrów implementacji generatora skalowalnego, np. szybkości pracy, zajętości zasobów FPGA itp., zaproponowano generator skalowalny, który dla wersji składającej się z 13 generatorów bazowych osiąga szybkość bitową ponad 43 Gb/s. Ponieważ ważnym parametrem generatora jest okres ciągu wyjściowego, zbadano rodzinę generatorów Xorshift64, które wytwarzają ciągi o okresie 264-1. Rezultaty otrzymane dla generatora skalowalnego złożonego z 6 generatorów Xorshift64 bez postprocessingu i 8 generatorów Xorshift64 z postprocessingiem, pokazały, że istnieje wysokie prawdopodobieństwo spełnienia wszystkich testów NIST przez dużą grupę generatorów tego typu, nawet bez dodatkowego przetwarzania ciągów wyjściowych. W konsekwencji podjęto wysiłek zbadania właściwości statystycznych wytwarzanych ciągów dla wszystkich generatorów tej rodziny, złożonej z 2200 generatorów. Na podstawie otrzymanych danych skonstruowano skalowalny generator pseudolosowy złożony wyłącznie z generatorów Xorshift64. Zaproponowano moduł generatora skalowalnego zaprojektowany w języku opisu sprzętu Verilog, gotowy do użycia w docelowej aplikacji. Generator spełnia testy NIST, a jego przepływność bitowa może być regulowana w zakresie od pojedynczych kb/s dla wersji składającej się tylko z jednego generatora, do ponad 4,49 Tb/s dla wersji składającej się z 256 generatorów źródłowych. Właściwości proponowanego generatora porównano z właściwościami innych generatorów implementowanych w FPGA i opisanych w literaturze.

(8)

Strona 6 z 162

Abstract

The dissertation concerns the use of FPGA circuits to build high-speed and scalable pseudorandom number generators. The main requirement for generated bitstreams is to pass all tests from the NIST statistical test suite. Therefore, a review of existing works from the perspective of features useful in hardware implementation was performed. The review is a point of reference to select and examine families of generators by statistical tests. Because some generators with significant implementation potential do not pass all NIST tests, the research was expanded to generators with additional postprocessing, which has improved statistical properties of generated bitstreams. The selected families are MCG, LFSR, Xorshift32 and LHCA. A relatively large number of generators which can work in parallel with their output bitstreams passing all tests with or without additional processing are MCG and Xorshift32. These two families were selected to implement the test version of a scalable generator. After testing the basic statistical properties of generated bitstreams, as well as the output parameters for implementation e.g. maximum operational frequency, resources utilization etc., the scalable generator consisting of 13 base generators and reaching 43 Gb/s bit rate was introduced. Because an important feature of a generator is its period, in further work the family of Xorshift64 generators with a period of 264-1 was examined. The results obtained for a scalable generator consisting of 6 Xorshift64 generators without postprocessing and 8 Xorshift generators with postprocessing, shows a significant probability of passing all tests by large groups of generators of such type, even without additional processing of output bitstreams. Therefore, an effort was made to examine statistical properties of generated bitstreams for all generators of the family consisting of 2200 generators. Based on the results, a scalable generator consisting only of Xorshift64 generators was constructed. A ready to use, in target application module of a scalable generator designed using hardware description language Verilog was proposed. The generator passes all the NIST tests and its bit rate varies from single kb/s for one base element version to above 4,49 Tb/s for a 256 element version.

Properties for the proposed generator were compared with properties of other generators implemented in FPGA and described in the literature.

(9)

Strona 7 z 162

1 Wstęp

Generatory pseudolosowe, choć często niedostrzegalne jako element większego systemu, wykorzystywane są w bardzo wielu obszarach. Przykładem mogą być symulacje procesów fizycznych czy chemicznych, a także kryptografia i telekomunikacja oraz wiele innych dziedzin. Rozwój każdej z nich przyczynia się do zwiększenia wymagań, które stawiane są generatorom pseudolosowym. Konieczne jest zwiększanie szybkości wytwarzanych ciągów, poprawianie ich jakości, zmniejszanie powierzchni, którą generatory zajmują w strukturach układów elektronicznych oraz zwiększanie bezpieczeństwa. Przykładowo w zastosowaniach symulacyjnych, które są coraz bardziej dokładne, niezbędne jest dostarczenie coraz większych ilości danych pseudolosowych w jednostce czasu. Przy czym dostarczane ciągi nie muszą wykazywać się dużym bezpieczeństwem jak w zastosowaniach kryptograficznych, jednak i tutaj wymaga się coraz większych szybkości, przy zachowaniu restrykcyjnych założeń dotyczących bezpieczeństwa.

Jednoczesny, szybki rozwój elektroniki i dynamiczny rozwój cyfrowych układów programowalnych daje możliwość spełnienia wymagań, które są stawiane przed generatorami ciągów pseudolosowych. Cyfrowe układy programowalne umożliwiają przeniesienie algorytmów generujących do ich struktury, co pozwala na zwiększenie szybkości działania pojedynczego generatora.

Reprogramowalne układy cyfrowe, a zwłaszcza najbardziej zaawansowane układy FPGA (ang. Field Programmable Gate Array), pozwalają spojrzeć na implementację generatorów pseudolosowych od innej strony. Przede wszystkim sam generator może stanowić moduł, będący z łatwością powielalny i stanowiący tylko część większego systemu zaimplementowanego w układzie FPGA (tzw. SoC, z ang. System on Chip). Sama konstrukcja generatora opisana w języku opisu sprzętu HDL (ang. Hardware Description Language) pozwala wykorzystać właściwości układów cyfrowych i zrównoleglić wiele działań, co nie jest możliwe w sekwencyjnych procesorach działających w tradycyjnych komputerach (pomijając rozwiązania wielordzeniowe jako inną klasę implementacji).

Rozwój technologii stwarza zatem ogromne możliwości budowania szybkich, skalowalnych generatorów sprzętowych.

Jako tezę rozprawy przyjęto stwierdzenie, że układy FPGA można wykorzystać do budowy szybkich generatorów pseudolosowych z możliwością wymiany zasobów układów FPGA na szybkość wytwarzanego ciągu bitowego bez utraty jakości, ocenianej za pomocą pakietu

(10)

Strona 8 z 162

testów statystycznych NIST (ang. National Institue of Standards and Technology). Terminem

„szybkie generatory pseudolosowe” określono generatory oferujący przepływności większe od 10 Gbit/s.

Celem rozprawy, oprócz wykazania prawdziwości tezy, jest zaproponowanie skalowalnego generatora pseudolosowego spełniającego wszystkie testy NIST, który w postaci modułu mógłby być dołączany do dowolnego projektu implementowanego w układzie FPGA.

W drugim rozdziale rozprawy przedstawiono zjawisko losowości z punktu widzenia obecnego stanu wiedzy, czyli z uwzględnieniem teorii sformułowanych przez fizykę kwantową. Zostało opisane pojęcia determinizmu, chaosu oraz procesy wskazywane w fizyce klasycznej jako losowe. Przedstawiono także aplikacje generatorów pseudolosowych w obliczeniach statystycznych, symulowaniu zjawisk fizycznych oraz w zastosowaniach kryptograficznych, akcentując specyficzne wymagania dla danego obszaru.

Rozdział trzeci poświęcono podstawowym informacjom o budowie układów FPGA.

Wymienione zostały specyficzne właściwości cyfrowych układów reprogramowalnych, wskazano obszary zastosowań i podkreślono cechy umożliwiające efektywną implementację generatorów pseudolosowych.

Rozdział czwarty zawiera przegląd najbardziej znanych generatorów pseudolosowych.

Zostały omówione najważniejsze cechy wynikające z ich konstrukcji. Opisano generatory liniowe (m.in., liniowe generatory kongruencyjne, wielokrotnie rekursywne generatory liniowe, generatory Fibonacciego), generatory nieliniowe (odwrócony generator kongruencyjny, BBS), generatory niesklasyfikowane do dwóch wcześniejszych kategorii (głównie generatory stanowiące część algorytmów szyfrowania) oraz generatory łączone.

Kolejny rozdział zawiera wyniki testów statystycznych opisanych generatorów oraz wyniki implementacji w układach FPGA, tj. maksymalną częstotliwość pracy i zużywane zasoby.

W rozdziale szóstym przedstawiono opis metody pozwalającej na wytworzenie ciągów pseudolosowych o dużych przepływnościach bitowych. Metoda wykorzystuje możliwość zrównoleglenia pracy bloków funkcjonalnych w układach FPGA. Bazując na rodzinie generatorów pseudolosowych o niedostatecznych własnościach statystycznych wytwarzane są ciągi spełniające rygorystyczne testy NIST i przepływnościach zależnych od liczby zastosowanych generatorów źródłowych, co w praktyce sprowadza się do ograniczenia wynikającego z zasobów dostępnych w układzie FPGA.

(11)

Strona 9 z 162

W rozdziale siódmym opisano implementację w FPGA szybkiego generatora ciągów pseudolosowych. Generator zaimplementowano z uwzględnieniem dwóch kryteriów – szybkości działania oraz zasobów jakie wykorzystuje w układzie FPGA. Takie podejście pozwala ocenić możliwość skalowania generatora w różnych ujęciach jego konstrukcji i wybrać najlepszą dla danej aplikacji.

Rozprawę kończy podsumowanie zawierające wnioski z przeprowadzonych badań.

(12)

Strona 10 z 162

2 Zjawisko losowości 2.1 Podstawowe pojęcia

2.1.1 Determinizm

Jest to koncepcja filozoficzna, według której każdy skutek ma swoją przyczynę. Tym samym znając reguły rządzące działaniem świata oraz jego aktualny stan, możliwe jest precyzyjne określenie przyszłych zdarzeń [1].

2.1.2 Losowość

W niniejszej rozprawie losowość definiowana jest jako brak celu i przyczyny, przypadek rządzący danym zjawiskiem. Tak zdefiniowana losowość odnosi się zatem wyłącznie do zjawisk niedeterministycznych – jest przeciwieństwem determinizmu [1].

2.1.3 Generator rzeczywiście losowy

Generator rzeczywiście losowy TRNG (ang. True Random Number Generator), zwany również sprzętowym generatorem losowym, to taki generator ciągów, który obrazuje właściwości i parametry pewnego zjawiska fizycznego. Takim zjawiskiem fizycznym może być szum termiczny, szum fazowy, efekt fotoelektryczny, rozpad atomu i wiele innych [2].

Generatory tego typu są zazwyczaj powolne w działaniu i mogą być podatne na ataki, gdyż atakujący może próbować oddziaływać, na przykład, na źródło wejściowe. Stosowane są zazwyczaj do wytworzenia klucza lub wektora początkowego dla generatora pseudolosowego.

2.1.4 Generator pseudolosowy

Generator pseudolosowy PRNG (ang. Pseudo-random Number Generator), zwany również generatorem programowym, to taki generator, którego ciągi wyjściowe powstają w oparciu o zdefiniowany algorytm [3].

Cechą charakterystyczną takiego generatora jest skończony okres wytwarzanego ciągu oraz oczywisty determinizm. Ciągi wytwarzane przez PRNG mogą być jednak dostarczane z bardzo dużą szybkością co sprawia, że znajdują zastosowanie w wielu obszarach.

(13)

Strona 11 z 162 2.1.5 Jakość ciągu wyjściowego generatora

Jakość ciągu dostarczonego przez generator TRNG lub PRNG oceniana jest za pomocą testów statystycznych. Dla określonego poziomu istotności sprawdzana jest hipoteza, czy dany ciąg posiada określone cechy. Testy te nie określają czy dany ciąg jest losowy czy nie, a jedynie czy posiada pożądane parametry jak np. równomierne prawdopodobieństwo wystąpienia symboli, czy brak określonego wzorca.

2.1.6 M-ciąg

W niniejszej rozprawie poprzez określenie m-ciąg rozumiany jest taki ciąg, którego okres jest maksymalny dla rodziny generatorów, z której pochodzi.

2.2 Natura losowości

Potwierdzenie występowania losowości lub potwierdzenie determinizmu, czyli jej przeciwności, w regułach rządzących światem, stanowi fundament zrozumienia istnienia. Jest na tym polu co najmniej tak samo ważna jak cząstka Higgsa [4].

Do tej pory nikomu nie udało się udowodnić, że jakikolwiek rzeczywisty proces jest losowy.

Nie udowodniono więc istnienia losowości. Nie ma również dowodu na nieistnienie losowości i czysty determinizm zjawisk zachodzących w naszym otoczeniu.

W zrozumieniu natury losowości ważne jest by wyraźnie oddzielić od siebie dwie kwestie.

Pierwszą jest niemożliwość przewidzenia przez nas wyniku doświadczenia lub przyszłego przebiegu procesu, a drugą losowość. Tak naprawdę wszystkie znane nam procesy zdające się mieć losową naturę, sprowadzają się do tego pierwszego. Dla zobrazowania wystarczy choćby przypadek rzutu monetą, czyli często przytaczany przykład we wszelkiego rodzaju opracowaniach z rachunku prawdopodobieństwa. Przyjmowanie, że wynik rzutu monetą ma naturę losową wynika właśnie z ułomności ludzkiej, która nie pozwala nam przewidzieć wyniku rzutu monetą. Choć jest to stosunkowo prosty proces, to liczba niewiadomych jest zbyt duża, aby jakakolwiek analiza była skuteczna. Ale proces rzutu monetą można przecież rozbić na mniejsze, łatwiejsze do analizy podprocesy, które dokładnie pokazują brak losowości w całym zdarzeniu. Znając masę monety, wysokość z jakiej ją zrzucamy, jej kształt, kształt podłoża, ruchy powietrza i inne wartości i zjawiska mające wpływ na przebieg procesu jesteśmy w stanie określić jego wynik. Problem praktycznego obliczenia rezultatu polega na tym, że nie jesteśmy w stanie wystarczająco dokładnie określić wartości wszystkich parametrów. Nie zmienia to jednak faktu determinizmu całego zjawiska. Należy bowiem

(14)

Strona 12 z 162

odróżnić złożoność zjawiska i trudność w modelowaniu oraz jego wrażliwość na zmianę parametrów początkowych, od losowości zjawiska. To, że zjawisko wydaje się być losowe, nie oznacza, że nie można go opisać w sposób deterministyczny. Istnieje nawet pojęcie chaosu deterministycznego, które odnosi cię do cech równań wykazujących dużą wrażliwość generowanego wyniku, przy małych zmianach parametrów wejściowych, co wyklucza przewidywanie długoterminowej ewolucji systemu bez znajomości wszystkich parametrów z nieskończoną dokładnością. Doskonałym przykładem oraz przesłanką do sformułowania teorii chaosu były badania Edwarda Lorenza nad modelami prognozowania pogody. Prognozy pogody są nadal mało precyzyjne, a ich znaczenie praktyczne zawęża się wyłącznie do kilkunastu dni, właśnie w związku z wrażliwością modeli prognozowania pogody na dokładność wprowadzanych danych – nawet mała różnica może prowadzić do znacząco różnych wyników. Edward Lorenz nazwał to zjawisko „efektem motyla” [5].

Rozważania na temat istnienia rzeczywistej losowości przybierają naturę filozoficzną, co związane jest z teorią kwantową, a raczej jej interpretacją. Pomimo pojawiających się prac np.

„A fast and compact quantum random number generator” opublikowanej w 2000 roku [6], a nawet fizycznych, komercyjnych generatorów rzeczywiście losowych, działających w oparciu o prace dotyczące mechaniki kwantowej [7], nadal nie ma jednoznacznej odpowiedzi na pytanie, czy losowość istnieje i czy, nawiązując do Alberta Einsteina, Bóg gra z ludzkością w kości [8].

Więcej o tym jak trudno nauce zmierzyć się z losowością można przeczytać w wielu różnych opracowaniach, np. w eseju prof. dr hab. Kazimierza Sobczyka w magazynie Nauka z 2006 roku [9].

2.3 Uznane za losowe

W pracach dotyczących losowości często przytaczane są przykłady generatorów liczb rzeczywiście losowych (TRNG) bazujących na zjawiskach fizycznych. Niektóre z nich są w sposób oczywisty deterministyczne, lecz bardzo trudne do przewidzenia przez obserwatora, inne odwołują się do mechaniki kwantowej i bazują na nieudowodnionej, ale podejrzewanej o występowanie rzeczywistej losowości.

Do powszechnie znanych źródeł fizycznych wykorzystywanych do wytwarzania liczb wyglądających na losowe należą, między innymi, szum termiczny, szum elektromagnetyczny, czas połowicznego rozpadu atomu, szum fotonów docierających do powierzchni fotoakytwnej (ang. shot noise) [10].

(15)

Strona 13 z 162

Abstrahując od tego, że powyższe mogą stanowić, przynajmniej teoretycznie, jedynie realizację procesów deterministycznych, ich praktyczne zastosowanie jest niewielkie ze względu na możliwości odziaływania na otoczenie i wpływania na wynik, co definitywnie ujawnia czynnik deterministyczny, oraz stosunkowo niewielką ilość przydatnej informacji (niezależnej, losowej) w jednostce czasu. Dąży się więc do poszukiwania źródeł zintegrowanych w układach cyfrowych, aby zmniejszyć wpływ środowiska i możliwość ataków na generator oraz bazujących na procesach relatywnie szybkich. Przykładowo mało stabilny generator pierścieniowy cechuje się fluktuacjami fazy wyglądającymi na losowe, które można wykorzystać jako źródło dla generatora wytwarzającego ciągi rzeczywiście losowe [11].

2.4 Pomiar losowości

Zagadnienie pomiaru losowości odnosi się przede wszystkim do określenia, czy i z jakim prawdopodobieństwem dane źródło ciągów może zostać uznane za losowe. W praktyce oznacza to zbadanie realizacji procesu losowego i szukanie cech, których nie powinno mieć źródło wzorcowe.

Co ciekawe, w procesach fizycznych zazwyczaj staramy się modelować pewne zjawiska, by lepiej je zrozumieć i wykorzystać do analizy oraz symulacji. Budujemy coraz dokładniejsze modele uwzględniające więcej szczegółów lub skupiamy się na pewnym przybliżeniu adekwatnym dla danego zastosowania. W przypadku losowości oraz próby skonstruowania generatora idealnego, proces ten przebiega dokładnie w odwrotnym kierunku. Od idealnego modelu, do coraz bardziej wysublimowanej realizacji praktycznej dostosowanej do wymagań danego zastosowania.

Zakładając, że posługujemy się zbiorem cyfr od 0 do 9, czy możemy przyjąć, że 10 elementowy ciąg 0000000000 nie jest realizacją procesu losowego? Czy inny ciąg o tej samej długości, np. 5192308923, możemy z większą pewnością uznać za realizację procesu losowego? Problem polega na tym, że choć drugi ciąg wydaje się być bardziej losowy, to prawdopodobieństwo wystąpienia zarówno jednego, jak i drugiego wynosi dokładnie 10-10. Powyższy przykład doskonale pokazuje, dlaczego próba stwierdzenia, czy dany ciąg jest realizacją procesu losowego musi prowadzić do założeń, które w konsekwencji doprowadzą, do uznania ciągu losowego za nielosowy. Musimy zatem przyjąć niedoskonałość narzędzi oceniających losowość i zrozumieć, że dla zastosowań technicznych nie poszukujemy ciągu losowego, a jedynie spełniającego opracowane przez badaczy testy oraz, w przypadku

(16)

Strona 14 z 162

generatorów TRNG lub stosowanych w kryptografii – charakteryzujących się nieprzewidywalnością.

Pierwszym założeniem, jakie należy poczynić to przyjęcie, że generowane liczby powinny mieć równomierny rozkład. Tym samym rozważając np. milion pierwszych wytworzonych przez badane źródło elementów możemy sprawdzić, czy występowanie poszczególnych cyfr dziesiętnych jest w miarę równomierne, zbliżone do 0,1 w każdym przypadku. Test taki, choć daje już pewną informację o badanym ciągu, nadal nie pozwala przyjąć, że mamy do czynienia z realizacją procesu losowego. Biorąc pod uwagę, choćby poniższy ciąg 012345678901234567890123456789… otrzymamy idealny rozkład prawdopodobieństwa dla każdej z cyfr, jednak źródłem takich liczb mógłby być prosty układ licznika zliczającego od 0 do 9, a nie jakikolwiek generator losowy.

Rozszerzeniem powyższego testu byłoby sprawdzanie występowania nie pojedynczych cyfr, a np. liczb dwucyfrowych tj. od 00 do 99. Niestety test taki łatwo oszukać, np. poprzez zaproponowany w 1933 roku przez D. Champernowne ciąg wszystkich liczb dodatnich 1234567891011121314151617181920212223242526272829303132333435... [12]. Problem jest jednak znacznie bardziej złożony. Ciąg 31415926535897932384626433832795028841...

na pierwszy rzut oka może wydawać się losowy – nie widać powtórzeń i zależności. Ocena powinna jednak być przeprowadzona dla większej liczby cyfr, co jest już zadaniem dla maszyny. Są to początkowe cyfry liczby π, dla której badacze wykazują rozkład równomierny, mierzony empirycznie na skończonej długości ciągu oraz spełnianie testów statystycznych [13] [14]. Czy liczba π jest losowa? Czy jej elementy (cyfry) są losowe?

Oczywiście, że nie. Jest to stała, ale bez tej wiedzy osoba postronna, analizując ją za pomocą testów statystycznych, może dojść do zupełnie innego wniosku.

W tym przypadku przydatna może okazać się kolejna koncepcja, która pozwala na ocenę losowości elementów badanego ciągu. Złożoność informacyjna Kołmogorowa, gdyż o niej mowa, definiowana jest jako długość najkrótszego programu, który wytwarza dany, skończony lub nieskończony ciąg symboli [15]. Tym samym przedstawiony powyżej ciąg, stanowiący kolejne cyfry liczby π, choć jest nieskończony, to posiada bardzo niską złożoność Kołmogorowa. To samo dotyczy ciągu samych zer, czy ciągu kolejnych liczb dodatnich, dla których programy je generujące mogą mieć bardzo krótką postać.

Niestety złożoności Kołmogorowa nie da się precyzyjnie wyznaczyć, choćby dlatego, że nigdy nie ma pewności iż dany program komputerowy jest najkrótszy dla danego ciągu

(17)

Strona 15 z 162

symboli. Nie da się jednoznacznie stwierdzić, że nie istnieje program jeszcze krótszy, generujący te same dane wyjściowe.

Ponieważ teza rozprawy odnosi się do generatorów pseudolosowych, należy zastanowić się jakimi cechami powinny się charakteryzować takie generatory, aby dostarczane ciągi były dobrej jakości. Generatory pseudolosowe, które są generatorami działającymi w oparciu o algorytm, posiadają niską złożoność Kołmogorowa, ale generowane przez nie ciągi mogą spełniać całe baterie testów.

Dla celów praktycznych, czyli np. do wykorzystania w symulacjach, ciągi powinny cechować się, poza wspomnianym rozkładem równomiernym, także niezależnością (ang. independent and identically distributed random variables – w skrócie i.i.d). Pożądaną cechą, w przypadku ciągów pseudolosowych, jest także ich jak najdłuższy okres. Jak już podano w podrozdziale 2.1.6, ciągi pseudolosowe wytwarzane przez dany generator nazywane są m-ciągami, gdy są to ciągi o maksymalnym okresie dla danej rodziny generatorów.

Testy statystyczne nie odpowiadają zatem na pytanie, czy dany ciąg został wytworzony przez źródło losowe, a jedynie sprawdzają hipotezę zerową, czy dany ciąg {ui} jest realizacją i.i.d U(0,1) ciągu wyglądającego na losowy. Sprawdzane jest więc, czy ciąg posiada rozkład równomierny, czy jego elementy są niezależne oraz czy ciąg posiada cechy ciągu wyglądającego na losowy (zdefiniowane przez badaczy cechy, weryfikowane różnymi testami statystycznymi). W praktyce, sprawdzanie powyższej hipotezy odbywa się nie jednym, a całym zestawem testów.

2.5 Testy statystyczne

Głównym celem stosowania testów statystycznych jest odrzucenie generatora o nieakceptowalnych parametrach. Dobry generator binarny, według NIST, to generator, którego cechuje [16]:

Jednorodność – w każdym punkcie generowanego ciągu, prawdopodobieństwo wystąpienia jedynki lub zera jest jednakowe i wynosi ½. Oczekiwana liczba zer (lub jedynek) w ciągu o długości n wynosi n/2.

Skalowalność – jeśli ciąg otrzyma pozytywny wynik przeprowadzanego testu statystycznego, to każdy podciąg tego ciągu poddany temu samemu testowi również powinien otrzymać wynik pozytywny.

(18)

Strona 16 z 162

Zgodność – generator powinien wytwarzać podobne jakościowo ciągi, niezależnie od puntu startowego – ziarna (ang. seed) lub zjawiska fizycznego, w przypadku generatorów rzeczywiście losowych.

Testy statystyczne można podzielić na dwie grupy:

 testy empiryczne – testy te przeprowadzane są na konkretnych ciągach wytworzonych przez generator źródłowy,

 testy teoretyczne – w przeciwieństwie do testów empirycznych, testy teoretyczne pozwalają na ocenę generatora analizując jego budowę (algorytm generujący). Testy teoretyczne mają zastosowanie tylko do generatorów, których działanie można opisać algorytmem, czyli generatorów pseudolosowych.

W literaturze znaleźć można bardzo dużą liczbę testów oceniających generowane ciągi.

W samej tylko książce „The Art of Computer Programming” autorstwa D.E. Knutha znajduje się ponad 70-stronicowy rozdział na ich temat [3].

Wśród tradycyjnych testów statystycznych stosowanych do oceny ciągów wytwarzanych przez generatory aspirujące do miana losowych, można wyróżnić [16]:

testy losowości, które pozwalają stwierdzić, czy badany ciąg może zostać uznany za realizację procesu losowego,

testy zgodności, które pozwalają zbadać, jaki rozkład prawdopodobieństwa ma ciąg wejściowy, czy rozkład ten jest taki sam dla kolejnych bloków sekwencji wejściowej itp.,

testy normalności, które pozwalają stwierdzić, czy ciąg wejściowy ma rozkład normalny,

testy niezależności, które pozwalają stwierdzić, czy poszczególne elementy badanego ciągu można uznać za niezależne,

testy parametrów rozkładu, które badają wiarygodność różnych parametrów ciągu wejściowego.

Poza wyżej wymienionymi grupami testów, w bardziej specyficznych zastosowaniach (np.

kryptografia), ważną rolę odgrywają również [16]:

testy widmowe badające własności widma Fouriera i Walsha,

testy złożoności liniowej, które mają oszacować, jaki jest najmniejszy rozmiar rejestru liniowego, z którego dany ciąg mógłby pochodzić,

(19)

Strona 17 z 162

testy złożoności sekwencyjnej,

testy entropijne, które badają własności informacyjne wejściowego ciągu bitów.

W praktyce, do testowania generatorów służą nie pojedyncze testy, a ich całe baterie.

Najczęściej wybierane zestawy testów to: FIPS 140-2 (ang. Federal Information Processing Standard) [17], Diehard [18], SP800-22 [16] oraz Dieharder [19], który zawiera testy z pakietów Diehard oraz SP800-22 i jest rozpowszechniany na licencji GPL (ang. General Public License) [20], co pozwala na jego nieskrępowane wykorzystanie oraz zapewnia rozwój przez społeczność skupioną wokół projektu. Przydatnym narzędziem jest również oprogramowanie o nazwie TestU01 [21], które zawiera zarówno implementację (w języku C) różnych testów empirycznych, jak i implementację samych generatorów pseudolosowych w najróżniejszych odmianach.

Poniżej zamieszczono krótki opis wybranych testów, znajdujących się we wcześniej wymienionych zestawach:

 Test monobitowy (ang. frequency test lub monobit test) – jest to prosty test oparty na statystyce chi-kwadrat. Jest to typowy test, który weryfikuje równomierność występowania bitowych zer i jedynek w badanym ciągu.

 Test monobitowy w bloku (ang. frequency test within a block) – jest to zmodyfikowany test monobitowy. Modyfikacja polega na tym, że wyznaczana jest proporcja jedynek w bloku o długości M. Badane jest, czy liczba jedynek w takim bloku wynosi w przybliżeniu M/2.

 Test pokerowy (ang. poker test) – kolejny test oparty na statystyce chi-kwadrat, ale tym razem dla symboli 4-bitowych.

 Test serii (ang. runs test) – ten test skupia się na tzw. seriach w badanym ciągu, gdzie przez serię rozumiane jest wystąpienie ciągu jednakowych znaków – zer lub jedynek.

W teście tym sprawdzana liczba wystąpień poszczególnych serii.

Test długich serii (ang. long runs test) – test ten sprawdza, czy w badanym ciągu nie występuje seria o długości większej niż założona.

 Test urodzin (ang. birthdays test) – bazujący na obserwacji szansy, że w grupie osób, znajdują się takie, które mają urodziny tego samego dnia. Na potrzeby testu ciągu bitowego przyjmuje się jednak liczbę dni w „roku” znacznie większą niż 365.

 Test 5-permutacyjnego nakładania (ang. overlapping 5-permutation test) – w badanym ciągu sprawdza się ciąg miliona 32-bitowych liczb. Ciąg dzieli się na

(20)

Strona 18 z 162

pięcioelementowe, pokrywające się podciągi, gdzie każdy z nich może być w jednym ze 120 stanów. Wystąpienia stanów są zliczane i porównywane z rozkładem normalnym.

Test dopasowania wzorca bez nakładania (ang. non-overlapping template matching test) – test ten skupia się na liczbie wystąpień predefiniowanego wzorca w ciągu. Jego celem jest wykrycie generatora, który produkuje zbyt wiele zdefiniowanych, aperiodycznych wzorców. Znalezienie wzorca powoduje wznowienie szukania zaczynając za dopasowanym ciągiem.

 Test dopasowania wzorca z nakładaniem (ang. overlapping template matching test) – test działa na tej samej zasadzie jak powyższy, z tą różnicą, że znalezienie wzorca powoduje wznowienie szukania zaczynając od kolejnego bitu (występuje nakładanie).

 Test stopnia macierzy (ang. binary matrix rank test) – jest to grupa testów operujących na macierzach. Grupę tworzą różne rozmiary macierzy, które wypełniane są liczbami z badanego ciągu. Następnie przeprowadzane są odpowiednie obliczenia i przeprowadzany test zgodności z odpowiednim rozkładem.

 Test spektralny (ang. spectral test) – jest to test oparty o dyskretne przekształcenie Fouriera. Test ma za zadanie wychwycenie występowania cykliczności w badanym ciągu.

Test Maurera „Uniwersalny Statystycznie” (ang. Maurer’s „Universal Statistical”

Test) – zadaniem tego testu jest zbadanie, czy ciąg wejściowy można znacząco skompresować bez utraty informacji. Jeśli istnieje taka możliwość, to ciąg wejściowy uznawany jest za nielosowy.

Test złożoności liniowej (ang. linear complexity test) – zadaniem tego testu jest określenie, czy badany ciąg jest wystarczająco złożony by uznać go za losowy.

Złożoność bada się na podstawie długości rejestru LFSR (ang. Linear Feedback Shift Register), który dany ciąg byłby w stanie wytworzyć.

 Test seryjny (ang. serial test) – jest to test, który bada występowanie m-bitowych, nakładających się wzorców w całej sekwencji wejściowej. Oczekiwana jest równomierność występowania wzorców.

Test przybliżonej entropii (ang. approximate entropy test) – test ten funkcjonuje na podobnej zasadzie jak test seryjny. Różnica polega na tym, że porównywane są częstotliwości występowania wzorców o długości m oraz m + 1.

(21)

Strona 19 z 162

 Test sum (ang. cumulative sums test) – test ten skupia się na maksimum, jakie może zostać osiągnięte poprzez dodawanie losowo wybranych elementów przyjmujących wartości: +1 oraz -1. Aby ciąg wejściowy nie został odrzucony, obliczona wartość w przypadku tego testu powinna być bliska 0.

 Test losowych wycieczek (ang. random excursions test) – test ten koncentruje się na zliczaniu i analizowaniu liczby odwiedzin danego stanu podczas operacji dodawania przedstawionej w teście sum.

Zestaw testów oraz parametry testów powinny być odpowiednio dobrane do wymagań jakie stawiamy badanym ciągom. W dalszej części rozprawy, wszystkie ciągi badane przez autora, były analizowane za pomocą aktualnej baterii testów SP800-22. W skład baterii testów SP800-22 wchodzi 15 testów (test monobitowy, test monobitowy dla bloków, test serii, test długich serii, test stopnia macierzy, test spektralny, test dopasowania wzorca bez nakładania, test dopasowania wzorca z nakładaniem, test Maurera, test złożoności liniowej, test seryjny, test przybliżonej entropii, test sum, test losowych wycieczek, alternatywny test losowych wycieczek). Jest to zestaw rekomendowany przez NIST do testowania ciągów o dużych wymaganiach jakościowych, również w zastosowaniach kryptograficznych [22].

2.6 Zastosowania generatorów ciągów pseudolosowych

Liczby pseudolosowe znajdują zastosowanie wszędzie tam, gdzie rezultat nie powinien być obciążony subiektywną oceną sytuacji przez człowieka. Do głównych obszarów aplikacji generatorów pseudolosowych należą badania statystyczne (kontrola jakości, badania ekonomiczne, społeczne, marketingowe itp.), symulacje komputerowe (symulowanie zjawisk fizycznych, biologicznych chemicznych itp. z uwzględnieniem czynników losowych), kryptografia (generowanie kluczy, wytwarzanie bezpiecznego ciągu pseudolosowego) oraz inne, np. gry komputerowe, hazard, badanie algorytmów i systemów.

Interesującą potrzebą w dziedzinie generowania ciągów losowych jest dostarczanie kolejnych symboli losowych z coraz większą prędkością. Trend ten zauważalny jest zarówno dla generatorów TRNG, działających w oparciu o zjawiska fizyczne (np. generatory kwantowe [23]), jak i generatorów pseudolosowych. Tym samym coraz większe znaczenie mają generatory sprzętowe, które mogą działać znacznie szybciej niż ich odpowiedniki implementowane programowo, a także łatwo można je powielić i zrównoleglić, by uzyskać kilka szybkich generatorów wytwarzających niezależne ciągi, działające w jednym układzie

(22)

Strona 20 z 162

sprzętowym. W kolejnych podrozdziałach scharakteryzowano krótko podstawowe obszary zastosowań generatorów pseudolosowych.

2.6.1 Obliczenia statystyczne i analiza danych

Ten obszar zastosowań generatorów pseudolosowych obejmuje analizę numeryczną, metodologie bazodanowe, grafikę komputerową, inżynierię oprogramowania jak również zagadnienia związane z interfejsem maszyna-człowiek.

Paradygmat analizy statystycznej mówi: analiza statystyczna polega na wykorzystaniu danych obserwowanych wraz z wiedzą w danym zakresie do opracowania modelu, który posłuży do zrozumienia procesu gromadzenia danych.

Początki metod obliczeniowych wiązane są z pracami P.S. Dwayera [24] oraz Johna von Neumanna [25] opublikowanymi w latach 50-tych XX wieku. Pierwsza z nich podkreślała rolę obliczeń liniowych, a druga wagę złożonych obliczeń za pomocą liczb pseudolosowych i metody Monte Carlo.

Późniejsze badania i rosnące znaczenie komputerów w obliczeniach statystycznych doprowadziły do powstania w Bell Laboratories języka programowania o nazwie „S”. Jest to pierwszy język programowania stworzony z myślą o zastosowaniach w obliczeniach statystycznych. Na bazie „S” powstał język programowani i środowisko programistyczne

„R”, które zyskało dużą popularność i według informacji ze strony internetowej projektu „R”

[26] jest ciągle rozwijane (najnowsza wersja w chwili pisania tych słów ma numer 3.3.0 i pochodzi z dnia 03.05.2016 r.).

Generatory pseudolosowe stosowane w obliczeniach statystycznych i analizie danych muszą zapewnić jednorodność, skalowalność i zgodność, ale nie muszą przy tym spełniać znacznie ostrzejszych wymagań dotyczących bezpieczeństwa jak w kryptografii.

Do przykładowych zastosowań generatorów PRNG w obliczeniach statystycznych i analizie danych należą:

 Kalkulacja ryzyka – dotyczy przede wszystkim rynków finansowych, gdzie do późnych lat 80-tych XX wieku, ryzyko było estymowane, np. na bazie teorii portfolio, analizy wrażliwości czy po prostu na podstawie scenariuszy „co jeśli”. Analizy te znajdowały jednak zastosowanie tylko dla specyficznych zasobów lub opierały się na subiektywnym rozumowaniu. Obecne metody opierają się na obliczaniu wartości zagrożonej ryzykiem (ang. Value at Risk).

(23)

Strona 21 z 162

 Ekonometria – rozwój technologii informatycznej pozwala na monitorowanie i zbieranie coraz większej ilości danych. Dokładne, wysokiej jakości dane ekonomiczne, stały się dostępne niemal dla każdego badacza, który na ich bazie może próbować szukać odpowiedzi na stawiane przez niego pytania.

 Biologia – w tej dziedzinie badania statystyczne wykorzystywane są np. do wyznaczenia struktury białek, gdzie wykorzystywana jest geometria statystyczna.

2.6.2 Symulacje komputerowe

Symulacja może być zdefiniowania jako imitowanie systemu za pomocą jego prototypu, w celu wykrycia wad i problemów towarzyszących temu systemowi, aby możliwe było ich skorygowanie. Przykładem badanego systemu może być system kolejkowy w banku, który składa się z wielu elementów jak np. klient, pracownik, dokumenty itp.

Systemy dzielą się na dyskretne i ciągłe. W systemach dyskretnych, wartości zmiennych ulegają zmianie w dyskretnych punktach czasu, natomiast w systemach ciągłych, zmiany te następują w sposób ciągły w czasie.

W dzisiejszych czasach symulacje stosowane są w niemal każdej dziedzinie nauki i technologii. Przykładowo są to:

symulacje produkcji (np. symulacje wrażliwości na zaburzenia w łańcuchu dostaw, optymalizacja produkcji minimalizującej stany magazynowe),

 symulacje transportu i logistyki (np. opóźnienia w sieciach transportowych, wykrywanie wąskich gardeł systemu transportowego),

symulacje wojskowe (np. symulacje użycia broni, symulacje dotyczące systemów łączności),

symulacje sieciowe (np. symulacje pozwalające optymalizować strukturę sieci i testować nowe protokoły),

symulacje konstrukcji (np. symulacje wpływu warunków atmosferycznych na konstrukcję budynku, symulacje katastrof),

 symulacje zachowań społecznych (np. symulacja zachowania tłumu),

 symulacje środowiska naturalnego (np. symulacje zmian klimatycznych, symulacje dotyczące gwałtownych zdarzeń jak tsunami),

 symulacje systemu opieki zdrowotnej (np. symulacje w przypadku wystąpienia epidemii),

(24)

Strona 22 z 162

symulacje procesów tworzenia nowych struktur biologicznych, chemicznych itp. pod wpływem czynnika losowego.

Obszarów zastosowań symulacji komputerowych jest bardzo dużo, gdyż w zasadzie możemy symulować dowolne zjawiska. W bardzo złożonych symulacjach niezbędne staje się dostarczenie dużej liczby danych pseudolosowych w jednostce czasu, które stanowią ważny element procesu imitowania rzeczywistego systemu.

2.6.3 Kryptografia

Kolejnym, bardzo istotnym obszarem zastosowań generatorów pseudolosowych jest kryptografia. Dla tej klasy aplikacji, generatory muszą spełnić dodatkowe wymagania:

generowane liczby powinny być nieprzewidywalne dla obserwatora,

obserwując dowolnie długi ciąg, nie powinno być możliwe ustalenie stanu wewnętrznego lub ziarna generatora,

znajomość dowolnej liczby wytworzonych bitów, nie powinna umożliwić predykcji kolejnych z prawdopodobieństwem znacznie większym niż 0.5,

długość okresu generatora powinna być dostosowana do aplikacji.

Generatory skalowalne zaproponowane w rozprawie nie spełniają wymagań aplikacji kryptograficznych. Mogą jednak posłużyć jako elementy źródłowe, za pomocą których skonstruowany zostanie generator o odpowiednich właściwościach. Przykład takiej konstrukcji znajduje się w pracy [27].

(25)

Strona 23 z 162

3 Układy FPGA

3.1 Wprowadzenie

Układy FPGA to układy scalone, które posiadają możliwość konfigurowania przez użytkownika już po ich wyprodukowaniu. Z punktu widzenie konstruktora, dają one takie same możliwości jak układy ASIC (ang. Application Specyfic Integrated Circuit), z tym że mogą być programowane wielokrotnie nawet w docelowym, funkcjonującym urządzeniu elektronicznym. Dzięki temu możliwe jest stosunkowo proste przygotowanie i przetestowanie prototypowej wersji układu, który następnie może zostać wyprodukowany już jako układ ASIC. Wadą układów FPGA w stosunku do układów ASIC jest ich wolniejsze działanie, wynikające z ich uniwersalności i możliwości rekonfiguracji oraz większy pobór mocy.

Głównym elementem konstrukcji układów FPGA są bloki logiczne nazywane, w zależności od producenta: CLB (ang. Configurable Logic Blocks) lub LAB (ang. Logic Array Block).

Pojedynczy blok logiczny to zbyt mało, aby zaimplementować złożony układ cyfrowy, dlatego wewnątrz FPGA znajdują się matryce bloków oraz dodatkowe elementy takie jak trakty połączeniowe (ang. routing channels), czy programowalne bloki wejściowo-wyjściowe IOB.

W układach FPGA można zazwyczaj znaleźć konfigurowalne bloki pamięci RAM, które mogą pracować w trybie dwuportowym. W niektórych modelach również konfigurowalne bloki przetwarzania sygnałów cyfrowych DSP (ang. digital signal processing), wyspecjalizowane układy wejścia-wyjścia, a nawet rdzenie procesorów (PowerPC, ARM).

Producenci coraz bardziej integrują całe systemy, udostępniając obecnie systemy typu SoC, które składają się z procesora oraz układów peryferyjnych (liczniki, układy komunikacyjne, magistrale, przetworniki AC i CA itp.), a także programowalnej matrycy logicznej (układu FPGA) działającej w tej samej strukturze krzemu – w jednym układzie scalonym. Przykładem takiej konstrukcji są układy serii Zynq-7000 firmy Xilinx (dwa rdzenie ARM Cortex A9 MPCore oraz FPGA), czy też Arria V FPGA firmy Altera (dwa rdzenie ARM CORTEX A9 MPCore oraz FPGA). Tak dalece idąca integracja pozwala na optymalizację procesu wymiany danych pomiędzy procesorem, odpowiedzialnym za funkcjonowanie systemu operacyjnego np. Linux, a wyspecjalizowanymi, zaprojektowanymi dla danej aplikacji, szybkimi blokami logicznymi działającymi w strukturze FPGA. Innymi słowy, możliwa jest implementacja procesów, dla których bardziej optymalne jest przetwarzanie sekwencyjne (procesor), jak i procesów, dla których bardziej optymalne jest przetwarzanie równoległe

(26)

Strona 24 z 162

(FPGA), w jednym układzie scalonym. Efektem zastosowania takiej konstrukcji jest mniejszy rozmiar i pobór mocy systemu oraz wzrost szybkości przetwarzania.

Nowoczesne konstrukcje układów FPGA pozwalają na częściową rekonfigurację w trakcie pracy całego systemu. Taka funkcjonalność otwiera konstruktorom nowe możliwości, gdyż umożliwia konstruowanie systemów i komputerów rekonfigurowalnych. Systemy rekonfigurowalne mogą dynamicznie zmieniać swoją strukturę, co pozwala im dostosowywać funkcjonalność do obecnych wymagań, zadań czy warunków.

Do najbardziej znanych i największych producentów układów FPGA należą firmy Xilinx oraz Altera. Na początku 2014 roku ich łączny udział w rynku sięgał 90% [28]. Pozostała część rynku dzielona jest głównie przez: Lattice Semiconductor, Microsemi (dawniej Actel), Achronix i QuickLogic.

Pierwsze na świecie układy FPGA zostały wprowadzone przez firmę Xilinx w 1985 roku.

3.2 Architektura

Typowa architektura układów FPGA składa się z matrycy bloków logicznych (CLB lub LAB), układów wejścia-wyjścia i traktów połączeniowych. Typowymi elementami są również bloki pamięci RAM, sprzętowe multiplikatory oraz syntezery sygnałów zegarowych (DCM, ang. Digital Clock Manager).

3.2.1 Konfigurowalny blok logiczny (CLB / LAB)

Pojedynczy konfigurowalny blok logiczny, czyli podstawowy element budowy układów FPGA, składa się przede wszystkim z elementów realizujących dowolne funkcje logiczne.

W zależności od producenta układu programowalnego oraz jego modelu, konfigurowalny blok logiczny rożni się nieco budową (np. generatory funkcji w układach Spartan-3 są czterowejściowe, natomiast w Spratan-6 już sześciowejściowe). Pomimo różnic pomiędzy konkretnymi rozwiązaniami, sama idea działania konfigurowalnych bloków logicznych pozostaje niezmieniona.

Przykładowy blok CLB dla układów Spartan-6 firmy Xilinx [29] składa się z pary elementów zwanych slice nie połączonych bezpośrednio ze sobą (rys. 3.1). Każdy z nich zawiera cztery sześciowejściowe tablice LUT (ang. Look-up Table – pełnią rolę generatorów funkcji) oraz osiem elementów pamięciowych. Dodatkowo niektóre elementy typu SLICE mogą pełnić rolę elementów pamięciowych (pamięć rozproszona, ang. distributed RAM) lub 32-bitowych rejestrów przesuwnych, a także zawierać logikę szybkich przeniesień (ang. carry logic).

(27)

Strona 25 z 162

Rysunek 3.1. Rozmieszczenie elementów typu SLICE wewnątrz bloku CLB w układzie Spartan-6 [20]

Przykładowa komórka typu SLICE widoczna jest na rysunku 3.2. Każdy CLB podłączony jest do magistrali połączeniowej pozwalającej na uzyskanie dostępu do głównej magistrali traktów połączeniowych.

3.2.2 Komórki wejścia / wyjścia (IOB)

Główną rolą komórek wejścia wyjścia w układach FPGA jest zapewnienie komunikacji pomiędzy blokami logicznymi, skonfigurowanymi zgodnie z projektem utworzonym przez użytkownika, a otoczeniem.

Porównując komórki wejścia wyjścia układów FPGA z komórkami wejścia wyjścia, które dostępne są w mikrokontrolerach, można z łatwością zauważyć znaczną przewagę tych pierwszych. Komórki IOB układów FPGA, poza zdefiniowaniem trybu pracy (wejściowy, wyjściowy, wysoka impedancja), pozwalają również zdefiniować standard logiczny (uwzględniając standardy różnicowe), czy możliwość pracy na dwóch zboczach zegara taktującego (np. do komunikacji z pamięcią typu DDR). Dodatkowo, dla każdej linii niezależnie, możliwe jest: włączenie rezystora typu pull-up lub pull-down, włączenie tzw.

pin-keepera (przerzutnik utrzymujący na wyjściu ostatnio wymuszony stan logiczny z zewnątrz), wybranie wydajności prądowej oraz ustalenie szybkości zmian sygnału na wyjściu (stromość zbocza).

(28)

Strona 26 z 162

Rysunek 3.2. Budowa komórki SLICEM w układzie Spartan-6 [20]

Uproszczony schemat komórki wejścia wyjścia układu Spartan-3 pokazany został na rysunku 3.3. W układach FPGA wydzielone są komórki wejścia wyjścia, do których podłącza się globalne sygnały zegarowe taktujące wewnętrzne bloki logiczne. Takie wydzielenie jest konieczne, gdyż wejścia zegarowe dołączone są bezpośrednio do globalnych linii zegarowych, które są zoptymalizowane do szybkiego i równomiernego (brak przesunięć) dostarczania sygnału taktującego do bloków funkcjonalnych.

(29)

Strona 27 z 162

Rysunek 3.3. Uproszczony schemat komórki IOB układu Spartan-3 [22]

3.2.3 Generatory wewnętrznych sygnałów zegarowych

Firma Xilinx wyposażyła swoje układy programowalne w zaawansowany syntezer częstotliwości zwany DCM. Schemat funkcjonalny takiego bloku dostępnego w układach Spartan-6 pokazano na rysunku 3.4. Firma Altera podobną funkcjonalność nazywa po prostu PLL (ang. Phase-Locked Loop).

Cytaty

Powiązane dokumenty

Często strażak musi umieć podejmować szybko decyzję, bo w ratowaniu ludzkiego życia ważna jest każda sekunda?. Kolejną ważną cechą strażaka jest poświęcenie dla innych i

Informacja zwrotna: zadania wykonane w zeszycie, wysyłane wyrywkowo do sprawdzenia, w razie wątpliwości jakiegoś zadania rozwiązujemy je na

W tej pierwszej menu znajduje się po lewej stronie okna i jest wzbogacone o dodatkowe funkcjonalności, ułatwiające tworzenie nowych kart pracy i dodawanie

Celem artykułu jest analiza kształtowania się sytuacji na regionalnych rynkach pracy w latach 2008 i 2013, w tym jego płynności oraz wpływu na rynek pracy zmian demograficznych

Koszty wejścia 0,00% Wpływ kosztów, które inwestor ponosi przy rozpoczynaniu inwestycji Koszty wyjścia 0,00% Wpływ kosztów wyjścia

Clamence sam się oskarża, sam się spowiada, zaś jego ustami, wedle Girarda, spowiada się także autor, przekonany, że współczesny mu świat uniemożliwia dotarcie do

W przypadku gdy nie posiadamy żadnych informacji o rozkładzie wektorów dopuszczalnych (czyli spełniających ograniczenia z rozdziału 3) wśród wszystkich wektorów,

Jeśli zaczynasz i / lub nie masz gotowego źródła pracy, może to być dobry zakład, ale pamiętaj, że stawki, których możesz się spodziewać, mogą być niższe niż te, które