Laboratorium Podstaw Techniki Cyfrowej

Podobne dokumenty
Laboratorium przedmiotu Technika Cyfrowa

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Język HDL - VERILOG. (Syntetyzowalna warstwa języka) Hardware Description Language Krzysztof Jasiński PRUS PRUS

Programowalne układy logiczne kod kursu: ETD Podstawy języka Verilog W

Automatyzacja i robotyzacja procesów produkcyjnych

AHDL - Język opisu projektu. Podstawowe struktury języka. Komentarz rozpoczyna znak i kończy znak %. SUBDESIGN

Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

Pojedyncze wartości zadeklarowanego typu Ustawiane przed rozpoczęciem symulacji bez moŝliwości

Cyfrowe układy scalone c.d. funkcje

Literatura. adów w cyfrowych. Projektowanie układ. Technika cyfrowa. Technika cyfrowa. Bramki logiczne i przerzutniki.

Podstawowe elementy układów cyfrowych układy sekwencyjne Rafał Walkowiak Wersja

Modelowanie liczników w języku Verilog i ich implementacja w strukturze FPGA

Układy kombinacyjne 1

Przykładowe pytania z części PSPICE. 1. Podaj zasady tworzenia pliku symulacyjnego. 2. Czy składnia PSPICE jest czuła na wielkość liter? 3.

Przerzutnik ma pewną liczbę wejść i z reguły dwa wyjścia.

LEKCJA. TEMAT: Funktory logiczne.

Systemy wbudowane. Projektowanie systemów wbudowanych na bazie układów CPLD/FPGA Język opisu sprzętu Verilog cz.1

Układy cyfrowe w Verilog HDL. Elementy języka z przykładami. wersja: cz.3

Szkoła programisty PLC : sterowniki przemysłowe / Gilewski Tomasz. Gliwice, cop Spis treści

Instrukcja do ćwiczeń nr 4 typy i rodzaje zmiennych w języku C dla AVR, oraz ich deklarowanie, oraz podstawowe operatory

Proste układy sekwencyjne

PoniŜej zamieszczone są rysunki przedstawiane na wykładach z przedmiotu Peryferia Komputerowe. ELEKTRONICZNE UKŁADY CYFROWE

Zadania do wykładu 1, Zapisz liczby binarne w kodzie dziesiętnym: ( ) 2 =( ) 10, ( ) 2 =( ) 10, (101001, 10110) 2 =( ) 10

Sterowniki Programowalne (SP)

Pracownia elektryczna i elektroniczna. Elektronika cyfrowa. Ćwiczenie nr 5.

Operacje wykonywane są na operandach (argumentach operatorów). Przy operacji dodawania: argumentami operatora dodawania + są dwa operandy 2 i 5.

Lista tematów na kolokwium z wykładu z Techniki Cyfrowej w roku ak. 2013/2014

Podstawy Informatyki Elementarne podzespoły komputera

LICZNIKI Liczniki scalone serii 749x

LABORATORIUM TECHNIKA CYFROWA LICZNIKI I REJESTRY. Rev.1.1

Język Verilog w projektowaniu układów FPGA

Projekt z przedmiotu Systemy akwizycji i przesyłania informacji. Temat pracy: Licznik binarny zliczający do 10.

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Architektura systemów komputerowych Laboratorium 13 Symulator SMS32 Operacje na bitach

Część 3. Układy sekwencyjne. Układy sekwencyjne i układy iteracyjne - grafy stanów TCiM Wydział EAIiIB Katedra EiASPE 1

Wykład 2 Składnia języka C# (cz. 1)

Podstawowe elementy układów cyfrowych układy sekwencyjne. Rafał Walkowiak

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

dwójkę liczącą Licznikiem Podział liczników:

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Projektowanie Scalonych Systemów Wbudowanych VERILOG

1 Podstawy c++ w pigułce.

Podstawy programowania w języku C

JAVA. Platforma JSE: Środowiska programistyczne dla języka Java. Wstęp do programowania w języku obiektowym. Opracował: Andrzej Nowak

/* dołączenie pliku nagłówkowego zawierającego deklaracje symboli dla wykorzystywanego mikrokontrolera */ #include <aduc834.h>

Ćwiczenie 1. Wprowadzenie do programu Octave

2019/09/16 07:46 1/2 Laboratorium AITUC

Szkolenia specjalistyczne

Wstęp do Techniki Cyfrowej... Synchroniczne układy sekwencyjne

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

Podstawy Elektroniki dla Elektrotechniki. Liczniki synchroniczne na przerzutnikach typu D

Architektura komputerów Wykład 2

Podstawy programowania w języku C i C++

PLC1: Programowanie sterowników logicznych SIEMENS SIMATIC S7-300/400 - kurs podstawowy

Języki programowania C i C++ Wykład: Typy zmiennych c.d. Operatory Funkcje. dr Artur Bartoszewski - Języki C i C++, sem.

Programowalne układy logiczne

Kurs Verilog cz.1 wstęp

Ćwiczenie 01 - Strona nr 1 ĆWICZENIE 01

JĘZYKI PROGRAMOWANIA Z PROGRAMOWANIEM OBIEKTOWYM. Wykład 6

Wykład 4. Języki Opisu Sprzętu

Podstawy elektroniki cyfrowej dla Inżynierii Nanostruktur. Piotr Fita

Podstawy programowania. 1. Operacje arytmetyczne Operacja arytmetyczna jest opisywana za pomocą znaku operacji i jednego lub dwóch wyrażeń.

Podstawy działania układów cyfrowych...2 Systemy liczbowe...2 Kodowanie informacji...3 Informacja cyfrowa...4 Bramki logiczne...

Ćwiczenie 1. Wprowadzenie do programu Octave

Adresowanie obiektów. Adresowanie bitów. Adresowanie bajtów i słów. Adresowanie bajtów i słów. Adresowanie timerów i liczników. Adresowanie timerów

Inwerter logiczny. Ilustracja 1: Układ do symulacji inwertera (Inverter.sch)

Ćw. 9 Przerzutniki. 1. Cel ćwiczenia. 2. Wymagane informacje. 3. Wprowadzenie teoretyczne PODSTAWY ELEKTRONIKI MSIB

Programowalne układy logiczne

UKŁADY CYFROWE. Układ kombinacyjny

Verilog HDL. Język Opisu Sprzętu Hardware Description Language Część I. Elementy języka. dr inż. Paweł Tomaszewicz H D L

Arytmetyka liczb binarnych

Spis treœci. Co to jest mikrokontroler? Kody i liczby stosowane w systemach komputerowych. Podstawowe elementy logiczne

Pętle. Dodał Administrator niedziela, 14 marzec :27

Wykład 4. Języki Opisu Sprzętu. Prowadzący: dr inż. Andrzej Skoczeń Współrzędne: D , tel. w ,

Synteza logiczna APSC

Podstawy i języki programowania

(przykład uogólniony)

LABORATORIUM ELEKTRONIKI I TEORII OBWODÓW

Mikrooperacje. Mikrooperacje arytmetyczne

Krótkie przypomnienie

Laboratorium Wstawianie skryptu na stroną: 2. Komentarze: 3. Deklaracja zmiennych

Cyfrowe układy sekwencyjne. 5 grudnia 2013 Wojciech Kucewicz 2

Automatyka. Treść wykładów: Multiplekser. Układ kombinacyjny. Demultiplekser. Koder

Projekt prostego procesora

Układy kryptograficzne z uŝyciem rejestrów LFSR

WFiIS CEL ĆWICZENIA WSTĘP TEORETYCZNY

Kurs Podstawowy S7. Spis treści. Dzień 1

Synteza strukturalna automatów Moore'a i Mealy

Programowalne układy logiczne kod kursu: ETD Układy kombinacyjne, przypisania, blokujące i nieblokujące cz.2 W

Statyczne badanie przerzutników - ćwiczenie 3

Plan wykładu. Architektura systemów komputerowych. Cezary Bolek

Podstawy Programowania C++

WSTĘP DO ELEKTRONIKI

Realizacja bezpiecznego programowalnego sterownika logicznego z wykorzystaniem języków HDL

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

1 Podstawy c++ w pigułce.

Przerzutniki RS i JK-MS lab. 04 Układy sekwencyjne cz. 1

AKADEMIA GÓRNICZO-HUTNICZA IM. STANISŁAWA STASZICA W KRAKOWIE. Wydział Informatyki, Elektroniki i Telekomunikacji LABORATORIUM.

1.Wprowadzenie do projektowania układów sekwencyjnych synchronicznych

Transkrypt:

Laboratorium Podstaw Techniki Cyfrowej Ćwiczenie 5: Wprowadzenie do języków opisu sprzętu 1. Języki opisu sprzętu Języki opisu sprzętu(hdl Hardware Description Language) to języki słuŝące do opisu układów cyfrowych. Ich historia sięga lat pięćdziesiątych, jednakŝe pierwsze praktyczne implementacje powstały w latach siedemdziesiątych. 2. Języki HDL wstęp do języka VERILOG 2.1. Stałe liczbowe Stałe liczbowe w języku VERILOG zapisywane są w następującej postaci: [ [<rozmiar>] [<podstawa>] ] <wartość> Zarówno rozmiar jak i podstawa są opcjonalne, niemniej jednak rozmiar nie moŝe występować bez podstawy. Rozmiar jest liczbą dziesiętną, która określa na ilu bitach ma zostać zapisana liczba, natomiast podstawa jest stałą określającą podstawę liczby. MoŜe ona przyjmować następujące wartości: d liczba dziesiętna (domyślnie), h liczba szesnastkowa, o liczba ósemkowa, b liczba binarna. 2.2. Komentarze W VERILOGu występują podobnie jak w języku C dwa sposoby komentowania kodu. Pierwszym z nich są dwa ukośniki (//) słuŝące do komentowania pojedynczych linii kodu. Drugim dokładnie tak samo jak w języku C są: ciąg znaków /* - określa początek komentarza, ciąg znaków */ - określa koniec komentarza. Wszystko co jest pomiędzy tymi dwoma ciągami znaków nie jest brane pod uwagę podczas syntezy układu cyfrowego. Przykład wykorzystania pokazany został na kolejnym listingu. // To jest komentarz w pojedynczej linii /* Pierwsza linijka komentarza wielolinijkowego Druga linijka komentarza wielolinijkowego Trzecia linijka komentarza wielolinijkowego */ 2.3. Obiekty VERILOG w odróŝnieniu od klasycznych języków programowania proceduralnego takich jak Pascal czy C posiada zamiast zmiennych obiekty. NajwaŜniejszymi z nich są:

reg (rejestr) obiekt pamiętający swoją wartość do momentu wpisania kolejnej wartości, net (sieć) obiekt stanowiący połączenie pomiędzy dwoma blokami, nie posiada pamięci, musi być ciągle wysterowywany, integer liczba całkowita której rozmiar jest zwykle determinowany przez rozmiar słowa na maszynie na której kod jest symulowany, real liczba rzeczywista, zwykle podwójnej precyzji (64 bit), time obiekt przeznaczony do przechowywania czasu symulacji. Istnieje wiele rodzajów obiektów typu net. Niektóre z nich to: wire zwykła sieć do której moŝna dołączyć tylko jeden sterownik, wor wyjścia sterowników są połączone do sieci poprzez wielowejściową bramkę OR, wand wyjścia sterowników są połączone do sieci poprzez wielowejściową bramkę AND (modeluje otwarty kolektor), wand wyjścia sterowników połączonych tri sieć trzystanowa, moŝna do niej dołączyć więcej niŝ jeden sterownik, tri0 sieć trzystanowa, podciągana do zera logicznego gdy źródła sterujące są w stanie wysokiej impedancji, tri1 sieć trzystanowa, podciągana do jedynki logicznej gdy źródła sterujące są w stanie wysokiej impedancji, trireg sieć trzystanowa, zachowuje poprzednią wartość gdy źródła sterujące są w stanie wysokiej impedancji. 2.4. Deklaracja obiektów i wektorów obiektów Obiekty w języku VERILOG moŝna deklarować w sposób skalarny i wektorowy. Oba przypadki nie róŝnią się znacznie od deklarowania zmiennych w języku C. 2.4.1. Deklaracja obiektów skalarnych reg <obiekt1, obiekt2, obiekt3,..., obiektn>; wire <obiekt1, obiekt2, obiekt3,..., obiektn>; 2.4.2. Deklaracja obiektów wektorowych reg [ val1 : val2 ] <obiekt1, obiekt2, obiekt3,..., obiektn>; wire [ val1 : val2 ] <obiekt1, obiekt2, obiekt3,..., obiektn>; wire [ 7 : 0 ] <obiekt1, obiekt2, obiekt3,..., obiektn>; wire [ 0 : 7 ] <obiekt1, obiekt2, obiekt3,..., obiektn>; wire [ 7 : 0 ] data; wire [ 15 : 0 ] addr; NajwaŜniejszą rzeczą na jaką naleŝy zwrócić uwagę jest fakt, Ŝe val1 moŝe być większe lub mniejsze od val2. Jest to najzwyczajniej modelowanie sposobu zapisu. NaleŜy pamiętać aby w całym kodzie stosować tą samą notację zapisu. Niemniej jednak notacją, która się przyjęła jest zapis dla którego val1 > val2.

2.5. Operatory stosowane w języku VERILOG W niniejszej tablicy zestawiono operatory wykorzystywane w języku VERILOG w kolejności rosnącego priorytetu operacji. PoniewaŜ w tym miejscu jest jeszcze zbyt wcześnie by podawać przykłady działania tych operatorów, zostaną one podane w dalszej części tej instrukcji. Symbol operatora Opis?: operator warunkowy suma logiczna && iloczyn logiczny bitowe or ~ bitowe nor ^ bitowe xor ^~ bitowe xnor ~^ bitowe xnor & bitowe and ~& bitowe nand == relacja równości!= relacja nierówności > relacja - większy < relacja - mniejszy >= relacja - większy bądź równy <= relacja - mniejszy bądź równy >> przesunięcie bitowe w prawo << przesunięcie bitowe w lewo + dodawanie - odejmowanie * mnoŝenie / dzielenie % modulo 2.6. Instrukcje sterujące języka VERILOG PoniewaŜ VERILOG jest językiem opisu sprzętu naleŝy się bardzo ostroŝnie posługiwać instrukcjami sterującymi. Przy implementacji modułów w sprzęcie praktycznie wykorzystywane są tylko dwa typy instrukcji sterujących. Do pierwszego z nich naleŝą instrukcje wykonywania warunkowego if-else. Sposób wykorzystania instrukcji ilustruje następujący przykład: if ( enable == 1 b1 ) begin y = x; ny =!x; else begin y = 0; ny = 1; Drugim typem instrukcji sterującej jest instrukcja case. Działa ona podobnie jak instrukcja switch w języku C. Ilustruje to kolejny przykład:

case ( input ) 0 : output = 7; 1 : output = 2; 2 : output = 8; 3 : output = 9; default : output = 0; case Jeśli obiekt input przyjmuje wartości 0, 1, 2, 3, to obiekt output przyjmuje odpowiednio wartości 7, 2, 8, 9. We wszystkich innych przypadkach obiekt output przyjmuje wartość 0. Kolejne trzy instrukcje sterujące nie posiadają właściwie Ŝadnego zastosowania przy implementacjach sprzętowych, natomiast wykorzystuje się je przy implementacji środowisk testowych. Wszystkie są instrukcjami pętli. Pierwszą z nich jest instrukcja while. Jest ona analogiczna do instrukcji while w języku C. Dopóki oiekt ma wartość logiczną jeden (wartość większa od zera) zawartość pętli jest wykonywana. Ilustruje to następujący przykład: counter = 10; while( counter ) begin counter = counter - 1; y = ~y; $display( counter = %d, y = %b, counter, y ); Wynik działania wygląda następująco: # counter = 9, y = 1 # counter = 8, y = 0 # counter = 7, y = 1 # counter = 6, y = 0 # counter = 5, y = 1 # counter = 4, y = 0 # counter = 3, y = 1 # counter = 2, y = 0 # counter = 1, y = 1 # counter = 0, y = 0 Instrukcja oznacza opóźnienie o 10 jednostek czasowych. Jest to typowe zastosowanie przy symulacji układów cyfrowych. Kolejna instrukcja sterująca to pętla for. Jest ona praktycznie identyczna jak w języku C, poza faktem, Ŝe VERILOG nie posiada operatorów ++ i --. Wykorzystanie tej instrukcji zostało pokazane w kolejnym przykładzie: for( i = 0; i < 10; i = i + 1 ) begin $display( i = %b, i ); Wynik wygląda następująco: # i = 0000 # i = 0001 # i = 0010 # i = 0011 # i = 0100 # i = 0101 # i = 0110

# i = 0111 # i = 1000 # i = 1001 Ostatnią z instrukcji sterujących jest pętla repeat. Ciało tej pętli jest wykonywane tyle razy ile podano w argumencie. Ilustruje to następujący snippet kodu: i = 0; repeat ( 5 ) begin $display( i = %d, i ); i = i + 1; Wynik symulacji tego kodu wygląda następująco: # i = 0 # i = 1 # i = 2 # i = 3 # i = 4 WAśNE!!!! Jeśli przy opisie za pomocą instrukcji if-else lub case nie zostaną zdefiniowane wszystkie kombinacje (przy if brakuje else, a przy case brakuje default) narzędzie syntezujące stworzy zatrzask. 2.7. Bloki proceduralne i przypisania W języku VERILOG wszystkie instrukcje są grupowane w blokach: assign, initial, always, przy czym bloki initial i always są nazywane blokami proceduralnymi. Blok assign słuŝy do modelowania logiki kombinatorycznej uŝywającej obiektów typu wire jako wyjście czyli takich, które potrzebują ciągłego wysterowania. Blok ten wykonywany jest asynchronicznie, równolegle z wszystkimi innymi blokami, dlatego teŝ nazywany jest czasami przypisanie ciągłe. Jego wykorzystanie ilustruje kolejny przykład: wire out; assign out = (enable)? data : 1'bz; Jest to implementacja bufora trzystanowego. Jeśli obiekt enable ma wartość logiczną 1, to wartość obiektu data przekazywana jest do obiektu out. W przeciwnym przypadku obiekt out ustawiany jest w stan wysokiej impedancji. Kolejnym z bloków jest blok initial który jest wykorzystywany tylko podczas symulacji, w tzw. środowiskach testowych (nazywanych w języku angielskim testbench). Zawartość tego bloku wykonywana jest tylko raz, na początku symulacji. Przykładowa implementacja takiego bloku przedstawiona została w kolejnym listingu: reg x1, x2, sw;

wire y; initial begin x1 = 0; x2 = 1; sw = 0; $display( "x1: %b, x2: %b, sw: %b, y: %b", x1, x2, sw, y ); sw = 1; $display( "x1: %b, x2: %b, sw: %b, y: %b", x1, x2, sw, y ); sw = 0; $display( "x1: %b, x2: %b, sw: %b, y: %b", x1, x2, sw, y ); Ostatnim opisywanym tutaj blokiem jest always. Jak sama nazwa mówi, ciało tego bloku wykonywane jest zawsze. No ale cóŝ to za blok wykonywany zawsze?? OtóŜ blok ten w odróŝnieniu od bloku initial posiada tzw. listę wraŝliwości. A jeśli tej nie posiada, to musi bynajmniej posiadać instrukcję opóźnienia. Lista wraŝliwości, to lista zmiennych wyzwalająca działanie bloku. Najlepiej zilustrować to na przykładzie: always @( sel or in1 or in2 or in3 or in4 ) begin out = 0; case ( sel ) 0 : out = in1; 1 : out = in2; 2 : out = in3; 3 : out = in4; case Pokazany kod jest implementacją czterokanałowego multipleksera. Jak widać w linijce w której znajduje się always umieszczona została lista pięciu zmiennych separowanych operatorem zdarzeniowym or. Przy zmianie kaŝdej z tych zmiennych całe ciało always zostanie wykonane. Przypisanie out = 0; przed instrukcją case powoduje, Ŝe program syntezujący nie tworzy przerzutnika dla sygnału out. Przykład ten pokazuje tylko jeden typ listy, a mianowicie listę wraŝliwą na zmiany poziomu obiektów (sygnałów). Istnieje drugi typ listy który jest wraŝliwy na zbocza, czyli wyzwolenie wykonania ciała always nastąpi np. przy zboczu narastającym danego sygnału. Jej działanie ilustruje kolejny listing kodu: always @( posedge clk or negedge clk ) begin case ( sel ) 0 : out = in1; 1 : out = in2; 2 : out = in3; 3 : out = in4; case Przedstawiony przykładowy kod to implementacja synchronicznego multipleksera czterokanałowego, który działa zarówno przy narastającym jak i opadającym zboczu zegara. Zmiany sygnałów sel, in1, in2, in3, in4 mają wpływ na wyjście out tylko i wyłącznie w chwilach, w których zegar clk zmienia swój poziom (z zero na jeden i jeden na zero).

2.8. Przypisania proceduralne blokujące, nieblokujące i ciągłe W VERIGLOGu istnieją trzy rodzaje przypisań proceduralnych (czyli takich, które są wykorzystywane w blokach proceduralnych), blokujące, nieblokujące i ciągłe nazywane czasami równieŝ kwaziciągłymi. Wszystkie te przypisania tyczą się obiektów typu reg, time, integer i real. Przypisanie blokujące = cechuje się tym, Ŝe wykonywanie instrukcji w danym bloku proceduralnym jest opóźnione do momentu wykonania przypisania. Przypisanie nieblokujące <= natomiast jak sama nazwa mówi nie blokuje wykonywania operacji w bloku. MoŜna to bardzo łatwo zilustrować na następujących przykładach: // Przykład 1 always @ ( posedge clk ) begin a = b; b = a; // Przykład 2 always @ ( posedge clk ) begin a <= b; b <= a; Gdyby załoŝyć wartości początkowe sygnałów jako: a=0 i b=1, to w przypadku pierwszego przykładu otrzymamy wynik: a=1, b=1, natomiast w przypadku drugiego przykładu nastąpi zamiana wartości zmiennych, tzn. a=1, b=0. Kolejnym typem przypisania proceduralnego jest tzw. przypisanie ciągłe. RóŜni się ono od bloku assign przedstawianego wcześniej tym, Ŝe tyczy się obiektów typu reg, time, integer i real, a dla przypomnienia zwykłe przypisanie ciągłe tyczyło się obiektów typu net. Jest ono wykorzystywane przy modelowaniu części asynchronicznej elementów synchronicznych, tak jak np. w przerzutniku typu D z wejściami zerującym i ustawiającym. Przykład implementacji pokazany został w kolejnymi listingu: always @ ( posedge clock ) begin q <= d; q_bar <=!d; // przesłanianie always @ ( set or reset ) begin if( set ) begin assign q = 1; assign q_bar = 0; else if( reset ) begin assign q = 0; assign q_bar = 1; else begin deassign q; deassign q_bar; Analizę przebiegów czasowych symulacji pozostawia się czytelnikowi.

Zadania do wykonania 1. Przeanalizuj poniŝszy kod przykładowego modułu w języku Verilog, w protokole omów jaki będzie efekt działania modułu. module funkcja(x1, x2, y); input x1, x2; output y; reg y; assign y = ~(x1 & x2); module 2. Zaprojektuj wektory testowe dla powyŝszego modułu a następnie sprawdź jego działanie w środowisku ModelSim. 3. Zaimplementuj na płycie uruchomieniowej, funkcje logiczne NAND, NOR oraz XOR, wejścia funkcji podłącz do przełączników SW0-SW1, natomiast wyjścia powinny być podłączone do którejś z diod LED. Działanie modułu opisz w raporcie. 4. Zaimplementować w języku Verilog poniŝszy układ kombinacyjny, przetestować go symulacyjnie a następnie uruchomić na płycie uruchomieniowej. Raport Wykonany podczas zajęć protokół, oceniany będzie na zajęciach. Wszystkie programy wraz z komentarzami naleŝy przesłać do systemu LabPro przed zakończeniem zajęć. Ocenianie Maksymalnie z ćwiczenia moŝna uzyskać 5 punktów za dowolnie wybrane zadania. kartkówka...1,0 punkt 1...0,5 punkt 2...0,5 punkt 3...1,5 punkt 4...2,0 Literatura: 1. Spartan-3A/3AN FPGA Starter Kit Board User Guide http://www.xilinx.com/support/documentation/boards_and_kits/ug334.pdf 2. http://en.wikipedia.org/wiki/hardware_description_language 3. http://www.asic-world.com/verilog/veritut.html 4. http://electrosofts.com/verilog/introduction.html Opracowanie: Jan Staniek, Krzysztof CzyŜ, 2008