Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Podobné dokumenty
Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Souhrn Apendixu A doporučení VHDL

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Struktura a architektura počítačů (BI-SAP) 4

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Programovací jazyk Pascal

Algoritmizace a programování

Y36SAP Y36SAP-2. Logické obvody kombinační Formy popisu Příklad návrhu Sčítačka Kubátová Y36SAP-Logické obvody 1.

Úvod do jazyka VHDL. Jan Kořenek Návrh číslicových systémů

Příklady popisu základních obvodů ve VHDL

Úvod do programovacích jazyků (Java)

Vývoj VHDL. Verilog HDL

5 Přehled operátorů, příkazy, přetypování

Operátory, výrazy. Tomáš Pitner, upravil Marek Šabo

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

Čtvrtek 8. prosince. Pascal - opakování základů. Struktura programu:

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

Programování v jazyce JavaScript

Racionální čísla, operátory, výrazy, knihovní funkce

Y36SAP 2007 Y36SAP-4. Logické obvody kombinační a sekvenční používané v číslicovém počítači Sčítačka, půlsčítačka, registr, čítač

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Úvod do programování. Lekce 1

Princip funkce počítače

Způsoby realizace této funkce:

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Jazyk VHDL konstanty, signály a proměnné. Jazyk VHDL paralelní a sekvenční doména. Kurz A0B38FPGA Aplikace hradlových polí

Organizace předmětu, podmínky pro získání klasifikovaného zápočtu

LOGICKÉ OBVODY 2 kombinační obvody, minimalizace

Jazyk PL/SQL Úvod, blok

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL

Struktura a architektura počítačů (BI-SAP) 3

Paměť počítače. alg2 1

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Základní logická hradla, Booleova algebra, De Morganovy zákony Student

KOMBINAČNÍ LOGICKÉ OBVODY

Číslicové obvody a jazyk VHDL

Výrazy, operace, příkazy

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y Rovnicí y = x 1. Přiřazení signálů:

Struktura a architektura počítačů (BI-SAP) 6

Násobení. MI-AAK(Aritmetika a kódy)

Racionální čísla, operátory, výrazy, knihovní funkce

Operátory. Základy programování 1 Martin Kauer (Tomáš Kühr)

Koncept pokročilého návrhu ve VHDL. INP - cvičení 2

v aritmetické jednotce počíta

LOGICKÉ OBVODY X36LOB

MQL4 COURSE. By Coders guru -4 Operace & Výrazy

Struktura a architektura počítačů (BI-SAP) 10

Operace ALU. INP 2008 FIT VUT v Brně

Číselné soustavy v mikroprocesorové technice Mikroprocesorová technika a embedded systémy

NPRG030 Programování I, 2010/11

Pohled do nitra mikroprocesoru Josef Horálek

for (i = 0, j = 5; i < 10; i++) { // tělo cyklu }

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

Operátory. Základy programování 1 Tomáš Kühr

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y. Rovnicí y = x 1. x 0. Přiřazení signálů: ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Aritmetické operace a obvody pro jejich realizaci

NPRG030 Programování I, 2016/17 1 / :58:13

Číslicové obvody základní pojmy

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

Programovací jazyk. - norma PASCAL (1974) - implementace Turbo Pascal, Borland Pascal FreePascal Object Pascal (Delphi)

LOGICKÉ ŘÍZENÍ. Matematický základ logického řízení

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

4. Elektronické logické členy. Elektronické obvody pro logické členy

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

Algoritmizace a programování. Ak. rok 2012/2013 vbp 1. ze 44

Programování v C++ Úplnej úvod. Peta (maj@arcig.cz, SPR AG )

Java reprezentace dat, výrazy. A0B36PR1-Programování 1 Fakulta elektrotechnická České vysoké učení technické

Výrazy a operátory. Operátory Unární - unární a unární + Např.: a +b

CZ.1.07/1.5.00/

Logické funkce a obvody, zobrazení výstupů

Úvod do informačních technologií

Data, výrazy, příkazy

Sčítačky Válcový posouvač. Demonstrační cvičení 6

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

PROMĚNNÉ, KONSTANTY A DATOVÉ TYPY TEORIE DATUM VYTVOŘENÍ: KLÍČOVÁ AKTIVITA: 02 PROGRAMOVÁNÍ 2. ROČNÍK (PRG2) HODINOVÁ DOTACE: 1

Přednáška 7. Celočíselná aritmetika. Návratový kód. Příkazy pro větvení výpočtu. Cykly. Předčasné ukončení cyklu.

PROGRAMOVATELNÉ LOGICKÉ OBVODY

Zápis programu v jazyce C#

Struktura a architektura počítačů (BI-SAP) 5

Program převod z desítkové na dvojkovou soustavu: /* Prevod desitkove na binarni */ #include <stdio.h>

Základní principy zobrazení čísla Celá čísla s pevnou řádovou čárkou Zobrazení reálných čísel Aritmetika s binárními čísly

a operačních systémů

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

7. Datové typy v Javě

1. lekce. do souboru main.c uložíme následující kód a pomocí F9 ho zkompilujeme a spustíme:

Odvozené a strukturované typy dat

Transkript:

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické v Praze, fakulta informačních technologií Přednáška 8: VERILOG srovnání s VHDL, celková charakteristika Stručný obsah: deklarace modulu, logické a numerické datové typy, příslušné operátory, sítě a proměnné.

Použitá literatura: 1. Donald E. Thomas, Philip R. Moorby: The Verilog Hardware Description Language, Kluwer Academic Publishers 1991, 2. Eliezer Sternheim, Rajvir Singh, Yatin Trivedi: Digital Design with Verilog, 3. Michael D. Ciletti: Starter s Quide to Verilog 2001, Prentice Hall 2004, 4. Zainalabedin Navabi: Verilog Digital Design, McGraw- Hill, 2nd Edition 2006, 5. Michael D. Ciletti: Advanced Digital Design with the Verilog HDL, Prentice Hall 2003, 6. Samir Palnitkar: Verilog HDL ( A guide for Digital Design and Synthesis), Prentice Hall 1996. 10.1.2012 MI-SIM Jiří Douša 2

Verilog a VHDL standard v r. 1995 (IEEE Std 1364): v95, v r. 2001 revize: V01 syntax vychází z jazyka C: rozlišuje malá a velká písmena, // jednořádkový komentář, */ víceřádkový komentář /*, neexistují operátory ++ a -, místo { begin, místo } end obor simulačních hodnot: čtyř-hodnotový (+ síly) - nelze měnit, datové typy: omezené ve srovnání s VHDL: logický typ: 0, 1, x, z (nosiče: reg, sítě), reg: síla strong ( ve smyslu proměnná, nikoliv registr), sítě: různé síly numerické typy: integer, real, time, realtime (nosiče: proměnná příslušného typu) nelze deklarovat nové typy, resoluční funkce: zabudována v propojovacích sítích ( nelze měnit) zpoždění: setrvačné (moduly), transportní (sítě), zdrojový program: množina modulů 10.1.2012 MI-SIM Jiří Douša 3

Verilog a VHDL delta zpoždění: paralelní prostředí a strukturní popis : ne, sekvenčním prostředí: lze jeho efekt vyvolat pomocí neblokujících přiřazení, proměnné jsou statické ( vyjma některých procedur ), modul: samostatná jednotka programu analogie entity a architektury z VHDL, umožňuje mixovat: strukturní popis ( propojení modulů a hradel pomocí sítí ), paralelní prostředí ( continuous assignments ): pouze pro popis kombinačních sítí, nelze ukládat hodnoty do proměnných sekvenční prostředí (procedurální bloky): nelze ukládat hodnoty do sítí, ukládání hodnot pouze do proměnných, blokující nebo neblokující příkazy, existuje knihovna elementárních vestavěných modulů, existuje možnost uživatelsky definovat další elementární moduly ( např. pomocí pravdivostních tabulek ), program: modul nebo zahnizděná množina modulů 10.1.2012 MI-SIM Jiří Douša 4

Deklarace modulu Syntax modulu: module [ # ( < parametry modulu > ) V01 ] endmodule < identifikator modulu > [ (< porty modulu >V01 i specif. ) ] [ < parametry modulu-deklarace konstant > ] V95 i V01 [ < specifikace portů modulu > V95 i V01 ] [ < deklarace proměnných > ] // shared variables [ < deklarace sítí > ] // signály [ < deklarace funkcí > ] [ < deklarace procedur > ] [ < příkazy initial > ] // sekvenční proces [ < příkazy always > ] // sekvenční proces [ < příkazy assign > ] // data-flow příkazy [ < instalace vnitřních modulů, vestavěných elem. členů, modulů UDP ( user-defined primitives ) > ] [ < příkaz generate > ] < deklarace konstant > ::= parameter < identifikátor > = < literál > ; < deklarace proměnných > ::= reg reg signed integer real realtime < deklarace sítí > ::= wire wand wor, trireg Poznámka: nezáleží na pořadí jednotlivých příkazů, 10.1.2012 MI-SIM Jiří Douša 5

Verilog a datové typy skalární: logický ( fyzikální ) interpretace: bez znaménka nebo se znaménkem, počáteční hodnota: x, obor hodnot: 0, 1, x,z nosiče proměnné délky: V95: proměnné typu reg, všechny typy sítí V01: navíc: reg signed, wire signed (interpretace se znaménkem), jednobitové proměnné typu wire není třeba deklarovat numerický typ (abstraktní): integer ( 32 bitů ), poč. hodnota: 0, interpretace: se znaménkem genvar (32 bitů), poč. hodnota: 0 (pouze V 01), interpretace: bez znaménka (nezáporný integer), real ( 64 bitů ), poč. hodnota: 0.0, time ( 64 bitů ), poč. hodnota: 0, interpretace: bez znaménka, realtime ( 64 bitů ), poč. hodnota 0.0, formát jako real nosiče: proměnné ( nutno deklarovat ), strukturované typy V 95: pouze jednorozměrné pole nosiče reg, integer, time V01: libovolný počet dimensí nosiče: reg, reg signed, integer, time, realtime, sítě ( včetně signed) 10.1.2012 MI-SIM Jiří Douša 6

Typy sítí účel: modelovat elektrická propojení => slouží k přenosu hodnot buzení: pouze paralelní příkazy a výstupy modulů, syntax deklarace sítě: < typ sítě>[signed] [<síla>][<#zpoždění sítě>] <seznam identifikátorů>; <typ sítě>: určuje dimensi sítě a typ resoluční funkce pro případ více budičů, wire ( tri ).síť pro spojení více budičů, wand ( triand ).montážní and, wor ( trior ) montážní or, tri0...resoluční funkce jako wire, místo z produkuje vždy 0 síly pull (vodič připojený na zem přes odpor), tri1...resoluční funkce jako wire, místo z produkuje vždy 1 síly pull (vodič připojený na zdroj přes odpor ), supply0.budič hodnoty 0 síly Su, supply1.budič hodnoty 1 síly Su, trireg.kapacitní vodič => po odpojení všech budičů pamatuje poslední hodnotu po dobu specifikovanou v deklaraci <sila>: udává sílu budiče, je-li tento trvale připojen na síť < zpoždění sítě> : má transportní charakter a je přičteno ke zpoždění hradla, které síť budí; šíře filtrovaných pulzů je určena zpožděním samotného hradla Příklad: wire (strong0, weak1) # 2 a=1; // trvalý zdroj 1 zapnutý za 2 ns wire [ 7 : 0 ] a, b, c; // trojice osmibitových sítí (hodnot unsigned), jednobitové sítě typu wire nwní třeba deklarovat 10.1.2012 MI-SIM Jiří Douša 7

Literály Typ reg: interpretace unsigned Typ reg signed: interpretace signed ( pouze V01) Syntax zápisu: [ < délka > ] [ < báze> ] < hodnota > [ < délka > ] s [ < báze >] < hodnota > ( V01) Pravidla interpretace: specifikace délky určuje délku konstanty; pokud tato určuje více bitů než požaduje hodnota, pak jsou zleva doplněny nuly, případně x ( je-li MSB = x ); pokud hodnota vyžaduje více bitů, než určuje délka, pak jsou uvažovány pouze LSBits, při přiřazení je konstanta o dané délce automaticky expandovaná (případně oříznutá) na délku příslušné proměnné, bez specifikace délky je <hodnota> chápána jako 32 bitová, < hodnota> nesmí obsahovat znaménko, < báze>: binární (b nebo B), dekadická (d nebo D), oktalová (o nebo O), hexadecimální (h nebo H), Příklady : 16 hafa.interpretace: 0000_1010_1111_1010, 8 bx01..interpretace: xxxx_xx01, 1 bx01..interpretace: 1, - 8 d5..interpretace: 1111_1011 10.1.2012 MI-SIM Jiří Douša 8

Literály Typ integer: nejsou přípustné symboly x a z, počáteční hodnota = 0, V95: různé interpretace literálů chybí specifikace báze: interpretace hodnoty jako čísla se znaménkem, nechybí specifikace báze: interpretace hodnoty jako čísla bez znaménka, příklady: - 31, 1024, +64 signed numbers, hff, 32 d123, 32 b1111 unsigned numbers V01: hff, 32 d123, 32 b1111 unsigned numbers s hff, 32 sd123, 32 sb111..signed numbers příklad: -12 / 4 = -3, - d12 / 4 =. velké číslo ( unsigned ) Typ real: nejsou přípustné symboly x a z, počáteční hodnota = 0.0, v případě desetinné tečky musí být před a za nejméně jedna číslice exponenciální tvar je možný (e nebo E): příklady: -6.55, + 2e10, 5.3E12, etc. 10.1.2012 MI-SIM Jiří Douša 9

Deklarace konstant a proměnných Deklarace konstant - příklady: parameter WIDTH = 63, BYTE_ADDRESS = 1023; // signed 32b parameter INITIAL_STATE [ 3:0 ] =4 b1011; // unsigned 4b parameter PI = 3.14; // real 64 b Poznámka: při deklaraci konstant lze použít výrazy Deklarace proměnných příklady: deklarace skalárních proměnných : reg set, reset, FF0; // jednobitová logická proměnná reg [31:0] soucin; // 32 bitová logická proměnná integer i, j; // 32 bitové proměnné real a, b, c; // 64 bitové proměnné time start, stop; // 64 bitové proměnné přístupy k dílčím bitům proměnných: indexace, řezy soucin [ 7 : 0 ].8 nejnižších bitů soucin [ 5- : 4 ].bity 5, 4, 3, 2 soucin [ 8+ : 8 ].bity 15, 14,.., 8 deklarace skalárních sítí: wire s1, s2, s3; // representace jednotlivých vodičů wire [4:0] control_bus; // representace pětice vodičů další typy sítí - viz později 10.1.2012 MI-SIM Jiří Douša 10

Přístupy k polím deklarace polí typu reg: reg [31:0] memm1 [ 0 : 1023 ] ; // paměť 1k slov po 32 bitech real poler [ 0 : 7 ] [ 0 : 15 ] [ 0 : 31 ] ; // tří-rozměrné // pole 32 bitových položek typu real deklarace polí sítí: wire [ 7:0 ] data_bus [ 0 : 3 ]; // jedno-rozměrné pole se // čtyřmi osmi-bitovými skupinami vodičů Přístupy k elementům polí: 1) adresace jednotlivých slov: předpoklad: existence deklarací: reg [ 31 : 0 ] R1; reg [ 7 : 0 ] byte ; R1 = memm1 [ 0 ]; // 0 - té 32 bitové slovo byte = memm1 [ 0 ][ 31- : 8 ] ; // nejvyšší byte 0 - tého slova byte = memm1 [ R1 [ 0+:10 ] ] ; // adresováno 10-ti bity R1 memm1 * 1 + = ; // OK: zápis slova memm1 = ; // chyba: zápis do celé paměti nelze 2) adresace jednotlivých bitů: další index - lze použít i proměnnou reg [ 7 : 0 ] A, B; reg s1; real R; B = 5; A * B + = 1 b0; // nulování 5. bitu s1 = memm1 [ 2 ] [ B ] ; // 2. slovo, 5. bit R = poler [ 3 ] [ 14 ] [ 30 ] ; // nutné zachovat pořadí z deklarace 3) adresace skupin vybraných bitů (řezů): memm1 [ 2 ] [ 5 : 0 ] ; // 2. slovo, bity 5 až 0 10.1.2012 MI-SIM Jiří Douša 11

Logické operátory Bitwise operátory: ~, &,, ^, ~^,, ^~ ( pro skaláry a vektory ) aplikované na všechny bity vektorů ( i různých délek ), produkují výsledek délky jako delší z operandů, příklad: wire [7:0] a, b, c; assign c [7:0] = a [7:0] & b [7:0]; // totéž co assign c = a & b; Redukční operátory (unární ): & (and), ~& (nand), (or), ~ (nor), ^ (xor), ~^ nebo ^~ (nxor) aplikované na všechny bity vektoru, produkují výsledek s hodnotou 1 nebo 0 nebo x, příklady: & (100101) = 0 (100101) = 1 & (1001x1 ) = 0, ~& (1001x1) = 1, (1001x1 ) = 1, ~ (1001x1) = 0, ^ (1001x1 ) = x ~^ (1001x1 ) = x Relační operátory: <, <=, >, >=, ( pro skaláry a vektory ) produkují x pokud některý vektor obsahuje x nebo z; pro úplně definované operandy pak produkují 1 nebo 0, operandy nemusí být stejné délky, příklady: 1001 < 1110 => hodnota výrazu = 1 1001 > 1110 => hodnota výrazu = 0 11x0 < 0001 => hodnota výrazu = x 10.1.2012 MI-SIM Jiří Douša 12

Logické operátory Relační operátory rovnosti: ( skaláry a vektory i různých délek ) operátory ==,!= : jako výsledek mohou produkovat x pokud některý z operandů obsahuje x nebo z ( jinak 1 nebo 0), operátory ===,!== : uvažují čtyř-hodnotovou logiku a jako výsledek produkují pouze 1 nebo 0 Logické operátory: ~ (negace), && (and), (or) pro skaláry a vektory i různých délek, logické výrazy jsou vyhodnocovány zleva doprava a toto vyhodnocování končí v okamžiku kdy výraz nabude hodnoty 1 nebo 0; mohou produkovat i x, příklady: předpoklad: A = 3 b001, B = 3 b11x A && B. hodnota výrazu = 1 b1 // true && true A & B.. hodnota výrazu = 3 b00x ( bitwise operátor ) A & (&B) hodnota výrazu = 3 b00x ( 001 & x ) A B.. chyba syntaxe Operátory posuvů: <<, >> logické posuvy ( předpoklad: reg [ 7:0 ] A = 8 b1100_1111 ) příklady: A >> 2 => A = 0011_0011 A << 3 => A = 0111_1000 aritmetické posuvy ( reg signed [ 7:0 ] A = 8 b1100_1111 ) příklady: A >> 2 => A = 1111_0011 A << 3 => A = 0111_1000 10.1.2012 MI-SIM Jiří Douša 13

Operátor zřetězení: syntax: { < operand>, < operand>,, } zřetězení lze opakovat pomocí prefixu, literál nespecifikované délky nemůže být operandem zřetězení, při zřetězení lze použít libovolný počet operandů a operátory lze vnořovat do libovolné hloubky, operátor zřetězení se může vyskytovat i na levé straně příklad: výstupy úplné binární sčítačky { cout, sum } = { (a & b) (a & cin) ( b & cin), a ^ b ^ cin } ; Příklady: { A, B [2: 0 ], C[5:7] } // jako { A, B[2], B[1], B[0], C[5], C[6], C[7] } { 3 { W -, 3 b1x0 - // jako, W, W, W, 1 b1, 1 bx, 1 b0 - D =, 2, 4b 1010-- // D = 1010_1010 reg signed [ 3 : 0 ] A ; reg signed [ 7 : 0 ] B; B = { 4 { A [ 3 ] }, A } ; // expanze čtyřbitového čísla (typu signed) // do osmibitové proměnné jinak: B = A ; // expanze proběhne automaticky na základé // typu výrazu na pravé straně 10.1.2012 MI-SIM Jiří Douša 14

Aritmetické operátory binární: +, -, *, /, % ( zachovává znaménko dělence ), V01: ** unární: - definovány pro logické typy (skalární i vektory) i numerické typy, operandy nemusí mít stejnou délku a mohou být různých typů, interpretace: logický typ reg nebo sítˇ jsou interpretovány jako čísla bez znaménka,) VERILOG 2001 interpretuje typy reg nebo sítˇ jako čísla se znaménkem pokud jsou deklarovány jako signed a poskytuje příslušné aritmetické operátory pro libovolné délky operandů, numerický typ integer je interpretován jako číslo se znaménkem (v doplňkovém kódu), pokud hodnota některého bitu některého operandu je x, pak výsledkem je neznámá hodnota, pokud všechny operandy nějakého výrazu jsou interpretovány jako čísla se znaménkem pak jsou použity operátory pro čísla se znaménkem, jinak operátory pro čísla bez znaménka, pokud některý operand je typu real je výsledek typu real, konversní funkce pro změnu interpretace ( VERILOG 2001): $signed vrací interpretaci číslo se znaménkem $unsigned vrací číslo bez znaménka 10.1.2012 MI-SIM Jiří Douša 15

Aritmetické operátory Příklady: integer a, b ; // signed reg [ 63 : 0 ] c ; // unsigned a = 12; b = -4; c = 8; a = a / b ; // výsledek -3 ( operátor pro signed ) b = c / b ; // výsledek = 0 ( operátor pro unsigned ) integer b ; reg signed [ 63 : 0 ] c ; // V01: signed b = -4; c = 8; b = c / b ; // výsledek = -2 ( operátor pro signed ) integer a, b ; reg [ 63 : 0 ] c ; // V01: unsigned a = 12; b = -4; c = 8; a = a / 4 ; // výsledek 3 b = $signed (c) / b ; // výsledek = -2 reg signed [ 31 : 0 ] c, d, e ; // V01: signed c = 12; d = 12; e = 12; c = c / -3 ; // signreg / signint: výsledek -4 d = d / -32 d2; // signreg / unsignint : výsledek 0 e = e / -32 sd2; // signreg / signint. výsledek = -6 10.1.2012 MI-SIM Jiří Douša 16

Přiřazovací příkazy hodnota výsledku: ovlivněna délkou operandů i délkou proměnné na levé straně příkazu, vyhodnocování výrazu pravé strany: mezivýsledky se ukládají na délku určenou nejdelším operandem, uložení výsledné hodnoty výrazu: na délku určenou proměnnou na levé straně příkazu, Příklady: reg [7:0] a = 8 b1111_1111; reg [7:0] b = 8 b0000_0001; reg [7:0] c ; r eg [8:0] c1 ; // následují jednotlivé možnosti: c = a + b; // c = 0000_0000, ztráta přesnosti c1 = a + b; // c1 = 1_0000_0000 c = ( a + b) >>1; // c = 0000_0000, pouze posun mezivýsledku c1 = a + b; // c1 = 1_0000_0000 c = c1 >> 1; // c = 1000_0000 c = ( 0 + a + b ) >> 1; // c = 1000_0000, // délka operandu 0 = 32 bitů 10.1.2012 MI-SIM Jiří Douša 17

Paralelní příkazy Continuous assingment statements: jde o funkční modely kombinačních obvodů: tyto se vyhodnotí po každé změně hodnot proměnných nebo sítí na pravé straně, na levé straně příkazu musí být identifikátor sítě, výraz pravé strany může obsahovat funkce, arit. i logické operace, příkazy deklarace sítí a příkazy assign lze kombinovat syntax: assign [ < síla>] [ <zpoždění>] < identifikátor sítě > = < výraz >,..; Poznámka: assign..příkaz budíče dané síly + daného zpoždění Příklady: wire a, b, c, sum, cout; // deklarace sítí assign sum = a ^ b ^ c ; // výstup sčítačky (síla strong, nulové // zpoždění) assign cout = ( a & b ) ( a & c ) ( b & c ) ; // přenos totéž: assign sum = a ^ b ^ c, cout = ( a & b ) ( a & c ) ( b & c ) ; wire sum = a ^ b ^ c ; // deklarace sítě + implicitní přiřazení // (nulové zpoždění sítě a log. členu) wire #5 sum = a ^ b ^ c ; // zpoždění 5 wire [ 3 : 0 ] a, b ; // deklarace dvou čtyř-bitových sítí wire [ 3 : 0 ] #4 AXorB ; // zpoždění sitě AXorB, bude // přiřazeno každému budiči této sítě assign #2 AXorB = a ^ b ; // následuje jediný podmíněný paralelní příkaz: assign b = ( sel )? a : b; // b= if (sel) then a else b ; 10.1.2012 MI-SIM Jiří Douša 18

Paralelní příkazy Příklad: čtyř bitový komparátor kompletní modul module Komp ( input [ 3 : 0 ] a, b, output agb, aeb, alb ) ; // následují paralelní příkazy: nezáleží na pořadí assign agb = ( a > b ), // buzení tří různých portů ( typ wire ) aeb = ( a == b ), alb = ( a < b ) ; endmodule Příklad: čtyř bitový komparátor do kaskády module Komp ( input [ 3 : 0 ] a, b, input g, e, l, output agb, aeb, alb ) ; assign agb = ( a == b )? g : ( a > b ), aeb = ( a == b )? e : 1 b0, alb = ( a == b )? l : ( a < b ) ; endmodule Poznámka: podmíněné výrazy lze vnořovat Příklad: dekodér binárního kódu do kódu 1 ze 4 assign { y3, y2, y1, y0 } = ( { a, b } == 2 b00 )? 4 b0001 : ( { a, b } == 2 b01 )? 4 b0010 : ( { a, b } == 2 b10 )? 4 b0100 : ( { a, b } == 2 b11 )? 4 b1000 : 4 b0000 ; 10.1.2012 MI-SIM Jiří Douša 19

Resoluční funkce sítí Příklad: reg a, b; wire y1; wand y2; wor y3; assign y1 = a, y1 = b ; // implicitní síla = St (strong) assign y2 = a, y2 = b ; assign y3 = a, y3 = b ; resoluční funkce wire a 0 1 x z 0 1 b b x z HiZ y1 rezoluční funkce wand: 0 0 1 x z a 1 x y2 z b HiZ rezoluční funkce wor: 0 0 1 x z a 1 x y3 z HiZ 10.1.2012 MI-SIM Jiří Douša 20