Podstawy generowania grafik w FPGA za pomocą VHDL (1)

Podstawy generowania grafik w FPGA za pomocą VHDL (1)
Pobierz PDF Download icon

Układy FPGA dzięki swojej elastycznej budowie znajdują szerokie zastosowania w wielu różnych dziedzinach techniki i ? oczywiście ? elektroniki. Przejawia się to w ich coraz częstszym używaniu przez hobbystów w różnych projektach ? od tych prostszych do tych bardziej złożonych. Część z tych aplikacji wymaga przedstawienia rezultatów swojego działania w postaci obrazu wyświetlanego na monitorze komputera. W jaki sposób można osiągnąć taki efekt? Pokażemy to w cyklu artykułów, na przykładzie prostych elementów graficznych tworzonych za pomocą opisów w języku VHDL. Ćwiczenia prezentujące implementację poszczególnych elementów graficznych generowanych sprzętowo będą nam służyć do tworzenia obrazów flag różnych krajów?

Zacznijmy od określenia tego czym tak naprawdę jest obraz w sensie techniki cyfrowej. Obraz – na pierwszy rzut oka – to zbiór obiektów (np. ludzi, budynków, samochodów, tekstów itp.) znajdujących się lub poruszających po określonym tle. W myśl tak rozumianej definicji obrazem jest np.: dom z podwórkiem na tle nieba, grupa uczniów ustawiających się do fotografii klasowej przy ścianie danego pomieszczenia czy też widok danej planszy gry platformowej (np.: Jumping-Jacka), na której znajdują się postaci poruszających się w danej scenerii (rysunek 1).

Jednak takie spojrzenie na obraz jest zbyt ogólne dla zastosowań technicznych. Potrzebne jest ściślejsze jego sformułowanie. Pomocne będzie nam słowo-klucz, które pada często choćby przy okazji kupowania wszelkich monitorów, telewizorów czy w ogólności matryc wyświetlaczy. Często przy ich nabywaniu interesuje nas chociażby obsługiwana przez nie rozdzielczość, czyli inaczej określenie wymiarów w pionie i poziomie obrazów jakie są one w stanie przedstawiać. Czym są te wymiary? Otóż długością i szerokością. Skoro tak to widzimy już, że obraz można potraktować jako płaską, dwuwymiarową zamkniętą przestrzeń, która jest prostokątem jako, że najczęściej w stosunku do tej figury odnosimy wspomniane wymiary (rysunek 2).

Zatem obraz jest czymś ograniczonym w przestrzeni. Już sam fakt takiego ograniczenia pozwala stwierdzić, że jest on implementowalny w sensie techniki, która bez zdefiniowanych ograniczeń tak naprawdę nie istnieje (nie da się bowiem wykonywać pewnych czynności w tym sensie bez ogólniejszego określenia choćby zakresu tego co jest nam potrzebne). Powróćmy jednak do długości i szerokości. Skoro są to wymiary to można je określić liczbowo. Jak to rozumiemy? Otóż następująco: np.: długość o wartości równej 120 oznacza, że coś jest obdarzone taką wielkością w poziomie, natomiast szerokość o wartości równej 90 oznacza, że coś jest obdarzone taką wielkością, ale w pionie. Nie inaczej jest w przypadku obrazu. Jest to kolejny element, bez którego obraz nie byłby w stanie istnieć w ujęciu technicznym (musimy bowiem określić precyzyjnie wspomniane wcześniej ogólnie zarysowane ograniczenia, aby uniknąć potencjalnych niejednoznaczności). Tym samym obraz nie tylko odznacza się ogólnie pojętą ograniczonością – odznacza się również wielkościami liczbowymi, które pozwalają nam określić jak duża jest tak ograniczoność, a tym samym jak wielki jest ten obraz. Jednak czy te wartości mają sens fizyczny? Otóż mają i w związku z tym związane są z określonymi jednostkami. I tu zbliżamy się do wspomnianego wcześniej słowa klucza, bowiem w przypadku obrazów ich długości i szerokości są w nim wyrażane. Chodzi tu oczywiście o piksel, który na pierwszy, choć niepoprawny rzut oka można, mając na względzie wcześniejsze rozważania, potraktować jako „miarę wielkości” obrazu (czy też jako jego „miarę odległości”). W tym ujęciu piksel nie różni się niczym od np.: metra, cali, jarda itd. Jednak wszystkie te miary oparte są o określony wzorzec np: wielkość w danym wymiarze jakiegoś istniejącego fizycznie obiektu – w przypadku metra jest to wzorzec stalowej szyny, który w poziomie ma fizyczną długość, która umownie jest przyjęta jako metr (rysunek 3), w przypadku cala jest to potrojona długość średniego ziarna jęczmienia itd. Tak też jest z pikselem, który oparty jest to najmniejszy element budujący matrycę danego wyświetlacza, wchodzącego w skład danego urządzenia wyświetlającego (monitory, telewizory itp.), a który w praktyce jest elementem o działaniu dokładnie takim samym jak trójkolorowa dioda LED zwana też diodą RGB (rysunek 4).

Jako że taki element fizycznie istnieje też ma skończone wymiary, tym samym przestrzennie też jest skończony. Jednak producentów urządzeń wyświetlających jest sporo, a każdy zaś z nich ustala wymiary takiego piksela po swojemu, przez co precyzyjne, uniwersalne (tzn. bez względu na rozpatrywane urządzenie wyświetlające) porównywanie wielkości obrazów między sobą w oparciu o piksel staje się bezcelowe. Z tego też powodu wielkość obrazu po prostu jest odnoszona w stosunku do tego samego urządzenia wyświetlającego tzn. obraz o długości n pikseli i szerokości k pikseli jest mniejszy/większy od obrazu o długości × pikseli i szerokości y pikseli. Samo mierzenie czy porównywanie wielkości obrazu z drugiej strony tak naprawdę nas nie do końca interesuje i byłoby przesadnym uproszczeniem gdybyśmy traktowali piksel wyłącznie jako miarę wielkości. Jak już zostało wspomniane jest on konkretnym elementem, w dodatku najmniejszym, niepodzielnym, który buduje matryce urządzeń wyświetlających. Tym samym taka matryca jest zbiorem takich pikseli. I tak samo jest z obrazem, który w ten sposób można potraktować jako zbiór najmniejszych niepodzielnych części budujące obiekty oraz tło, na których one się znajdują (rysunek 5).

Należy dodać, że jest to zbiór skończony i uporządkowany, a więc to oznacza, że piksele ułożone są obok siebie (jeden przy drugim) zarówno w pionie jak i w poziomie i jest ich ograniczona ilość. W ten sposób możemy określać położenia poszczególnych pikseli względem jakiegoś punktu odniesienia np.: możemy powiedzieć, że piksel znajdujący się na środku ekranu jest zawarty pod pikselem znajdującym się na górnej krawędzi obrazu, czy też że piksel zawarty w lewym górnym rogu obrazu znajduje się naprzeciwko piksela zawartego w prawym, dolnym rogu ekranu (patrząc po przekątnej). W pierwszym przypadku punktem odniesienia jest piksel na górnej krawędzi, w drugim zaś piksel w prawym, dolnym rogu ekranu. Jednak takie określanie położenia nie jest precyzyjne, jako że przy określaniu położenia nie tyle nas interesuje gdzie się znajduje dany piksel, a jak daleko się znajduje względem obranego punktu odniesienia, a więc chcielibyśmy wyrazić to w sposób liczbowy, a ponadto punktów odniesienia może być nieskończenie wiele. Jednak sprawa staje się prostsza, jeżeli dostrzeżemy analogię między obrazem jako zbiorem pikseli, a dwuwymiarowym układem współrzędnych. W jaki sposób? Przyjmując, że pojedynczy piksel to pojedynczy punkt, dający się wyrazić liczbami całkowitymi, a punktem odniesienia jest tzw. początek układu współrzędnych czyli punkt, w którym rozpoczynają się osie rzędnych i odciętych (y i x), a który umownie przyjęty jest jako para wartości równych zero. Pokazuje to dobitnie rysunek 6.

Punkt ten domyślnie przyjmuje się oczywiście, że jest zawarty w lewym dolnym rogu (co widać na rysunku 6). Skoro tak to w jaki sposób liczbowo, a tym samym precyzyjnie określić położenie dowolnie wybranego piksela? Otóż starczy zauważyć, że każdy taki piksel jest oddalony o określoną ilość pikseli od początku układu współrzędnych, zarówno w pionie jak i w poziomie. Tym samym taki piksel może być oddalony od takiego początku o określoną ilość pikseli wyłącznie w pionie, wyłącznie w poziomie lub zarówno w pionie jak w poziomie, a więc mamy do czynienia łącznie z trzema możliwymi przypadkami. Przykładowo: jeślibyśmy chcieli określić gdzie jest położony piksel oddalony w pionie od początku układu o 10 pikseli to powiemy, że jego położenie w pionie jest równe 10, natomiast położenie w poziomie jest takie samo jak początku układu, jeślibyśmy chcieli powiedzieć gdzie jest piksel oddalony o tyle samo pikseli w poziomie to  powiemy, że jego położenie w poziomie jest równe 10, a położenie w pionie 0, natomiast jeślibyśmy chcieli określić gdzie jest piksel, który jest oddalony od początku układu o tyle samo pikseli, ale zarówno w pionie jak i w poziomie (a więc oddalony od początku po skosie) to powiemy, że jego położenia zarówno w pionie jak i w poziomie jest równe 10 (rysunki 7, 8 i 9).

Tym samym widać, że określanie położenia danego piksela w obrazie to tak naprawdę podobnie jak w układzie współrzędnych określanie odległości względem przyjętego umownie punktu odniesienia, który znajduje się w lewym, dolnym rogu. Cecha ta jest ważna, jako że przyda nam się w dalszej części przy implementacji zasadniczej części generatora flag.

Podsumowując, obraz w ujęciu technicznym to przestrzeń odznaczająca się następującymi cechami:

- Jest ograniczona i prostokątna.
- Można określić jej długość i szerokość, a więc można określić jak bardzo jest ona ograniczona i wielka (a więc można precyzyjnie określić gdzie się zaczyna, a gdzie się kończy),
- Składa się ze skończonego i uporządkowanego zbioru najmniejszych niepodzielnych części zwanych pikselami, które to z kolei budują obiekty (poruszające się lub nie) i tło, na którym one się znajdują.
- Odznacza się podobieństwem do kartezjańskiego układu współrzędnych, jako że piksele można potraktować jako punkty, w stosunku do których można precyzyjnie określić położenie, przyjmując za punkt odniesienia początek układu współrzędnych (czyli punkt o położeniu równym zero zarówno w pionie jak i w poziomie). Położenie to można określić w samym pionie, w samym poziomie oraz zarówno w pionie jak i w poziomie (czyli po przekątnej).

Co ważne cechy te są uniwersalne bez względu na rodzaj stosowanej technologii czy standardu wyświetlania. Wszystkie z nich bowiem jako podstawę biorą pojęcie piksela, dającego się precyzyjnie określić pod względem położenia, a także jak to rozwiązania techniczne potrzebują po prostu jasno określonych ograniczeń wyrażonych konkretnymi wartościami liczbowymi, zwłaszcza jeśli chodzi o wielkość obrazu (czyli wspomniana wcześniej długość i szerokość, zbiorczo zwana rozdzielczością). Spostrzeżenia te znalazły zastosowanie już wtedy, gdy obecne były analogowe technologie wyświetlania (choć wtedy pojęcie piksela z racji dominacji głównie wyświetlaczy kineskopowych było bardziej tożsame z pojęciem poruszającej się po nich plamki kineskopowej i nie było tak precyzyjnie definiowane jak dzisiaj) i wraz z rozwojem techniki cyfrowej zostały z powodzeniem przeniesione na jej grunt (właśnie ze względu na uniwersalność wspomnianych cech, jako że zmienił się tu tylko rodzaj stosowanej technologii, a nie sama koncepcja obrazu w ujęciu technicznym). Tym samym jak widać takie podejście do pojęcia obrazu jest niezależne od  jego „fizycznej natury”, choć na dłuższą metę musimy „uzależnić się” od konkretnego standardu, aby dokonać implementacji obrazu w sensie technicznym (wszak na coś się musimy zdecydować). Zatem przejdźmy teraz bezpośrednio do niego.

Mamy już gotowe kryteria jakie musi spełniać obraz, aby zaimplementować go sensownie w sensie technicznym, jednak nie wiemy jeszcze jak je dokładnie wykorzystać (bardziej obrazowo mówiąc: mamy składniki potrzebne do wyrobu ciasta, ale nie wiemy w jakiej kolejności ich użyć i w jakich proporcjach czyli nie mamy przepisu). Podpowiedzią, która ułatwi nam to zadanie jest wspomniane już wcześniej pojęcie piksela, w przypadku którego zostało wspomniane, że bazuje on na najmniejszym elemencie budującym matrycę wyświetlacza urządzenia wyświetlającego. Matryca ta jest zbudowana z wielu takich elementów, ułożonych obok siebie zarówno w pionie jak i w poziomie. Tym samym jak łatwo się domyśleć, aby przedstawić dany obiekt wystarczy zaświecić na niej konkretnymi elementami. Na pierwszy rzut oka można powiedzieć, że starczy podawać napięcia na poszczególne elementy, aby to osiągnąć, czyli tak naprawdę sterować każdym takim elementem w sposób niezależny. Choć podejście to jest najłatwiejsze, jednak jest zbyt skomplikowane do wykonania od strony technicznej. Wyobraźmy bowiem sobie matrycę, która zawiera po 1920 takich elementów w poziomie i 1080 rzędów zawierających taką ich ilość. Po przemnożeniu okazuje się, że mamy łącznie 2073600 diod, a więc potrzebnych by było aż tyle wyprowadzeń do sterowania. Przy tak małych rozmiarach jest to trudne lub wręcz niemożliwe do wykonania. Z tego też powodu robi się pewne „oszustwo” czy też „obejście”, które choć tak naprawdę korzysta z ograniczeń naszego ludzkiego wzroku, ale jest prostsze w realizacji, a tym samym da się technicznie je zaimplementować.

O jaki sposób chodzi? Wyjaśni to nam matryca diod LED złożona z 4 wierszy zawierających po 4 takie diody, czyli krótko: matryca diod LED 4×4 (rysunek 10).

Jest to w zasadzie matryca jaką możemy często spotkać przy różnego rodzaju elektronicznych tablicach reklamowych, wielkich wyświetlaczach jakie są ustawiane czasem przy okazji niektórych koncertów muzycznych, czy też obecnie coraz częściej w ekranach laptopów, telewizorów itp. urządzeń. Jak widzimy przedstawiona matryca zawiera wiersze oznaczone kolejno od W1 do W4 oraz kolumny oznaczone kolejno od K1 do K4. Zasada jej działania jest następująca: jeśli na wybrany wiersz podamy wysoki potencjał napięcia, wówczas polaryzujemy dodatnio wejścia diod zawartych w tym wierszu, a więc domyślnie polaryzujemy je w stronę przewodzenia, co powoduje domyślnie ich zapalenie. Sprawia to, że włączamy w ten sposób w całości wiersz. Natomiast jeśli na ten sam wiersz przyłożymy niski potencjał, wówczas wejścia diod zostają spolaryzowane ujemne, a więc diody zostaną spolaryzowane w kierunku przeciwnym i przestaną świecić. Tym samym wiersz ten zostaje wyłączony. Tak więc jak widzimy matryca ta pozwala nam na świecenie poszczególnymi wierszami. Jednak co w takim razie z kolumnami zawartymi w matrycy? Czy są one nam potrzebne? Otóż są – to dzięki nim jesteśmy w stanie wyłączyć poszczególne diody w wierszu, na następującej zasadzie: wysokim potencjałem polaryzujemy dodatnio wyjście diody, a więc domyślnie wymuszamy na niej odwrotną do normalnej polaryzację, a więc taka dioda nie będzie przewodziła, natomiast podając ujemny potencjał polaryzujemy ujemnie jej wyjście, a więc domyślnie wymuszamy na niej normalną polaryzację, tym samym umożliwiając jej świecenie. Zatem tak naprawdę aby zaświecić daną diodą wystarczy włączyć dany wiersz oraz zablokować te kolumny, których nie chcemy użyć. Przykładowo: jeśli chcemy zaświecić pierwszą diodę zawartą w pierwszym wierszu, wystarczy na wejście W1 podać wysoki potencjał, natomiast na kolumnę K1 niski potencjał (oczywiście na pozostałe kolumny podajemy wysokie potencjały), co przedstawiono na rysunku 11. Natomiast jeśli nas interesuje trzecia od lewej dioda zawarta w drugim wierszu od góry, wówczas podajemy wysoki potencjał na wejście W2 oraz niski potencjał na kolumnę K3, pamiętając, aby pozostałe kolumny były zablokowane, czyli był podany na nich wysoki potencjał (rysunek 12).

Jednak czy takie spostrzeżenie jest już wystarczające, aby można było w pełni przenieść obraz na rozwiązania techniczne? Okazuje się, że nie, bowiem takim podejściem jesteśmy w stanie co najwyżej wyświetlać wybrane wiersze w całości w danej chwili lub co najwyżej pojedyncze piksele w wierszach, w dodatku te same. Takie ograniczenie nas jednak nie interesuje, bowiem nam zależy na wyświetlaniu dowolnych obrazów. Zatem jak można to osiągnąć? Rąbka tajemnicy uchyla nam w tym względzie drugi z istotnych parametrów jaki podają producenci urządzeń wyświetlających – mianowicie chodzi o częstotliwość odświeżania, która wynosi np. 60 Hz, 75 Hz, a ostatnio nawet i ponad 100 Hz jak to ma miejsce w przypadku telewizorów. Co nam mówi ten parametr? Na pierwszy rzut oka można powiedzieć, że chodzi o to ile razy na sekundę odświeżany jest obraz przedstawiany przez urządzenie. Jednak co to dokładnie oznacza? Otóż tak naprawdę chodzi o to ile razy na sekundę „rysowany” jest obraz przez urządzenie, przy czym ten cudzysłów nie jest użyty przypadkowo, bowiem  tak naprawdę urządzenie nie tyle rysuje co bardzo szybko wyświetla poszczególne partie obrazu w czasie. Tak szybko, że w sumie daje to złudne wrażenie ciągłego obrazu. I to jest klucz, który na którym bazuje wspomniane wcześniej „obejście” – korzysta po prostu ono z naturalnej ułomności naszego wzroku, polegającej na występowaniu pewnego rodzaju bezwładności, z powodu której nasze oczy nie są w stanie rozróżniać poszczególnych sekwencji obrazu jeśli są one wyświetlane bardzo szybko. Ze sztuczki tej korzysta się już ponad 100 lat w przypadku filmów, które choć od strony technicznej są niczym innym jak taśmą filmową, na której znajdują się poszczególne klatki obrazu, to jednak przesuwane bardzo szybko dają złudne wrażenie ruchu (gdybyśmy wolniej to czynili wówczas widzielibyśmy skokowe zmiany poszczególnych klatek zawartych na taśmie). Jednak jak to się ma do przytoczonej matrycy LED? Otóż wystarczy, że będziemy świecić w poszczególnych chwilach czasu tylko i wyłącznie jedną diodą, tzn. przez pewien czas będziemy świecić pierwszą od lewej diodą zawartą w pierwszym od góry wierszu (rysunek 13), po czym tą diodę wyłączymy, a włączymy drugą od lewej strony diodę w tym samym wierszu (rysunek 14), po czym znów ją zgasimy i włączymy kolejną po prawo w tym samym wierszu diodę (rysunek 15), wyłączymy ją i włączymy ostatnią z diod w wierszu i po pewnym czasie i ją wyłączymy (rysunek 16), włączając z powrotem pierwszą od lewej diodę, powtarzając wymienione sekwencje. I tak w kółko. Jeśli będziemy to robić dość wolno, wówczas będziemy widzieli jak skokowo gasną i zapalają się kolejne diody. Jednak jeśli bardzo szybko to wówczas będziemy mieli złudne wrażenie, że pali się cały wiersz (choć w istocie po prostu będą bardzo szybko gasły i zapalały się kolejne diody). Tym samym otrzymujemy dokładnie taki sam efekt jak przy przesuwaniu taśmy filmowej w projektorze (spróbuj drogi czytelniku złożyć sobie w głowie rysunki od 13 do 16 tak szybko jak się da).

Jednak na razie w ten sposób umiemy jedynie wyświetlić tylko jeden wiersz matrycy. A co jeślibyśmy chcieli zaświecić ich kilka lub od razu wszystkie? Nic prostszego – otóż wystarczy, że powtórzymy opisane wcześniej sekwencje, z tą jednak różnicą, że po zgaszeniu ostatniej diody w danym wierszu zapalimy po niej pierwszą z lewej diodę, ale w następnym wierszu, czyli zgasimy i zapalimy wszystkie diody w pierwszym wierszu, potem to samo zrobimy w drugim, trzecim i czwartym, a potem zaś ponownie przejdziemy do pierwszego wiersza i zaczniemy powtarzać dostatecznie szybko całą sekwencję określoną ilość razy w ciągu sekundy, czyli tym sam będziemy dostatecznie szybko „odświeżać obraz”. W ten sposób otrzymamy wrażenie świecenia całej matrycy (rysunek 17)

Jak widać pełzamy niczym wąż „zygzakiem”, aby tego dokonać. Jednak mimo wszystko jest to za mało, bowiem w tym podejściu na bieżąco świecimy każdą z diod, a dalej nam to nie pozwala na tworzenie dowolnych obrazów. Załóżmy bowiem, że na tle czerwonych diod chcemy wyrysować małą literę L korzystając z 2 i 3 od lewej diody zawartej w wierszu trzecim od góry i diody 2 od lewej zawartej w wierszu 2 licząc od góry (rysunek 18).

Jak to zrobić? Ano wystarczy postępować jak poprzednio (czy tez jak na rysunku 17) tylko, że w czasie, który przeznaczony jest na świecenie diody po prostu jej nie zapalać, czyli de facto czas przeznaczony na świecenie diody przeznaczyć na jej nie świecenie. Prawda, że proste? Czyli, aby wyświetlić literę L w sposób określony przed chwilą wystarczy w przypadku wiersza pierwszego licząc od góry po koli zgasić i zaświecić wszystkie diody, w przypadku wiersza drugiego zaświecić i zgasić pierwszą od lewej diodę w danym czasie, potem nie świecić przez ten czas drugą od lewej diodą, natomiast pozostałe dwie diody zaświecić i zgasić, w przypadku wiersza trzeciego wystarczy zapalić i zgasić pierwszą od lewej diodę, również w tym samym czasie, potem przez ten czas nie świecić drugą i trzecią od lewej diodą, a potem zaświecić i ostatnią diodę. I tak oczywiście określoną ilość razy w ciągu sekundy. Tym samym jesteśmy już w stanie wyświetlić dowolny obraz. Podejście to jest uniwersalne i możemy je rozszerzyć na o wiele większą matrycę (w naszym przykładzie matryca jest mała, ale dlatego, żeby było łatwiej zrozumieć przytoczony tu sposób wyświetlania obrazów). Mało tego – podejście to jest na tyle uniwersalne, że możemy je zastosować do matryc zbudowanych nie tylko z diod LED, ale np. matryc opartych ciekłe kryształy (LCD), matryc OLED itp. Co ważne taki sposób wyświetlania jest powszechnie stosowany przez wiele istniejących standardów wyświetlania. Skoro tak to w takim razie czemu jest ich duża ilość i czym się różnią? Tak naprawdę jak to się mówi: diabeł tkwi w szczegółach. Otóż wszystkie te standardy (pomijając to, że mogą być analogowe i cyfrowe) odznaczają się różnymi parametrami czasowymi, różnymi poziomami stosowanych napięć, używaniem lub nieużywaniem kodowań itp. Różnią się też koncepcjami budowy układów wytwarzających przebiegi, na podstawie których następnie tworzone są obrazy, a nawet samymi postaciami tychże przebiegów.

Jak więc widać jest w czym przebierać i na pierwszy rzut oka wręcz utrudnia wybór standardu, którym mamy się „uzależnić”. Jednak tylko pozornie. Bowiem tak naprawdę czy byśmy wzięli standard z takimi parametrami czasowymi czy napięciowymi to tak czy siak jesteśmy w stanie pomimo zachodzących różnic zaimplementować taki lub taki standard. Prędzej jak już problemem staje się sama koncepcja budowy układów pod standard. Jedne standardy przewidują budowę prostszych układów od pozostałych i vice-wersa. I to w istocie interesuje najbardziej projektantów układów cyfrowych – właśnie to jak bardzo złożone muszą powstać układy, aby realizowały koncepcje danych standardów. I tym kryterium też się należy kierować przy wyborze. Idąc nim szybko idzie stwierdzić, że najlepszym w tym celu standardem jest standard VGA, który wbrew pozorom nie jest stary – został on opracowany przez firmę IBM w 1987 i początkowo służył do obsługi monitorów produkowanych przez tą firmę. Jednak prostota zwłaszcza pod względem budowy układów potrzebnych do obsługi tego standardu, zarówno pod względem tworzenia przebiegów potrzebnych do stworzenia obrazu, jak do ich odczytu, a tym samym przedstawienia tego obrazu, sprawiły, że z powodzeniem standard ten został przyjęty przez inne firmy, które też zaczęły go z powodzeniem implementować w swoich produktach i do dzisiaj tak postępują. Co ciekawe, choć standard ten jest już mocno przestarzały i jest wypierany przez nowsze rozwiązania takie jak DVI czy HDMI, to jednak paradoksalnie jak się okazuje standardy te bazują na VGA, a nawet ten standard jest częścią składową tych standardów! Tak więc jak widzimy standard ten znika jedynie pozornie (mówiąc bardziej obrazowo: schodzi do „podziemia”). Prostotę tego standardu docenili również producenci płyt zawierających układy FPGA, którzy dla celów dydaktycznych również montują co potrzeba na nich, aby ten standard mógł być obsługiwany (tym samym też od niego rozpoczyna się naukę wyświetlania jakichkolwiek obrazów poprzez układy FPGA). Skoro jest on aż tak prosty, że używany jest również w przypadku FPGA to zatem się od niego „uzależnijmy” i na nim prowadźmy dalsze rozważania, przyjmując tym samym, że nasz generator flag, który mamy zbudować też będzie działał w oparciu o ten standard.

 

Wiemy już czego należy spodziewać się po tym standardzie jeśli chodzi o działanie. Jednak czy tyle wystarczy, aby taki standard mógł w pełni funkcjonować? No niezupełnie, bowiem choć my intuicyjnie już wiemy jak wyświetlić taki obraz to jednak musimy precyzyjnie powiedzieć teraz układowi FPGA jak ma to czynić (wszak taki układ nie postępuje „oczywiście” czy tez „intuicyjnie”, „domyślnie” jak my). I właśnie ta próba „wyjaśnienia” układowi jak to ma robić sprawia, że należy dołożyć kilka dodatkowych czynności i dopiero razem z tymi czynnościami uzyskujemy właściwy standard (należy jednak przy tym dodać, że w zależności od standardu czynności te będą się różniły, bowiem przewidują one inne podejście do rozwiązania tych samych problemów). Przekonamy się o tym w odcinku za miesiąc.

Jakub Tyburski, WAT

 

Więcej informacji:
Artykuł powstał pod opieką merytoryczną dr. inż. Rafała Szymanowskiego.

Artykuł ukazał się w
Elektronika Praktyczna
kwiecień 2017
DO POBRANIA
Pobierz PDF Download icon
Zobacz też
Elektronika Praktyczna Plus lipiec - grudzień 2012

Elektronika Praktyczna Plus

Monograficzne wydania specjalne

Elektronik wrzesień 2020

Elektronik

Magazyn elektroniki profesjonalnej

Raspberry Pi 2015

Raspberry Pi

Wykorzystaj wszystkie możliwości wyjątkowego minikomputera

Świat Radio październik 2020

Świat Radio

Magazyn użytkowników eteru

Automatyka Podzespoły Aplikacje wrzesień 2020

Automatyka Podzespoły Aplikacje

Technika i rynek systemów automatyki

Elektronika Praktyczna wrzesień 2020

Elektronika Praktyczna

Międzynarodowy magazyn elektroników konstruktorów

Praktyczny Kurs Elektroniki 2018

Praktyczny Kurs Elektroniki

24 pasjonujące projekty elektroniczne

Elektronika dla Wszystkich wrzesień 2020

Elektronika dla Wszystkich

Interesująca elektronika dla pasjonatów