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

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

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

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

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č

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

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

LOGICKÉ OBVODY 2 kombinační obvody, minimalizace

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

Logické obvody 10. Neúplné čítače Asynchronní čítače Hazardy v kombinačních obvodech Metastabilita Logické obvody - 10 hazardy 1

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

3. Sekvenční logické obvody

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody

SEKVENČNÍ LOGICKÉ OBVODY

Sekvenční logické obvody

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

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

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

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

5. Sekvenční logické obvody

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

PROGRAMOVATELNÉ LOGICKÉ OBVODY

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

Projekt Pospolu. Sekvenční logické obvody Klopné obvody. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jiří Ulrych.

Číslicové obvody základní pojmy

KOMBINAČNÍ LOGICKÉ OBVODY

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

18A - PRINCIPY ČÍSLICOVÝCH MĚŘICÍCH PŘÍSTROJŮ Voltmetry, A/D převodníky - principy, vlastnosti, Kmitoměry, čítače, fázoměry, Q- metry

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

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

Praktické úlohy- 2.oblast zaměření

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

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

Souhrn Apendixu A doporučení VHDL

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

7. Popis konečného automatu

BDIO - Digitální obvody


OVLÁDACÍ OBVODY ELEKTRICKÝCH ZAŘÍZENÍ

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

Návrh synchronního čítače

Obsah DÍL 1. Předmluva 11

Simulace číslicových obvodů na hradlové úrovni: model návrhu Jakub Šťastný ASICentrum, s.r.o. Katedra teorie obvodů FEL ČVUT Praha

12. VHDL pro verifikaci - Testbench I

Projekt realizovaný na SPŠ Nové Město nad Metují. s finanční podporou v Operačním programu Vzdělávání pro konkurenceschopnost Královéhradeckého kraje

Cíle. Teoretický úvod

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

Způsoby realizace této funkce:

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Typy a použití klopných obvodů

Konečný automat. Studium chování dynam. Systémů s diskrétním parametrem číslic. Počítae, nervové sys, jazyky...

Dělení pamětí Volatilní paměti Nevolatilní paměti. Miroslav Flídr Počítačové systémy LS /11- Západočeská univerzita v Plzni

Registry a čítače část 2

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

7. Pracovní postupy. Fakulta informačních technologií MI-NFA, zimní semestr 2011/2012 Jan Schmidt

Číslicové obvody a jazyk VHDL

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

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

11. Logické analyzátory. 12. Metodika měření s logickým analyzátorem

2. Synchronní číslicové systémy

Klopný obvod typu D, dělička dvěma, Johnsonův kruhový čítač

Tel-30 Nabíjení kapacitoru konstantním proudem [V(C1), I(C1)] Start: Transient Tranzientní analýza ukazuje, jaké napětí vytvoří proud 5mA za 4ms na ka

Struktura a architektura počítačů

MĚŘENÍ HRADLA 1. ZADÁNÍ: 2. POPIS MĚŘENÉHO PŘEDMĚTU: 3. TEORETICKÝ ROZBOR. Poslední změna

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

Programovací jazyk Pascal

Univerzita Tomáše Bati ve Zlíně

Systém řízení sběrnice

Testování a spolehlivost. 1. Laboratoř Poruchy v číslicových obvodech

SPARTAN - 3 Xilinx FPGA Device

1 z :27

1/1 ČESKÁ ZEMĚDĚLSKÁ UNIVERZITA V PRAZE PROVOZNĚ EKONOMICKÁ FAKULTA PŘIJÍMACÍ ŘÍZENÍ 2017/2018

Jako pomůcka jsou v pravém dolním rohu vypsány binární kódy čísel od 0 do 15 a binární kódy příkazů, které máme dispozici (obr.21). Obr.

Návrh ovládání zdroje ATX

Základní principy konstrukce systémové sběrnice - shrnutí. Shrnout základní principy konstrukce a fungování systémových sběrnic.

VY_32_INOVACE_OV_2.ME_CISLICOVA_TECHNIKA_19_SPOJENI KOMBINACNICH_A_SEKVENCNICH_OBVODU Střední odborná škola a Střední odborné učiliště, Dubno

Operátory ROLLUP a CUBE

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

ODBORNÝ VÝCVIK VE 3. TISÍCILETÍ MEII KOMBINAČNÍ LOGICKÉ OBVODY

KOMBINAČNÍ LOGICKÉ OBVODY

Sada 1 - Základy programování

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

... sekvenční výstupy. Obr. 1: Obecné schéma stavového automatu

Rozhraní mikrořadiče, SPI, IIC bus,..

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

Vestavné systémy BI-VES Přednáška 5

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

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

02. HODINA. 2.1 Typy souborů a objektů. 2.2 Ovládací prvky Label a TextBox

Úplný systém m logických spojek. 3.přednáška

Logické obvody. Přednáška 6. Prof. RNDr. Peter Mikulecký, PhD.

NPRG030 Programování I, 2015/16 1 / :25:32

Digitální návrh. Postup návrhu digitálních IO. Co to jsou HDL jazyky? Příklad Verilog kódu pro D klopný obvod

Název projektu: EU peníze školám. Základní škola, Hradec Králové, M. Horákové 258

Algoritmus. Přesné znění definice algoritmu zní: Algoritmus je procedura proveditelná Turingovým strojem.

Pointery II. Jan Hnilica Počítačové modelování 17

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 12: VERILOG parametrizace modulů Stručný obsah: speciální parametry, testování časových relací, specifikace zpoždění uživatelských modulů, uživatelsky definované primitivní moduly, modely přenosových hradel.

Parametrizace modulů V95: module Adder ( sum, c_out, a, b, c_in ); // seznam portů; parameter sire = 32, zpozdeni = 5; // deklarace konstant output [sire - 1 : 0] sum ; // specifikace portů: output + wire output c_out ; input [sire - 1 : 0] a, b ; // input + wire input c_in ; V01: module Adder # ( parameter sire = 32, zpozdeni = 5) // parametry ( sum, c_out, a, b, c_in) ; // porty output reg [sire - 1 : 0] sum ; // output + reg output reg c_out ; input wire [sire - 1 : 0] a, b ; // input + wire input wire c_in ; Jinak ve V01: module Adder # ( parameter sire = 32, zpozdeni = 5 ) ( output reg [sire - 1 : 0] sum, output reg c_out, input wire [sire - 1 : 0] a, b,, input wire c_in ) ; 2

Parametrizace modulů Hodnoty parametrů specifikovaných slovem parameter lze měnit: při instalaci modulu Příklad: module MOD1 ( ) parameter sire = 8, zpozdeni = 2 ;. module Celek (..).; // následuje poziční mapování parametrů ve V01 MOD1# ( 16, 5 ) m1 ( < mapování portů > );.; // následuje jmenné mapování parametrů ve V01 MOD1# (.sire ( 16 ),.zpozdeni ( 5 ) ) m2 ( );..; 3

Parametrizace modulů s použitím hierarchické cesty pomocí defparam Příklad: module Celek1 ; Celek cel ( ); // instalace cel modulu Celek defparam Celek. m1. sire = 24; Celek. m1. zpozdeni = 3 ; V95: hodnoty aktuálních parametrů nemusí být téhož typu jako hodnoty přiřazené v deklaraci příslušným formálním parametrům, formální parametr dědí typ, dimenzi i znaménko od hodnoty aktuálního parametru ( možnost nežádoucích vlivů ), V01: znaménko, dimenze a typ (pokud jsou stanovené hodnotou v deklaraci ) nelze později měnit 4

Speciální parametry bloky specify : mechanismus pro deklaraci speciálních parametrů a přiřazování jejich hodnot, př.: specparam setuptime = 30, holdtime = 10; jejich hodnoty nelze přepsat vně modulu ( při instalaci modulu, či defparam ), nelze se na ně odvolávat vně bloku specify endspecify, jejich hodnoty lze definovat pomocí jiného parametru či lokálního parametru ( V01), specifikace cest mezi vstupy a výstupy modulu a jejich zpoždění, kontrola časových relací mezi vstupy modulu lokální parametry ( pouze V01): výskyt deklarace: za kličovým slovem localparam, použití: universální jako parameter, jejich hodnoty nelze přepsat vně modulu, jejich hodnoty lze definovat pomocí jiného parametru. 5

Zpoždění v modulu distribuované zpoždění (specifikováno pro sítě a primitivní moduly), zpoždění cesty v modulu ( celé cesty od vstupních portů k výstupním) specifikace: bloky specify.endspecify syntax pro spojení každého vstupu s každým výstupem: (<vstupní port> *> <výstupní port >) = < zpoždění >; syntax pro paralelní spojení vstupů s výstupy: (<vstupní port> => <výstupní port >) = < zpoždění >; oba typy zpoždění lze v modulu specifikovat: zpoždění cesty v modulu se uplatní pokud jeho hodnota je větší než součet distribuovaných zpoždění na dané cestě. Příklad: viz čtyřbitová sčítačka module Adder_44 ( output [ 3 : 0 ] sum, specify output c_out, input [ 3 : 0 ] a, b, input c_in ) ; ( a, b *> sum ) = 32; ( a, b, c_in *> c_out ) = 38; // zpoždění c_in na sum = 0, uplatni se distribuované ) endspecify wire c3, c2, c1; // přenosy uvnitř sekcí Full_adder FA0 ( sum [0], c1, a [0], b[0], c_in ); Full_adder FA1 ( sum [1], c2, a [1], b[1], c1 ); Full_adder FA2 ( sum [2], c3, a [2], b[2], c2 ); Full_adder FA3 ( sum [3], c_out, a [3], b[3], c3 ); 6

Testování časových relací testování předstihu: $setup ( < sledovaný signál >, < referenční událost >, < požadovaná hodnota předstihu > ) ; < sledovaný signál >, < referenční událost > ::= port typu input nebo inout < požadovaná hodnota předstihu >, < požadovaná hodnota přesahu > ::= konst. výraz nebo specparam testování přesahu: $hold ( < referenční událost >, < sledovaný signál >, < požadovaná hodnota přesahu > ) ; testování předstihu a přesahu: $setuphold ( <referenční událost >,< sledovaný signál >, testování šířky impulsu: < požadovaná hodnota předstihu >, < požadovaná hodnota přesahu > ) ; $width ( < hranově specifikovaná referenční událost >, < požadovaná minimální šíře > ); // měřeno mezi dvěma sousedními, ale rozdílnými hranami < hranově specifikovaná referenční událost > ::= negedge < referenční událost > nebo posedge < referenční událost > 7

Testování časových relací testování periody: $period ( < hranově specifikovaná referenční událost >, < požadovaná perioda > ) ; // měřeno mezi dvěma sousedními, ale stejnými hranami < požadovaná perioda ::= konstantní výraz nebo specparam testování ze zotavení asynchronních vstupů: $recovery (< hranově specifikovaná referenční událost >, < sledovaný signál >, < požadovaná hodnota minimálního intervalu > ) ; < požadovaná hodnota min. intervalu > ::= konstantní výraz nebo specparam testování skluzu: $skew ( < referenční událost >, < sledovaná událost >, < maximální přípustná hodnota intervalu mezi specifikovanými událostmi > ) ; < maximální přípustná hodnota intervalu mezi specifikovanými událostmi > ::= konstantní výraz nebo specparam 8

Testování časových relací Příklad: hranový klopný obvod + asynchronní reset, set module flip_flop ( output reg q, input data, clk, reset, set ) ; // následuje kontrola časových relací specify $setup ( data, posedge clk, 5 ); // předstih dat = 5 $hold ( posedge clk, data, 1 ); // přesah dat = 1 $width ( posedge clk, 4 ); // min. šíře hodinového pulzu = 4 $recovery ( negedge reset, posedge clk, 2 ); // zotaveni = 2, tj. přípustná min. hodnota času mezi deaktivací // signálu reset a referenční událostí ( náběž. hrana hodin ), endspecify // následuje popis chování FF always @ ( posedge clk ) begin if ( reset ) q <= 0; else q <= data; end // sekvenční příkaz Poznámka: porušení časových relací je hlášeno na obrazovce 9

Uživatelsky definované primitivní členy UDP ( user defined primitives ): vytváření efektivních funkčních modelů na základě pravdivostních tabulek, deklarace UDP: samostatně (nikoliv uvnitř modulu) instalace UDP: stejná jako u vestavěných členů; je možné definovat zpoždění pro náběžnou i závěrnou hranu, porty UDP mohou být pouze skaláry, je přípustný pouze jeden port módu output; v případě kombinačního obvodu to musí být proměnné typu sítˇ, v případě sekvenčního obvodu proměnná typu reg, je přípustný libovolný počet portů módu input, nelze použít žádný port módu inout, pro sekvenční obvody je možné definovat počáteční stav proměnné typu reg příkazem initial, pořadí sloupců v tabulce musí být stejné jako pořadí vstupních portů v seznamu portů, možné vstupy a výstupy: pouze hodnoty 0, 1 a x, případný výskyt hodnoty z je v průběhu simulace je interpretován jako hodnota x, syntax UDP: primitive ( < seznam portů> ) output.; input..; table < seznam vstupních a kombinací a hodnoty výstupu > endtable end primitive; 10

Uživatelsky definované primitivní členy Pravidla pro definici a interpretaci tabulek ( pokračování ): v případě výskytu nedefinované vstupní kombinace (v průběhu simulace) výstup UDP nabývá hodnoty x, pro jednu a tutéž vstupní kombinaci nelze definovat různé výstupní hodnoty, hodnota? je v tabulce interpretována jako don t care ( tj. 1, 0 nebo x), hodnota (žádná změna) representuje předešlou hodnotu výstupu sekvenčního obvodu, hodnota ( vw ) na některém vstupu representuje hranu: konkrétně změnu z hodnoty v na hodnotu w; v každém řádku tabulky lze specifikovat hranu pouze u jednoho signálu, vstupní hodnota * representuje všechny možné změny daného vstupu ( totéž co (??) ), vstupní hodnota r je synonymum pro (01), vstupní hodnota f je synonymum pro (10), vstupní hodnota p označuje některou z následujících změn: (01), (0x), (x1), ( náběžná hrana včetně x ), vstupní hodnota n označuje některou z následujících změn: (10), (1x), (x0), ( závěrná hrana včetně x ). v případě sekvenčního obvodu jsou sloupce reprezentující současný vnitřní stav ( předposlední sloupec ) a příští vnitřní stav ( poslední sloupec ) uvedeny znakem : ( vždy jde o obvod typu Moore ). 11

Uživatelsky definované primitivní členy Příklad: definice logické funkce pro výstupní přenos jednobitové úplné sčítačky počet kombinací bez x: 8 ( ale každý výskyt hodnoty x produkuje hodnotu x na výstupu ( zbytečně pesimistické ) úplná specifikace: 3 3 řádků ( včetně x ), je možné zjednodušení: primitive carryout (cout, a, b, cin) ; output cout; input a, b, cin ; table // a b cin cout 0 0? : 0 ; 0? 0 : 0 ;? 0 0 : 0 ;? 1 1 : 1 ; 1? 1 : 1 ; 1 1? : 1 ; endtable end primitive Poznámka: // specifikace výstupní proměnné typu síť a // specifikace vstupních proměnných typu síť // specifikace tabulky uvedená specifikace pokrývá 6*3-4 =14 různých vstupních kombinací ( každá ze vstupních kombinací 000 a111 byla zahrnuta třikrát), není pokryto 13 kombinací (obsahující hodnoty x01 nebo dvě či tři x ) => výstup automaticky nabývá hodnoty x.. 12

Uživatelsky definované primitivní členy Příklad: specifikace hladinového klopného obvodu primitive D_latch (q, clk, D) ; output q; reg q; // výstup: proměnná typu reg input clk, D ; initial q = 1 b0; // další přípustné hodnoty : 1 b1, 1 bx, 1, 0 table // clk D vnitřní stav výstup q 1 1 :? : 1 ; // zápis 1 1 0 :? : 0 ; // zápis 0 0? :? : - ; // pamětˇ endtable endprimitive Příklad: specifikace hranového klopného obvodu primitive D_flip_flop (q, clk, D) ; output q; reg q; // výstup = proměnná typu reg input clk, D ; table // clk D stav q (01) 0 :? : 0 ; // zápis 0 (01) 1 :? : 1 ; // zápis 1 (0?) 1 : 1 : 1 ; // zápis 1 nebo paměť (0?) 0 : 0 : 0 ; // zápis 0 nebo paměť (?0)? :? : - ; // závěrná hrana?? :? : - ; // necitlivost při hladině clk endtable endprimitive 13

Simulace přenosových hradel Seznam vestavěných modelů transistorů: Standardní jednosměrné spinače: nmos # (<zpoždění>)( o, i, c); // if (c) o = i ; else o = z; pmos # (<zpoždění>)( o, i, c); // if (! c) o = i ; else o = z; cmos # (<zpoždění>)( o, i, c1, c2); // pmos a nmos paralelně // if (c1==1 c2==0) o = i ; else o = z; Standardní obousměrné spinače: tranif1 # (<zpoždění>) ( i1, i2, c); // if ( c ) i1 = i2 nebo i2 = i1 (dle budící strany) else i1 = z nebo // i2 = z (nebudící strana odpojena); budí-li obě strany pak // výsledek rezoluční funkce tranif0 # (<zpoždění>) ( i1, i2, c); // chování jako tranif1, ale spinač sepnut if (!c ) Odporové jednosměrné a obousměrné spinače: chování: viz předešlé verse, ale redukce síly: viz později rnmos # (<zpoždění>) ( o, i, c); rpmos # (<zpoždění>) ( o, i, c); rcmos # (<zpoždění>) ( o, i, c1, c2); rtranif1 # (<zpoždění>) ( i1, i2, c); rtranif0 # (<zpoždění>) ( i1, i2, c); 14

Model logického členu NAND2 Vnitřní schéma: Vdd a h1 h2 y h3 w1 b h4 Gnd module nand2 ( input a, b, output y ) supply0 Gnd; // tvrdá zem supply1 Vdd; // tvrdá jednička wire w1; pmos # (4) h1( y, Vdd, a ); pmos # (4) h2( y, Vdd, b ); nmos # (3) h3( y, w1, a ); nmos # (3) h4( w1, Gnd, b ); 15

Vnitřní schéma: Model buňky dynamické paměti r_w par_kap vstvyst module dynam_pamet ( inout vstvyst, input r_w ); trireg # ( 0, 0, 40 ) par_kap; // obě nabíjecí zpoždění = 0, // doba vybití = 40 tranif1 # ( 5 ) tr1 ( vstvyst, par_kap, r_w ); // zapojení // následuje test dynamické paměti module test_pameti; reg r_w, con; wire vstvyst,data; dynam_pamet dp ( vstvyst, r_w ); // instalace dyn. buňky initial begin r_w = 1; con = 1; // připojení 1 na vstvyst + začátek zápisu #10; r_w = 0; con = 0; // odpojení 1 + konec zápisu #10; r_w = 1; // začátek čtení #50; end assign data = 1'b1; assign vstvyst = (con === 1'b1)? data :1'bz; 16

Vnitřní schéma: Model buňky statické paměti rd wr d t1 w n1 qq t2 q n2 module stat_pamet ( output q, input d, rd, wr ); wire # ( 3 ) w, qq ; // zpoždění = 3 nmos t1( w, d, wr ); nmos t2 ( q, qq, rd ); not ( pull0, pull1 ) n2 ( w, qq ); // při spojení t1 konflikt sítí not n1( qq, w ); // nasleduje test paměti module test_pameti reg rd, wr, d; wire qout; stat_pamet sp ( qout, d, rd, wr ); // instalace stat. buňky initial begin d = 1; wr = 1; // zápis 1 #10; wr = 0; rd = 1; // konec zápisu, začátek čtení #40; rd = 0; d = 0; wr = 1; // konec čtení + zápis 0 #10 rd = 1; end // začátek čtení 17

Síly přenosových hradel Strategie používání sil: pokud je síť buzena několika budiči, pak získává hodnotu s nějvětší silou; v případě vyrovnaných sil se uplatní rezoluční funkce, Síly přenosových hradel: hradla MOS nemají vlastní sílu, pokud vstupem elementu typu přenosové hradlo je nějaká síť, pak její síla se po případné redukci přenáší na výstup daného přenosového hradla, pravidla redukce: budíče typu nmos, pmos, cmos, tranif1, tranif0: pokud síla vstupní sítě není supply, tak se přenáší beze změny na výstup hradla, v opačném případě je redukována o jeden stupeň dolů, příklad: wire ( pull0, supply1 ) a = 1; nmos t1 ( y, a, 1 ); // síla 1 na y: strong1 budíče rnmos, rpmos, rcmos, rtran, rtranif1, rtranif0: síla supply je redukována o dva stupně dolů, ostatní síly jsou redukovány o jeden stupeň dolů ( kromě high ), kapacitní síly se redukují o 1 stupeň ( kromě small ), 18