Zastosowanie plis w nowoczesnych urządzeniach. Nowości i portal analityczny „Czas elektroniki” Przykłady projektów dla dużych projektów FPGA

Wyobraź sobie, że procesor zamiast wykonywać określony zestaw instrukcji, zostanie przebudowany dla każdego programu i zamieni algorytm bezpośrednio na sprzęt. Dokładnie tak działają FPG. W dzisiejszym artykule opowiem jak to w ogóle jest możliwe i przedstawię różne metody projektowania układów FPGA.

Na początek trzeba trochę zrozumieć logikę cyfrową układów ASIC, ale rozpoczęcie od nich jest bardzo trudne i kosztowne, dlatego lepiej zacząć od układów FPGA.

Co to jest FPGA?

FPGA oznacza programowalną przez użytkownika tablicę bramek (programowalne przez użytkownika tablice bramek, FPGA). Mówiąc bardziej ogólnie, nazywane są one FPGA – programowalnymi układami scalonymi logicznymi.

Korzystając z FPGA, możesz dosłownie projektować cyfrowe mikroukłady, siedząc w domu z dostępną płytą debugującą na stole i oprogramowaniem programistycznym za kilka tysięcy zielonych rubli. Ale są też opcje bezpłatne. Uwaga: chodzi o projektowanie, a nie programowanie, ponieważ na wyjściu otrzymamy fizyczny układ cyfrowy, który na poziomie sprzętowym realizuje określony algorytm, a nie program dla procesora.

Działa to w następujący sposób. Istnieje gotowa płytka drukowana z zestawem interfejsów, które są podłączone do zainstalowanego na płytce układu FPGA, coś w rodzaju tej fajnej płytki do centrum danych lub tej płytki debugowania do treningu.

Dopóki nie skonfigurujemy FPGA, w chipie po prostu nie ma logiki przetwarzającej dane z interfejsów i dlatego oczywiście nic nie będzie działać. Ale w wyniku projektu powstanie firmware, który po wgraniu do FPGA stworzy potrzebny nam układ cyfrowy. W ten sposób można stworzyć kontroler Ethernet 100G, który będzie odbierał i przetwarzał pakiety sieciowe.

Ważną cechą FPGA jest jej rekonfigurowalność. Załóżmy, że teraz potrzebujemy kontrolera Ethernet 100G, a za tydzień na tej samej płycie będziemy mogli zaimplementować cztery niezależne interfejsy Ethernet 25G.

Na rynku działa dwóch wiodących producentów układów FPGA: dobrze znani Intel i Xilinx. Kontrolują 58 i 42% rynku. Założyciele Xilinx wynaleźli swój pierwszy układ FPGA w 1985 roku. Intel wszedł na rynek całkiem niedawno – w 2015 roku, po wchłonięciu Altery, która powstała w tym samym czasie co Xilinx. Technologie Altera i Xilinx są podobne pod wieloma względami, podobnie jak środowiska programistyczne. Częściej pracowałem z produktami Xilinx, więc nie dziw się, że w artykule jest o tym stale wspominana.

Układy FPGA są szeroko stosowane w różnych dziedzinach: elektronice użytkowej, sprzęcie telekomunikacyjnym, płytkach akceleratorów do użytku w centrach danych, robotyce, prototypowaniu układów ASIC. Przyjrzę się kilku przykładom poniżej.

Przyjrzymy się także technologii zapewniającej rekonfigurację sprzętu, zapoznamy się z procesem projektowania i przyjrzymy się prostemu przykładowi implementacji licznika sprzętowego w Verilog. Jeśli masz dowolną płytkę rozwojową FPGA, powinieneś być w stanie samodzielnie to odtworzyć. Jeśli nie ma płytki, nadal możesz zapoznać się z Verilog, symulując działanie obwodu na swoim komputerze.

Zasada działania FPGA

Układ FPGA to ten sam, niestandardowy układ ASIC, składający się z tych samych tranzystorów, z których montowane są przerzutniki, rejestry, multipleksery i inne elementy logiczne dla konwencjonalnych obwodów. Oczywiście nie da się zmienić kolejności łączenia tych tranzystorów. Ale architektonicznie mikroukład jest zbudowany w tak sprytny sposób, że możliwa jest zmiana przełączania sygnałów pomiędzy większymi blokami: nazywane są one CLB – programowalnymi blokami logicznymi.

Możliwa jest także zmiana funkcji logicznej, jaką pełni CLB. Osiąga się to dzięki temu, że cały układ jest przesiąknięty komórkami pamięci statycznej konfiguracji RAM. Każdy bit tej pamięci albo steruje jakimś kluczem przełączającym sygnał, albo jest częścią tabeli prawdy funkcji logicznej implementowanej przez CLB.

Ponieważ pamięć konfiguracyjna zbudowana jest w technologii Static RAM, po pierwsze, gdy układ FPGA jest włączony, układ musi zostać skonfigurowany, a po drugie, układ można rekonfigurować niemal nieskończoną liczbę razy.

Bardzo uproszczona struktura chipa 2D bez pamięci konfiguracyjnej

Elementy CLB znajdują się w strukturze przełączników, która definiuje połączenia między wejściami i wyjściami elementów CLB.

Schemat matrycy przełączającej

Na każdym skrzyżowaniu przewodów znajduje się sześć przełączników sterowanych przez własne komórki pamięci konfiguracyjnej. Otwierając niektóre i zamykając inne, można zapewnić różne przełączanie sygnałów pomiędzy CLB.

CLB

CLB składa się po prostu z bloku, który definiuje funkcję boolowską na podstawie kilku argumentów (nazywa się to tabelą przeglądową, LUT) i wyzwalacza (przerzutnik, FF). We współczesnych układach FPGA tablica LUT ma sześć wejść, ale dla uproszczenia na rysunku pokazano trzy. Wyjście LUT jest podawane na wyjście CLB albo asynchronicznie (bezpośrednio), albo synchronicznie (poprzez przerzutnik FF działający na zegarze systemowym).

Zasada implementacji LUT

Interesujące jest przyjrzenie się zasadzie implementacji LUT. Załóżmy, że mamy jakąś funkcję boolowską y = (a i b) | ~ ok. Jego schemat obwodu i tabelę prawdy pokazano na rysunku. Funkcja ma trzy argumenty, więc przyjmuje 2^3 = 8 wartości. Każdy z nich odpowiada własnej kombinacji sygnałów wejściowych. Wartości te są obliczane przez program do tworzenia oprogramowania układowego FPGA i zapisywane w specjalnych komórkach pamięci konfiguracyjnej.

Wartość każdej komórki jest podawana na wejście wyjściowego multipleksera LUT, a argumenty wejściowe funkcji logicznej służą do wyboru jednej lub drugiej wartości funkcji. CLB jest najważniejszym zasobem sprzętowym FPGA. Liczba modułów CLB w nowoczesnych układach FPGA może się różnić i zależy od typu i pojemności układu. Xilinx umiera, a liczba CLB waha się od około czterech tysięcy do trzech milionów.

Oprócz CLB, w FPGA znajduje się wiele innych ważnych zasobów sprzętowych. Na przykład sprzętowe jednostki mnożąco-akumulujące lub jednostki DSP. Każdy z nich może w każdym cyklu zegara wykonywać operacje mnożenia i dodawania na liczbach 18-bitowych. W najwyższej klasy kryształach liczba bloków DSP może przekraczać 6000.

Kolejnym zasobem są bloki pamięć wewnętrzna(Blokuj pamięć RAM, BRAM). Każdy blok może przechowywać 2 KB. Całkowita pojemność takiej pamięci, w zależności od kryształu, może wynosić od 20 KB do 20 MB. Podobnie jak CLB, BRAM i bloki DSP są połączone tkaniną przełącznikową i rozciągają się na całej matrycy. Łącząc ze sobą bloki CLB, DSP i BRAM, można uzyskać bardzo wydajne obwody przetwarzania danych.

Zalety FPGA

Pierwszy układ FPGA stworzony przez firmę Xilinx w 1985 roku zawierał tylko 64 moduły CLB. W tamtym czasie integracja tranzystorów w chipach była znacznie mniejsza niż obecnie, a urządzenia cyfrowe często korzystały z chipów „logiki rozproszonej”. Były oddzielne mikroukłady dla rejestrów, liczników, multiplekserów i mnożników. Pod konkretne urządzenie stworzyliśmy własną płytkę drukowaną, na której zainstalowano te mikroukłady o niskiej integracji.

Zastosowanie FPGA umożliwiło rezygnację z tego podejścia. Nawet układ FPGA 64 CLB pozwala zaoszczędzić znaczną ilość miejsca płytka drukowana, a dostępność rekonfiguracji dodała możliwość aktualizacji funkcjonalności urządzeń po wyprodukowaniu podczas pracy, jak to się mówi „w terenie” (stąd nazwa - tablica bramek programowalna przez użytkownika).

Ze względu na fakt, że wewnątrz układu FPGA można zbudować dowolny sprzętowy układ cyfrowy (najważniejsze, że jest wystarczająca ilość zasobów), jednym z ważnych zastosowań układów FPGA jest prototypowanie układów ASIC.

Rozwój układów ASIC jest bardzo złożony i kosztowny, koszt błędu jest bardzo wysoki, a kwestia testowania logiki ma kluczowe znaczenie. Dlatego jednym z etapów rozwoju, jeszcze przed rozpoczęciem prac nad fizyczną topologią układu, było jego prototypowanie na jednym lub większej liczbie układów FPGA.

Do rozwoju ASIC produkowane są specjalne płytki zawierające wiele połączonych ze sobą układów FPGA. Prototypowy mikroukład działa na znacznie niższych częstotliwościach (może kilkudziesięciu megaherców), ale pozwala zaoszczędzić na identyfikowaniu problemów i błędów.

Jednak moim zdaniem jest więcej interesujących zastosowań układów FPGA. Elastyczna struktura FPGA pozwala na realizację układów sprzętowych do szybkiego i równoległego przetwarzania danych z możliwością zmiany algorytmu.


Porównanie platform sprzętowych

Zastanówmy się, jak zasadniczo różnią się procesory, karty graficzne, FPGA i ASIC. Procesor jest uniwersalny, można na nim uruchomić dowolny algorytm, jest najbardziej elastyczny i najłatwiejszy w obsłudze dzięki ogromnej liczbie języków programowania i środowisk programistycznych.

Jednocześnie, ze względu na wszechstronność i sekwencyjne wykonywanie instrukcji procesora, wydajność spada, a zużycie energii przez obwód wzrasta. Dzieje się tak, ponieważ dla każdego przydatne operacja arytmetyczna Procesor wykonuje wiele dodatkowych operacji związanych z odczytywaniem instrukcji, przenoszeniem danych pomiędzy rejestrami i pamięcią podręczną oraz innymi ruchami.

Po drugiej stronie jest ASIC. Na tej platformie wymagany algorytm jest realizowany sprzętowo poprzez bezpośrednie połączenie tranzystorów, wszystkie operacje dotyczą jedynie wykonania algorytmu i nie ma możliwości jego zmiany. Stąd maksymalna wydajność i najniższe zużycie energii przez platformę. Ale przeprogramowanie ASIC jest niemożliwe.

Na prawo od procesora znajduje się procesor graficzny. Układy te zostały pierwotnie zaprojektowane do przetwarzania grafiki, ale obecnie są wykorzystywane również do obliczeń wydobywczych. ogólny cel. Składają się z tysięcy małych rdzeni obliczeniowych i wykonują równoległe operacje na tablicy danych.

Jeśli algorytm może być zrównoleglony, wówczas procesor graficzny może osiągnąć znaczne przyspieszenie w porównaniu do procesora. Z drugiej strony algorytmy sekwencyjne będą zaimplementowane gorzej, więc platforma okaże się mniej elastyczna niż procesor. Ponadto, aby programować na GPU, musisz mieć specjalne umiejętności, znać OpenCL lub CUDA.

Wreszcie FPGA. Platforma ta łączy w sobie wydajność układów ASIC z możliwością zmiany programu. Układy FPGA nie są uniwersalne, ale istnieje klasa algorytmów i zadań, które wykażą na nich lepszą wydajność niż na procesorze czy nawet GPU. Złożoność programowania dla układów FPGA jest większa, ale nowe narzędzia programistyczne zmniejszają tę lukę.

Zdecydowaną zaletą układów FPGA jest możliwość przetwarzania danych w momencie ich otrzymania przy minimalnym opóźnieniu reakcji. Jako przykład możesz sobie wyobrazić inteligentny router sieciowy z duża ilość porty: Kiedy pakiet Ethernet dociera do jednego z jego portów, przed wybraniem portu wyjściowego należy sprawdzić wiele reguł. Być może zajdzie potrzeba zmiany niektórych pól w pakiecie lub dodania nowych.

Użycie FPGA pozwala na natychmiastowe rozwiązanie tego problemu: bajty pakietu właśnie zaczęły docierać do chipa z interfejsu sieciowego, a jego nagłówek jest już analizowany. Zastosowanie tutaj procesorów może znacznie spowolnić prędkość przetwarzania ruchu sieciowego. Oczywiste jest, że routery mogą mieć niestandardowy układ ASIC, który działa najskuteczniej, ale co, jeśli zasady przetwarzania pakietów będą musiały się zmienić? Tylko układy FPGA mogą osiągnąć wymaganą elastyczność połączoną z wysoką wydajnością.

Dlatego układy FPGA są stosowane tam, gdzie wymagana jest wysoka wydajność przetwarzania danych, najkrótszy czas reakcji i niskie zużycie energii.

FPGA w chmurze

W chmurze obliczeniowej układy FPGA wykorzystywane są do szybkich obliczeń, przyspieszania ruchu sieciowego i dostępu do macierzy danych. Obejmuje to również wykorzystanie układów FPGA do transakcji o wysokiej częstotliwości na giełdach. Płyty FPGA z PCI Express oraz optyczny interfejs sieciowy wyprodukowany przez firmę Intel (Altera) lub Xilinx.

Układy FPGA doskonale nadają się do algorytmów kryptograficznych, porównywania sekwencji DNA i zadań naukowych, takich jak dynamika molekularna. Firma Microsoft od dawna wykorzystuje układy FPGA do przyspieszania usługi wyszukiwania Bing, a także do organizowania sieci definiowanej programowo w chmurze Azure.

Boom na uczenie maszynowe nie oszczędził również układów FPGA. Xilinx i Intel oferują narzędzia oparte na FPGA do pracy z głębokimi sieciami neuronowymi. Umożliwiają uzyskanie oprogramowania układowego FPGA implementującego konkretną sieć bezpośrednio z frameworków takich jak Caffe i TensorFlow.

Co więcej, możesz tego wszystkiego spróbować bez wychodzenia z domu i używania usługi w chmurze. Możesz na przykład wypożyczyć od Amazon maszyna wirtualna z dostępem do płytki FPGA i wszelkich narzędzi programistycznych, w tym uczenia maszynowego.

FPGA na krawędzi

Jakie jeszcze ciekawe rzeczy robią układy FPGA? Dlaczego nic nie robią! Robotyka, samochody autonomiczne, drony, instrumenty naukowe, sprzęt medyczny, niestandardowe urządzenia mobilne, inteligentne kamery CCTV i tak dalej.

Tradycyjnie układy FPGA były wykorzystywane do cyfrowego przetwarzania sygnałów jednowymiarowych (i konkurowały z procesorami DSP) w urządzeniach radarowych, nadajnikach-odbiornikach radiowych. Wraz ze wzrostem integracji i wydajności układów scalonych platformy FPGA są coraz częściej wykorzystywane do obliczeń o wysokiej wydajności, takich jak przetwarzanie sygnałów 2D na krawędzi chmury.

Koncepcję tę najłatwiej zrozumieć na przykładzie kamery drogowej z funkcją rozpoznawania tablic rejestracyjnych. Możesz wziąć kamerę z możliwością przesyłania wideo przez Ethernet i przetwarzać strumień na zdalnym serwerze. Wraz ze wzrostem liczby kamer wzrośnie również obciążenie sieci, co może prowadzić do awarii systemu.

Zamiast tego lepiej wdrożyć rozpoznawanie tablic rejestracyjnych na komputerze zainstalowanym bezpośrednio w korpusie kamery i przesyłać numery tablic rejestracyjnych do chmury w formacie tekstowym. Aby to zrobić, można nawet zastosować stosunkowo niedrogie układy FPGA o niskim zużyciu energii, aby zadowolić się baterią. Jednocześnie możliwa jest zmiana logiki działania FPGA, na przykład przy zmianie standardu tablicy rejestracyjnej.

Jeśli chodzi o robotykę i drony, w tym obszarze szczególnie ważne jest spełnienie dwóch warunków – wysokiej wydajności i niskiego zużycia energii. Platforma FPGA jest idealna i można ją wykorzystać w szczególności do tworzenia kontrolerów lotu dla dronów. Już produkują UAV, które mogą podejmować decyzje w locie.

Rozwój projektu na FPGA

Istnieją różne poziomy projektowania: niski, blokowy i wysoki. Poziom niski wiąże się z używaniem języków takich jak Verilog czy VHDL, w których kontrolujesz rozwój na poziomie transferu rejestru (RTL). W tym przypadku tworzysz rejestry, jak w procesorze, i definiujesz funkcje logiczne, które zmieniają dane między nimi.

Układy FPGA zawsze działają z określonymi częstotliwościami zegara (zwykle 100-300 MHz), a na poziomie RTL definiujesz zachowanie układu aż do częstotliwości zegara systemowego. Wynikiem tej żmudnej pracy są projekty, które są tak wydajne, jak to tylko możliwe pod względem wydajności, zużycia zasobów układu FPGA i zużycia energii. Wymaga to jednak poważnych umiejętności w projektowaniu obwodów, a nawet przy nich proces jest powolny.

Na poziomie bloków zajmujesz się głównie łączeniem gotowych dużych bloków, które wykonują określone funkcje, aby uzyskać potrzebną funkcjonalność systemu na chipie.

Na wysokim poziomie projektowania nie kontrolujesz już danych w każdym cyklu zegara, ale zamiast tego skupiasz się na algorytmie. Istnieją kompilatory lub tłumacze z C i C++ na poziom RTL, na przykład Vivado HLS. Jest dość inteligentny i pozwala przełożyć szeroką klasę algorytmów na poziom sprzętowy.

Główną zaletą tego podejścia w porównaniu z językami RTL jest przyspieszenie rozwoju, a zwłaszcza testowania algorytmu: kod C++ można uruchomić i zweryfikować na komputerze, a to będzie znacznie szybsze niż testowanie zmian algorytmu na poziomie RTL. Oczywiście za wygodę trzeba zapłacić - schemat może nie być tak szybki i zajmie więcej zasobów sprzętowych.

Często jesteśmy skłonni zapłacić tę cenę: jeśli prawidłowo skorzystamy z tłumacza, wydajność nie ucierpi zbytnio, a nowoczesne układy FPGA mają wystarczające zasoby. W naszym świecie, w którym krytyczny jest wskaźnik time to market, okazuje się to uzasadnione.

Często trzeba połączyć wszystkie trzy style rozwoju w jednym projekcie. Załóżmy, że musimy stworzyć urządzenie, które można wbudować w robota i umożliwić mu rozpoznawanie obiektów w strumieniu wideo – na przykład znaków drogowych. Weźmy układ czujnika wideo i podłączmy go bezpośrednio do FPGA. Do debugowania możemy użyć monitor hdmi, również podłączony do FPGA.

Ramki z kamery będą przesyłane do FPGA poprzez interfejs jasno zdefiniowany przez producenta czujnika (USB tutaj nie jest przydatny), przetwarzane i wyświetlane na monitorze. Do przetwarzania ramek potrzebny będzie bufor ramki, który zwykle znajduje się w urządzeniu zewnętrznym Pamięć DDR zainstalowany na płytce drukowanej obok układu FPGA.


Typowy schemat blokowy konstrukcji FPGA

Jeśli producent czujnika wideo nie zapewni interfejsu IP dla naszego układu FPGA, wówczas będziemy musieli sami napisać go w RTL, zliczając cykle zegara, bity i bajty zgodnie ze specyfikacją protokołu przesyłania danych. Najprawdopodobniej weźmiemy gotowe bloki Preprocess, DDR Controller i HDMI IP i po prostu połączymy ich interfejsy. Możemy także napisać blok HLS, który wyszukuje i przetwarza przychodzące dane, w C++ i transmituje go za pomocą Vivado HLS.

Najprawdopodobniej nadal będziemy potrzebować jakiejś gotowej biblioteki detektora i klasyfikatora znaków drogowych, przystosowanej do wykorzystania w układzie FPGA. W tym przykładzie przedstawiam oczywiście mocno uproszczony schemat projektowy, jednak poprawnie oddaje on logikę działania.

Przyjrzyjmy się ścieżce projektowej od napisania kodu RTL do pobrania pliku konfiguracyjnego do załadowania do FPGA.

Ścieżka projektowa

Piszesz więc kod RTL, który implementuje żądany obwód. Przed przetestowaniem go na prawdziwym sprzęcie należy upewnić się, że jest on poprawny i poprawnie rozwiązuje wymagany problem. W tym celu wykorzystuje się modelowanie RTL w symulatorze na komputerze.

Bierzesz swój obwód, na razie prezentowany tylko w kodzie RTL, i kładziesz go na wirtualnym stole, gdzie przykładasz sekwencje sygnałów cyfrowych do wejść układu, rejestrujesz wykresy wyjściowe, zależności czasowe sygnałów wyjściowych i porównujesz je z oczekiwanymi rezultatami. Zwykle znajdujesz błędy i wracasz do pisania RTL.

Następnie logicznie zweryfikowany kod jest wprowadzany do programu syntezatora. Konwertuje tekstowy opis obwodu na powiązaną listę elementów cyfrowych z biblioteki dostępnej dla danej kości FPGA. Na tej liście będą wyświetlane elementy, takie jak LUT, wyzwalacze i połączenia między nimi. Na tym etapie elementy nie są jeszcze powiązane z konkretnymi zasobami sprzętowymi. Aby to zrobić, musisz nałożyć ograniczenia na obwód - w szczególności określić, do których fizycznych pinów I/O układu FPGA podłączone są logiczne wejścia i wyjścia twojego obwodu.

Ograniczenia te wymagają również określenia, przy jakich częstotliwościach zegara obwód musi działać. Dane wyjściowe syntezatora i plik ograniczeń są wysyłane do procesora implementacji, który między innymi obsługuje lokalizację i trasę.

Proces Place wiąże każdy wciąż anonimowy element listy sieci z określonym elementem wewnątrz układu FPGA. Następnie swoją pracę rozpoczyna proces Route, który stara się znaleźć optymalne połączenie tych elementów dla odpowiedniej konfiguracji macierzy przełączającej FPGA.

Place i Route działają w oparciu o ograniczenia, które nałożyliśmy na obwód: piny we/wy i prędkość zegara. Okres zegara ma bardzo duży wpływ na wdrożenie: nie powinien być mniejszy niż opóźnienie czasowe bramek logicznych w obwodzie krytycznym pomiędzy dwoma kolejnymi przerzutnikami.

Często nie da się od razu spełnić tego wymagania i wtedy trzeba wrócić do etapu początkowego i zmienić kod RTL: np. spróbować zmniejszyć logikę w łańcuchu krytycznym. Po pomyślnym zakończeniu wdrożenia wiemy, które elementy trafiają gdzie i jak są połączone.

Dopiero potem rozpoczyna się proces tworzenia binarnego pliku oprogramowania układowego FPGA. Pozostaje tylko załadować go na prawdziwy sprzęt i sprawdzić, czy działa zgodnie z oczekiwaniami. Jeśli na tym etapie pojawiają się problemy, oznacza to, że modelowanie było niekompletne i nie wyeliminowano na tym etapie wszystkich błędów i niedociągnięć.

Można wrócić do etapu symulacji i zasymulować sytuację awaryjną, a jeśli to nie zadziała, w ostateczności mechanizm debugowania udostępniany jest bezpośrednio w działającym sprzęcie. Możesz określić, które sygnały chcesz śledzić w czasie, a środowisko projektowe wygeneruje dodatkowy obwód analizatora stanów logicznych, który umieszczony na chipie obok Twojego projektu, łączy się z interesującymi Cię sygnałami i przechowuje ich wartości w czasie . Zapisane wykresy czasowe żądanych sygnałów można pobrać do komputera i poddać analizie.

REALIZACJA PROJEKTU NA FPGA

Po przetestowaniu obwodu logicznego za pomocą modelowania funkcjonalnego konieczne jest umieszczenie go na chipie. Następnie wykonaj symulację obwodu uwzględniając rzeczywiste opóźnienia elementów uzyskane po umieszczeniu obwodu na chipie. W razie potrzeby dostosuj powstałe rozwiązania. Następnie obwód jest ładowany do FPGA i testowany na stole laboratoryjnym.

Ryż. 82. Etapy projektowania urządzenia cyfrowego na FPGA

Główne etapy projektowania na FPGA (z wykładów):

    Opracowywany jest schemat urządzenia i wprowadzany do XILINX.

    Przeprowadzana jest IMPLEMENTACJA (tłumaczenie, utworzenie obwodu poprzez wyodrębnienie elementów z biblioteki, optymalizacja, umieszczenie na chipie).

    Programowanie.

  1. Pamięć skojarzeniowa. Organizacja, metoda próbkowania, różnice w sposobie przechowywania adresów.

Dostęp skojarzony realizuje wyszukiwanie informacji na podstawie jakiejś cechy, a nie jej lokalizacji w pamięci (adresu lub miejsca w kolejce). W najbardziej kompletnej wersji wszystkie słowa zapisane w pamięci są jednocześnie sprawdzane pod kątem zgodności z cechą, na przykład pod kątem zbieżności niektórych pól słów (tagów - z angielskiego tagu słowa) z cechą określoną przez słowo wejściowe (adres tagu ). Wypisywane są słowa spełniające kryterium. Dyscyplina wydawania słów, jeśli kilka słów spełnia tag, a także dyscyplina zapisywania nowych danych, mogą być różne. Głównym obszarem zastosowania pamięci asocjacyjnej we współczesnych komputerach jest buforowanie danych.

W urządzeniach pamięci skojarzeniowej informacje są przeszukiwane zgodnie z cechą skojarzeniową zarejestrowaną w każdej komórce pamięci.

Do rejestru maski zapisywane jest słowo, które umożliwia zapytanie o wszystkie lub tylko niektóre bity atrybutu asocjacyjnego; użycie maski pozwala skrócić lub rozszerzyć obszar wyszukiwania.

Wyszukiwanie informacji odbywa się równolegle we wszystkich komórkach poprzez porównanie żądania z cechą asocjacyjną każdej komórki.

Wynik wyszukiwania generowany jest przez specjalny układ kombinacyjny, który generuje sygnały powiadamiające o braku słów spełniających warunki wyszukiwania, o obecności tylko jednego słowa, o obecności kilku słów posiadających taką cechę asocjacyjną.

Po wygenerowaniu i przetworzeniu sygnałów ostrzegawczych obwód sterujący odczytuje niezbędne informacje. Podczas zapisu zostaje znaleziona wolna komórka na podstawie wartości bitu zajętości, a informacja jest zapisana w pierwszej znalezionej wolnej komórce.

Sprawdzanie cyfry zajętości odbywa się poprzez ustawienie n-tej cyfry (cyfry zajętości) maski. Korzystając z dodatkowych układów kombinacyjnych w pamięci skojarzeniowej, możesz wykonywać różne operacje logiczne, określając maksymalną lub minimalną liczbę, liczbę słów mających tę samą cechę skojarzeniową itp. Komórki pamięci skojarzeniowego urządzenia magazynującego muszą być elementami pamięci statycznej; w pamięci skojarzeniowej dostęp do wszystkich komórek jest możliwy jednocześnie i nie mogą one być przerywane cyklami regeneracji. Pamięć skojarzeniowa jest najszybsza, ale bardzo kosztowna, ponieważ wymaga wprowadzenia dodatkowego układu porównawczego, który umożliwia wyszukiwanie każdej komórki pamięci. Dlatego taka pamięć zwykle nie jest używana w czystej postaci, a szybkie urządzenia pamięci typu cache są zwykle implementowane jako częściowo asocjacyjne.

Ww pełni asocjacyjne pamięć podręczna (FACM, Fully Associated Cache Memory) każda komórka przechowuje dane, a w polu „tag” - pełny adres fizyczny informacji, którego kopia jest zapisywana. Podczas każdej wymiany adres fizyczny żądanej informacji jest porównywany z polami „znacznika” wszystkich komórek i jeśli są zgodne, w dowolnej komórce ustawiany jest sygnał Hit.

Przy odczycie i wartości sygnału Hit = 1 dane są wyprowadzane na szynę danych, natomiast w przypadku braku dopasowań (Hit = 0), to podczas odczytu z pamięci głównej dane wraz z adresem umieszczane są w wolnym lub ostatnio nieużywana komórka pamięci podręcznej.

Podczas zapisu dane wraz z adresem są z reguły najpierw umieszczane w pamięci podręcznej (w wykrytej komórce przy Hit = 1 i wolnej przy Hit = 0). Kopiowanie danych do pamięci głównej odbywa się pod kontrolą specjalnego kontrolera w przypadku braku dostępu do pamięci.

Pamięć FACM jest urządzeniem bardzo złożonym i wykorzystywana jest jedynie w małych pojemnościach, głównie w zastosowaniach specjalnych. Jednocześnie ten typ pamięci podręcznej zapewnia największą elastyczność funkcjonalną i brak konfliktów adresów, ponieważ dowolną jednostkę informacji można załadować do dowolnej komórki pamięci podręcznej.

Z wykładów:

Skojarzone urządzenia pamięci masowej

Zasadnicza różnica polega na tym, że system wyszukiwania od nich informacji nie jest realizowany według unikalnego adresu, pod którym informacja się znajduje, ale według określonej cechy, która w rzeczywistości jest częścią poszukiwanej informacji.

Informacja

Znacznik to cecha wyróżniająca, za pomocą której przez przypadek uzyskuje się informację.

Uproszczony schemat pamięci skojarzeniowej:

Strefa przechowywania to adresowalna pamięć z ponumerowanymi komórkami, w której przechowywane są informacje i znaczniki.

Aby uzyskać dostęp do pamięci asocjacyjnej, próbka żądanego znacznika jest umieszczana w rejestrze żądań. Schemat porównania porównuje zapytanie. Dopasowanie zostaje ustanowione w rejestrze dopasowań, w którym znacznik z pamięci pasuje do próbki. Możliwe są reakcje (brak dopasowań; jest co najmniej jedno dopasowanie – w tym przypadku znaleziona komórka jest umieszczana w rejestrze danych; dopasowania wielokrotne – CS musi zdecydować, którą komórkę pobrać do przetwarzania).

Zastosowanie: baza danych, baza wiedzy, komputer PC jako pamięć podręczna.

WYKORZYSTANIE FPGA W NOWOCZESNYCH URZĄDZENIACH

Tupikow Paweł Andriejewicz

Student V roku Wydziału Sztuki Państwowego Uniwersytetu Technicznego w Omsku, Federacja Rosyjska, Omsk

Obecnie w różnych nowoczesnych urządzeniach coraz częściej stosuje się programowalne układy logiczne logiczne (FPGA), wynika to z faktu, że układy FPGA mają znaczną przewagę nad konwencjonalnymi mikroukładami cyfrowymi. Te zalety obejmują:

· Poprawiono tymczasowe właściwości produktu.

· Cena produktu spada.

· Wymiary produktu są zmniejszone.

· Zwiększa się niezawodność produktu (zmniejsza się liczba dyskretnych chipów)

Zwiększa elastyczność produktu (FPGA zawsze można przeprogramować)

Architektura FPGA ma złożoną strukturę (rys. 1)

Rysunek 1. Wewnętrzna struktura FPGA

Jak widać na rysunku 1, główna część układu FPGA składa się z programowalnych bloków logicznych i programowalnych połączenia wewnętrzne.

Proces programowania (firmware) układu FPGA polega na utworzeniu niezbędnych połączeń pomiędzy wejściami i wyjściami urządzenia.

Obecnie istnieje dwóch światowych liderów w produkcji układów FPGA. Są to amerykańskie firmy Xilinx i Altera.

Każda firma oferuje własne oprogramowanie CAD do pracy z układami FPGA. Xilinx oferuje zestaw programistyczny Xilinx Software Development Kit (SDK). Altera oferuje Max+Plus II i Quartus II, a także system modelowania ModelSim.

Do tworzenia oprogramowania sprzętowego zwykle używa się języków opisujących działanie sprzętu, obecnie najpopularniejszymi językami są:

Verilog HDL.

VHDL jest językiem najtrudniejszym do nauczenia się, ale też tak jest największe możliwości na funkcjonalnym i behawioralnym poziomie abstrakcji, ale ma mniejsze możliwości na strukturalnym poziomie abstrakcji w porównaniu z Verilog HDL, biblioteka VITAL została opracowana w celu rozszerzenia możliwości języka VHDL (ryc. 2).


Rysunek 2. Poziomy abstrakcji Verilog I VHDL

Przykładem pracy języka Verilog HDL jest program zaimplementowany na układzie FPGA CYCLONE III EP3C5E1444C8N stanowiska Mini-DiLab, którego ogólny widok pokazano na rys. 3.


Rysunek 3. Widok ogólny tablicy Mini - DiLab

Program ten realizuje sekwencyjne przełączanie diod led0-led7, z możliwością zwiększenia ruchu „światła” za pomocą przycisków pba i pbb, a także kontrolowania prędkości przełączania za pomocą przełączników sw0, sw1.

//Tekst programu

moduł projekt( wyjście prowadzony, wejście clk_25 MHz, wejście pba wejście pbb

wejście południowy zachód);

// Cel wewnętrznych połączeń projektu

drut s1;

drut s2;

drut s3;

// Wywołaj inne pliki (podprogramy) powiązane z projektem

Tr tr_1 (.out(s2), .set(pba), .res(pbb));

Licznik licznik_1 (.q(s1), .clk(clk_25mhz), .up(s2));

Mx mx_1 (.a(s3), .in(s1), .load(sw));

Dc3_8 dc3_8_1 (.out(led), .in(s3));

moduł końcowy// koniec programu

Podprogram tr

moduł tr(wyjście, ustawienie, res); // Utwórz program

// Przypisanie wejść/wyjść

wyjścierej na zewnątrz;

wejście ustawić;

wejście res;

// Inicjalizacja

wstępny

zaczynać

Na zewnątrz<= 1"d0;

// Główny kod programu

zawsze @(negacja ustawić lub negacja res)

zaczynać

Jeśli(~(zestaw))

Na zewnątrz<= 1"d1;

w przeciwnym razie

Na zewnątrz<= 1"d0;

moduł końcowy // Koniec programu

Licznik podprogramów

moduł licznik(con, q, clk, up); // Uruchomienie programu

wyjścierej kon;

wyjście q = przeciw;

wejście w górę, klk;

// Główny kod programu

zawsze @(pozycja trzask)

zaczynać

Jeśli(klik)

Jeśli(w górę)

Kon<= con - 1"d1;

w przeciwnym razie

Kon<= con + 1"d1;

moduł końcowy//Koniec programu

Podprogram mx(multiplekser)

moduł mx ( rej. wyjściowa A, wejście W, wejście obciążenie);

// Główny kod programu

zawsze @*

zaczynać

sprawa(obciążenie)

2"b00: a = in;

2"b01: a = in;

2"b10: a = in;

2"b11: a = in;

obudowa końcowa

moduł końcowy // Koniec programu

Podprogram dc3_8 (multiplekser)

moduł dc3_8(wyjście, wejście); // Uruchomienie programu

// Przypisanie wejść/wyjść

rej. wyjściowa na zewnątrz;

przewód wejściowy W;

// Główny kod programu

zawsze @*

zaczynać

sprawa(W)

3"d0: wyjście = 8"b11111110;

3"d1: wyjście = 8"b11111101;

3"d2: wyjście = 8"b11111011;

3"d3: wyjście = 8"b11110111;

3"d4: wyjście = 8"b11101111;

3"d5: wyjście = 8"b11011111;

3"d6: wyjście = 8"b10111111;

3"d7: wyjście = 8"b01111111;

obudowa końcowa

moduł końcowy // Koniec programu

Program zaimplementowano w oprogramowaniu CAD Quartus II.

Po skompilowaniu programu kompilator nie generował w programie błędów ani komentarzy związanych z analizą i składnią programu (rys. 4).


Rysunek 4. Okno komunikatu projektu

Z komentarzy kompilatora wynika, że ​​nie ma licencji na Quartus II (do szkolenia wykorzystano darmową wersję programu) oraz brak plików niezbędnych do zamodelowania projektu.

RTL Strukturę tego projektu pokazano na ryc. 5.


Rysunek 5. Realizacja projektu ( RTL Struktura)

Jak pokazano na ryc. 6 w tym programie wykorzystywana jest tylko niewielka część możliwości tego FPGA.

Rysunek 6. Część FPGA zaangażowana w projekt

Wnioski: Programowalne układy logiczne logiczne mogą być stosowane w wielu urządzeniach. Aby nauczyć się z nimi pracować, należy wprowadzić do programu kształcenia specjalności związanych z projektowaniem i konstrukcją sprzętu elektronicznego znajomość języków opisu sprzętu (Verilog HDL i VHDL).

Bibliografia:

1. Grushevitsky R.I. Projektowanie układów na układach logicznych programu / R.I. Grushevitsky, A.X. Mursajew, E.P. Ponury. Petersburg: BHV Petersburg, 2002. - 608 s.

2. Kołomow D.A. Systemy komputerowego wspomagania projektowania Altra MAX+plus II i Quartus II. Krótki opis i poradnik / D.A. Kołomow, R.A. Myalk, AA Zobenko, A.S. Filippow. M.: IP RadioSoft, 2002. - 126 s.

3. Maxfield K. Projekt na FPGA. Kurs na młodego zawodnika./ K. Maxfield. M.: Wydawnictwo „Dodeka-XXI”, 2007. - 408 s. (tłumaczenie z języka angielskiego).

W czasie wakacji zrobiłem mały projekt w Verilog, który chciałem wypróbować od dawna.

Istota projektu jest następująca: do układu FPGA podłączony jest szybki (względnie oczywiście) przetwornik ADC z dwoma kanałami i interfejsem równoległym (14-16 bitów na kanał). Układ FPGA odczytuje dane z przetwornika ADC i dodaje je do bufora (wewnętrznej pamięci BRAM). Gdy bufor się zapełni, odczyt zostaje zatrzymany i urządzenie zewnętrzne (mikrokontroler) może odczytać dane z bufora poprzez interfejs SPI. Niektóre parametry można także skonfigurować poprzez SPI (będzie to omówione w kolejnym poście).

Test projektu (zdjęcie do kliknięcia).

Wynik syntezy Cyclone IVE

Wynik zsyntetyzowałem w Quartus II dla układu FPGA z rodziny Cyclone IVE (EP4CE6E22A7). Jest to jeden z najprostszych i najtańszych układów FPGA w pakiecie QFP144 z 6272 elementami logicznymi. Układ ma pojemność pamięci 30K * 9 bitów. Piny użytkownika - 92.

układ EP4CE6E22A7
elementy logiczne - 301 (5%)
szpilki - 41 (45%)
pamięć - 65536 bitów (24%)
częstotliwość w najgorszym przypadku (125 C) - 151 MHz.

Pamięć wynosi 8 KB, jest to faktyczny bufor, w którym zapisywane są dane. Przy dwóch kanałach po 16 bitów każdy daje 32 bity na próbkę i 2048 próbek. Uznałem, że to w zupełności wystarczy, chociaż bufor można rozbudować przynajmniej do całej objętości.

Częstotliwość jest całkiem zadowalająca, spodziewałem się, że będzie taktowanie 50 MHz, a ADC 25 MHz. Oznacza to, że uzyskuje się trzykrotny margines częstotliwości.

Liczba elementów logicznych jest dla takiego FPGA zupełnie nieistotna, tj. Jeśli chcesz, możesz tam dodać wiele innych rzeczy, zwłaszcza że pozostało jeszcze 51 pinów.

Dostępna jest nowsza rodzina Cyclone 10.

Wynik syntezy dla Cyklonu 10

Wybierz chip 10CL006YE144C8G. Posiada taką samą liczbę elementów logicznych (6272) jak wersja na Cyclone 4 i taką samą ilość pamięci (30K x 9). Sprawa jest taka sama, QFP144, pinów użytkownika jest jeszcze mniej - 89.

chip 10CL006YE144C8G
elementy logiczne - 289 (5%)
szpilki - 41 (46%)
pamięć - 65536 bitów (24%)
częstotliwość w najgorszym przypadku (85 C) - 145,5 MHz.

Co ciekawe, projekt stał się bardziej zwarty pod względem elementów logicznych. Oznacza to, że przy tej samej wydajności logicznej Cyclone 10 może obsłużyć bardziej złożony projekt. Cała reszta jest na mniej więcej tym samym poziomie.

Powstaje uzasadnione pytanie: czy można zaoszczędzić pieniądze instalując kolejny FPGA lub CPLD?

Spróbujmy FPGA MAX10.

Wynik syntezy dla MAX 10

Tutaj czytelnik (jeśli się na tym zna) może zawołać: nie, to nie tak! Rodzina MAX to CPLD, a nie FPGA, a mylenie tych pojęć jest rażąco nieprofesjonalne!

Jednak dzięki wysiłkom marketerów Intela (wszyscy wiedzą, że mówimy o chipach Intela?) rodzina MAX10 zamieniła się w układ FPGA, chociaż ma wewnętrzną nieulotną pamięć konfiguracyjną, jak każdy CPLD.

Wybierz więc układ, na przykład 10M02SCE144A7G (2304 LE, 101 GPIO, 12Kx9 BRAM), pakiet QFP144.

mikroukład 10M02SCE144A7G.
elementy logiczne - 298 (13%)
szpilki - 41 (41%)
pamięć - 65536 bitów (59%)
częstotliwość w najgorszym przypadku (125 C) - 153 MHz.

Widzimy, że wskaźniki bezwzględne pozostały prawie takie same, wzrósł jedynie stopień wypełnienia kryształu, co jest zrozumiałe - 2304LE w porównaniu z 6272 LE.

Czy mogę używać MAX II?

Teraz pytanie: czy można zastosować jakiś bardzo tani CPLD, np. MAX II? Tutaj wszystko jest bardziej skomplikowane. Nie posiadają pamięci BRAM tj. Będziesz także potrzebować zewnętrznej szybkiej pamięci SRAM.

Aby podłączyć SRAM, będziesz oczywiście potrzebować dodatkowej logiki. Jeśli używamy pamięci 4K x 16, będziemy potrzebować dodatkowych 16 pinów na dane, 12 na adres i 3 do sterowania (/cs, /we, /oe), co daje w sumie 31 dodatkowych pinów.

Logika również powiększy się. Trudno powiedzieć dokładnie ile, ale początkowo nie zmieści się do CPLD w 240 LE, ale może zmieści się w 570 LE.

Wybieramy CPLD EPM570 w pakiecie QFP100. Potrzebujemy tylko 72 pinów, obudowa posiada 76 pinów dla GPIO, czyli. powinno wystarczyć na wszystko, ale miejsca na rozbudowę jest bardzo mało.

Plusy tego rozwiązania: ewentualnie niższa cena (nawet biorąc pod uwagę dodatkowy układ SRAM), minusy: większa złożoność obwodu i powierzchni płytki.

Kwestia ceny

Oto, co znalazłem za pomocą efind. Mikroukłady są nieco inne, ale liczba i litera na końcu to indeks prędkości i zakres temperatur (komercyjny). Ponieważ mamy trzykrotną rezerwę częstotliwości, liczby te nie są dla nas absolutnie istotne.

EP4CE6E22C8N - 456,55 R (Promelektronika, Ekb, sprzedaż detaliczna)
10CL006YE144C - 754.71 (Piąty element, St. Petersburg, hurt)
10M02SCE144C8G - 456 R (Elitan, Ekb, hurt)
EPM570F100C5N - 368 R (Hi-tech, St. Petersburg) + pamięć (CY7C1021DV33-10ZSXI, SRAM 1MBIT 10NS 44TSOP) - 92,51 R (Promelektronika, Ekb, sprzedaż detaliczna)

Oczywiście można znaleźć taniej, są to tylko ceny detaliczne w sklepie, ale stosunek będzie w przybliżeniu taki sam.

Można zauważyć, że opcja z CPLD nie przynosi żadnych korzyści cenowych, ma jednak wiele wad. Pozostałe opcje są w przybliżeniu takie same, z tym wyjątkiem, że Cyclone 10 jest nadal nieco droższy i niewiele osób ma go na stanie. Jest to jednak zupełnie nowa rodzina, nie wszyscy dystrybutorzy ją jeszcze wprowadzili.

Osobiście najbardziej podoba mi się opcja na MAX 10. Ma jedną zaletę: nie trzeba ładować konfiguracji FPGA przy uruchomieniu. W wersji Cyclone 4 konieczne będzie załadowanie konfiguracji FPGA, co można wykonać za pomocą dodatkowego układu pamięci konfiguracyjnej lub za pomocą mikrokontrolera. Istnieje trzecia opcja: flashuj przez JTAG i nigdy nie odłączaj zasilania od chipa. Słyszałem, że ktoś to zrobił, nie wiem, czy to żart, czy nie, ale na pewno tego nie zrobię.

Opcja z oprogramowaniem Cyclone 4 poprzez mikrokontroler ma jednak zaletę: możliwość aktualizacji oprogramowania FPGA poprzez interfejsy użytkownika: USB, Ethernet itp.

Możliwa jest inna nietrywialna opcja: w ogóle nie instaluj mikrokontrolera, ale wgraj jakiś wbudowany procesor do FPGA. Ale to nie jest zbyt dobra opcja, może dlatego, że... W takim przypadku na pewno będziesz potrzebować zewnętrznej pamięci ROM i RAM, a także co najmniej mostka USB. Nie ma oczywiście potrzeby celowego odmawiania tej opcji, ale wydaje mi się ona trudniejsza do wdrożenia niż z mikrokontrolerem.

O tym jakie funkcje realizuje ten firmware napiszę w kolejnym poście.

W artykule podjęto próbę określenia składu dokumentacji towarzyszącej opracowanym modułom cyfrowym dla programowalnych układów scalonych logicznych (FPGA). Programiści muszą dostarczyć tę towarzyszącą dokumentację konsumentowi/klientowi w celu pomyślnego dalszego wykorzystania opracowanego modułu cyfrowego w swoich projektach na etapie projektowania urządzeń cyfrowych na FPGA.

Wstęp

O jaką dokumentację projektową należy zatem zapytać dewelopera, jeśli firma klienta, przedsiębiorstwo lub inny deweloper będzie później wykorzystywać w swoich projektach „zagraniczne” urządzenie opracowane? Artykuł ten może służyć jako „ściągawka”, aby najpierw poprawnie wydać specyfikacje techniczne dotyczące opracowania urządzenia cyfrowego dla układów FPGA, a następnie poprosić programistę o dokumentację projektową dla już opracowanego urządzenia cyfrowego. W oparciu o wcześniejsze doświadczenia w pracy z dokumentacją projektową przedsiębiorstwo lub firma zwykle korzysta z następujących standardów i dokumentów regulacyjnych:

  • GOST 2.102-68 ESKD. Rodzaje i kompletność dokumentów projektowych.
  • GOST 15.101-98. System opracowywania i wdrażania produktów do produkcji. Tryb prowadzenia prac badawczych.
  • GOST R 15.201-20-00. System opracowywania i wdrażania produktów do produkcji. Produkty do celów przemysłowych i technicznych. Procedura opracowywania i wdrażania wyrobów do produkcji.

Z reguły były to pliki oprogramowania sprzętowego oraz program (opis urządzenia cyfrowego w VHDL/Verilog lub zestaw układów cyfrowych opracowany w edytorze układów z wykorzystaniem elementów bibliotecznych logiki cyfrowej, takich jak przerzutniki, rejestry, liczniki, dekodery itp.) na płycie CD lub DVD oraz instrukcjami programowania. To wszystko.

Autor na przykład stanął przed następującym problemem. Jeden z pracowników opracował złożone, wielomodułowe urządzenie cyfrowe. Wszystkie moduły opisałem w VHDL, a także przyjrzałem się cyklogramom działania tych modułów i urządzenia cyfrowego jako całości na dobrym i drogim oscyloskopie. Nie wiedział o plikach Test Bench i możliwości przeprowadzenia symulacji lub nie wiedział jak je napisać, przy okazji nie było też żadnych uwag do projektu i opisów modułów. Sytuacja może być jeszcze gorsza, jeśli moduły są reprezentowane przez układy cyfrowe zaprojektowane w edytorze obwodów z wykorzystaniem elementów biblioteki. Tutaj leży jedna z głównych wad: oprócz samego programisty jest mało prawdopodobne, aby ktokolwiek inny zrozumiał to urządzenie cyfrowe, zwłaszcza jeśli projekt jest wielomodułowy, a opis każdego modułu obejmuje więcej niż 100 linii lub więcej niż jeden monitor ekran. Oznacza to, że jeśli inny programista chce wprowadzić tak opracowane już urządzenie cyfrowe dla FPGA do nowego opracowania lub projektu, ponownie musi poświęcić czas na rozwój tego urządzenia cyfrowego.

Historia zagadnień projektowych układów FPGA

Obecnie rynek FPGA jest jednym z najdynamiczniej rozwijających się. Układy FPGA są wykorzystywane w wielu gałęziach przemysłu. W chwili obecnej nie ma jednoznacznej metodologii, która zadowalałaby wszystkich twórców sprzętu w zakresie uzyskiwania konfiguracji FPGA w oparciu o model funkcjonalny urządzenia na poziomie systemu. Najpopularniejszym podejściem do rozwiązania tego problemu jest wykorzystanie technologii IP core (Intellectual Property Cores). Rdzenie IP to gotowe komponenty, które ułatwiają włączenie ich do własnego projektu w celu stworzenia bardziej złożonego systemu. Podejście to ma jedną istotną wadę - przyłączenie jąder IP do podstawy elementarnej. Każdy rdzeń IP jest zoptymalizowany pod konkretną serię chipów konkretnego producenta, co znacznie utrudnia możliwość przenoszenia już stworzonych urządzeń z jednej bazy elementów na drugą. Zamknięty charakter komercyjnych architektur CAD uniemożliwia dodawanie własnych funkcjonalnych modeli urządzeń na poziomie systemu w celu wyprowadzenia na ich podstawie modeli urządzeń na poziomie transferu rejestru (RTL). Opracowanie modułu cyfrowego odbywa się w postaci obwodu cyfrowego narysowanego w edytorze obwodów z wykorzystaniem wbudowanej przez producenta biblioteki CAD podstawowych elementów układu, takich jak przerzutniki, dekodery, liczniki, sumatory itp.

Innym popularnym podejściem umożliwiającym przejście od modelu funkcjonalnego na poziomie systemu do modelu urządzenia na poziomie transferu rejestrów jest wykorzystanie języków projektowania na poziomie systemu (SLDL). Do takich języków należą SystemC, Handel-C, VHDL, Verilog, System Verilog. Główną zaletą jest niezależność od bazy sprzętowej, w której urządzenie będzie realizowane.

Zatem z jednej strony, korzystając z technologii IP core, twórca sprzętu otrzymuje rozwiązanie wysokiej jakości, ale ściśle powiązane z bazą sprzętową, w której zaimplementowane jest urządzenie. Z drugiej strony, w przypadku korzystania z języków opisu sprzętu na poziomie systemu, implementacja urządzenia jest niezależna sprzętowo. Z powyższego wynika, że ​​obecnie ważne jest wspólne wykorzystanie języka opisu sprzętu i rdzeni IP producenta (Xilinx, Altera, Actel itp.) i zewnętrznych firm deweloperskich w celu przyspieszenia procesu projektowania modułów cyfrowych. W przypadku korzystania z modułów cyfrowych zewnętrznych producentów czasami w dołączonej dokumentacji brakuje informacji.

Udzielenie informacji na temat opracowanego modułu cyfrowego dla FPGA

W zależności od metodologii uzyskania konfiguracji FPGA w oparciu o model funkcjonalny urządzenia na poziomie systemu, projektant może wyróżnić następujące typy modułów cyfrowych dla FPGA:

  • Oprogramowanie - opracowany moduł cyfrowy, przekazywany konsumentowi w formie opisu w języku opisu sprzętu (VHDL, Verilog) i/lub opracowany w Edytorze Schematów do dalszego wykorzystania w programach do automatycznej syntezy obwodów logicznych i zoptymalizowany pod kątem parametrów funkcjonalnych .
  • Oprogramowanie sprzętowe - moduł cyfrowy opracowany przez zewnętrzną firmę deweloperską, zwany rdzeniem IP, przesyłany do konsumenta w postaci obwodu logicznego (listy sieci) w oparciu o bibliotekę elementów logicznych producenta FPGA i zoptymalizowany pod kątem parametrów funkcjonalnych i elektrycznych.

Na etapie opracowywania dokumentacji, w oparciu o własne doświadczenia, konieczne jest sporządzenie, oprócz zwykłej dokumentacji projektowej i specyfikacji przeprowadzonych zgodnie z GOST 15.101, GOST 15.201, GOST 2.102, GOST 2.114, dokumentację dla wszystkich typów modele (systemowe, logiczne, inżynieria obwodów) tworzone na etapach projektowania urządzeń cyfrowych na układach FPGA.

Innymi słowy, zestaw dokumentacji projektowej urządzenia cyfrowego dla układów FPGA, oprócz pliku oprogramowania sprzętowego, instrukcji programowania i nagranego projektu na płycie CD/DVD, musi zawierać także dokumentację towarzyszącą.

Tabela. Wykaz sekcji dołączonej dokumentacji

Tytuł sekcji Pogląd
Oprogramowanie Oprogramowanie sprzętowe
Informacje ogólne
Cel i zakres O R
Dane techniczne O O
Opis sygnałów resetujących O O
Opis sygnałów synchronizacji O O
Opis interfejsów O R
Diagramy czasowe R O
Opis rejestrów kontrolnych O O
Schemat strukturalny (funkcjonalny). R R
Przewodnik programowania O O
model lub rodzina FPGA,
producent firmy
R O
Prezentacja modułu cyfrowego
do projektowania logiki na FPGA
modelu RTL O NIE
Model logiczny NIE O
Ograniczenia projektowe O O

Oto lista sekcji (tabela), które należy uwzględnić w dokumentacji towarzyszącej projektowi modułu cyfrowego dla układów FPGA. Dla każdej sekcji wskazano oznaki konieczności włączenia sekcji do zbioru dokumentów:

  • „O” jest sekcją wymaganą;
  • „P” to sekcja zalecana do dostawy.

Zalecane formaty plików do przesłania dokumentacji pomocniczej to MS Word, PDF (najlepszy format), HTML. Pliki opisowe w języku opisu sprzętu (VHDL, Verilog) i/lub opracowane w Edytorze Schematów są dostarczane w formie wymaganej przez oprogramowanie CAD do programowania. Wyjątkiem może być dodatkowe udostępnienie w formacie graficznym (JPEG, BMP) plików obwodów cyfrowych opracowanych w Edytorze Schematów.

Informacje ogólne

W tej części znajdują się ogólne informacje o opracowanym module cyfrowym w formie opisu:

  • schemat funkcjonalny i jego bloki/części składowe;
  • resetowanie sygnałów, synchronizacja;
  • stosowane interfejsy;
  • rejestry kontrolne;
  • diagram czasowy;
  • programowanie.

Cel i zakres

Określono cel modułu cyfrowego i obszary jego zastosowania.

Dane techniczne

Podano opis jego głównych parametrów technicznych, takich jak wydajność, pobór mocy dla konkretnego układu FPGA, liczba zajętych bramek i typ zastosowanego układu FPGA. Dodatkowo wskazano oprogramowanie CAD producenta FPGA zastosowane przy opracowaniu modułu cyfrowego oraz oprogramowanie użyte do modelowania i weryfikacji. W przypadku wszystkich używanych programów wskazana jest wersja i zainstalowane aktualizacje. Przedstawiona jest graficzna reprezentacja modułu cyfrowego w postaci „czarnej skrzynki” z oznaczeniem zewnętrznych wejść/wyjść oraz krótkim opisem ich przeznaczenia.

Opis sygnałów resetujących

Szczegóły sygnałów resetowania podano poniżej:

  • Lista zewnętrznych i wewnętrznych sygnałów resetujących.
  • Parametry czasowe i wykresy czasowe sygnałów kasujących.
  • Obwody generujące wewnętrzne sygnały resetowania, jeśli występują, stanowią część modułu cyfrowego.
  • Powiązania z innymi sygnałami (zwłaszcza sygnałami synchronizacyjnymi).

Opis sygnałów synchronizacji

Oto szczegóły dotyczące sygnałów synchronizacji:

  • opis zewnętrznych sygnałów synchronizacji;
  • parametry czasowe sygnałów synchronizacji;
  • opis sygnałów synchronizacji wewnętrznej i schemat ich generowania;
  • zależności czasowe pomiędzy sygnałami synchronizacyjnymi z różnych źródeł;

Opis interfejsów

Podano cechy wykorzystania wszystkich interfejsów wchodzących w skład opracowanego modułu cyfrowego, najlepiej ujednoliconych w celu organizowania interakcji z innymi węzłami systemu na chipie. Dodatkowo udostępniane jest łącze internetowe do pełnego opisu standardowego interfejsu lub opisu samego interfejsu. Obecnie interfejsy magistrali AMBA, PLB i Wishbone są akceptowane jako ujednolicone interfejsy dla modułów cyfrowych.

Diagramy czasowe

Podano niezbędne informacje do organizacji wymiany danych poprzez interfejsy i inne wejścia/wyjścia modułu cyfrowego: graficzne przedstawienie diagramów czasowych, opis protokołów przesyłania danych, wymagania dotyczące sygnałów zewnętrznych dostarczanych do modułu cyfrowego (czas trwania, częstotliwość itp.) i inne informacje.

Opis rejestrów kontrolnych

Zamieszczono opis wszystkich rejestrów sterujących modułu cyfrowego. Typowy opis rejestru sterującego zawiera nazwę rejestru, adres rejestru w wewnętrznej przestrzeni adresowej, wartość początkową po usunięciu sygnału resetującego, rodzaj dostępu (odczyt/zapis) oraz opis pól wewnętrznych.

Schemat strukturalny (funkcjonalny).

Podano obraz wewnętrznej struktury połączeń głównych wewnętrznych węzłów/bloków modułu cyfrowego, a także ich krótki opis tekstowy. Dodatkowo podano opis głównych wewnętrznych bloków modułu cyfrowego. Celem niniejszego dokumentu jest dostarczenie konsumentowi informacji niezbędnych do zrozumienia zasad działania modułu cyfrowego.

Liczbę opisywanych bloków i zakres opisu określa twórca modułu cyfrowego. Zaleca się, aby minimalna liczba opisanych modułów odpowiadała liczbie elementów schematu strukturalnego (funkcjonalnego) modułu cyfrowego.

Typowy opis jednostki wewnętrznej zawiera:

  • cel bloku;
  • schemat strukturalny (funkcjonalny) bloku (jeśli to konieczne);
  • tryby pracy i algorytmy;
  • diagramy czasu pracy;
  • organizacja zarządzania blokiem;
  • organizacja komunikacji z innymi blokami;
  • Wszelkie inne informacje.

Przewodnik programowania

Zawiera wszystkie niezbędne informacje dotyczące procesu programowania z wykorzystaniem oprogramowania CAD producenta modułu cyfrowego w układzie FPGA, niezbędnych narzędzi do tworzenia i debugowania oprogramowania oraz bibliotek oprogramowania.

Model lub rodzina FPGA, producent

W przypadku oprogramowania sprzętowego modułu cyfrowego wskazany jest producent FPGA, model lub rodzina FPGA oraz jego charakterystyka prędkości. Dla modułu cyfrowego Software podana jest informacja o ilości zajętych zasobów oraz wymaganiach dla zastosowanego FPGA.

Reprezentacja modułu cyfrowego do projektowania logiki

W artykule omówiono trudności w wykorzystaniu „obcego” projektu w języku VHDL – brak odpowiednich wytycznych dotyczących nazewnictwa i zasad pisania programów. Podano także ogólne wytyczne dotyczące nazw, dobrych manier w pisaniu programów i wskazówki dotyczące syntezy. Kwestie te należy jak najbardziej szczegółowo omówić z programistą, jeśli w przyszłości planujesz kontynuować rozwój lub aktualizację we własnym zakresie, zanim zacznie on opracowywać model RTL modułu cyfrowego na FPGA. Dotyczy to szczególnie typu modułu cyfrowego oprogramowania na FPGA. W tej części artykułu opisano ogólne wymagania dla całego projektu opracowanego modułu cyfrowego na FPGA. Oto kwestie, na które należy zwrócić uwagę podczas opracowywania specyfikacji technicznych opracowania modułu cyfrowego na FPGA, a dotyczy to zwłaszcza transferu wyników pracy.

modelu RTL

Moduł cyfrowy, opisany w zsyntetyzowanym podzbiorze języka Verilog lub VHDL i/lub opracowany w Edytorze Schematów, przeznaczony jest do wykorzystania na etapie syntezy logiki FPGA. Dostarczony do Software w postaci zmontowanego projektu modułu cyfrowego w oprogramowaniu CAD producenta FPGA. W przypadku cyfrowego modułu Firmware model RTL objęty jest odrębną umową.

Oprócz plików modelu RTL przesyłane są:

  • Instrukcja korzystania z modelu.
  • Opis bloków pamięci zawartych w modelu, w tym typ pamięci, rozmiar, liczba bloków pamięci, hierarchiczna nazwa bloku pamięci.
  • Opis procesu tworzenia gotowych jąder z wykorzystaniem programów do ich tworzenia (np. CoreGenerator dla Xilinx ISE). W przypadku braku opisów mogą wystąpić ograniczenia w zakresie przeprojektowania i zastosowania ze względu na zależność od technologii i producenta.
  • W przypadku korzystania z mikroprocesora producenta (np. Altera - procesor Nios; firmy Xilinx - Microblaze, mikroprocesory PowerPC) wymagany jest opis procesu konfiguracji rdzenia procesora i jego urządzeń peryferyjnych.
  • Zestaw testów (pliki Test Bench) do weryfikacji i symulacji modułu cyfrowego, napisany w Verilog i/lub VHDL i/lub System Verilog.
  • Wszelkie inne dodatkowe informacje.

Model logiczny

Model stanowi listę obwodów opisanych przy użyciu języków Verilog lub VHDL na podstawie biblioteki producenta FPGA i jest dostarczany wraz z Firmwarem modułu cyfrowego.

Oprócz plików modeli logicznych przesyłane są:

  • Instrukcja obsługi tego modelu.
  • Zestaw testów (pliki Test Bench) do weryfikacji i symulacji modułu cyfrowego, napisany w Verilog i/lub VHDL i/lub System Verilog.
  • Poradnik pracy z zestawem testów do modelowania i weryfikacji modułu cyfrowego.
  • Wszelkie inne dodatkowe informacje.

Ograniczenia projektowe

Ograniczenia projektowe są dostarczane w postaci pliku opisującego zestaw ograniczeń nałożonych na moduł cyfrowy, gdy jest on uwzględniony w modelu logicznym typu system-on-chip. Zestaw ten obejmuje ograniczenia zegara, ograniczenia taktowania, ograniczenia interakcji modułu cyfrowego z innymi modułami oraz warunki pracy modułu cyfrowego. Preferowany jest format Synopsis Design Constraints (SDC) lub format CAD producenta FPGA.

Przykładowa lista ograniczeń dla sygnałów synchronizacji:

  • wykres czasowy (przebieg zegarowy);
  • niestabilność częstotliwości zegara (Jitter);
  • zmiana fazy częstotliwości zegara;
  • czas trwania czasów przełączania (Czasy przejścia);
  • diagramy czasowe pochodnych przebiegów zegarowych;
  • wszelkie inne dodatkowe informacje.

Dla modułów cyfrowych Software i Firmware wymagany jest zestaw ograniczeń dla sygnałów synchronizacji.

Przykładowa lista ograniczeń czasowych:

  • Godziny przybycia na wejścia;
  • czas pojawienia się sygnałów na wyjściach (Wymagane czasy na wyjściach);
  • Ścieżki wielorowerowe;
  • fałszywe ścieżki;
  • czas trwania czasów przełączania sygnału danych (Czasy przejścia sygnału danych);
  • wszelkie inne dodatkowe informacje.

Wniosek

Poniższy zestaw dokumentacji towarzyszącej opracowanym modułom cyfrowym dla układów FPGA jest zapewniany na podstawie umowy między konsumentem a programistą. Najczęściej programista po prostu dostarcza moduł cyfrowy opisany w VHDL, Verilog, System Verilog i/lub opracowany w edytorze obwodów. Jeśli chodzi o dodatkową dokumentację, odpowiedź dewelopera jest najczęściej następująca: „Moduł cyfrowy działa, więc bierz go i używaj. Opisanie obwodu w języku sprzętowym nie jest niczym skomplikowanym: możesz to rozgryźć samodzielnie.

Zdaniem autora wszystko można wymyślić, wszystko zależy od chęci i poświęconego czasu, a czas poświęcony na zrozumienie „cudzego” projektu dla już opracowanego modułu cyfrowego jest wprost proporcjonalny do doświadczenia w opisywaniu sprzętu w VHDL, Verilog i wiedza o obwodach cyfrowych i mikroprocesorowych. Można tego uniknąć, jeśli początkowo uzgodnisz z programistą skład dołączonej dokumentacji, wówczas wykorzystanie modułu cyfrowego w Twoim projekcie stanie się łatwiejsze, a jego wdrożenie nastąpi szybciej.

Podsumowując, autor pragnie zauważyć, że formułując zadanie opracowania urządzenia cyfrowego na układzie FPGA, należy kierować się zaleceniami podanymi w artykule, wówczas nie pojawią się problemy przy ponownym użyciu lub modernizacji opracowanego wcześniej urządzenia cyfrowego.

Literatura

  1. Denisov A. Kilka wskazówek dotyczących projektowania urządzeń cyfrowych w VHDL dla układów FPGA // Komponenty i technologie. 2009. Nr 12.
  2. GOST 2.102-68 ESKD. Rodzaje i kompletność dokumentów projektowych.
  3. GOST 2.114-95 ESKD. Warunki techniczne.
  4. GOST 15.101-98. System opracowywania i wdrażania produktów do produkcji. Tryb prowadzenia prac naukowo-badawczych.
  5. GOST R 15.201-20-00. System opracowywania i wdrażania produktów do produkcji. Produkty do celów przemysłowych i technicznych. Procedura opracowywania i wdrażania wyrobów do produkcji.