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

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

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

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

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

ARCHITEKTURA SYSTEMÓW KOMPUTEROWYCH

Podstawowe operacje arytmetyczne i logiczne dla liczb binarnych

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

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

Wstęp do informatyki- wykład 2

SYSTEMY LICZBOWE. Zapis w systemie dziesiętnym

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.

Dr inż. Grażyna KRUPIŃSKA. D-10 pokój 227 WYKŁAD 7 WSTĘP DO INFORMATYKI

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

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

Arytmetyka liczb binarnych

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

SYSTEMY LICZBOWE 275,538 =

Samodzielnie wykonaj następujące operacje: 13 / 2 = 30 / 5 = 73 / 15 = 15 / 23 = 13 % 2 = 30 % 5 = 73 % 15 = 15 % 23 =

Tranzystor JFET i MOSFET zas. działania

Stan wysoki (H) i stan niski (L)

1 Podstawy c++ w pigułce.

Ogólny schemat prostego formularza: A może lepiej zamiast przycisku opartego o input tak:

Układy kombinacyjne 1

Zmienne, stałe i operatory

Mikrokontroler ATmega32. Język symboliczny

Projektowanie scalonych systemów wbudowanych VERILOG. VERLIOG - historia

Cyfrowy zapis informacji

ARCHITEKRURA KOMPUTERÓW Kodowanie liczb ze znakiem

Pracownia Komputerowa wykład VI

LABORATORIUM PROCESORY SYGNAŁOWE W AUTOMATYCE PRZEMYSŁOWEJ. Zasady arytmetyki stałoprzecinkowej oraz operacji arytmetycznych w formatach Q

Podstawy programowania w języku C i C++

dr inż. Jarosław Forenc

Algorytmika i Programowanie VBA 1 - podstawy

Powtórka algorytmów. Wprowadzenie do języka Java.

Laboratorium Podstaw Techniki Cyfrowej

Podstawy Programowania ELEMENTY PROGRAMU i TYPY DANYCH

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

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

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

Zapis liczb binarnych ze znakiem

C++ wprowadzanie zmiennych

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

Przedmiot: Urządzenia techniki komputerowej Nauczyciel: Mirosław Ruciński

Podstawy programowania w języku C

Laboratorium 1: Podstawy języka c. dr inż. Arkadiusz Chrobot dr inż. Grzegorz Łukawski

Operatory w C++ Operatory arytmetyczne. Operatory relacyjne (porównania) Operatory logiczne. + dodawanie - odejmowanie * mnożenie / dzielenie % modulo

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

Systemy liczbowe. 1. Przedstawić w postaci sumy wag poszczególnych cyfr liczbę rzeczywistą R = (10).

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

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

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

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

Pracownia Komputerowa wykład V

RODZAJE INFORMACJI. Informacje analogowe. Informacje cyfrowe. U(t) U(t) Umax. Umax. R=(0,Umax) nieskończony zbiór możliwych wartości. Umax.

1.1. Pozycyjne systemy liczbowe

Języki i paradygmaty programowania

Elżbieta Kula - wprowadzenie do Turbo Pascala i algorytmiki

Wydział Zarządzania AGH. Katedra Informatyki Stosowanej. Podstawy VBA cz. 2. Programowanie komputerowe

Kod uzupełnień do dwóch jest najczęściej stosowanym systemem zapisu liczb ujemnych wśród systemów binarnych.

1 Podstawy c++ w pigułce.

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

Podstawy Informatyki. Metalurgia, I rok. Wykład 3 Liczby w komputerze

Operatory AND, OR, NOT, XOR Opracował: Andrzej Nowak Bibliografia:

Wstęp do programowania

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Odczyt danych z klawiatury Operatory w Javie

Mikrooperacje. Mikrooperacje arytmetyczne

1259 (10) = 1 * * * * 100 = 1 * * * *1

MATERIAŁY DO ZAJĘĆ II

Techniki multimedialne

Wykład 2. Informatyka Stosowana. 8 października 2018, M. A-B. Informatyka Stosowana Wykład 2 8 października 2018, M. A-B 1 / 41

Pracownia Komputerowa wyk ad VI

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

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

Różności w C++ Marek Pudełko

Wstęp do informatyki- wykład 5 Instrukcja selekcji if-else Operatory arytmetyczne i logiczne

Kod U2 Opracował: Andrzej Nowak

Metody numeryczne Technika obliczeniowa i symulacyjna Sem. 2, EiT, 2014/2015

Kodowanie liczb całkowitych w systemach komputerowych

Algorytmy i struktury danych. wykład 1

Pracownia Komputerowa wykład IV

Powtórka algorytmów. Wprowadzenie do języka Java.

Struktura pliku projektu Console Application

MNOŻENIE W SYSTEMACH UZUPEŁNIENIOWYCH PEŁNYCH (algorytm uniwersalny)

Wstęp do informatyki- wykład 1 Systemy liczbowe

Informatyka kodowanie liczb. dr hab. inż. Mikołaj Morzy

DYDAKTYKA ZAGADNIENIA CYFROWE ZAGADNIENIA CYFROWE

Pascal typy danych. Typy pascalowe. Zmienna i typ. Podział typów danych:

Systemy zapisu liczb.

4 Standardy reprezentacji znaków. 5 Przechowywanie danych w pamięci. 6 Literatura

Po uruchomieniu programu nasza litera zostanie wyświetlona na ekranie

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

Arytmetyka komputera. Na podstawie podręcznika Urządzenia techniki komputerowej Tomasza Marciniuka. Opracował: Kamil Kowalski klasa III TI

Technologie Informacyjne

Powtórka algorytmów. Wprowadzenie do języka Java.

L6.1 Systemy liczenia stosowane w informatyce

Instrukcja standardowa Writeln

ARCHITEKTURA KOMPUTERÓW Systemy liczbowe

Transkrypt:

Verilog Język Opisu Sprzętu ardware escription anguage Część I. Elementy języka dr inż. Paweł Tomaszewicz 1

istoria krótko ata '80 potrzeba stworzenia jednego języka do symulacji na różnych poziomach opisu Język Verilog stworzony przez Phila Moore'a w 1983-4 w Gateway esign Automation wykorzystuje elementy języków Modula, Stimula, C 1989 Gateway esign Automation (i prawa do Veriloga) przejęta przez Cadence rok później język Verilog upubliczniony (public domain) 1992 rozpoczęcie prac nad standaryzowaniem 12.1995 Verilog stał się międzynarodowym standardem IEEE Std.1364-1995 2001 rozszerzenie standardu IEEE Std. 1364-2001 Politechnika Ostatnie Warszawska lata Verilog stał się językiem opisu sprzętu 2

Język Verilog Opisuje układy cyfrowe (trwają prace nad opisem układów analogowych) Opis układu cyfrowego możliwy na poziomie: funkcjonalnym (behavioral), strukturalnym (przesłań międzyrejestrowych RT, bramkowym - gate level), ataflow równania boolowskie 3

Język Verilog Układ cyfrowy może być opisany za pomocą: współbieżnych sygnałów (concurrency) struktury bloków (structure) procedur i komend (procedural statements) zdarzeń w czasie 4

Identyfikatory {[A-Z], [a-z], [0-9], _, $} Nie może zaczynać się od $ lub cyfry [0-9] Przykłady: shiftreg_a 4fun busa_index $address error_condition merge_ab _bus3 n$657 Rozróżnia wielkość liter (case( sensitive) myid Myid Nazwy specjalne zaczynają się od znaku \ Przykłady: \busa+index \-clock \a*(b+c) \***error-condition*** \net1/\net2 \{a,b} 5

Komentarze // komentarz do końca linii /* komentarz bloku tekstu */ /* Nie można /* zagnieżdżać komentarzy*/ blokowych*/ Białe znaki są ignorowane (znak spacji, tabulacji, nowej linii) 6

iczby [sign][size][ radix] value [sign] znak + - [size] liczba bitów zapisana liczbą dziesiętną ['radix] podstawa systemu liczbowego b B liczba dwójkowa o O liczba ósemkowa d liczba dziesiętna h liczba szesnastkowa value znaki określające wartość 0..9 a..f A..F x X z Z? 7

iczby (2) iczby bez określonej długości bitowej są zapisywane na 32 bitach 659 // liczba dziesiętna h 837FF // liczba szesnastkowa o7460 // liczba ósemkowa 4af // błędny zapis wymagane 'h dla liczby szesnastkowej iczba bez określonej podstawy jest liczbą dziesiętną Nie może być znaku spacji między znakiem apostrofu i podstawy 8

iczby (3) iczby o określonej długości bitowej 4 b1001 // 4-bitowa liczba dwójkowa 5 3 // 5-bitowa liczba dziesiętna 3 b01x // 3-bitowa liczba dwójkowa z dowolną wartością na najmłodszym bicie 12 hx // 12-bitowa liczba o dowolnej wartości 16 hz // 16-bitowa liczba o wysokiej impedancji 9

iczby (4) iczby ze znakiem iczby ujemne są kodowane w U2 iczby bez określonej długości i podstawy są liczbami ze znakiem iczby o określonej podstawie poprzedzonej literą s S są liczbami ze znakiem iczby o określonej podstawie bez dodatkowego znaku s S są liczbami bez znaku Znak s S nie zmienia wartości liczby a jedynie interpretację 10

iczby (5) Przykłady liczb ze znakiem 8 d -6 // niedozwolone umieszczenie znaku minus -8 d 6 // 8-bitowa liczba -6 zapisana w kodzie U2 można też zapisać -(8 d 6) 4 shf // 4-bitowa liczba 1111 2 w kodzie U2 o wartości -1, można też zapisać -4 h 1-4 sd15 // inaczej zapisana liczba -(-4 d 1), lub 0001 2 11

iczby (6) Automatyczne uzupełnianie reg [11:0] a, b, c, d; a = h x; // oznacza xxx uzupełnienie x b = h 3x; // oznacza 03x uzupełnienie zerami c = h z3; // oznacza zz3 uzupełnienie z d = h 0z3; // oznacza 0z3 reg [84:0] e, f, g; e = 'h5; // oznacza {81{1'b0},4'b0101} uzupełnienie zerami, czyli 00...05 f = 'hx; // oznacza {85{1'hx}} uzupełnienie x g = 'hz; // oznacza {85{1'hz}} uzupełnienie z 12

iczby (7) Używanie znaku podkreślenia _ w formatowaniu liczby dla zwiększenia czytelności 27_195_000 16 b0011_0101_0001_1111 32 h 12ab_f001 Znak? zastępuje liczbę o wysokiej impedancji 13

Typy danych W urządzeniach cyfrowych typy danych reprezentują dane zapamiętane oraz przesyłane pomiędzy elementami Wartości sygnałów: 0 wartość logiczna zero lub fałsz 1 wartość logiczna jeden lub prawda x wartość logiczna nieznana z wartość wysokiej impedancji Rozróżnia się dwa typy danych: sieć (net) zmienna (variable) 14

Sieć net Sieć (net) reprezentuje fizyczne połączenia pomiędzy elementami Nie jest elementem pamiętającym Wartość jest ustalana na podstawie sygnałów zasilających Jeżeli nie ma połączenia zasilającego, to jest w stanie wysokiej impedancji Typy sieci: wire, tri węzeł, węzeł trójstanowy supply0, supply1 stała wartość logiczna wand, wor iloczyn, suma na drucie (brak implementacji w układach reprogramowalnych) 15

Sieć przykład Wartość sygnału Y jest automatycznie wyznaczana jeżeli zmieni się wartość sygnału A lub B wire Y; assign Y = A & B; wand Y; assign Y = A; assign Y = B; wor Y; assign Y = A; assign Y = B; // nie realizowane w kompilatorach fpga // nie realizowane w kompilatorach fpga tri Y; assign Y = (B)? A : z; 16

Zmienna variable Zmienna jest abstrakcyjnym elementem pamiętającym wartość do czasu następnej zmiany W układzie cyfrowym zmienna realizowana jest jako przerzutnik Typy zmiennych: reg, integer (real brak obsługi) Zmienne inicjowane są wartością nieznaną x Przykład: reg A, C; // deklaracja // przypisania są wewnątrz procesu A = 1; C = A; // C ma wartość logiczną 1 A = 0; // C ma wciąż 1 C = 0; // C ma teraz wartość 0 17

Wektory Zmienna lub sieć bez zadeklarowanego zakresu jest skalarem wektorem o długości jednego bitu eklaracja szyny danych wire [3:0] busa; reg [1:4] busb; reg [1:0] busc; iczba po lewej stronie zakresu określa najbardziej znaczący bit MSB Wektor traktowany jako wartość bez znaku Ze znakiem, jeżeli zadeklarowany typu signed lub dołączony do sygnału ze znakiem 18

Wektory przykłady wire [3:0] busa; reg [1:4] busb; reg [1:0] busc; busc = busa[2:1] busc[1] = busa[2]; busc[0] = busa[1]; busb = busa; busb[1] = busa[3]; busb[2] = busa[2]; busb[3] = busa[1]; busb[4] = busa[0]; 19

Wektory przykłady wire w; // skalar net typu wire tri [15:0] busa; // 16-bitowa szyna trójstanowa reg a; // skalar reg reg [3:0] v; // 4-bitowy wektor reg gdzie najstarszym bitem jest v[3], a najmłodszym v[0] reg signed [3:0] signed_reg; // 4-bitowy wektor o zakresie od -8 do 7 reg [-1:4] b; // 6-bitowy wektor reg wire w1, w2; // dwa sygnały wire reg [4:0] x, y, z; // trzy 5-bitowe wektory reg 20

Macierze Macierz może składać się z elementów sieci (net) lub zmiennych (variable) typu skalar lub wektor Przykłady deklaracji: reg x[11:0]; // macierz 12 skalarów typu reg wire [0:7] y[5:0]; // macierz 6 wektorów 8-bitowych typu wire reg [31:0] x [127:0]; // macierz 128 wektorów 32- bitowych typu reg reg [7:0] x [127:0], y [63:0]; // dwie macierze wektorów 8-bitowych typu reg 21

Macierze Jednowymiarowa macierz z elementami typu reg pamięć (ROM, RAM) Można przypisać wartość dowolnemu n-bitowemu elementowi macierzy (słowu) Nie można przypisać wartości całej lub części pamięci 22

Macierze - przykład reg [7:0] mema[0:255]; // pamięć 256 słów 8-bitowych reg arrayb[7:0][0:255]; // dwuwymiarowa macierz 1-bitowych rejestrów wire w_array[7:0][5:0]; // macierz węzłów sieci integer inta[1:64]; // macierz 64 elementów typu integer Przykłady przypisań mema = 0; // Nie można nadać wartości elementom całej macierzy arrayb[1] = 0; // Próba przypisania wartości elementom części macierzy [1][0]..[1][255] arrayb[1][12:31] = 0; // Próba pisania do elementów [1][12]..[1][31] mema[1] = 0; // Wpisanie 0 do drugiego elementu macierzy arrayb[1][0] = 0; // Ustawienie 0 dla bitu o adresie [1][0] inta[4] = 33559; // Wpisanie wartości dla elementu o adresie [4] 23

Macierze - różnice Pamięć n 1-bitowych rejestrów a n-bitowy wektor reg [1:n] rega; // n-bitowy rejestr //... to nie to samo co... reg mema [1:n]; // pamięć n 1-bitowych rejestrów 24

Operatory Jednoargumentowe (unary) arytmetyczne: +, - redukcji: &, ~&,, ~, ^, ~^ (^~) negacja logiczna:! negacja bitowa: ~ wuargumentowe (binary) arytmetyczne: +, -, *, /, % relacyjne: <, >, <=, >=, ==,!=, ===,!=== logiczne: &&, bitowe: &,, ^, ~^ Trójargumentowe (ternary) Warunkowy:?: 25

Operatory 26

Operatory arytmetyczne + - * /... % reszta z dzielenia ** potęgowanie la operacji / i % jeżeli drugi argument jest równy zero to wynikiem jest x la operacji % znak wyniku jest brany z pierwszego argumentu Jeżeli jeden z argumentów jest x lub z to wynikiem jest x Operatory + - są także operatorami jedno argumentowymi 27

Operatory arytmetyczne iczby typu integer w operacjach arytmetycznych: bez długości i bez podstawy, 12 bez długości i z podstawą, 'd12 'sd12 z długością i z podstawą, 16'd12 16'sd12 Negacja wartości integer bez podstawy jest traktowana jako liczba ze znakiem U2 Negacja wartości integer z podstawą bez znaku jest traktowana jako liczba bez znaku 28

Operatory arytmetyczne Przykład: dzielenie -12 przez 3 // liczby -12 i -'d12 są zapisane w U2, ale -'d12 w operacji dzielenia gubi zapis o znaku integer IntA; IntA = -12 / 3; // wynikiem jest -4 IntA = - d 12 / 3; // wynikiem jest 1431655761 IntA = - sd 12 / 3; // wynikiem jest -4 IntA = -4'sd 12 / 3; // -4'sd12 jest negacją 4-bitowej liczby 1100, która ma wartość -4. Czyli -(-4) = 4 a wynikiem jest 1 29

Operatory arytmetyczne Przykłady operacji % (a modulo b): Operacja Wynik 10 % 3 1 11 % 3 2 12 % 3 0 // nie ma reszty z dzielenia -10 % 3-1 // znak minus z pierwszego argumentu 11 % -3 2 // znak minus z pierwszego argumentu -4 'd12 % 3 1 // -4 'd12 jest brana jako duża dodatnia liczba, która daje wynik = 1 reszty dzielenia przez 3 30

Operatory arytmetyczne iczby typu reg bez znaku są liczbami bez znaku iczby typu reg ze znakiem są liczbami ze znakiem w U2 integer inta; reg [15:0] rega; reg signed [15:0] regs; inta = -4 d12; rega = inta / 3; // wynikiem operacji jest -4, rega = 65532 rega = -4 d12; // rega = 65524 inta = rega / 3; // wynikiem jest 21841 inta = -4 d12 / 3; // wynikiem jest 1431655761, bo -4 d12 jest brane jako 32-bitowa liczba 11...10011 2 rega = -12 / 3; // wynikiem jest -4, rega = 65532 regs = -12 / 3; // wynikiem jest -4, regs = -4 signed reg regs = -4 sd12 / 3; // wynikiem jest 1. -4 sd12 = 4, stąd 4/3=1 31

Operatory przesunięcia << >> przesunięcie logiczne <<< >>> przesunięcie arytmetyczne W operacji przesunięcia logicznego i arytmetycznego w lewo (<<, <<<) bity uzupełnione są zerami W operacji przesunięcia logicznego w prawo (>>) bity uzupełnione są zerami W operacji przesunięcia arytmetycznego w prawo (>>>) bity uzupełnione są bitem znaku reg [3:0] start, result; reg signed [3:0] start, result; start = 1; start = 4 b1000; result = (start << 2); result = (start >>> 2); Politechnika //start=0001, Warszawska result=0100 //start=1000, result=111032

Operatory relacji > większy niż < mniejszy niż >= większy lub równy <= mniejszy lub równy Wynikiem operacji jest skalar Jeżeli w jednym z operatorów jest x lub z to wynikiem jest 1-bitowy skalar x Przykład: 1 > 0 // wynikiem jest 1 b1x1 <= 0 // wynikiem jest x 10 < z // wynikiem jest x 33

Operatory porównania == równość logiczna wynikiem jest 0, 1 lub x!= nierówność logiczna === równość stanów bitów wynikiem jest 0 lub 1!== nierówność stanów bitów Wynikiem operacji jest skalar W porównaniu logicznym jeżeli występuje x lub z to wynikiem jest 1-bitowy skalar x Przykład: 4 b 1z0x == 4 b 1z0x // wynikiem jest x 4 b 1z0x!= 4 b 1z0x // wynikiem jest x 4 b 1z0x === 4 b 1z0x // wynikiem jest 1 4 b 1z0x!== 4 b 1z0x // wynikiem jest 0 34

Operatory bitowe & AN OR ^ XOR ^~ ~^ XNOR ~ NOT Jeżeli jeden z operatorów jest krótszy to jest on uzupełniony zerami na najstarszych pozycjach Przykład: a = 4'b1010 d = ~a // 0101 b = 4'b1100 e = a & b // 1000 c = 2'b11 f = b ^ c // 1100 XOR 0011 = 0011 35

Operatory redukcji & AN ~& NAN OR ~ NOR ^ XOR ^~ ~^ XNOR Wynikiem operacji na wektorze jest jeden bit Przykład: a = 4'b1100; b = &a; // b = 0 c = a; // c = 1 36

Operatory logiczne && logiczny AN logiczny OR! logiczna negacja Przykład 1: alfa = 237, beta = 0 rega = alpha && beta; // (true AN false) rega jest 0 regb = alpha beta; // (true OR false) regb jest 1 Przykład 2: Użycie nawiasów dla lepszej czytelności a < size-1 && b!= c && index!= lastone (a < size-1) && (b!= c) && (index!= lastone) Przykład 3: Użycie operatora! if (!inword) // częściej używane... if (inword == 0) 37

Operator warunkowy cond_expr? true_expr : false_expr Przykład mux 4-1: o = (s == 2'b00)? I0 : ((s == 2'b01)? I1 : (s == 2'b10)? I2 : I3 ); Przykład AU: d = (f==add)? (a+b) : ((f==substract)? (a-b) : ((f==compl)? ~a : ~b)); 38

Operatory łączenia (concatenation, replication) { } Łączy dwa lub więcej wektorów Każdy z wektorów musi mieć określoną długość Przykład: {a, b[3:0], w, 3 b101} // odpowiada kolejnej linii {a, b[3], b[2], b[1], b[0], w, 1 b1, 1 b0, 1 b1} {a, 1} // iczba 1 nie ma określonej długości Przykład powielania: {4{w}} // odpowiada {w, w, w, w} {b, {3{a, b}}} // odpowiada {b, a, b, a, b, a, b} nie może być zerem, x lub z 39