Systemy typu SoPC Orkiszewski Marcin Projektowanie Programowalnych Układów Scalonych z-2009
Mikrokontrolery vs. FPGA MCU cena łatwość montaŝu łatwość programowania > >> >>> FPGA cena łatwość montaŝu łatwość programowania Układy FPGA mają zastosowanie w specjalistycznych dziedzinach, gdzie wymagana jest duŝa wydajność obliczeniowa lub przetwarzanie strumieniowe 2
Podział rynku (2004 r.) źródło: Gartner 3
Układy FPGA - perspektywy Coraz więcej danych - telekomunikacja, pomiary Coraz większe wymagania - telewizory, dekodery, gry, kryptografia Rekonfigurowalność (hardware update) - dopasowywanie się architektury do wymagań! Coraz mniejszy wpływ układu na cenę urządzenia Systemy typu SoPC 4
System on Programmable Chip System mikroprocesorowy implementowany w układach logicznych (np. FPGA) Stworzony w języku opisu sprzętu (VHDL, Verilog) Programowany przy uŝyciu C, C++, Assemblera 5
Zalety systemów SoPC (1/2) Pełna konfigurowalność dowolna liczba modułów DMA, interfejsów, portów, kontrolerów pamięci, itp. MoŜliwość utworzenia systemu złoŝonego z więcej niŝ jednego procesora 6
Zalety systemów SoPC (2/2) MoŜliwość dodawania własnych instrukcji i komponentów (VHDL, Verilog) Interfejsy do projektów napisanych w VHDL, Verilog Krótki czas realizacji MoŜliwość szybkiej weryfikacji koncepcji 7
Altera Nios II 8
9
Systemy SoPC Nios II (Altera Altera) MicroBlaze (Xilinx) OpenRisc (OpenCores) - darmowy Leon III (Gaisler) - darmowy 10
Architektura systemu NIOS II
Od czego zacząć Wymagane oprogramowanie (darmowe): Quartus II v. 9.0 Nios IDE v. 9.0 Do pobrania na stronie www.altera.com (wraz z dokumentacją). 12
Architektura Procesor 32 bitowy Gotowe komponenty: - Ethernet, RS-232, USB, PCI, SPI, JTAG, itp.., - Kontrolery pamięci (SDRAM, SRAM, Flash), - Pamięci OnChip, - Liczniki, DMA, PLL, porty I/O, VGA, itd.. Własne komponenty 13
14
Altera Avalon (1/2) System realizujący połączenia między komponentami Memory Mapped komponenty rozmieszczone w przestrzeni adresowej Streaming Mode bezpośrednie połączenie między komponentami 15
Altera Avalon (2/2) KaŜdy port typu Master posiada bezpośrednie połączenie z wybranym portem typu Slave W przypadku próby jednoczesnego dostępu wykonywany jest arbitraŝ (w przykładzie 4:1) 16
Komunikacja z komponentami 17
Komunikacja z komponentami Przez rejestry: STATUS stan pracy komponentu np. ukończenie pobierani danych, zgłoszenie przerwania CONTROL rejestr konfiguracyjny np. odblokowanie przerwań, start, stop, reset, itp.. DATA rejestr danych SPECJALISTYCZNE w zaleŝności od komponentu np. LENGTH, PERIODL, PERIODH, itd.. 18
Komponent PIO mapa rejestrów 19
Komponent TIMER mapa rejestrów 20
UART (Universal Asynchronous Receiver and Transmitter) Idea zarządzanie transmisją danych np. RS-232, RS-485 lub między komponentami 21
Komunikacja na poziomie kodu Przez makrodefinicje: IOWR_ALTERA_AVALON_PIO_DATA( LEDS_BASE, 0x23 ); wpis komponent rejestr adres bazowy dane status = IORD_ALTERA_AVALON_UART_STATUS( UART_BASE ); dane odczyt komponent rejestr adres bazowy system.h - nagłówek z adresami bazowymi komponentów altera_avalon_ altera_avalon_pio_regs.h, altera_avalon_ altera_avalon_uart_regs.h nagłówki makr 22
Timer - uruchomienie IOWR_ALTERA_AVALON_TIMER_CONTROL( TIMER_BASE, 0x02 0x04 ); Ustawienie pracy ciągłej (bez restartu) oraz uruchomienie licznika 23
Timer koniec odliczania status = IORD_ALTERA_AVALON_TIMER_STATUS( TIMER_BASE ); if( status & 0x01 ) IOWR_ALTERA_AVALON_TIMER_STATUS( TIMER_BASE, 0 ); 24
UART - koniec transferu // czy otrzymano dane if( IORD_ALTERA_AVALON_UART_STATUS( UART_BASE ) & 0x80 ) // czy dane wysłane while(! (IORD_ALTERA_AVALON_UART_STATUS( DMA_BASE ) & 0x40) ) ; 0x40 0x80 25
Przykładowy projekt (w 15 minut)
Połączenie z szyną Avalon 27
Sygnały (1/6) Sygnały kontrolne: [in] reset reset [in] clk zegar [out] irq przerwanie (musi trwać wystarczająco długo, mechanizm dezaktywacji) 28
Sygnały (2/6) Szyny danych: [in] writedata(.. downto 0) szyna przesyłająca dane szyna przesyłająca dane do komponentu [out] readdata(.. downto 0) szyna odczytująca dane szyna odczytująca dane z komponentu [bidir] data(.. downto 0) szyna dwukierunkowa Szyny muszą być tej samej szerokości. Szerokość szyn musi być potęgą 2. 29
Sygnały (3/6) address - szyna adresowa [in] address(.. downto 0) szyna adresowa określająca rejestr docelowy IOWR( SWAP_IN1_BASE, 1, data); address <= b 01 if (address = b 00 ) then register_0 <= writedata; elsif (address = b 01 ) then register_1 <= writedata; 30
Sygnały (4/6) write - Ŝądanie zapisu 31
Sygnały (5/6) read - Ŝądanie odczytu 32
Sygnały (6/6) waitrequest - Ŝądanie wstrzymania transferu 33
Przykładowy zapis process( clk ) variable addr : INTEGER := conv_integer(address); begin if ( clk'event and clk = '1' ) then if ( (write = '1') and (chipselect = '1') ) then end if; registers( addr ) <= writedata; end if; end process; 34
Przykładowy odczyt process( clk ) variable addr : INTEGER := conv_integer(address); begin if ( clk'event and clk = '1' ) then if ( (read = '1') and (chipselect = '1') ) then end if; readdata <= registers(addr); end if; end process; 35
Konwencja nazw sygnałów (typ portu)_(nazwa portu)_(nazwa sygnału) Np. csi_clock_clk csi_clock_reset_n ins_interrupt_irq : in STD_LOGIC; : in STD_LOGIC; : out STD_LOGIC; avs_in1_chipselect avs_in1_write_n avs_in1_address avs_in1_writedata : in STD_LOGIC; : in STD_LOGIC; : in STD_LOGIC_VECTOR(1 downto 0); : in STD_LOGIC_VECTOR(31 downto 0); avs_out1_chipselect avs_out1_read_n avs_out1_address avs_out1_readdata : in STD_LOGIC; : in STD_LOGIC; : in STD_LOGIC_VECTOR(1 downto 0); : out STD_LOGIC_VECTOR(31 downto 0)); 36
Test komponentu #include system.h #include <io.h> int main() { int i, result, testvalue = 0x11113333; for(i=0; i<3; i++) { IOWR( SWAP_IN1_BASE, 0, testvalue ); result = IORD( SWAP_OUT1_BASE, 0 ); testvalue <<= 1; } } return 0; 37
MemoCode 2008 Koło Naukowe Układów Cyfrowych DEMAIN
Zadanie: Posortować liczby 128-bitowe w jak najkrótszym czasie. Liczby nie mogą się powtarzać. Liczba danych 2^n (max max. 4MB). 39
Algorytm sortujący: Jaki algorytm sortujący pasuje do układów FPGA? Mergesort rekurencyjne sklejanie uporządkowanych zbiorów. Sklejanie łączenie strumieni. 40
Implementacja 1x DMA do obsługi SDRAM 2x DMA 128 bitowe Komparator 128 bitowy Algorytm rekurencyjny 41
42
43
Sterowanie Całe sterowanie sortowaniem polega na odpowiednim uruchamianiu poszczególnych DMA wraz z wyliczonymi nowymi adresami 44
45
Porównanie szybkości działania Sekundy Czas sortowania 600 586 500 400 300 278 Software Hardware 200 133 100 0 18,7 0,84 1,79 3,75 7,83 4 8 16 32 MB 46
Kryptoanaliza szyfrów opartych na krzywych eliptycznych
Architektura SoPC (dla układu DE2 70) 5 jednostek obliczeniowych częstotliwość taktowania 100 MHz programowa obsługa stosu TCP/IP (biblioteka LightWeight IP) sprzętowa obsługa MAC - 100 Mbit/s 48
Platformy uruchomieniowe Wykorzystano platformy: DK-N2EVAL N2EVAL-3C25N dla celów prototypowania rozwaŝanych rozwiązań DK-DEV DEV-3C120N duŝe moŝliwości obliczeniowe 49
Platformy uruchomieniowe Wykorzystano platformy: DE2-70-EP2C70N duŝe moŝliwości obliczeniowe DE2-EP2C35N EP2C35N dodatkowe jednostki 50
Wstępne wyniki Liczba jednostek w układzie FPGA 1 5 70 Częstotliwość zegara 100 MHz 100 MHz 100 MHz Efektywność obliczeń 10 mln sumowań / sek. 50 mln sumowań / sek. 700 mln sumowań / sek. Czas potrzebny na złamanie krzywej ~ 21 dni ~ 4 dni ~ 7 godzin eliptycznej ECC2_89 Krzywa ECC2_89 została złamana w 1998 roku. Jej złamanie zajęło 26 dni (70 * 500 MHz workstation running Linux). 51
Więcej o systemie NIOS II na stronie Koła: http://demain.zpt.tele.pw.edu.pl Publikacje Wesołych świąt! 52