Postęp technologiczny w dziedzinie układów reprogramowalnych FPGA (Field Programmable Gate Arrays) jaki nastąpił w ostatnim dziesięcioleciu otwiera nowe możliwości w dziedzinie implementacji algorytmów kryptograficznych. Struktury FPGA mogą być opisane jako macierz programowalnych komórek logicznych połączonych siecią programowalnych połączeń. Każda komórka logiczna umożliwia realizację prostej funkcji logicznej (ograniczonej liczby zmiennych) zdefiniowanej przez użytkownika za pomocą narzędzia komputerowego wspomagania projektowania CAD. Typowy układ programowalny składa się z dużej liczby (od 64 do ponad 1000000) takich komórek, które dzięki programowalnym połączeniom mogą zostać wykorzystane do budowy złożonych układów cyfrowych. Możliwość manipulowania logiką układu na poziomie komórek oznacza, że projektant może stworzyć specjalizowany procesor efektywnie realizujący zadany algorytm.
Bardzo często zadane funkcje muszą zostać zrealizowane w systemach zagrzebanych (embedded systems) stanowiących specjalizowane systemy procesorowe często działające w uwarunkowaniach czasu rzeczywistego. Biorąc pod uwagę złożoność i specyficzny charakter algorytmów kryptograficznych staje się oczywiste, że zaprojektowanie specjalizowanego systemu realizującego te algorytmy dla systemów czasu rzeczywistego jest dużym wyzwaniem. Tego typu rozwiązania są zazwyczaj realizowane jako systemy sprzętowo/programowe. W ogólności część programowa odpowiada za funkcjonalność i umożliwia łatwą modyfikację, natomiast część sprzętowa stosowana jest dla zwiększenia wydajności całego systemu.
Pojecie kosyntezy sprzętowo/programowej (HW/SW co-synthesis) wprowadzono około 15 lat temu. Może być ono zdefiniowane jako równoczesne projektowanie zarówno oprogramowania, jak i sprzętu, które wspólnie realizują zadaną funkcjonalność. Postępujący rozwój mikroprocesorów sprawia, że projektowanie systemów na nich opartych staje się ważnym fragmentem dziedziny projektowania układów scalonych. Wraz z postępem w mikroelektronice skala integracji układów stała się obecnie tak duża, że możliwe jest zrealizowanie zarówno mikroprocesora, jak i innych podsystemów w jednym układzie scalonym. Tego typu rozwiązanie nosi nazwę System on Chip (SoC). Rozwiązania typu SoC stają się doskonałym zamiennikiem wieloukładowych systemów komputerowych. Projekty SoC oferują jednoukładowe rozwiązanie, mniejszy pobór mocy, prostszą integrację, mniejszą liczbę elementów – wszystko to w oczywisty sposób predestynuje takie rozwiązania do realizacji systemów wbudowanych. Projektowanie systemów SoC wymaga znajomości zarówno z obszaru projektowania oprogramowania jak i sprzętu.
Najbardziej istotnym etapem w kosyntezie sprzętowo/programowej systemów SoC jest odpowiedni podział funkcjonalności systemu na część, która powinna być zrealizowana programowo i na część realizowaną sprzętowo. Uzyskuje się to zazwyczaj w procesie iteracyjnym poprzez dokonywanie różnych podziałów i sprawdzenie jakości tak powstałych systemów.
Najczęściej podział zakłada się z góry i na tak wczesnym etapie procesu projektowego jak tylko jest to możliwe, ponieważ jakiekolwiek zmiany w tym podziale najczęściej pociągają za sobą duże zmiany w projekcie. Biorąc pod uwagę fakt, że część sprzętowa jest realizowana jako specjalizowany układ scalony ASIC (Application Specific Integrated Circuit), którego proces fabrykacji jest względnie kosztowny i czasochłonny, nie jest możliwe sprawdzenie dostatecznie dużej liczby podziałów sprzęt/program tak, by opracować najlepsze rozwiązanie.
Całkowicie inaczej wygląda to w przypadku, gdy część sprzętowa realizowana jest w strukturach programowalnych FPGA (Field Programmable Gate Array). Dzięki możliwościom programowania ta technologia oferuje znacznie krótszy czas i mniejsze koszty procesu projektowego w porównani do technologii ASIC. To umożliwia realizacje projektowanego sytemu jako System on Programmable Chip (SoPC). Co więcej zastosowanie procesorów typu soft core z możliwością rozszerzania listy instrukcji (procesor NIOS II) umożliwia łatwą identyfikację elementów algorytmu, które należy realizować w sprzęcie i prostą integrację tych elementów zrealizowanych sprzętowo z częścią programową tworząc system SoPC.
W swej pracy naukowej zajmuję się realizacją sprzętową systemów cyfrowych w strukturach programowalnych. Celem jest stworzenie systemów o jak największej efektywności i jak najlepszym wykorzystaniu zasobów struktur programowalnych. W tym celu stosuję metody projektowania i narzędzia akademickie opracowane w Zakładzie Cyberbezpieczeństwa oraz w innych ośrodkach uniwersyteckich.
- przetwarzania obrazów,
- obróbki dźwięku,
- kompresji,
- transmisji danych (protokoły, zabezpieczania, itp.),
- sztucznej inteligencji,
- kryptografii.
Realizowane systemy opracowywane są zazwyczaj jako rdzenie projektowe (IP core) i są prototypowane na płytach uruchomieniowych dostępnych w Zakładzie Cyberbezpieczeństwa.