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

Podobne dokumenty
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

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

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Sumatory H D L. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska

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

Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

Sposoby projektowania systemów w cyfrowych

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.

Język AHDL. Synteza strukturalna. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska H D L

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

Laboratorium Podstaw Techniki Cyfrowej

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

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Projektowanie Scalonych Systemów Wbudowanych VERILOG

Projektowanie Urządzeń Cyfrowych

Język VERILOG w praktyce

Układy kombinacyjne 1

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

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

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Technika cyfrowa Układy arytmetyczne

Ćwiczenie 27 Temat: Układy komparatorów oraz układy sumujące i odejmujące i układy sumatorów połówkowych i pełnych. Cel ćwiczenia

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

Wstęp do programowania

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Stan wysoki (H) i stan niski (L)

Struktura pliku projektu Console Application

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

Synteza logiczna APSC

Podstawy programowania skrót z wykładów:

Przykładowe pytania DSP 1

Programowanie Niskopoziomowe

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 4 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 44

Wstęp do informatyki- wykład 2

Technika cyfrowa projekt: Sumator 4 bitowy równoległy

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

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Algorytmika i Programowanie VBA 1 - podstawy

LABORATORIUM ELEKTRONIKA Projektowanie koderów, transkoderów i dekoderów w języku VHDL

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

Układy arytmetyczne. Joanna Ledzińska III rok EiT AGH 2011

Magistrale na schematach

Python wprowadzenie. Warszawa, 24 marca PROGRAMOWANIE I SZKOLENIA

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

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

1 Wstęp. 2 Operatory. 3 Blok always dla układów kombinacyjnych. 4 Instrukcja IF. 5 Instrukcja CASE. 6 Struktury konstrukcji warunkowych

Kombinacyjne bloki funkcjonalne

Wprowadzenie do architektury komputerów systemy liczbowe, operacje arytmetyczne i logiczne

12. Wprowadzenie Sygnały techniki cyfrowej Systemy liczbowe. Matematyka: Elektronika:

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

Architektura komputerów

Specyfika projektowania Mariusz Rawski

1.1. Pozycyjne systemy liczbowe

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Technika cyfrowa Synteza układów kombinacyjnych

Programowanie w C++ Wykład 2. Katarzyna Grzelak. 5 marca K.Grzelak (Wykład 1) Programowanie w C++ 1 / 41

Uwagi dotyczące notacji kodu! Moduły. Struktura modułu. Procedury. Opcje modułu (niektóre)

Architektura systemów komputerowych. Poziom układów logicznych. Układy mnoŝące i dzielące

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

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

Układy sekwencyjne. Wstęp doinformatyki. Zegary. Układy sekwencyjne. Automaty sekwencyjne. Element pamięciowy. Układy logiczne komputerów

Podstawy programowania w języku C i C++

Sterowniki Programowalne (SP)

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

LABORATORIUM 3 ALGORYTMY OBLICZENIOWE W ELEKTRONICE I TELEKOMUNIKACJI. Wprowadzenie do środowiska Matlab

Technika cyfrowa Synteza układów kombinacyjnych (I)

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

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

Wielkość analogowa w danym przedziale swojej zmienności przyjmuje nieskończoną liczbę wartości.

Układy mnoŝące H D L. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska

Pracownia Komputerowa wykład IV

METODY KOMPUTEROWE W OBLICZENIACH INŻYNIERSKICH

Technologie Informacyjne

Plan wykładu. Architektura systemów komputerowych. MnoŜenie realizacja sprzętowa (wersja 1) Układy mnoŝące liczby całkowite.

SYSTEMY LICZBOWE 275,538 =

Wstęp do programowania. Różne różności

Naturalny kod binarny (NKB)

Altera Quartus II. Opis niektórych komponentów dostarczanych razem ze środowiskiem. Opracował: mgr inż. Leszek Ciopiński

DIAGRAMY SYNTAKTYCZNE JĘZYKA TURBO PASCAL 6.0

Kod znak-moduł. Wartość liczby wynosi. Reprezentacja liczb w kodzie ZM w 8-bitowym formacie:

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

Arytmetyka liczb binarnych

Skrypty i funkcje Zapisywane są w m-plikach Wywoływane są przez nazwę m-pliku, w którym są zapisane (bez rozszerzenia) M-pliki mogą zawierać

Bramki logiczne Podstawowe składniki wszystkich układów logicznych

Tranzystor JFET i MOSFET zas. działania

Dr inż. Jan Chudzikiewicz Pokój 117/65 Tel Materiały:

Pracownia Komputerowa wyk ad IV

Architektura komputerów, Informatyka, sem.iii. Sumatory

Podstawy Informatyki Elementarne podzespoły komputera

Programowanie. programowania. Klasa 3 Lekcja 9 PASCAL & C++

Liczby rzeczywiste są reprezentowane w komputerze przez liczby zmiennopozycyjne. Liczbę k można przedstawid w postaci:

Języki opisu sprzętu VHDL Mariusz Rawski

dr inż. Jarosław Forenc

Mikrooperacje. Mikrooperacje arytmetyczne

Układy reprogramowalne i SoC Język VHDL (część 4)

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

Modelowanie złożonych układów cyfrowych (1)

Transkrypt:

Język HDL - VERLOG Hardware Description Language (Syntetyzowalna warstwa języka) RUS RUS

VERLOG rzegląd zagadnień RUS RUS

prowadzenie do języka Reprezentacja układu cyfrowego w Verilogu opis strukturalny - elementy + połączenia opis behawioralny funkcja jako zachowanie odstawowe elementy i konstrukcje języka moduł, instrukcje współbieżne i proceduralne instancja (powielanie), struktura hierachiczna wartości sygnałów, węzły i typy węzłów zapis wektorowy, parametry, sieci i zmienne operacje arytmetyczne i reprezentacja liczb operatory w VERLOGu RUS 4 3

Opis strukturalny Elementy konstrukcji: Zbiór prymitywów, odpowiadających typowym bramkom logicznym - bramka => nazwy funkcji, wyjścia i wejść np. 2-we AND and (y, x1, x2) // y wyjście, x1, x2 - wejścia 4-we OR or (y, x1, x2, x3, x4) NO not (y, x) Specyfikacja (forma opisu): moduł zawiera instrukcje i wyrażenia definiujące układ, wejścia i wyjścia (porty), sygnały, połączenia jawne i ukryte; nazwy modułów i sygnałów muszą zaczynać się literą i mogą zawierać dowolną literę lub liczbę plus znaki _ i $ VERLOG rozróżnia wielkość liter znak // poprzedza komentarz (do końca linii) RUS 4 4

Opis strukturalny rzykład: x 1 x 2 f x 3 Rys. 2.30. rosta funkcja logiczna (mux2-1) RUS 4 5

Opis strukturalny module example1 (x1, x2, x3, f); input x1, x2, x3; output f; endmodule and (g, x1, x2); not (k, x2); and (h, k, x3); or (f, g, h); Rys. 2. 31. Opis w Verilog u układu z rys. 2.30. RUS 4 6

Opis strukturalny module example2 (x1, x2, x3, x4, f, g, h); input x1, x2, x3, x4; output f, g, h; endmodule and (z1, x1, x3); and (z2, x2, x4); or (g, z1, z2); or (z3, x1, ~x3); or (z4, ~x2, x4); and (h, z3, z4); or (f, g, h); Rys. 2.32. Opis w VERLOGu układu o 4-wejściach RUS 4 7

Opis strukturalny x 1 x 3 g x 2 x 4 f h Rys. 2.33. Schemat układu opisanego kodem z rys. 2.32 RUS 4 8

Opis behawioralny Opis strukturalny przy użyciu prymitywów nieefektywny dla dużych układów! alternatywa bardziej abstrakcyjny opis za pomocą wyrażeń logicznych i konstrukcji programowych (instrukcji i przypisań) definicja funkcji za pomocą równań słowo kluczowe assign określa przypisania ciągłe (typ instrukcji współbieżnej), które są realizowane równolegle, bez względu na porządek występowania zachowanie układu może być zdefiniowane za pomocą instrukcji if-else (typ instrukcji proceduralnej), której konstrukcja znajduje się wewnątrz bloku always - blok ten może zawierać wiele instrukcji, przy czym są one realizowane ściśle w kolejności występowania w bloku always po symbolu @ w nawiasach znajduje się ciąg sygnałów (lista wrażliwości): instrukcje wewnątrz bloku są wykonywane tylko wtedy, gdy zmienia się sygnał z tej listy RUS 4 9

Opis behawioralny module example3 (x1, x2, x3, f); endmodule input x1, x2, x3; output f; assign f = (x1 & x2) (~x2 & x3); // symbol ~ (tylda) oznacza negację Rys. 2.34. Specyfikacja układu z rys. 2.30 z użyciem przypisania ciągłego RUS 4 10

Opis behawioralny module example4 (x1, x2, x3, x4, f, g, h); input x1, x2, x3, x4; output f, g, h; assign g = (x1 & x3) (x2 & x4); assign h = (x1 ~x3) & (~x2 x4); assign f = g h; endmodule Rys. 2.35. Specyfikacja układu z rys. 2.33 z użyciem przypisania ciągłego RUS 4 11

Opis behawioralny // Specyfikacja behawioralna module example5 (x1, x2, x3, f); input x1, x2, x3; output f ; reg f ; // zmienna dla przypisań w instrukcjach proceduralnych always @(x1 or x2 or x3) if (x2 == 1) f = x1; else f = x3; endmodule Rys. 2.36. Opis układu z rys. 2.30 z użyciem instrukcji if-else RUS 4 12

Elementy języka Sygnały deklarowane jako typ net lub variable, termin net odnosi się do połączeń punktów układu; dentyfikatory nazwy zmiennych i innych elementów języka, mogą się składać z dowolnych liter lub cyfr i znaków _ i $; artości sygnałów, liczby i parametry pojedyncze sygnały mogą przyjmować cztery wartości: 0 wartość logiczna 0 1 wartość logiczna 1 z tri-state (stan wysokiej impedancji) x wartość nieznana artości zmiennych wektorowych są określone za pomocą stałych o postaci: [size][ radix]constant, gdzie size jest liczbą bitów stałej, a radix podstawą systemu liczbowego RUS 4 13

Elementy języka Radix podstawa może być: d = dziesiętna b = binarna h = heksadecymalna o = oktalna Jeśli podstawa nie jest określona, to domyślnie jest dziesiętna Gdy size określa większą liczbę bitów niż potrzebna do reprezentacji stałej, to uzupełnia się ją zerami rzykłady: 0 liczba 0 10 dziesiętna liczba 10 b10 binarna liczba 10 = (2) 10 h10 heksadecymalna liczba 10 = (16) 10 4 b100 binarna liczba 0100 = (4) 10 4 bx nieznana 4-bitowa liczba xxxx RUS 4 14

Elementy języka arametr -wiąże nazwę identyfikatora ze stałą rzykłady deklaracji: parameter n = 4; parameter S0 = 2 b00, S1 = 2 b01, S3 = 2 b11; dentyfikator n może być użyty w miejsce liczby 4, nazwę S0 można podstawić w miejsce wartości 2 b00 itd.. ażnym zastosowaniem parametrów jest jest parametryzowanie podukładów RUS 4 15

ypy sieci i zmiennych Elementy języka Sieć (Net) - reprezentuje węzeł w układzie, do syntezy stosuje się dwa typy: wire i tri yp wire stosuje się do połączeń wyjść jednego elementu logicznego z wejściami innego rzykład deklaracji typu skalar wire (dla pojedynczych węzłów): wire x; wire Cin, AddSub; Oraz wektor wire (dla grupy węzłów): wire [3:0] S RUS 4 16

ypy zmiennych Elementy języka Zmienna (Variable) - sieci reprezentują połączenia między elementami logicznymi nie oddając istoty zachowania; do tego celu używa się zmiennych, którym w jednej instrukcji przypisuje się pewną wartość do czasu wykonania następnej instrukcji, Rozróżnia się dwa typy zmiennych: reg i integer rzykład: Count = 0; // reg [2:0] Count; for (k = 0; k < 4; k = k +1) // integer k; if (S[k]) Count = Count + 1; RUS 4 17

Elementy języka Moduł podstawowa konstrukcja języka Opisuje układ lub podukład; w 1-ej linii deklaracji modułu znajduje się jego nazwa np. identyfikator, w następnych liniach lista portów; typy portów input, output i inout (dwukierunkowe) oraz skalarne i wektorowe, przykłady portów: input Cin, x, y; input [3:0] X, Y; inout [7:0] Bus; output Cout, s; RUS 4 18

Elementy języka module module name [(port name{, port name})]; [parameter declarations] [input declarations] [output declarations] [inout declarations] [wire or tri declarations] [reg or integer declarations] [function or task declarations] [assign continuous assignments] [initial block] [always blocks] [gate instantiations] [module instantiations] Endmodule Rys. A.1. Ogólna deklaracja modułu RUS 4 19

Język VERLOG w praktyce RUS RUS

Specyfikacja układów arytmetycznych module fulladd (Cin, x, y, s, Cout); input Cin, x, y; output s, Cout; xor (s, x, y, Cin); and (z1, x, y); // instancje (kopie) bramki AND and (z2, x, Cin); // symbol and można pominąć and (z3, y, Cin); // symbol and można pominąć or (Cout, z1, z2, z3); endmodule Rys. 5.23. Opis pełnego sumatora z użyciem bramek. RUS 4 21

Specyfikacja układów arytmetycznych module fulladd (Cin, x, y, s, Cout); input Cin, x, y; output s, Cout; assign s = x ^ y ^ Cin; // równania logiczne ^ = XOR assign Cout = (x & y) (x & Cin) (y & Cin); // symbol assign endmodule Rys. 5.23. Opis pełnego sumatora z użyciem przypisania ciągłego. RUS 4 22

Specyfikacja układów arytmetycznych module adder4 (carryin, x3, x2, x1, x0, y3, y2, y1, y0, s3, s2, s1, s0, carryout); input carryin, x3, x2, x1, x0, y3, y2, y1, y0; output s3, s2, s1, s0, carryout; fulladd stage0 (carryin, x0, y0, s0, c1); // instancja modułu fulladd fulladd stage1 (c1, x1, y1, s1, c2); // każda instancja musi mieć unikalną nazwę fulladd stage2 (c2, x2, y2, s2, c3); // połączenia między instancjami są niejawne fulladd stage3 (c3, x3, y3, s3, carryout); endmodule module fulladd (Cin, x, y, s, Cout); input Cin, x, y; output s, Cout; // oryginał modułu fulladd assign s = x ^ y ^ Cin, assign Cout = (x & y) (x & Cin) (y & Cin); endmodule Rys. 5.27. Opis 4-bitowego sumatora RUS 4 23

Specyfikacja układów arytmetycznych wykorzystanie notacji wektorowej module adder4 (carryin, X, Y, S, carryout); input carryin; input [3:0] X, Y; output [3:0] S; output carryout; wire [3:1] C; // połączenia jawne fulladd stage0 (carryin, X[0], Y[0], S[0], C[1]); fulladd stage1 (C[1], X[1], Y[1], S[1], C[2]); fulladd stage2 (C[2], X[2], Y[2], S[2], C[3]); fulladd stage3 (C[3], X[3], Y[3], S[3], carryout); endmodule Rys. 5.28. Opis cztero-bitowego sumatora z użyciem notacji wektorowej RUS 4 24

Specyfikacja układów arytmetycznych iteracja zamiast kopiowania x n 1 y n 1 x 1 y 1 x 0 y 0 c n FA c n 1 c 2 FA c 1 FA c 0 s n 1 s 1 s 0 MSB pozycja LSB pozycja Rys 5.6. N-bitowy sumator kaskadowy RUS 4 25

Specyfikacja układów arytmetycznych iteracja zamiast kopiowania module addern (carryin, X, Y, S, carryout); parameter n=32; input carryin; input [n-1:0] X, Y; output [n-1:0] S; output carryout; reg [n-1:0] S; reg carryout; reg [n:0] C; integer k; always @(X or Y or carryin) begin C[0] = carryin; for (k = 0; k < n; k = k+1) // pętla for powtarza n razy begin // funkcje sumy i przeniesienia S[k] = X[k] ^ Y[k] ^ C[k]; C[k+1] = (X[k] & Y[k]) (X[k] & C[k]) (Y[k] & C[k]); end carryout = C[n]; end endmodule RUS 4 Rys 5.29. 32-bitowy sumator kaskadowy 26

Specyfikacja układów arytmetycznych użycie operacji arytmetycznych module addern (carryin, X, Y, S); parameter n = 32; input carryin; input [n-1:0] X, Y; output [n-1:0] S; reg [n-1:0] S; always @(X or Y or carryin) S = X + Y + carryin; // bez wyjścia przeniesienia endmodule Rys 5. 30. Specyfikacja n-bitowego sumatora przy użyciu operacji arytmetycznych. RUS 4 27

Specyfikacja układów arytmetycznych użycie operacji arytmetycznych module addern (carryin, X, Y, S, carryout, overflow); parameter n = 32; input carryin; input [n-1:0] X, Y; output [n-1:0] S; output carryout, overflow; reg [n-1:0] S; reg carryout, overflow; always @(X or Y or carryin) begin S = X + Y + carryin; carryout = (X[n-1] & Y[n-1]) (X[n-1] & ~S[n-1]) (Y[n-1] & ~S[n-1]); overflow = carryout ^ X[n-1] ^ Y[n-1] ^ S[n-1]; end endmodule Rys 5. 31. Specyfikacja n-bitowego sumatora z wyjściami przeniesienia i przepełnienia RUS 4 28

Specyfikacja układów arytmetycznych użycie operacji arytmetycznych module addern (carryin, X, Y, S, carryout, overflow); parameter n = 32; input carryin; input [n-1:0] X, Y; output [n-1:0] S; output carryout, overflow; reg [n-1:0] S; reg carryout, overflow; reg [n:0] Sum; always @(X or Y or carryin) begin Sum = {1'b0,X} + {1'b0,Y} + carryin; S = Sum[n-1:0]; carryout = Sum[n]; // Suma Sum rozszerzona o jeden bit = 0 overflow = carryout ^ X[n-1] ^ Y[n-1] ^ S[n-1]; end Rys 5. 32. Alternatywna specyfikacja n-bitowego sumatora z wyjściami przeniesienia i przepełnienia endmodule RUS 4 29

Specyfikacja układów arytmetycznych użycie operacji arytmetycznych module addern (carryin, X, Y, S, carryout, overflow); parameter n = 32; input carryin; input [n-1:0] X, Y; output [n-1:0] S; output carryout, overflow; reg [n-1:0] S; reg carryout, overflow; always @(X or Y or carryin) begin {carryout, S} = X + Y + carryin; // konkatenacja przeniesienia i sumy overflow = carryout ^ X[n-1] ^ Y[n-1] ^ S[n-1]; end endmodule Rys 5. 33. Uproszczona specyfikacja pełnego n-bitowego sumatora RUS 4 30

Specyfikacja układów arytmetycznych + X Y + użycie operacji arytmetycznych 0 1 1 1 0 1 0 1 + 7 5 Z carry 1 1 0 0 + 0 1 1 0 1 0 0 1 0 S = 2 12 + X Y + 1 0 0 0 1 0 0 1 + 8 9 Z carry 1 0 0 0 1 + 0 1 1 0 1 0 1 1 1 17 S = 7 Rys 5. 39. Sumator liczb w kodzie BCD RUS 4 31

Specyfikacja układów arytmetycznych użycie operacji arytmetycznych X Y carry-out 4-bit adder Z c in Detect if sum > 9 6 0 Adjust MUX c out 4-bit adder 0 Rys 5. 40. Schemat blokowy sumatora w kodzie BCD S RUS 4 32

Specyfikacja układów arytmetycznych użycie operacji arytmetycznych module bcdadd (Cin, X, Y, S, Cout); input Cin; input [3:0] X, Y; output [3:0] S; output Cout; reg [3:0] S; reg Cout; reg [4:0] Z; always@ (X or Y or Cin) begin Z = X + Y + Cin; if (Z < 10) {Cout, S} = Z; else {Cout, S} = Z + 6; end Rys 5. 41. Specyfikacja sumatora endmodule w kodzie BCD RUS 4 33

Specyfikacja układów arytmetycznych użycie operacji arytmetycznych x 3 x 2 x 1 x 0 y 3 y 2 y 1 y 0 Four-bit adder c in z 3 z 2 z 1 z 0 wo-bit adder c out s 3 s 2 s 1 s 0 RUS 4 Rys 5. 43. Uproszczony układ sumatora w kodzie BCD 34