návrh digitálních integrovaných obvodů vlsi a jazyk vhdl · fakulta elektrotechniky a...

183
FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL Garant předmětu: Doc. Ing. Lukáš Fujcik, Ph.D. Autoři textu: Prof. Ing. Vladislav Musil, CSc. Doc. Ing. Jaromír Kolouch, CSc. Brno 28.11. 2007

Upload: lamdang

Post on 29-Aug-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL

Garant předmětu: Doc. Ing. Lukáš Fujcik, Ph.D.

Autoři textu:

Prof. Ing. Vladislav Musil, CSc. Doc. Ing. Jaromír Kolouch, CSc.

Brno 28.11. 2007

Page 2: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

2 FEKT Vysokého učení technického v Brně

Obsah 1  ÚVOD .................................................................................................................................. 9 

2  ZAŘAZENÍ PŘEDMĚTU VE STUDIJNÍM PROGRAMU........................................ 11 

3  VSTUPNÍ TEST ............................................................................................................... 12 

4  ROZDĚLENÍ LOGICKÝCH IO.................................................................................... 13 

5  MOS TRANZISTOR ....................................................................................................... 16 

5.1  ÚVOD ............................................................................................................................ 16 5.2  PRINCIP MOS TRANZISTORU ......................................................................................... 17 5.3  ANALÝZA MOS TRANZISTORU ...................................................................................... 18 

5.3.1  Lineární model .......................................................................................... 18 5.3.2  Kvadratický model ..................................................................................... 20 5.3.3  Model s proměnnou šířkou depletiční vrstvy ............................................. 22 

5.4  PRAHOVÉ NAPĚTÍ MOS TRANZISTORU .......................................................................... 24 5.4.1  Prahové napětí – výpočty .......................................................................... 24 5.4.2  Předpětí substrátu (The substrate bias effect) ........................................... 25 

6  CMOS INVERTOR – STATICKÁ CHARAKTERISTIKA ....................................... 26 6.1  ÚVOD ............................................................................................................................ 26 

6.1.1  Převodní charakteristika ........................................................................... 28 6.1.2  Šumová imunita, šumová rezerva .............................................................. 30 6.1.3  Výkonová spotřeba, spotřeba plochy čipu ................................................. 31 

6.2  CMOS INVERTOR .......................................................................................................... 32 6.2.1  Analýza CMOS invertoru .......................................................................... 34 6.2.2  Výpočet napětí VIL ..................................................................................... 36 6.2.3  Výpočet napětí VIH ..................................................................................... 37 6.2.4  Výpočet napětí Vth ..................................................................................... 38 6.2.5  Návrh CMOS invertoru ............................................................................. 40 6.2.6  Vliv napájecího napětí CMOS invertoru ................................................... 45 

7  CMOS INVERTOR: DYNAMICKÁ CHARAKTERISTIKA .................................... 47 7.1  ÚVOD ............................................................................................................................ 47 7.2  DEFINICE ČASOVÝCH ZPOŽDĚNÍ .................................................................................... 48 7.3  VÝPOČET ČASOVÉHO ZPOŽDĚNÍ CMOS INVERTORU ..................................................... 50 

7.3.1  Vstupní napětí přechází z log.0 do log.1 ................................................... 51 7.3.2  Vstupní napětí přechází z log.1 do log.0 ................................................... 57 

7.4  NÁVRH CMOS INVERTORU S ČASOVÝMI OMEZENÍMI ................................................... 58 7.5  CMOS KRUHOVÝ OSCILÁTOR ....................................................................................... 61 7.6  DYNAMICKÁ VÝKONOVÁ SPOTŘEBA CMOS INVERTORU .............................................. 63 

8  KOMBINAČNÍ LOGICKÉ OBVODY CMOS............................................................. 66 8.1  ÚVOD ............................................................................................................................ 66 8.2  DVOU-VSTUPOVÉ HRADLO NOR ................................................................................... 67 8.3  OBECNÁ STRUKTURA HRADLA NOR S VÍCE VSTUPY ..................................................... 70 8.4  DVOU-VSTUPOVÉ HRADLO NAND ................................................................................ 72 8.5  OBECNÁ STRUKTURA HRADLA NAND S VÍCE VSTUPY .................................................. 73 8.6  KOMPLEXNÍ KOMBINAČNÍ LOGICKÉ OBVODY CMOS .................................................... 76 

Page 3: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 3

8.6.2  CMOS úplná 1-bitová sčítačka .................................................................. 80 8.7  DALŠÍ ARITMETICKÉ OPERACE V DIGITÁLNÍCH OBVODECH ............................................ 82 

8.7.1  Binární odčítačka ....................................................................................... 82 8.7.2  Binární sčítačka/odčítačka ........................................................................ 83 8.7.3  BCD sčítačka ............................................................................................. 84 8.7.4  Násobička založena na binární sčítačce .................................................... 89 

9  SEKVENČNÍ LOGICKÉ OBVODY CMOS ................................................................ 94 9.1  ÚVOD ............................................................................................................................. 94 9.2  KLOPNÝ OBVOD RS ....................................................................................................... 95 9.3  KLOPNÉ OBVODY ŘÍZENÉ HODINOVÝM SIGNÁLEM ......................................................... 97 

9.3.1  Klopný obvod RS řízený úrovní hodinového signálu ................................. 97 9.3.2  Klopný obvod JK řízený úrovní hodinového signálu ............................... 100 9.3.3  Klopný obvod Master-Slave JK ............................................................... 101 

9.4  CMOS KLOPNÝ OBVOD D JAKO ZÁCHYTNÝ REGISTR A ŘÍZENÝ HRANOU HODINOVÉHO SIGNÁLU ...................................................................................................................... 102 

10  JAZYK VHDL PRO SYNTÉZU DIGITÁLNÍCH SYSTÉMŮ ................................ 104 10.1 ÚVOD ......................................................................................................................... 104 10.2 ZÁKLADNÍ STRUKTURA MODELU V JAZYKU VHDL .................................... 106 

10.2.1  Deklarace entity ....................................................................................... 108 10.2.2  Tělo architektury ...................................................................................... 110 

10.3 DATOVÉ OBJEKTY ................................................................................................. 114 10.3.1  Typy dat .................................................................................................... 115 10.3.2  Atributy .................................................................................................... 117 

10.4 MODELOVÁNÍ KOMBINAČNÍCH OBVODŮ ....................................................... 117 10.4.1  Souběžné příkazy ...................................................................................... 118 10.4.2  Sekvenční příkazy ..................................................................................... 121 10.4.3  Třístavové výstupy, výstupy s otevřeným kolektorem a obousměrné brány

................................................................................................................. 124 10.5 MODELOVÁNÍ ASYNCHRONNÍCH SEKVENČNÍCH OBVODŮ ...................... 126 10.6 MODELOVÁNÍ SYNCHRONNÍCH SEKVENČNÍCH SYSTÉMŮ ........................ 127 10.7 PROSTŘEDKY JAZYKA VHDL PRO ÚSPORNÝ ZÁPIS KÓDU ........................ 129 10.8 VYTVÁŘENÍ HIERARCHICKÝCH MODELŮ V JAZYKU VHDL ...................... 135 10.9 PŘÍKLADY KONSTRUKCÍ V JAZYKU VHDL ..................................................... 138 

10.9.1  Kombinační obvody a převodníky kódu ................................................... 138 10.9.2  Binární čítač ............................................................................................ 139 10.9.3  Stavové automaty ..................................................................................... 139 

10.10  FUNKCE ................................................................................................. 147 10.11  OVĚŘENÍ FUNKČNOSTI MODELU – SIMULACE ........................... 149 

11  SYNCHRONNÍ NÁVRH .............................................................................................. 150 

11.1 METASTABILITA .......................................................................................................... 150 11.2 STROMOVÁ STRUKTURA POSILOVAČŮ HODINOVÉHO SIGNÁLU CLK .............................. 153 11.3 VLIV ZPOŽDĚNÍ HODINOVÉHO SIGNÁLU CLK V SYNCHRONNÍM NÁVRHU ...................... 153 11.4 VLIV POSUNU HODINOVÉHO SIGNÁLU CLK V SYNCHRONNÍM NÁVRHU ......................... 154 11.5 PŘÍKLAD SYNTÉZY JEDNODUCHÉHO DIGITÁLNÍHO OBVODU ......................................... 156 11.6 REDUKCE VÝKONOVÉ SPOTŘEBY HRADLOVÁNÍM HODINOVÉHO SIGNÁLU (GATED CLOCK)

.................................................................................................................................... 158 

12  NÁVRH DIGITÁLNÍCH OBVODŮ ŘÍZENÝCH VÍCE HODINOVÝMI SIGNÁLY161 

Page 4: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

4 FEKT Vysokého učení technického v Brně

12.1 SYNCHRONIZAČNÍ OBVODY ......................................................................................... 161 12.2 STATICKÁ ČASOVÁ ANALÝZA ...................................................................................... 162 12.3 KONVENCE ZNAČENÍ HODINOVÝCH SIGNÁLŮ .............................................................. 163 12.4 ROZDĚLENÍ OBVODU ................................................................................................... 164 12.5 SYNCHRONIZACE RYCHLÝCH ŘÍDÍCÍCH SIGNÁLŮ DO POMALÝCH ČASOVÝCH ZÁKLADEN

.................................................................................................................................... 165 12.5.1  Synchronizace řídícího signálu ............................................................... 166 

12.6 SYNCHRONIZACE VÍCE ŘÍDÍCÍCH SIGNÁLŮ ................................................................... 167 12.6.1  Dva současně potřebné řídící signály ..................................................... 167 12.6.2  Dva fázově posunuté sekvenční řídící signály ......................................... 169 12.6.3  Převod signálu pro dekodér .................................................................... 170 

12.7 SYNCHRONIZACE DATOVÉHO SIGNÁLU ........................................................................ 173 12.7.1  Potvrzování přenosu mezi hodinovými základnami ................................ 173 12.7.2  Přesun dat mezi hodinovými základnami pomocí registru FIFO ........... 173 12.7.3  Indikace stavu paměti registru FIFO - plná / prázdná ........................... 174 12.7.4  Indikace stavu paměti registru FIFO - plná / prázdná ........................... 174 12.7.5  Implementace ukazatele FIFO pomocí Grayova čítače .......................... 175 12.7.6  Návrh Grayova čítače ............................................................................. 175 12.7.7  Převod Grayova do binárního kódu ........................................................ 175 12.7.1  Převod binárního do Grayova kódu ........................................................ 177 12.7.2  Grayův čítač ............................................................................................ 179 

12.8 NÁVRH REGISTRU FIFO .............................................................................................. 180 12.8.1  Zápis do a čtení z registru FIFO ............................................................. 180 12.8.2  Pesimistické značení příznaků plné a prázdné paměti ............................ 181 12.8.3  Podmínky pro nastavení příznaku registru FIFO plný / prázdný ........... 181 

12.9 SHRNUTÍ ...................................................................................................................... 181 

13  LITERATURA ............................................................................................................... 182 

Page 5: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 5

Seznam obrázků OBR. 4.1:  STRUKTURA NMOS TRANZISTORU .................................................................... 17 OBR. 5.1:  LOGICKÝ SYMBOL A PRAVDIVOSTNÍ TABULKA IDEÁLNÍHO INVERTORU ............. 26 OBR. 5.2:  PŘEVODNÍ CHARAKTERISTIKA IDEÁLNÍHO INVERTORU ...................................... 27 OBR. 5.3:  OBECNÁ STRUKTURA NMOS INVERTORU .......................................................... 28 OBR. 5.4:  PŘEVODNÍ CHARAKTERISTIKA REÁLNÉHO NMOS INVERTORU .......................... 29 OBR. 5.5:  VLIV ŠUMU NA PŘENOS SIGNÁLU V KASKÁDĚ INVERTORŮ ................................. 30 OBR. 5.6:  GRAFICKÉ ZOBRAZENÍ ŠUMOVÝCH REZERV ....................................................... 31 OBR. 5.14:  CMOS INVERTOR .............................................................................................. 33 OBR. 5.15:  NÁHRADNÍ SCHÉMA CMOS INVERTORU ............................................................ 34 OBR. 5.16: PŘEVODNÍ CHARAKTERISTIKA CMOS INVERTORU.................................................. 35 OBR. 5.17: ZÁVISLOST PRAHOVÉHO NAPĚTÍ CMOS INVERTORU NA TRANSKONDUKTANČNÍM

POMĚRU KR ........................................................................................................................ 39 OBR. 5.18:  ZÁVISLOST PROUDU ID NA VSTUPNÍM NAPĚTÍ VIN CMOS INVERTORU ................ 40 OBR. 5.19: PŘENOSOVÁ CHARAKTERISTIKA CMOS INVERTORU V ZÁVISLOSTI NA POMĚRU KR 42 OBR. 5.20:  PŘENOSOVÁ CHARAKTERISTIKA V ZÁVISLOSTI NA VELIKOSTI NAPÁJECÍHO

NAPĚTÍ. 46 OBR. 5.21:  PŘENOSOVÁ CHARAKTERISTIKA CMOS INVERTORU PRACUJÍCÍ S NAPÁJECÍM

NAPĚTÍM MENŠÍ NEŽ V LIMITUJÍCÍM PŘÍPADĚ ..................................................................... 46 OBR. 6.1:  KASKÁDNÍ ZAPOJENÍ CMOS INVERTORŮ S PARAZITNÍMI KAPACITAMI .............. 48 OBR. 6.2:  CMOS INVERTOR S VÝSTUPNÍ CELKOVOU ZATĚŽOVACÍ KAPACITOU ................. 48 OBR. 6.3:  VSTUPNÍ A VÝSTUPNÍ SIGNÁL CMOS INVERTORU A JEDNOTLIVÁ ZPOŽDĚNÍ ...... 49 OBR. 6.4:  DOBA SESTUPNÉ A NÁSTUPNÉ HRANY VÝSTUPNÍHO SIGNÁLU CMOS INVERTORU

50 OBR. 6.5:  ZJEDNODUŠENÉ SCHÉMA CMOS INVERTORU PŘI ZMĚNĚ VIN Z ÚROVNĚ L DO H 52 OBR. 6.6:  VSTUPNÍ A VÝSTUPNÍ NAPĚTÍ PŘI ZMĚNĚ VÝSTUPNÍHO NAPĚTÍ Z ÚROVNĚ H DO L

53 OBR. 6.7:  CMOS INVERTOR A ZÁVISLOST NA ROZMĚRECH TRANZISTORŮ ........................ 58 OBR. 6.8:  CMOS KRUHOVÝ OSCILÁTOR SE TŘEMI CMOS INVERTORY .............................. 62 OBR. 6.9:  ČASOVÉ PRŮBĚHY CMOS KRUHOVÉHO OSCILÁTORU SE TŘEMI CMOS

INVERTORY ........................................................................................................................ 62 OBR. 6.10:  CMOS INVERTOR PRO DYNAMICKOU ANALÝZU VÝKONOVÉ SPOTŘEBY ............. 63 OBR. 6.11: TYPICKÉ VSTUPNÍ, VÝSTUPNÍ PRŮBĚHY A KAPACITNÍ PROUD PŘI SPÍNANÍ CMOS

INVERTORU ........................................................................................................................ 64 OBR. 7.1:  OBECNÁ STRUKTURA KOMBINAČNÍHO LOGICKÉHO OBVODU .............................. 66 OBR. 7.9: CMOS HRADLO NOR2 ............................................................................................. 67 OBR. 7.10:  HRADLO NOR2 A EKVIVALENTNÍ ZAPOJENÍ CMOS INVERTORU ....................... 69 OBR. 7.11:  OBECNÁ STRUKTURA N-VSTUPOVÉHO HRADLA NOR ........................................ 71 OBR. 7.12:  N-VSTUPOVÉ HRADLO NOR A EKVIVALENTNÍ ZAPOJENÍ CMOS INVERTORU ..... 71 OBR. 7.13:  HRADLO NAND2 A EKVIVALENTNÍ ZAPOJENÍ CMOS INVERTORU .................... 73 OBR. 7.14:  OBECNÁ STRUKTURA N-VSTUPOVÉHO HRADLA NAND ..................................... 74 OBR. 7.15:  N-VSTUPOVÉ HRADLO NAND A EKVIVALENTNÍ ZAPOJENÍ CMOS INVERTORU . 74 OBR. 7.17:  GRAF PŘEDSTAVUJÍCÍ N-SÍŤ A KORESPONDUJÍCÍ P-SÍŤ LOGICKÉHO OBVODU ....... 76 OBR. 7.18:  ZÁKLADNÍ CMOS KOMBINAČNÍ LOGICKÉ BLOKY .............................................. 77 OBR. 7.19:  KOMPLEXNÍ KOMBINAČNÍ LOGICKÝ OBVOD PŘEDSTAVUJÍCÍ FUNKCI ( 7.38 ) ..... 77 OBR. 7.20:  AOI KOMBINAČNÍ LOGICKÁ FUNKCE NA HRADLOVÉ A TRANZISTOROVÉ ÚROVNI

78 OBR. 7.21:  REALIZACE FUNKCE ZADANÉ V PŘÍKLAD 7.2 .................................................... 79 OBR. 7.22:  REALIZACE FUNKCE ZADANÉ V PŘÍKLAD 7.2 .................................................... 79 

Page 6: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

6 FEKT Vysokého učení technického v Brně

OBR. 7.23:  1-BITOVÁ ÚPLNÁ SČÍTAČKA NA HRADLOVÉ ÚROVNI .......................................... 81 OBR. 7.24:  1-BITOVÁ ÚPLNÁ SČÍTAČKA NA TRANZISTOROVÉ ÚROVNI ................................. 81 OBR. 7.25: BINÁRNÍ ODČÍTAČKA POMOCÍ DVOJKOVÉHO DOPLŇKU ........................................... 82 OBR. 7.26: BINÁRNÍ SČÍTAČKA/ODČÍTAČKA POMOCÍ DVOJKOVÉHO DOPLŇKU .......................... 83 OBR. 7.27: BCD SČÍTAČKA ...................................................................................................... 86 OBR. 7.28: KARNAUGHOVA MAPA PRO VYJÁDŘENÍ PŘÍZNAKU PŘETEČENÍ C4“ ......................... 87 OBR. 7.29: ZAPOJENÍ PŘÍZNAKU PŘETEČENÍ C4 NA HRADLOVÉ ÚROVNÍ .................................... 87 OBR. 7.30: ÚPLNÉ ZAPOJENÍ BCD SČÍTAČKY ........................................................................... 88 OBR. 7.31: BCD SČÍTAČKA ČÍTAJÍCÍ V ROZSAHU OD 00000 DO 19999 ..................................... 88 OBR. 7.32: OBECNÝ ZÁPIS NÁSOBENÍ DVOU 4-BITOVÝCH BINÁRNÍCH ČÍSEL ............................. 89 OBR. 7.33: OBECNÝ ZÁPIS NÁSOBENÍ DVOU 4-BITOVÝCH BINÁRNÍCH ČÍSEL EFEKTIVNĚJŠÍ

METODOU .......................................................................................................................... 91 OBR. 8.1:  CMOS KO RS NA TRANZISTOROVÉ ÚROVNI ZALOŽENÝ NA HRADLECH NOR2 . 95 OBR. 8.2:  KLOPNÝ OBVOD RS NA HRADLOVÉ ÚROVNI NOR2 ........................................... 95 OBR. 8.3: CMOS KO RS NA TRANZISTOROVÉ ÚROVNI ZALOŽENÝ NA HRADLECH NAND2 ..... 97 OBR. 8.4:  KLOPNÝ OBVOD RS NA HRADLOVÉ ÚROVNI ZALOŽENÝ NA HRADLECH NAND2 97 OBR. 8.5:  KLOPNÝ OBVOD RS ŘÍZENÝ ÚROVNÍ HODINOVÉHO SIGNÁLU ZALOŽENÝ NA

HRADLECH NOR2 ............................................................................................................. 98 OBR. 8.6:  ČASOVÝ PRŮBĚH KO RS ŘÍZENÝ ÚROVNÍ HODINOVÉHO SIGNÁLU ZALOŽENÝ NA

HRADLECH NOR2 ............................................................................................................. 98 OBR. 8.7:  AOI IMPLEMENTACE KO RS ŘÍZENÝ ÚROVNÍ HODINOVÉHO SIGNÁLU ZALOŽENÝ

NA HRADLECH NOR2 ........................................................................................................ 99 OBR. 8.8:  KO RS ŘÍZENÝ ÚROVNÍ HODINOVÉHO SIGNÁLU ZALOŽENÝ NA HRADLECH

NAND2 99 OBR. 8.9:  BLOKOVÉ SCHÉMA KO RS ŘÍZENÝ ÚROVNÍ HODINOVÉHO SIGNÁLU ZALOŽENÝ NA

HRADLECH NAND2 ........................................................................................................ 100 OBR. 8.10:  BLOKOVÉ SCHÉMA KO JK ŘÍZENÉHO ÚROVNÍ HODINOVÉHO SIGNÁLU ZALOŽENÝ

NA HRADLECH NAND2 ................................................................................................... 100 OBR. 8.11:  AOI IMPLEMENTACE KO JK ŘÍZENÝ ÚROVNÍ HODINOVÉHO SIGNÁLU ZALOŽENÝ

NA HRADLECH NOR2 ...................................................................................................... 101 OBR. 8.12:  KLOPNÝ OBVOD JK MASTER-SLAVE ............................................................... 102 OBR. 8.13:  KLOPNÝ OBVOD D JAKO ZÁCHYTNÝ REGISTR NA HRADLOVÉ ÚROVNI ............. 102 OBR. 8.14:  CMOS IMPLEMENTACE KLOPNÉHO OBVODU D JAKO ZÁCHYTNÝ REGISTR ...... 103 OBR. 8.15:  KLOPNÝ OBVOD D ŘÍZENÝ NÁSTUPNOU HRANOU HODINOVÉHO SIGNÁLU CLK . 104 OBR. 9.1:  PŘECHOD MEZI LOGICKÝMI HODNOTAMI A METASTABILNÍM STAVEM ............. 151 OBR. 9.2:  ASYNCHRONNÍ HODINY A SELHÁNÍ SYNCHRONIZACE ...................................... 152 OBR. 9.3:  NESPRÁVNÁ HODNOTA Z METASTABILNÍHO VÝSTUPU BDAT1 .......................... 152 OBR. 9.4: STROMOVÁ STRUKTURA POSILOVAČŮ HODINOVÉHO SIGNÁLU CLK ................... 153 OBR. 9.5: VLIV ZPOŽDĚNÍ HODINOVÉHO SIGNÁLU CLK ........................................................... 154 OBR. 9.6: VLIV POSUNU HODINOVÉHO SIGNÁLU CLK .............................................................. 155 OBR. 9.7: SPLNĚNÍ ČASOVÝCH POŽADAVKŮ PŘÍDAVNÝM ZPOŽDĚNÍM .................................... 156 OBR. 9.8: SCHÉMA OBVODU SIMPLE_EXMAPLE PO SYNTÉZE ............................................ 157 OBR. 9.9:  SCHÉMA OBVODU SIMPLE_EXAMPLE PO SPUŠTĚNÍ SKRIPTU ...................... 158 OBR. 9.10: SCHÉMA 8-BITOVÉHO SYNCHRONNÍHO BINÁRNÍHO ČÍTAČE S HRADLOVÁNÍM

HODINOVÉHO SIGNÁLU .................................................................................................... 160 OBR. 9.11: SIMULACE 8-BITOVÉHO SYNCHRONNÍHO BINÁRNÍHO ČÍTAČE S HRADLOVÁNÍM

HODINOVÉHO SIGNÁLU .................................................................................................... 161 OBR. 10.1: SYNCHRONIZAČNÍ OBVOD SE DVĚMA KLOPNÝMI OBVODY .................................... 162 OBR. 10.2: OBVOD ROZDĚLENÝ NA BLOKY PODLE HODINOVÝCH SIGNÁLŮ ............................. 164 OBR. 10.3: KRÁTKÝ IMPULZ SE ZTRATÍ V SYNCHRONIZAČNÍM OBVODU ................................. 166 

Page 7: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 7

OBR. 10.4: PRODLOUŽENÝ IMPULZ ZARUČUJE SPRÁVNÉ NAVZORKOVÁNÍ ŘÍDÍCÍHO SIGNÁLU . 166 OBR. 10.5: SYNCHRONIZACE ŘÍDÍCÍHO SIGNÁLU POMOCÍ ZPĚTNÉ VAZBY ............................... 167 OBR. 10.6: PŘEVOD VÍCE ŘÍDÍCÍCH SIGNÁLŮ MEZI ČASOVÝMI ZÁKLADNAMI .......................... 168 OBR. 10.7: SLOUČENÍ ŘÍDÍCÍCH SIGNÁLŮ PŘED PŘEVODEM MEZI ČASOVÝMI ZÁKLADNAMI .... 168 OBR. 10.8: SYNCHRONIZACE SEKVENČNÍCH ŘÍDÍCÍCH SIGNÁLŮ .............................................. 169 OBR. 10.9: LOGIKA GENERUJÍCÍ ŘÍDÍCÍ SIGNÁLY V SPRÁVNÉM POŘADÍ VE DRUHÉ ČASOVÉ

ZÁKLADNĚ ....................................................................................................................... 170 OBR. 10.10: SIGNÁL PRO DEKODÉR PŘECHÁZEJÍCÍ Z JEDNÉ ČASOVÉ ZÁKLADNY DO DRUHÉ .... 171 OBR. 10.11: LOGIKA PRO SYNCHRONIZOVÁNÍ A NASTAVENÍ SIGNÁLU ENABLE ...................... 171 OBR. 10.12: LOGIKA SE STAVOVÝM AUTOMATEM PRO DETEKCI ZMĚNY ŘÍDÍCÍHO SIGNÁLU ... 172 OBR. 10.13: BINÁRNÍ ČÍSLO NAVZORKOVÁNO BĚHEM ZMĚNY SIGNÁLU .................................. 174 OBR. 10.14: BLOKOVÁ SCHÉMA GRAYOVA ČÍTAČE ................................................................ 175 OBR. 10.15: PRINCIP PŘEVODU GRAYOVA KÓDU NA BINÁRNÍ ČÍSLO POMOCÍ SOUČTŮ ............ 176 OBR. 10.16: SCHÉMA ČTYŘ BITOVÉHO PŘEVODNÍKU Z GRAYOVA DO BINÁRNÍHO KÓDU ......... 176 OBR. 10.17: PRINCIP PŘEVODU BINÁRNÍHO KÓDU NA GRAYŮV POMOCÍ SOUČTŮ .................... 178 OBR. 10.18: SCHÉMA ČTYŘ BITOVÉHO PŘEVODNÍKU Z BINÁRNÍHO DO GRAYOVA KÓDU ......... 178 OBR. 10.19: BLOKOVÁ SCHÉMA REGISTRU FIFO ROZDĚLENA PODLE HODINOVÝCH ZÁKLADEN

180 

Page 8: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

8 FEKT Vysokého učení technického v Brně

Seznam tabulek TAB. 5.3:  PRACOVNÍ OBLASTI CMOS INVERTORU ............................................................ 36 TAB. 7.1:  PRAVDIVOSTNÍ TABULKA ÚPLNÉ 1-BITOVÉ SČÍTAČKY ....................................... 80 TAB. 7.2: SOUČET DVOU BCD ČÍSEL V BINÁRNÍM A BCD TVARU ............................................ 85 TAB. 8.1:  PRAVDIVOSTNÍ TABULKA KO RS ZALOŽENÝ NA HRADLECH NOR2 .................. 96 TAB. 8.2:  FUNKCE TRANZISTORŮ V CMOS KO RS ZALOŽENÉHO NA HRADLECH NOR2 .. 96 TAB. 8.3:  DETAILNÍ PRAVDIVOSTNÍ TABULKA KO JK ŘÍZENÉHO ÚROVNÍ HODINOVÉHO

SIGNÁLU 100 

Page 9: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 9

1 Úvod

Logické integrované obvody zpracovávají nespojité signály, které nabývají jen konečného malého počtu úrovní. Naprostá většina dnes vyráběných logických IO využívá pouze dvou logických úrovní pracujících s dvojkovou číselnou soustavou. Jejich funkci a vzájemné spojování do soustav lze popsat pomocí Booleovy algebry.

Digitální IO se vyrábějí v technologii bipolární i unipolární (především MOS). Základní kriteria, podle kterých posuzujeme kvalitu (vhodnost pro danou aplikaci) jednotlivých druhů (tříd) digitálních obvodů jsou:

• rychlost,

• příkon,

• odolnost proti rušení,

• široký rozsah pracovních teplot,

• nízké rušení generované vlastním obvodem (proudové špičky při změnách stavu),

• snadnost realizace složitějších logických funkcí,

• dosažitelná hodnota základních hradel a možnosti velké integrace

• nízká cena.

Tyto požadavky splňuje každá třída digitálních obvodů pouze částečně. Proto se ve výrobě udržuje několik různých tříd digitálních obvodů, z nichž každá má zdůrazněnou některou z výše uvedených vlastností tak, jak to odpovídá její fyzikální podstatě.

První období svým počátkem sahá až do éry elektronkové techniky, kdy ve čtyřicátých letech byly vytvořeny první elektronkové počítače. Postupně prošlo s vývojem polovodičové techniky od hrotových přes slitinové germaniové tranzistory až ke křemíkovým planárním tranzistorům, zhotoveným v epitaxní vrstvě. Až tato technologie se stala základem výroby monolitických integrovaných obvodů s bipolárními tranzistory. Tranzistory řízené polem byly sice tehdy již známy, avšak byly velmi nedokonalé a poruchové. Proto byla pozornost zaměřena na hledání obvodové struktury sestavené jen z PN přechodů, tj. z diod a bipolárních tranzistorů NPN

Z tohoto období pocházejí logické členy DL (diodová logika), DTL (diodově-tranzistorová logika), DCTL (Direct Coupled Transistor Logic - logika s přímo vázanými tranzistory), RTL (Resistor-Transistor Logic - odporově tranzistorová logika), ECL (Emiter Coupled Logic - emitorově vázaná logika), DTLZ (diodově-tranzistorová logika s vazbou Zenerovými diodami). Kromě těchto obvodů vznikla řada uspořádání, které se neosvědčily a proto rychle zanikly.

První období bylo zakončeno vítězstvím logického členu, který známe pod označením TTL. Ve skutečnosti se zde jedná o další vývojové stádium DTL, ve kterém je skupina n stupních diod nahrazena n emitory jediného vstupního tranzistoru. Základní soubor obvodů TTL se velice rychle rozšířil po celém světě (dá se říci, že byl celosvětově unifikován) a stal se základnou pro velmi rozsáhlý rozvoj digitálních systémů. Tím lze také charakterizovat II.

Page 10: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

10 FEKT Vysokého učení technického v Brně

období rozvoje obvodové techniky, které vedlo k postupnému rozšiřování sortimentu stavebnice TTL.

Ukázalo se také, že stavebnice TTL nevyhovuje stoupajícím požadavkům. V některých aplikacích vadila omezená rychlost (zpoždění logického členu kolem 20 ns vedlo ke vzniku hazardních stavů v některých logických sítích), v jiných zase příliš velký příkon. Požadavek velké rychlosti je protichůdný k požadavku malé spotřeby. Proto ve III. období je základní řada TTL označena jako normální (N) a z ní jsou odvozeny řady s vět�í rychlostí (H, S), s menším příkonem (L) i rychlé nízkopříkonové (LS, ALS).

V osmdesátých letech (IV. období) dochází k přechodu od obvodů SSI a MSI k vyšším stupňům integrace. Proto se vyhledávají obvodové struktury vhodné pro velké hustoty integrace. Logický člen zde musí mít co nejjednodušší obvodovou (i technologickou) strukturu a co nejmenší příkon při dostatečné rychlosti. Velmi výrazně se prosazují unipolární technologie (NMOS, CMOS, NMES). V bipolární technologii se rozvíjí injekční logika (I2L, I3L) zajímavá i svojí "obrácenou" strukturou (jeden vstup, více výstupů). Prudce se rozvíjí prostředky pro návrh obvodů vyšších stupňů integrace.

Page 11: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 11

2 Zařazení předmětu ve studijním programu

Tento text je určen především jako studijní materiál pro výuku předmětu „Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL (BNDI)“ v 3. ročníku studia tříletého bakalářského studijního programu ELEKTROTECHNIKA, ELEKTRONIKA, KOMUNIKAČNÍ A ŘÍDÍCÍ TECHNIKA oboru MIKROELEKTRONIKA A TECHNOLOGIE. Volně navazuje na předměty předchozích ročníků „Elektrotechnika1-2“, „Analogové elektronické obvody“ a „Mikroelektronika a technologie součástek“ se zaměřením na integrované obvody. Výhodou lze využít případných předchozích znalostí z volitelného předmětu „Mikroelektronické praktikum“.

Page 12: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

12 FEKT Vysokého učení technického v Brně

3 Vstupní test 1) Jaký je rozdíl mezi unipolárním a bipolárním tranzistorem. 2) Nakreslete základní strukturu tranzistoru MOS v řezu.

3) Ve kterých základních režimech pracuje tranzistor MOS? Popište výstupní

charakteristiku.

4) Má vliv délka kanálu L tranzistoru MOS na výstupní proud? Pokud ano, tak důkladně popište.

5) Popište, co jsou to kombinační logický obvody AOI a OAI.

6) Popište funkcí klopného obvodu RS. Je možné tento klopný obvod nahradit jiným

klopným obvodem?

7) Co má dominantní vliv na zpoždění výstupního signálu oproti vstupnímu signálu u CMOS invertoru?

8) Nakreslete přenosovou charakteristiku CMOS invertoru 9) Jak se liší kombinační a sekvenční logické obvody 10) Čím je charakteristická úplně určená kombinační logická funkce?

11) Nevyužité vstupy digitálních obvodů se připojují na logickou 0 nebo 1?

12) Vysvětlete princip generování pravoúhlých kmitů oscilátorem s jedním invertorem s hysterezní převodní charakteristikou. 13) Kolik kombinačních logických funkcí lze vytvořit pro jednu logickou proměnnou? 14) Jak vyjadřujeme dvouhodnotové veličiny v digitální technice?

15) Jaký je rozdíl mezi monostabilním, bistabilní klopným obvodem

16) Co je základním stavebním prvkem čítače?

17) Popište využití stvových automatů v návrhu digitálních integrovaných obvodů

18) Vysvětlete vnitřní strukturu univerzálního časovače 555 a nakreslete jeho aplikační

zapojení ve funkci MKO.

19) Lze zkracovat pravoúhlé impulsy pasivními integračními články?

Page 13: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 13

4 Rozdělení logických IO

Logické integrované obvody zpracovávají nespojité signály, které nabývají jen konečného malého počtu úrovní. Naprostá většina dnes vyráběných logických IO využívá pouze dvou logických úrovní pracujících s dvojkovou číselnou soustavou. Jejich funkci a vzájemné spojování do soustav lze popsat pomocí Booleovy algebry.

Rozdělení logických IO vytvářených na bázi křemíku lze rozdělit následovně:

Digitální IO se vyrábějí v technologii bipolární i unipolární (především MOS). Základní kriteria, podle kterých posuzujeme kvalitu (vhodnost pro danou aplikaci) jednotlivých druhů (tříd) digitálních obvodů jsou:

• rychlost,

• příkon,

• odolnost proti rušení,

• široký rozsah pracovních teplot,

• nízké rušení generované vlastním obvodem (proudové špičky při změnách stavu),

• snadnost realizace složitějších logických funkcí,

• dosažitelná hodnota základních hradel a možnosti velké integrace,

• nízká cena.

Tyto požadavky splňuje každá třída digitálních obvodů pouze částečně. Proto se ve výrobě udržuje několik různých tříd digitálních obvodů, z nichž každá má zdůrazněnou některou z výše uvedených vlastností tak, jak to odpovídá její fyzikální podstatě. Obr. 4.1. ukazuje technologie používané pro výrobu digitálních obvodů různých stupňů integrace.

Z principu digitálních obvodů, logických i číslicových, plyne možnost značné standardizace. Významná je i skutečnost, že digitální obvody nevyžadují žádné nastavování ani při výrobě, ani během provozu. Navíc přesnost číslicových obvodů není principiálně nijak omezena a lze ji zvyšovat prostým zvětšováním délky slova. Digitální obvody jsou vyráběny v řadách (stavebnicích) z jejichž jednotlivých typů lze sestavit požadovaný logický nebo číslicový obvod (rozumí se v rámci jedné stavebnice, někdy z vážných důvodů i z více stavebnic).

LOGICKÉ INTEGROVANÉ OBVODY

BIPOLÁRNÍ

PRINCIP REGULACE

PROUDU

I2L INJEKČNÍ LOGIKA

PRINCIP SPÍNÁNÍ

UNIPOLÁRNÍ TECHNIKA

DYNAMICKÁ TECHNIKA

TECHNIKA PŘENOSU NÁBOJE

STATICKÁ TECHNIKA

Page 14: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

14 FEKT Vysokého učení technického v Brně

Z historického hlediska vývoj digitálních obvodů probíhal ve čtyřech obdobích:

I. Období hledání vhodné obvodové struktury základního logického členu.

II. Období prosazení TTL.

III. Zlepšování parametrů TTL - vytváření různých řad TTL, rozvoj obvodů MOS.

IV. Nástup obvodů vyšší integrace a rozvoj metod jejich návrhu. Hledání obvodových struktur pro velké hustoty integrace a pro velkou rychlost.

První období svým počátkem sahá až do éry elektronkové techniky, kdy ve čtyřicátých letech byly vytvořeny první elektronkové počítače. Postupně prošlo s vývojem polovodičové techniky od hrotových přes slitinové germaniové tranzistory až ke křemíkovým planárním tranzistorům, zhotoveným v epitaxní vrstvě. Až tato technologie se stala základem výroby monolitických integrovaných obvodů s bipolárními tranzistory. Tranzistory řízené polem byly sice tehdy již známy, avšak byly velmi nedokonalé a poruchové. Proto byla pozornost zaměřena na hledání obvodové struktury sestavené jen z PN přechodů, tj. z diod a bipolárních tranzistorů NPN.

Obr. 4.1: Technologie používaná pro výrobu digitálních obvodů různých stupňů integrace

Z tohoto období pocházejí logické členy DL (diodová logika), DTL (diodově-tranzistorová logika), DCTL (Direct Coupled Transistor Logic - logika s přímo vázanými tranzistory), RTL (Resistor-Transistor Logic - odporově tranzistorová logika), ECL (Emiter Coupled Logic - emitorově vázaná logika), DTLZ (diodově-tranzistorová logika s vazbou Zenerovými diodami). Kromě těchto obvodů vznikla řada uspořádání, které se neosvědčily a proto rychle zanikly.

V tomto období se prokázalo, že největší naděje na široké uplatnění bude mít obvodová struktura, která bude splňovat následující požadavky:

1. Bude schopná kaskádního řazení (tj. výstupní logické úrovně napětí se musejí shodovat s úrovněmi požadovanými pro vstupy logického členu).

2. Výstup bude snášet zatížení větším počtem vstupů (předpokládá se tzv. logický zisk, za normální se považuje zisk N=10, tedy zatěžování deseti vstupy).

3. Bude mít jednoduché napájení a přiměřenou spotřebu.

4. Bude maximálně provozně spolehlivá - tj. s minimální poruchovostí, s malými výrobními a provozními tolerancemi logických úrovní, s velkou odolností proti vnějšímu rušení.

5. Výrobní postup bude co nejjednodušší a technologicky přiměřeně náročný v souladu se současným stavem výrobních technologií).

6. Bude obsahovat nutné minimum obvodových prvků, především minimum rezistorů.

7. Bude schopná zajistit všechny základní logické funkce (podle de Morganova teorému tedy musí realizovat buď funkci NAND nebo NOR).

Poče

t prv

105

10

103

VLSI

LSI

MSI

SSI

CMOS, NMOS

CMOS, NMOS PMOS

TTL, ECL

TTL, ECL

TTLS I2L

CMOS

CMOS

Page 15: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 15

Ke konci prvního období byl vývoj logických obvodů zaměřen především na dvouúrovňovou logiku (i když teoretické a některé praktické práce vedly k řešení n-úrovňové logiky s n dokonce 7 až 10) a to logiku kladnou (úroveň napětí pro logickou jedničku je kladnější než úroveň napětí pro logickou nulu). Kromě toho byly hledány logické členy s více vstupy a jediným výstupem. Pouze tam, kde to sama obvodová struktura nabízela, byly využity dva proti sobě inverzní výstupy (ECL).

Ukázalo se, že každý logický člen musí sestávat ze dvou částí:

• nelineárního rozhodovacího obvodu

• pomocného obvodu pro nastavení vstupních úrovní.

První část je jádrem logického členu a může být vytvořena čtyřmi různými způsoby: diodovým obvodem, sériovým nebo paralelním řazením spínačů, vícenásobným diferenčním komparátorem.

První období bylo zakončeno vítězstvím logického členu, který známe pod označením TTL. Ve skutečnosti se zde jedná o další vývojové stádium DTL, ve kterém je skupina n stupních diod nahrazena n emitory jediného vstupního tranzistoru. Základní soubor obvodů TTL se velice rychle rozšířil po celém světě (dá se říci, že byl celosvětově unifikován) a stal se základnou pro velmi rozsáhlý rozvoj digitálních systémů. Tím lze také charakterizovat II. období rozvoje obvodové techniky, které vedlo k postupnému rozšiřování sortimentu stavebnice TTL.

Ukázalo se také, že stavebnice TTL nevyhovuje stoupajícím požadavkům. V některých aplikacích vadila omezená rychlost (zpoždění logického členu kolem 20 ns vedlo ke vzniku hazardních stavů v některých logických sítích), v jiných zase příliš velký příkon. Požadavek velké rychlosti je protichůdný k požadavku malé spotřeby. Proto ve III. období je základní řada TTL označena jako normální (N) a z ní jsou odvozeny řady s větší rychlostí (H, S), s menším příkonem (L) i rychlé nízkopříkonové (LS, ALS).

Page 16: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

16 FEKT Vysokého učení technického v Brně

5 MOS tranzistor

Cíle kapitoly: Seznámení se základními vlastnostmi MOS tranzistoru. Pochopení základních jevů a principů.

5.1 Úvod

MOS tranzistor je základním stavebním blokem v MOS a CMOS digitálních integrovaných obvodech. Pokud porovnáme bipolární tranzistor s MOS tranzistorem, tak MOS tranzistor zabírá relativně malou plochu na čipu a v jeho výrobním procesu je potřeba méně kroků.

Princip MOSFET tranzistoru je založen na modulaci koncentrace náboje působením MOS kapacity. Struktura zahrnuje dva terminály (source, drain), které jsou zapojeny do samostatných oblastí s vysokou koncentrací dopantu. Tyto oblasti mohou být typu P nebo N, ale obě musí být stejného typu, závisí to na typu MOS tranzistoru. Oblasti s vysokou koncentrací dopantu jsou v obrázcích značeny „+“. Oblasti drainu a source jsou od sebe odděleny oblastí polovodiče opačného typu označovanou jako „body“. Tato oblast nemá vysokou koncentraci dopantu (není zde značka „+“). Aktivní oblast je tvořena MOS kapacitou na jejíž elektrodu je připojen třetí terminál tranzistoru nazývaný gate (hradlo). Tento terminál je přímo nad „body“ a je izolován od ostatních oblastí tenkou vrstvičkou oxidu křemíku.

Pokud je MOS tranzistor typu N jsou oblasti drain a source typu N+ a oblast pod hradlem je typu P. Pokud je připojeno na hradlo kladné napětí vytvoří se pod ním inverzní vrstvička typu N nazývaná kanál. Kanál spojuje oblasti source-drain a umožňuje průchod nosičů elektrického náboje (elektrický proud) mezi těmito oblastmi. Pokud je připojeno na hradlo nízké napětí (menší než prahové) nebo záporné, kanál mizí a nosiče náboje nemohou mezi oblastmi source-drain procházet (tranzistor je uzavřen, elektrický proud neprochází).

Pokud je MOS tranzistor typu P jsou oblasti drain a source typu P+ a oblast pod hradlem je typu N. Pokud je připojeno na hradlo záporné napětí (VGS) vytvoří se pod ním inverzní vrstvička typu P nazývaná kanál. Kanál spojuje oblasti source-drain a umožňuje průchod nosičů elektrického náboje (elektrický proud) mezi těmito oblastmi. Pokud je připojeno na hradlo vyšší napětí (vyšší než prahové) nebo kladné, kanál mizí a nosiče náboje nemohou mezi oblastmi source-drain procházet (tranzistor je uzavřen, elektrický proud neprochází).

Název source je odvozen od toho, že slouží jako „zdroj“ (source) nosičů náboje (elektronů pro kanál typu N a děr pro kanál typu P), které procházejí kanálem. Podobně je nazván drain jako místo kde nosiče z kanálů mizí (odtékají).

Jak je vidět na oblast source a drain je identická. Konečnou identifikaci oblasti source a drain vpodstatě provedeme napětím připojeným mezi tyto dvě oblasti. Oblast source je ta, která elektrony „dodává“ a drain je oblast, která je naopak pohlcuje (odebírá). Napětí přivádíme na hradlo, drain a také na substrát, v obrázku pomocí „zadního kontaktu“ (back contact). Tato napětí jsou vztažena k source elektrodě.

Page 17: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 17

Obr. 5.1: Struktura NMOS tranzistoru

Jak je vidět na Obr. 5.1 oblast source a drain je identická. Konečnou identifikaci oblasti source a drain vpodstatě provedeme napětím připojeným mezi tyto dvě oblasti. Oblast source je ta, která elektrony „dodává“ a drain je oblast, která je naopak pohlcuje (odebírá). Napětí přivádíme na hradlo, drain a také na substrát, v obrázku pomocí „zadního kontaktu“ (back contact). Tato napětí jsou vztažena k source elektrodě.

5.2 Princip MOS tranzistoru

Napětí připojené na hradlo řídí (kontroluje) tok elektronů z oblasti source do drain. Kladné napětí přitahuje elektrony pod hradlo a vytváří pod ním vodivý kanál jinak nazývaný také inverzní vrstva. K vytvoření či udržení kanálu není potřeba žádný vstupní (hradlový) proud. Vidíme, že napětí na hradle ovládá (řídí) proud mezi drain a source.

Page 18: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

18 FEKT Vysokého učení technického v Brně

Graf 5.1: Typický průběh výstupní charakteristiky NMOS tranzistoru

Pozn.: V dalším textu budeme dále uvažovat NMOS tranzistor.

5.3 Analýza MOS tranzistoru

V této kapitole ukážeme tři různé modely MOS tranzistoru, lineární model, kvadratický model a model s variabilní velikostí depletiční vrstvy. Lineární model korektně předvídá chování MOS tranzistoru pro malá napětí drain-source, kdy MOSFET pracuje jako řízený odpor. Model kvadratický bere v úvahu variaci napětí kolem kanálu mezi oblastí drain-source. Tento model se používá nejčastěji pro praktické výpočty. Nebere ovšem v úvahu různou tloušťku depletiční vrstvy podél kanálu. Poslední model zahrnuje i toto chování a je tedy nejpřesnější.

5.3.1 Lineární model

Lineární model popisuje chování MOSFETu při nízkých napětích drain-source. Jak odkazuje samotný název modelu, lineární, model popisuje MOSFET v oblasti kde pracuje jako lineární součástka. V této oblasti může být tranzistor modelován jako rezistor řízený napětím gate-source. V tomto režimu může MOSFET sloužit jako spínač pro analogové i digitální aplikace a nebo jako analogový dělič.

Obecně je proud drainem možno vyjádřit jako celkový náboj v kanále (inverzní vrstvě) dělený časem, který nosiče náboje potřebují pro cestu mezi oblastmi drain a source.

r

invD t

WLQI −= ( 5.1 )

kde Qinv je náboj inverzní vrstvy na jednotku plochy, W šířka hradla, L délka hradla a tr je tranzitní čas. Pokud je rychlost nosičů mezi drain-source konstantní potom tranzitní čas je roven:

Page 19: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 19

vLtr = ( 5.2 )

kde rychlost, v, je rovna produktu (součinu) pohyblivosti a intenzity elektrického pole:

LVv DSμμε == ( 5.3 )

Konstantní rychlost implikuje konstantní elektrické pole, což znamená, že intenzita elektrického pole je napětí mezi drain-source děleno délkou hradla. Toto vede k následující rovnici pro proud drainem

DSinvD VL

WQI ⋅⋅−= μ ( 5.4 )

Nyní předpokládejme, že hustota náboje v inverzní vrstvě mezi oblastmi drain-source je konstantní. Předpokládejme, že hustota náboje v inverzní vrstvě je rovna mínus součin kapacity na jednotku plochy a napětí gate-source minus prahové napětí, pak

( ) TGSTGSoxinv VVproVVCQ >−−= , ( 5.5 )

Náboj inverzní vrstvy je roven nule pokud napětí na hradle je menší než prahové napětí. Náhradou náboje inverzní vrstvy v rovnici pro proud drainu dostáváme lineární model

( ) ( )TGSDSDSTGSoxD VVVproVVVL

WCI −<<−= ,μ ( 5.6 )

Poznamenejme, že kapacita v rovnici je jednotková kapacita hradla. Také proud je nulový pokud je napětí hradla menší než prahové. Lineární model platí pouze v oblasti, kdy napětí drain-source je menší než rozdíl napětí hradla a prahového napětí. Toto zaručuje, že rychlost nosičů a jejich hustota je v celém kanále konstantní.

Lineární část výstupní charakteristiky tranzistoru NMOS

00,050,1

0,150,2

0,250,3

0,350,4

0,45

0 0,1 0,2 0,3 0,4 0,5 0,6VDS [V]

ID [mA]

Graf 5.2: Část výstupní charakteristiky NMOS tranzistoru v lineárním režimu

Graf 5.2 ukazuje chování struktury v lineárním režimu. Žádný proud neteče, pokud je napětí hradla nižší než prahové napětí. Proud se zvyšuje s napětím hradla od úrovně prahového napětí. Strmost křivky odpovídá vodivosti součástky (kanálu) a tato se lineárně

Page 20: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

20 FEKT Vysokého učení technického v Brně

zvyšuje spolu se zvyšujícím se napětím hradla. Obrázek také ilustruje možnost využití MOSFETu jako napětím řízeného rezistoru.

5.3.2 Kvadratický model

Kvadratický model využívá stejných předpokladů jako předchozí model lineární. Jedinou výjimkou je náboj v inverzní vrstvě – ten se mění podél délky kanálu.

Odvození je založeno na faktu, že proud je kontinuální skrz kanál. Proud je také závislý na lokálním napětí uvnitř kanálu, >I>VC.

Předpokládejme nyní malý kousek struktury s délkou dy>/I> a napětím v kanále VC+VS. Lineární model popsaný rovnicí ( 5.6 ), aplikovaný na tuto naši vybranou oblast, dává

( ) CTCSGoxD dVVVVVdyWCI −−−= μ ( 5.7 )

Kde napětí drain-source je zaměněno za napětí v kanále. Obě strany rovnice mohou být integrovány přes oblast drain-source, jinými slovy od 0 do délky kanálu L, a napětí v kanále se mění od 0 do VDS.

( ) C

V

TCSGox

L

D dVVVVVWCdyIDS

∫∫ −−−=00

μ ( 5.8 )

Proud drainem, ID, je konstantní a tak po integraci dostáváme

( ) ( )TGSDSDS

DSTGSoxD VVVproVVVVL

WCI −<⎥⎦

⎤⎢⎣

⎡−−= ,

2

2

μ ( 5.9 )

Proud drainem nejdříve roste lineárně spolu s napětím drain-source, pak dosahuje maxima. Podle výše uvedené rovnice proud může dále klesat a eventuelně se stát i záporným. Hustota náboje na konci kanálu u oblasti drain je nulová v maximu a mění znaménko při poklesu proudu oblastí drain. Náboj inverzní vrstvy se blíží nule a mění znaménko spolu s tím, jak dochází k akumulaci děr u přechodu. Tyto díry nemohou přispět k proudu drainu protože oblast drain/substrát je reverzně polarizované dioda p-n a díry se nemohou dostat do oblasti drain. Proud tedy dosáhne svého maxima a dále zůstává stejný i při dalším zvyšování potenciálu drain-source. Toto chování se označuje jako proudová saturace.

Saturační proud se tedy objeví, pokud napětí Vds je rovno napětí Vgs-Vth. Velikost saturačního proudu je potom určena rovnicí

( ) ( )TGSDSTGS

oxsatD VVVproVVL

WCI −>−

= ,2

2

, μ ( 5.10 )

Kvadratický model vysvětluje typickou C-V charakteristiku MOS tranzistoru, která je normálně zobrazována pro více různých napětí Vgs. Ukázka je na Graf 5.3. Saturační oblast začíná napravo od tečkované hranice, která je dána ID = μ Cox W/L VDS2

Page 21: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 21

Kvadratický model výstupní charakteristiky NMOS tranzistoru

0

0,5

1

1,5

2

2,5

0 5 10 15 20 25 30

VDS [V]

ID [mA]

Graf 5.3: Výstupní charakteristika NMOS tranzistoru – kvadratický model

TGSD VVproI <= ,0 ( 5.11 )

Pro záporné hodnoty napětí drain-source je tranzistor kvadratickým modelem popsán rovnicí ( 5.9 ). Je ale možné polarizovat p-n diodu přechodu drain-bulk do propustného stavu. Potom celý model musí obsahovat p-n diody mezi source-bulk a drain-bulk.

Kvadratický model se využívá pro výpočet některých malosignálových parametrů, jmenovitě transkonduktance,gm, a výstupní vodivosti, gd.

Transkonduktance popisuje změnu výstupního proudu (drain) v závislosti a vstupním napětí hradla při konstantním napětí drain-source

DSVGS

Dm V

IgδδΔ

= ( 5.12 )

Transkonduktance v kvadratické oblasti je dána

DSoxquadm VL

WCg μ=, ( 5.13 )

Je tedy přímo úměrná napětí drain-source pro VDS < VGS – VT. V saturační oblasti je transkonduktance konstantní a je dána

( )TGSoxsatm VVL

WCg −= μ, ( 5.14 )

Výstupní vodivost kvantifikuje změnu výstupního proudu (drain) v závislosti se změnou napětí drain-source, při konstantním Vgs

Page 22: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

22 FEKT Vysokého učení technického v Brně

GSVDS

Dd V

IgδδΔ

= ( 5.15 )

Výstupní vodivost v kvadratické oblasti klesá s rostoucím napětím drain-source

( )DSTGSoxquadd VVVL

WCg −−= μ, ( 5.16 )

A je nulová když se MOS tranzistor nachází v saturaci

0, =satdg ( 5.17 )

5.3.3 Model s proměnnou šířkou depletiční vrstvy

Nyní se zaměříme na model s měnící se tloušťkou depletiční vrstvy, který uvažuje změny náboje depletiční vrstvy mezi oblastí drain-source. Tato změna je způsobena měnícím se potenciálem v kanále.

( ) TGSTGSoxinv VVproVVCQ >−−= , ( 5.18 )

Sem nyní doplníme implicitní závislost prahového napětí na náboji v depletiční oblasti

( )ox

CSBFaSFCFBT C

VVqNVVV

+++++=

ϕεϕ

222 ( 5.19 )

Napětí VC je rozdíl mezi napětím v kanále a napětím source. Můžeme aplikovat lineární model na maličkou část kanálu délky y začínající u source oblasti a s tloušťkou dy. Napětí v tomto zkoumaném místě je rovno VC+VS, zatímco napětí přes tuto malou část kanálu je rovno dVC. Z tohoto potom dostáváme

( )C

ox

CSBFaSFCFBGSoxnD dV

CVVqN

VVVdyWCI ⎟

⎟⎠

⎞⎜⎜⎝

⎛ ++−−−−=

ϕεϕμ

222 ( 5.20 )

Obě strany rovnice mohou být integrovány přes oblast source-drain, kdy y se mění od 0 po délku kanálu L, a VC se mění od 0 k VDS. Dostáváme:

( ) ( ) C

V

CSBFaSnC

V

FCFBGSoxn

L

D dVVVqNWdVVVVWCdyIDSDS

∫∫∫ ++−−−−=000

222 ϕεμϕμ ( 5.21 )

Integrací dostáváme

( ) ( )( 3 2 3 222 2 2 22 3

n ox DSD GS FB C F DS n S a F DB F SB

C W V WI V V V V qN V VL L

μ ϕ μ ε ϕ ϕ⎛ ⎞= − − − − − + − +⎜ ⎟⎝ ⎠

( 5.22 )

( )⎪⎭

⎪⎬⎫

⎪⎩

⎪⎨⎧

−−+−−−= 12122

2, FBGBaS

ox

ox

aSFFBGSsatDS VV

qNC

CqNVVV

εεϕ ( 5.23 )

Page 23: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 23

0

1

2

3

4

5

6

7

8

9

10

0 1 2 3 4 5 6

VDS [V]

ID [mA] Kvadratický modelModel s proměnnou šířkou depletiční vrstvy

Graf 5.4: Porovnání modelu kvadratického s modelem s proměnnou šířkou depletiční vrstvy

Obrázek ukazuje jasně rozdíl mezi oběma modely: u kvadratického modelu dostáváme

větší proud drainem v porovnání s přesnějším modelem zahrnující chování depletiční vrstvy. Pro transkonduktanci stále platí rovnice ( 5.1 ). Pokud zkombinujeme tuto rovnici s rovnicí pro saturační napětí dostaneme:

( )⎥⎥⎦

⎢⎢⎣

⎪⎭

⎪⎬⎫

⎪⎩

⎪⎨⎧

−−+−−−= 12122

2, FBGBaS

ox

ox

aSFFBGSoxnsatm VV

qNC

CqNVV

LWCg

εεϕμ ( 5.24 )

Nyní je transkonduktance téměř lineárně závislá na VGS, takže stále může být psána ve formě rovnice ( 5.10 ) pouze s modifikovanou hybností µn

( )TGSoxnsatm VVL

WCg −= *, μ ( 5.25 )

kde je µn rovna

( )⎟⎟⎟⎟⎟

⎜⎜⎜⎜⎜

++

−=

sa

oxSBF

nn

qNCV

εϕ

μμ2

*

221

11 ( 5.26 )

Výraz pod odmocninou závisí na poměru kapacity oxidu a kapacity depletiční vrstvy při vzniku inverze (na jejím počátku). Protože tento poměr je větší než 1 téměř u všech tranzistorů, tak modifikovaná pohyblivost je až o 10 až 40 procent menší než aktuální. Tuto

Page 24: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

24 FEKT Vysokého učení technického v Brně

efektivní pohyblivost lze využít v kvadratickém modelu a výsledkem je jednodušší, ale přesný model MOSFET tranzistoru.

5.4 Prahové napětí MOS tranzistoru

V této části se budeme zabývat prahovým napětím a budeme diskutovat jeho závislost na potenciálu substrátu, tzv. substrate bias effect.

5.4.1 Prahové napětí – výpočty

Prahové napětí je součtem flatband napětí, dvojnásobku potenciálu bulku (substrátu) a napětí na oxidu (vzniká díky náboji depletiční vrstvy)

( )ox

SBFaSFFBT C

VqNVV

+++=

ϕεϕ

222 ( 5.27 )

kde flatband napětí, VFB, je dáno

( )dxxxx

CCQ

V ox

t

oxoxox

fMSFB

ox

ρφ ∫−−=0

1 ( 5.28 )

s využitím

⎟⎟⎠

⎞⎜⎜⎝

⎛++−=−= F

gMSMMS q

Eϕχφφφφ

2 ( 5.29 )

a

substrátpnNV

i

atF −= ,lnϕ ( 5.30 )

Prahové napětí PMOS tranzistoru s ntyp substrátem dostaneme z následující rovnice

( )ox

SBFdSFFBT C

VqNVV

+−−=

ϕεϕ

222 ( 5.31 )

kde flatband napětí VFB je dáno

( )dxxxx

CCQ

V ox

t

oxoxox

fMSFB

ox

ρφ ∫−−=0

1 ( 5.32 )

s

⎟⎟⎠

⎞⎜⎜⎝

⎛++−=−= F

gMSMMS q

Eϕχφφφφ

2 ( 5.33 )

a

substrátnnNV

i

dtF −= ,lnϕ ( 5.34 )

Page 25: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 25

5.4.2 Předpětí substrátu (The substrate bias effect)

Napětí připojené k substrátu působí na prahové napětí tranzistoru. Potenciál mezi source a bulk, VBS, mění šířku depletiční vrstvy a tím také mění napětí na oxidu (díky změnám náboje v depletiční vrstvě). Pokud budeme tyto změny uvažovat, dostaneme upravenou rovnici pro prahové napětí

( )ox

SBFaSFFBT C

VqNVV

+++=

ϕεϕ

222 ( 5.35 )

Změnu prahového napětí vlivem napětí source-bulk můžeme vyjádřit

( )FSBFT VV ϕϕγ 22 −+=Δ ( 5.36 )

Kde γ je body efekt parametr, který lze vyjádřit

ox

aS

CqNε

γ2

= ( 5.37 )

Page 26: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

26 FEKT Vysokého učení technického v Brně

6 CMOS invertor – statická charakteristika

Cíle kapitoly: Analýza základních typů MOS invertorů z hlediska statické charakteristiky. Pochopení základních postupů při návrhu statických parametrů MOS invertorů. Závěr kapitoly je zaměřen na návrh CMOS invertoru.

Invertor je nejzákladnější logické hradlo, které provádí Boolean operaci na jednom vstupu. V této kapitole bude popsány DC (statické) charakteristiky několika zapojení MOS invertorů. V kapitole uvidíte, že mnoho základních principů, které budou vysvětleny na MOS investorech, je možné přímo použít pro komplexnější obvodová zapojení digitálních obvodů jako jsou hradla NAND, NOR atd. Proto MOS invertor vytváří významnou základnu pro návrh digitálních obvodů.

6.1 Úvod

Logický symbol a pravdivostní tabulka ideálního invertoru je zobrazena na Obr. 6.1. V MOS invertoru jsou obě proměnné vstup A a výstup Y reprezentovány napětím. Pokud budeme používat pozitivní logiku, pak log 1 je reprezentována napětím VDD a log. 0 je reprezentovaná napětím 0. Převodní charakteristika ideálního invertoru je zobrazena na Obr. 6.2. Napětí Vth je nazýváno prahovým invertoru. Výstupní napětí bude rovno VDD (log. 1), pokud bude vstupní napětí v rozsahu 0 a Vth = VDD /2. Výstupní napětí bude přeskakovat mezi VDD a 0, když bude vstupní napětí rovno Vth. Výstupní napětí bude rovno 0 (log 0), pokud bude vstupní napětí v rozsahu Vth a VDD. Potom můžeme napsat, že vstupní napě 0 ≤Vin < Vth je interpretováno v ideálním invertoru jako log. 0, potom vstupní napětí Vth ≤Vin < VDD je interpretováno jako log. 1. Napěťová převodní charakteristika reálného invertoru je v několika ohledech rozdílná od ideální napěťové převodní charakteristiky (Obr. 6.2).

A Y

0 1

1 0 Obr. 6.1: Logický symbol a pravdivostní tabulka ideálního invertoru

Page 27: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 27

Obr. 6.2: Převodní charakteristika ideálního invertoru

Na Obr. 6.3 je zobecněné obvodová struktura NMOS invertoru. Vstupní napětí tohoto invertoru je stejné jako napětí gate-source u tranzistoru NMOS (Vin = VGS) a výstupní napětí je rovno napětí drain-source (Vout = VDS). NMOS tranzistor je v tomto případě nazýván jako driver. Source a substrátový kontakt jsou připojeny na nulový potenciál GND, potom napětí source-bulk VSB=0. V zobecněné struktuře je load představován dvou-terminálovým elementem, na kterém vzniká úbytek napětí VL a teče jím proud IL. Prvek load představuje zatěžovací obvod. Zatěžovací obvod je jedním terminálem připojen k drainu NMOS tranzistoru a druhým terminálem je připojen k VDD, což představuje napájecí napětí. Ukážeme si, že převodní charakteristika bude silně závislá, jakou součástku bude zatěžovací obvod reprezentovat. Výstup invertoru představuje také vstup pro další připojený invertor. Proto můžeme napsat, že k výstupní uzel muže být reprezentován jako souhrnná kapacita Cout. Je známo, že u MOS tranzistoru je proud vtékající do terminálu gate zanedbatelný, proto můžeme napsat, že ve stabilním stavu nevtéká ani nevytéká do vstupních a výstupních terminálů invertoru žádný proud.

Page 28: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

28 FEKT Vysokého učení technického v Brně

Obr. 6.3: Obecná struktura NMOS invertoru

6.1.1 Převodní charakteristika

Po aplikaci Kirchhofova zákonu na obvod z Obr. 6.3, můžeme napsat, že proud zatěžovacím obvodem IL je vždy rovny proudu NMOS tranzistoru.

)(),( LLoutinD VIVVI = ( 6.1 )

Převodní charakteristika vyjadřuje Vout jako funkci vstupního napětí Vin za

stejnosměrných podmínek. Typická převodní charakteristika NMOS invertoru je zobrazena na Obr. 6.4. Pokud srovnáme ideální převodní charakteristiku invertoru s charakteristikou NMOS invertoru, tak zjistíme, že jsou zde drobné rozdíly, které si popíšeme.

Pro malá vstupní napětí je výstupní Vout napětí rovno VOH (vysoké výstupní napětí). V tomto případě pracuje tranzistor NMOS v režimu zahrazení, a proto obvodem neprotéká žádný proud. Na zatěžovacím obvodu se nevytvoří žádný úbytek napětí, a proto bude na výstupu invertoru vysoké napětí, v našem případě bude napětí VOH=VDD.

Jakmile se začne zvyšovat vstupní Vin napětí, tak začne tranzistorem NMOS téct určitý drainový proud a výstupní napětí Vout začne klesat. Je potřeba poznamenat, že skok ve změně výstupního napětí nenastává okamžitě jako u ideálního invertoru, ale klesá s určitou směrnicí, jak je vidět na Obr. 6.4.

Page 29: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 29

VIL Vth VIH VOH

VOL

VOH

Vout= Vin

dVoutdVin

= -1

dVoutdVin

= -1

Vout [V]

Vin [V]

Obr. 6.4: Převodní charakteristika reálného NMOS invertoru

Nyní identifikujeme dva kritické napěťové body, kdy se směrnice dVout/dVin bude rovnat -1. Vstupní napětí Vin, které vyhovuje této podmínce, je nazýváno jako vstupní nízké napětí VIL a vstupní vysoké napětí VIH. Obě tyto napětí představují velký význam při šumových okrajových podmínkách invertoru, kterými se budeme zabývat v jedné z následujících kapitol.

Pokud bude vstupní napětí Vin stále růst, pak výstupní napětí kontinuálně klesá, až dosáhne hodnoty VOL, kdy je vstupní napětí Vin=VOH. Prahové napětí je definováno v bodě Vin=Vth, jak je vidět na převodní charakteristice. Z převodní charakteristiky je vidět, že 5 kritických napětí (VOL, VOH, VIL, VIH a Vth) charakterizují stejnosměrné chování invertoru.

VOH: maximální výstupní napětí, když je výstup v log. 1

VOL: minimální výstupní napětí, když je výstup v log. 0

VIL: maximální vstupní napětí, které může být reprezentováno jako log. 0

VIH: minimální vstupní napětí, které může být reprezentováno jako log. 1

Z předcházejících definic vyplývá, že vstupní napětí v rozsahu nejnižšího potenciálu (ve většině případů 0) až VIL je interpretována jako vstupní úroveň log. 0 a vstupní napětí v rozsahu VIH a napájecího napětí VDD jako vstupní úroveň log. 1. Výstupní napětí v rozsahu nejnižším možným napětím a VOL i interpretováno jako výstupní úroveň log. 0 a výstupní napětí v rozsahu nejvyššího možného napětí a VOH je interpretováno jako výstupní úroveň log. 1. Z předcházející definice vyplývá, že invertor může pracovat v určitých tolerancí vstupního napětí jak pro log. 0, tak i pro log. 1. Tato tolerance je zvláště významná v obvodech, kde by mohlo dojít k narušení procházejícího signálu vlivem šumu. Tento nežádoucí šum často vzniká v určitých částech obvodu a to zejména v propojovacích vodičích díky kapacitním a induktivním jevům. To může mít za následek, že hodnota signálu na začátku propojovacího vodiče může mít rozdílná než hodnota na konci propojovacího vodiče.

Page 30: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

30 FEKT Vysokého učení technického v Brně

6.1.2 Šumová imunita, šumová rezerva

V této kapitole si ukážeme vliv šumu na spolehlivost obvodu. Máme zapojení třech kaskádních invertorů, jak zobrazeno na Obr. 6.5. Předpokládejme, že všechny invertory jsou identické a vstupní napětí prvního invertoru je rovno VOH (log. 1). Z funkce invertoru pak vyplývá, že výstup prvního invertoru bude roven VOL (log. 0). Toto výstupní napětí prvního invertoru přes propojení na dvě hradla gate dalšího invertoru. Propojení na čipu jsou náchylné na šum. Výstupní signál prvního invertoru bude degradován díky během přenosu ke druhému invertoru. Proto může být vstupní napětí druhého invertoru buď menší, nebo vetší než VOL.

Obr. 6.5: Vliv šumu na přenos signálu v kaskádě invertorů

Pokud bude vstupní napětí druhého invertoru menší než napětí VOL, bude tento signál interpretován správně jako log. 0 na vstupu druhého invertoru. Pokud bude vstupní napětí druhého invertoru větší než napětí VIL, může být tento signál interpretován chybně na vstupu druhého invertoru. Potom může být napsáno, že napětí VIL je maximální dovolené napětí, které je dostatečné malé, abychom na výstupu dostali signál reprezentující log. 1.

Nyní se zaměříme na analýzu signálu, který přichází z výstupu druhého invertoru na vstup třetího invertoru. Předpokládejme, že na výstupu druhého invertoru máme napětí VOH. Jako v předcházejícím případě může být signál degradován díky vlivu šumu a na vstupu třetího invertoru se může objevit napětí rozdílné od napětí VOH. Pokud bude vstupní napětí třetího invertoru větší než VOH, bude tento signál interpretován správně jako log. 1 na vstupu třetího invertoru. Pokud bude vstupní napětí třetího invertoru menší než napětí VIH, nemusí být tento signál interpretován jako log. 1 na vstupu třetího invertoru. Potom může být napsáno, že napětí VIH je minimální dovolené napětí, které je dostatečné velké, abychom na výstupu dostali signál reprezentující log. 0.

Tyto poznatky vedou k definici šumové tolerance pro digitální obvody a označuje se jako šumová rezerva NM.

Existují dvě šumové rezervy:

1) Šumová rezerva pro malé signály, která se označuje jako NML

2) Šumová rezerva pro velké signály, která se označuje jako NMH

Page 31: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 31

OLILL VVNM −=

IHOHH VVNM −= ( 6.2 )

Na Obr. 6.6 je grafické zobrazení šumové rezervy. Na Obr. 6.6 je možné vidět, že

napěťový rozsah mezi hodnotami VIL a VIH nemůže být vyhodnocen ani jako log. 0 nebo log. 1. Tomuto pásmu se říká neurčitá pásmo. Směrnice mezi napětím by měla být co největší, aby bylo docíleno zisku, co nejmenšího neurčitého pásma. Zmenšení neurčitého pásma má za následek zvýšení šumové rezervy. Redukce šířky neurčitého pásma je nejdůležitějším krokem při digitálním návrhu.

Obr. 6.6: Grafické zobrazení šumových rezerv

Při návrhu invertoru je kritický návrh pěti napětí VOL, VOH, VIL, VIH a Vth, které plně popisují statické chování invertoru, jeho šumové rezervy a šířku neurčitého pásma.

V dalších kapitolách se budeme zabývat návrhem různých typů invertorů z hlediska těchto pěti důležitých napětí.

6.1.3 Výkonová spotřeba, spotřeba plochy čipu

Tato kapitola se bude zabývat dalšími dvěma důležitými faktory, se kterýma je potřeba pří návrhu digitálních obvodů počítat a patří zde:

a) výkonová spotřeba

b) spotřeba plochy čipu

Každé hradlo na čipu vykazuje určitý výkon a tento výkon představuje teplo, které

vzniká v digitálních obvodech. Je potřeba co nejvíce redukovat vzniklé teplo. Chlazení čipu se stává nezbytné a obvykle velmi drahá záležitost. Je potřeba poznamenat, že celková teplota uzlu je dána vztahem

Page 32: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

32 FEKT Vysokého učení technického v Brně

PTT aj θ+= , ( 6.3 )

kde Ta je okolní teplota, θ je měrný tepelný odpor a P je množství spotřebované energie.

Mnoho přenosných zařízení jako jsou komunikační zařízení, notebooky a ostatní zařízení pracují s omezeným napájecím napětím a v častém případě jsou tyto zařízení vybaveny bateriovým napájením. Proto je nutné a velmi důležité redukovat množství spotřebovaného výkonu na čipu.

Statická výkonová spotřeba invertoru může být vypočítaná jako součin napájecího napětí a množství proudu vytékajícího z napájecího zdroje v ustáleném stavu.

Je potřeba poznamenat, že stejnosměrný proud tekoucí invertorem se může lišit a je závislý na vstupních a výstupních hodnotách napětí. Předpokládejme, že hodnota vstupního napětí je v log. 0 pro 50% operací a log. 1 pro dalších 50 % operací. Potom celková statická spotřeba je dána vztahem

( ) ( )[ ]highVIlowVIV

P inDCinDCDD

DC =+=⋅=2

( 6.4 )

V dalších kapitolách bude popsáno, jak se liší stejnosměrná spotřeba u jednotlivých typů invertorů a tyto odlišnosti se můžou stát velice důležitým faktorem při výběru konkrétního obvodového řešení.

Pokud bude požadavek zmenšení plochy na čipu, tak jediným možným krokem ke zmenšení plochy na čipu je zmenšení šířky W a délky L kanálu MOS tranzistoru. Z následujícího tvrzení vyplývá, že bude snaha, aby se poměr W/L co nejvíce blížil 1.

6.2 CMOS invertor

Všechna obvodová řešení invertorů vycházela ze zobecněné struktury (Obr. 6.3), která NMOS tranzistor s indukovaným kanálem a zatěžovací obvod., který může být realizován odporem, tranzistorem NMOS s indukovaným kanálem nebo tranzistorem NMOS s trvalým kanálem. V této zobecněné struktuře bylo vstupní napětí vždy připojeno na terminál gate řídícího tranzistoru a invertor byl primárně ovládán pouze tímto řídícím tranzistorem.

Nyní budeme věnovat pozornost radikálně odlišné struktuře invertoru, která se skládá z NMOS tranzistoru s indukovaným kanálem (dále jen NMOS tranzistor) a z PMOS tranzistoru s indukovaným kanálem (dále jen PMOS tranzistor). Na Obr. 6.7 je zobrazeno zapojení CMOS invertoru. U tohoto zapojení se jedná o komplementární zapojení MOS tranzistorů.

Page 33: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 33

Obr. 6.7: CMOS invertor

Na Obr. 6.8 je náhradní schéma CMOS invertoru. Pro velká vstupní napětí tranzistor NMOS stahuje výstupní napětí k zemi a PMOS tranzistor funguje jako zatěžovací obvod. Pro malá vstupní napětí tranzistor PMOS stahuje výstupní napětí k VDD a NMOS tranzistor funguje jako zatěžovací obvod.

CMOS invertor má dvě významné výhody oproti ostatním typům invertoru. První a téměř jedna z nejdůležitějších vlastností je, že má téměř zanedbatelnou stejnosměrnou výkonovou spotřebu. Další výhodou je, že převodní charakteristika je v rozsahu 0 až VDD a má velikou strmost, tudíž je možné dosáhnout velkých šumových rezerv. Potom se převodní charakteristika podobá převodní charakteristice ideálního invertoru. CMOS výrobní proces je o něco více komplexní než klasický NMOS proces. CMOS proces musí poskytovat pro tranzistor NMOS p-substrát typu p a pro tranzistor PMOS n-substrát. To může být docíleno tím, že se použije p-substrát a n-well jáma nebo se může použít n-substrát a p-well jáma. Náročnost výrobního procesu je vykompenzována zlepšením stejnosměrné výkonové spotřeby a zvýšení šumových rezerv.

Page 34: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

34 FEKT Vysokého učení technického v Brně

Obr. 6.8: Náhradní schéma CMOS invertoru

6.2.1 Analýza CMOS invertoru

Z Obr. 6.8 je vidět, že terminál gate obou tranzistorů je společně připojen na vstupní napětí Vin. Potom jsou oba tranzistory jsou přímo řízeny vstupním napětím Vin. Substrát tranzistoru NMOS je připojen na zem. Substrát tranzistoru PMOS je připojen na napájecí napětí VDD. Z toho vyplývá, že napětí VSB=0 u obou typů tranzistorů a tím pádem se u toho typu invertoru neprojevuje vliv napětí VSB na prahové napětí tranzistoru NMOS a PMOS. Z Obr. 6.8 je možné napsat

outnDS

inNGS

VVVV

=

=

,

, ( 6.5 )

a také

)()(

,

,

outDDPDS

inDDPGS

VVVVVV

−−=

−−= ( 6.6 )

Nyní začneme analyzovat invertor z hlediska dvou jednoduchých případů. Pokud bude

vstupní napětí menší než prahové napětí NMOS tranzistoru (Vin<VT0,N), potom je tranzistor NMOS uzavřen. Ve stejný okamžik pracuje tranzistor PMOS v lineárním režimu. Potom platí podmínka pro protékající proud, že

0,, == PDND II ( 6.7 )

Page 35: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 35

Výstupní napětí je v tomto případě vyjádřeno jako

DDOHout VVV == ( 6.8 )

Na druhou stranu, pokud vstupní napětí přesáhne hodnotu, pak je tranzistor PMOS uzavřen. V tomto případě pracuje tranzistor NMOS v lineárním režimu. Napětí VDS NMOS tranzistoru je ale rovno 0, protože je platí podmínka ID,N=ID,P.

Výstupní napětí je v tomto případě vyjádřeno jako

0== OLout VV ( 6.9 )

Obr. 6.9: Převodní charakteristika CMOS invertoru

NMOS tranzistor pracuje v saturačním režimu, pokud je splněna podmínka Vin>VT0,N a platí následující podmínky

, 0, 0,DS GS N T N out in T NV V V V V V≥ − ⇔ ≥ − ( 6.10 )

PMOS tranzistor pracuje v saturačním režimu, pokud je splněna podmínka

Vin<VT0,N+VT0,P a platí následující podmínky

, , 0, 0,DS P GS P T P out in T PV V V V V V≤ − ⇔ ≤ − ( 6.11 )

Page 36: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

36 FEKT Vysokého učení technického v Brně

V následující tabulce jsou popsány jednotlivé oblasti, ve kterých pracuje CMOS invertor.

Tab. 6.1: Pracovní oblasti CMOS invertoru

Oblast Vin Vout NMOS PMOS

A <VT0,N VOH uzavřen lineární

B VIL ≈ VOH saturace lineární

C Vth Vth saturace saturace

D VIH ≈ VOL lineární saturace

E >(VDD+VT0,P) VOL lineární uzavřen

V oblasti A (Vin< VT0,N) je NMOS tranzistor uzavřen a výstupní napětí je rovno VOH=VDD. Jakmile se začne vstupní napětí zvyšovat nad hodnotu VT0,N (oblast B), dostává se tranzistor NMOS do saturace a tranzistor PMOS pracuje v lineárním režimu. Obvodem začne protékat proud a na výstupu začne klesat výstupní napětí. V oblasti B je vstupní napětí Vin=VIL, když platí podmínka dVout/dVin= -1. Při zvyšování vstupního napětí klesá výstupní napětí až na hranici oblasti C. V této oblasti pracují oba tranzistory v saturačním režimu. Jakmile klesne výstupní napětí Vout pod hodnotu (Vin - VT0,N), pak NMOS tranzistor začne pracovat v lineárním režimu (oblast D). V oblasti D je vstupní napětí Vin=VIH, když platí podmínka dVout/dVin= -1. Pokud bude vstupní napětí Vin>VDD+ VT0,P, pak je tranzistor PMOS uzavřen a výstupní napětí Vout=0.

Jednoduchou analogií si je možné představit tranzistory NMOS a PMOS jako neideální spínače, které jsou řízeny vstupním napětím a připojují výstupní uzel k napájecímu napětí nebo k zemi v závislosti na velikosti vstupního napětí.

6.2.2 Výpočet napětí VIL

VIL je jedno ze dvou napětí, ve kterém je směrnice převodní charakteristiky dVout/dVin = -1. NMOS tranzistor pracuje v saturačním režimu a PMOS tranzistor pracuje v lineárním režimu. Z rovnice prvního Kirchoffova zákonu platí, že ID,N=ID,P. Potom je možné napsat

( ) ( )2 2, 0, , 0, , ,2

2 2pn

GS N T N GS P T P DS P DS P

kk V V V V V V⎡ ⎤⋅ − = ⋅ ⋅ − ⋅ −⎣ ⎦ ( 6.12 )

Použitím rovnic ( 6.5) a ( 6.6) může být rovnice přepsána jako

( )

( ) ( ) ( )

20,

20,

2

22

nin T N

pin DD T P out DD out DD

k V V

kV V V V V V V

⋅ − =

⎡ ⎤= ⋅ ⋅ − − ⋅ − − −⎣ ⎦

( 6.13 )

Page 37: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 37

Nyní je potřeba obě strany derivovat podle napětí Vin.

( ) ( ) ( )

( )

0, 0,out

n in T N p in DD T P out DDin

outout DD

in

dVk V V k V V V V VdV

dVV VdV

⎡ ⎛ ⎞⋅ − = ⋅ − − ⋅ + − −⎢ ⎜ ⎟

⎢ ⎝ ⎠⎣⎤⎛ ⎞

− − ⋅ ⎥⎜ ⎟⎥⎝ ⎠⎦

( 6.14 )

Zavedeme substituci Vin =VIL a dVout/dVin = -1. Pak získáme rovnici

( ) ( )0, 0,2n IL T N p out IL T N DDk V V k V V V V⋅ − = ⋅ ⋅ − + − ( 6.15 )

Vyjádříme si napětí VIL jako funkce výstupního napětí Vout

0, 0,21

out T P DD R T NIL

R

V V V k VV

k⋅ + − +

=+

( 6.16 )

kde kR je definováno jako

nR

p

kkk

= ( 6.17 )

Rovnice pro napětí VIL musí být současně řešena s rovnicí ( 6.12). Vzniknou dvě

rovnice o dvou neznámých. Při řešení CMOS invertoru není potřeba použít numerické metody jako v předcházejícím případě, kde bylo potřeba počítat se změnou prahového napětí na změnu napětí VSB.

6.2.3 Výpočet napětí VIH

VIH je jedno ze dvou napětí, ve kterém je směrnice převodní charakteristiky dVout/dVin = -1. NMOS tranzistor pracuje v lineárním režimu a PMOS tranzistor pracuje v saturačním režimu. Z rovnice prvního Kirchoffova zákonu platí, že ID,N=ID,P. Potom je možné napsat

( ) ( )22, 0, , , , 0,2

2 2pn

GS N T N DS N DS N GS P T P

kk V V V V V V⎡ ⎤⋅ ⋅ − ⋅ − = ⋅ −⎣ ⎦ ( 6.18 )

Použitím rovnic ( 6.5) a ( 6.6) může být rovnice přepsána jako

( ) ( )220, 0,2

2 2pn

in T N out out in DD T P

kk V V V V V V V⎡ ⎤⋅ ⋅ − ⋅ − = ⋅ − −⎣ ⎦ ( 6.19 )

Page 38: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

38 FEKT Vysokého učení technického v Brně

Nyní je potřeba obě strany derivovat podle napětí Vin.

( )

( )

0,

0,

out outn in T N out out

in in

p in DD T P

dV dVk V V V VdV dV

k V V V

⎡ ⎤⎛ ⎞ ⎛ ⎞⋅ − ⋅ + − ⋅ =⎢ ⎥⎜ ⎟ ⎜ ⎟⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦

= ⋅ − −

( 6.20 )

Zavedeme substituci Vin =VIH a dVout/dVin = -1. Pak získáme rovnici

( ) ( )0, 0,2n IH T N out p IH DD T Pk V V V k V V V⋅ − + + ⋅ = ⋅ − − ( 6.21 )

Vyjádříme si napětí VIH jako funkce výstupního napětí Vout

( )0, 0,21

DD T P R out T NIH

R

V V k V VV

k+ + ⋅ ⋅ +

=+

( 6.22 )

Rovnice pro napětí VIH musí být současně řešena s rovnicí ( 6.19). Vzniknou dvě rovnice o dvou neznámých

6.2.4 Výpočet napětí Vth

Prahové napětí invertoru je definováno jako Vth=Vin=Vout. Převodní charakteristika CMOS invertoru se vykazuje vysokou strmostí a velkou šumovou rezervou, proto se prahové napětí Vth jeví jako velmi důležitý stejnosměrný parametr. Za podmínky Vin=Vout jsou oba tranzistory v saturaci, proto je možné napsat tuto rovnici

( ) ( )2 2, 0, , 0,2 2

pnGS N T N GS P T P

kk V V V V⋅ − = ⋅ − ( 6.23 )

Použitím rovnic ( 6.5) a ( 6.6) může být rovnice přepsána jako

( ) ( )2 20, 0,2 2

pnin T N in DD T P

kk V V V V V⋅ − = ⋅ − − ( 6.24 )

Korektní řešení rovnice ( 6.24) pro napětí Vin je vyjádřeno jako

( )0, 0,1

11

T N DD T PR

th

R

V V Vk

V

k

+ ⋅ +=

⎛ ⎞+⎜ ⎟⎜ ⎟

⎝ ⎠

( 6.25 )

Pokud je vstupní napětí Vin=Vth, pak může výstupní napětí Vout nabývat hodnot v rozsahu (-Vth -VT0,N) a (-Vth -VT0,P) a to díky skutečnosti, že v oblasti C má převodní

Page 39: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 39

charakteristika vertikální tvar, když bude zanedbán efekt modulace kanálu (λ=0). V reálném případě(λ>0) má převodní charakteristika v oblasti C konečnou směrnici, ale ta je i přesto velmi vysoká.

Obr. 6.10: Závislost prahového napětí CMOS invertoru na transkonduktančním poměru kR

Na Obr. 6.10 je zobrazena závislost prahového napětí CMOS invertoru na změně transkonduktančního parametru kR. Jak už bylo řečeno, CMOS invertorem neteče žádný významný proud, pokud zanedbáme pronikající proud. Tranzistory NMOS a PMOS produkují proud pouze v případě, pokud přechází výstupní napětí z nízké do vyšší úrovně a naopak. Tomu přísluší pracovní oblasti B,C a D. Na Obr. 6.11 je zobrazena závislost proudu ID na vstupním napětí Vin. Proud dosahuje nejvyšší hodnoty, když je Vin = Vth. CMOS invertorem teče maximální proud ID, pokud oba tranzistory pracují v saturaci.

Page 40: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

40 FEKT Vysokého učení technického v Brně

Obr. 6.11: Závislost proudu ID na vstupním napětí Vin CMOS invertoru

6.2.5 Návrh CMOS invertoru

Prahové napětí CMOS invertoru patří k nejdůležitějším parametrům, který určuje statické chovaní. CMOS invertor umožňuje, aby výstupní napětí pracovalo v rozsahu 0 až VDD. Tím je zajištěna relativně velká šumová rezerva.

Pokud jsou známy napájecí napětí VDD, prahová napětí tranzistoru NMOS a PMOS, pak je možné napsat rovnici požadované prahové napětí Vth CMOS invertoru a příslušný poměru kR o jako

0,

0,

1 th T N

R DD T P th

V Vk V V V

−=

+ − ( 6.26 )

Nyní vyjádříme poměr kR v závislosti na Vth. 2

0,

0,

DD T P thnR

p th T N

V V Vkkk V V

⎛ ⎞+ −= = ⎜ ⎟⎜ ⎟−⎝ ⎠

( 6.27 )

Ideální invertor má prahové napětí definováno jako

,12th ideal DDV V= ⋅ ( 6.28 )

Page 41: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 41

Zavedeme substituci a vyjádříme poměr kR ideálního invertoru jako 2

0,

0,

0.50.5

DD T Pn

p DD T Nideal

V Vkk V V

⎛ ⎞ ⎛ ⎞⋅ +=⎜ ⎟ ⎜ ⎟⎜ ⎟⎜ ⎟ ⋅ −⎝ ⎠⎝ ⎠

( 6.29 )

Pokud bude prahové napětí VT0,N=VT0,P, pak dostaneme rovnici symetrického CMOS invertoru poměru kR.

1n

symetrickýpinvertor

kk

⎛ ⎞=⎜ ⎟⎜ ⎟

⎝ ⎠ ( 6.30 )

Poměr kR je definován jako

n ox nn n n

pp ox p

p p

W WCk L L

W Wk CL L

μ μ

μ μ

⎛ ⎞ ⎛ ⎞⋅ ⋅ ⋅⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠= =⎛ ⎞ ⎛ ⎞⋅ ⋅ ⋅⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

( 6.31 )

Předpokládáme, že tloušťka oxidu tox a kapacita oxidu Cox jsou stejná pro oba typy tranzistoru. Pro symetrický invertor je možné rovnici upravit jako

2

2

230 cm / V s650 cm / V s

pn

n

p

WL

WL

μμ

⎛ ⎞⎜ ⎟ ⋅⎝ ⎠ = ≈

⋅⎛ ⎞⎜ ⎟⎝ ⎠

( 6.32 )

Potom

3p n

W WL L

⎛ ⎞ ⎛ ⎞≈ ⋅⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

( 6.33 )

Přenosová charakteristika CMOS invertoru v závislosti na poměru kR je zobrazena na Obr. 6.12. Z obrázku je vidět, jak dochází k posunutí prahového napětí CMOS invertoru.

Page 42: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

42 FEKT Vysokého učení technického v Brně

VDD0

VDD

Vout [V]

Vin [V]

kR = 4

kR = 1

kR = 0.25

VDD/2 Obr. 6.12: Přenosová charakteristika CMOS invertoru v závislosti na poměru kR

Pro symetrický invertor CMOS, kdy VT0,n=VT0,p a poměr kR=1, pak je důležité napětí VIL je vyjádřeno z rovnice ( 6.16 ) jako

( )0,1 3 28IL DD T nV V V= ⋅ ⋅ + ⋅ ( 6.34 )

Napětí VIH je určeno z rovnice ( 6.22 ) jako

( )0,1 5 28IH DD T nV V V= ⋅ ⋅ + ⋅ ( 6.35 )

U symetrického CMOS invertoru je suma napětí VIL a VIH vždy rovna VDD.

IL IH DDV V V+ = ( 6.36 )

Šumové rezervy NML a NMH jsou vyjádřeny jako

L IL OL IL

H OH IH DD IH

L H IL

NM V V VNM V V V VNM NM V

= − == − = −= =

( 6.37 )

Page 43: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 43

Příklad 6.1 U CMOS invertoru spočítejte důležitá napětí VIL,VIH, Vth a šumové rezervy NML, NMH.

VDD = 3.3 V

VT0,n = 0.6 V

VT0,p = -0.7 V

kn = 200 μA/V2

kp = 80 μA/V2

Řešení: 1) Pro výpočet napětí VIL jsou potřeba tyto rovnice

0, 0,21

out T P DD R T N

R

V V V k Vk

⋅ + − ++

( ) ( ) ( ) ( )2 20, 0,2

2 2pn

in T N in DD T P out DD out DD

kk V V V V V V V V V⎡ ⎤⋅ − = ⋅ ⋅ − − ⋅ − − −⎣ ⎦

Ze zadání vyplývá, že kR=2.5. Prahové napětí VT0,n=|VT0,p|. V tomto případě se nejedná o symetrický CMOS invertor. Jak bylo popsáno výše, u CMOS invertoru je VOL=0 a VOH=3.3 V.

0, 0,21

2 0.7 3.3 1.5 0.57 0.711 2.5

out T P DD R T NIL

R

outout

V V V k VV

kV V

⋅ + − += =

+⋅ + − +

= = ⋅ −+

Zavedeme substituci

( ) ( ) ( ) ( )2 22.5 0.57 0.71 0.6 2 0.57 0.71 3.3 0.7 3.3 3.3out out out outV V V V⋅ ⋅ − − = ⋅ ⋅ − − + ⋅ − − −

Získáme kvadratickou rovnici 20.67 0.05 6.67 0out outV V⋅ + ⋅ − =

Výsledkem kvadratické rovnice jsou dvě hodnoty napětí Vout

3.18 V3.11VoutV

−⎧= ⎨

Jediným možným fyzikálním řešení je Vout=3.11 V. Příslušné vstupní napětí VIL k tomuto výstupnímu napětí je

Page 44: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

44 FEKT Vysokého učení technického v Brně

0.57 3.11 0.71 1.08 VILV = ⋅ − =

2) Pro výpočet napětí VIH jsou potřeba tyto rovnice:

( )0, 0,21

DD T P R out T NIH

R

V V k V VV

k− + ⋅ ⋅ +

=+

( ) ( )220, 0,2

2 2pn

in T N out out in DD T P

kk V V V V V V V⎡ ⎤⋅ ⋅ − ⋅ − = ⋅ − −⎣ ⎦

Vyjádříme vstupní napětí VIH v závislosti na výstupním napětí Vout.

( )

( )

0, 0,

0,

21

3.3 0.7 2.5 21.43 1.17

1 2.5

DD T P R out T nIH

R

out T nout

V V k V VV

k

V VV

− + ⋅ ⋅ += =

+

− + ⋅ ⋅ += = ⋅ +

+

Zavedeme substituci

( ) ( )222.5 2 1.43 1.17 0.6 1.43 1.43out out out outV V V V⎡ ⎤⋅ ⋅ + − ⋅ − = ⋅ −⎣ ⎦

Získáme kvadratickou rovnici 22.61 6.94 2.05 0out outV V⋅ + ⋅ − =

Výsledkem kvadratické rovnice jsou dvě hodnoty napětí Vout

2.93 V0.27 VoutV

−⎧= ⎨

Jediným možným fyzikálním řešení je Vout=0.27 V. Příslušné vstupní napětí VIH k tomuto výstupnímu napětí je

1.43 0.27 1.17 1.56 VIHV = ⋅ + =

3) Výpočet prahového napětí Vth

Page 45: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 45

( ) ( )0, 0,1 10.6 3.3 0.7

2.5 1.37 V11 11

2.5

T N DD T PR

th

R

V V Vk

V

k

+ ⋅ + + ⋅ −= = =

⎛ ⎞ ⎛ ⎞++⎜ ⎟ ⎜ ⎟⎜ ⎟

⎝ ⎠⎝ ⎠

4) Nyní vyjádříme šumové rezervy daného CMOS invertoru

1.08 V1.75 V

L IL OL

H OH IH

NM V VNM V V

= − == − =

6.2.6 Vliv napájecího napětí CMOS invertoru

V této kapitole bude popsán vliv napájecího napětí VDD na přenosovou charakteristiku CMOS invertoru. Celková výkonová spotřeba je v jakémkoliv digitálním systému silně závislá na velikosti napájecího napětí VDD. Dnešním současným trendem při návrhu digitálních integrovaných obvodů je hlavně redukce napájecího napětí, zejména pak v přenosných zařízeních k dosažení co nejmenší výkonové spotřeby. Je potřeba se zamyslet, kam až je možné napájecí napětí snižovat, aby byl zachován plnohodnotný výkon digitálních systémů.

Na CMOS invertoru bude ukázáno, že může dojít k významné redukci napájecího napětí, aniž by byla porušena funkce CMOS invertoru za dodržení určitých důležitých podmínek.

CMOS invertor pracuje korektně s napájecím napětím VDD, pokud je dodržena následující podmínka

min0, 0,DD T n T pV V V= + ( 6.38 )

Na o je zobrazena závislost změny napájecího napětí VDD na přenosovou charakteristiku CMOS invertoru. Je zajímavé, že CMOS invertor stále pracuje, i když není splněna podmínka ( 6.38 ). Pokud je napájecí napětí menší než součet obou prahových napětí tranzistorů, pak přenosová charakteristika obsahuje oblast, kdy není vodivý ani jeden z tranzistorů. Výstupní úroveň napětí je pak určena předcházejícím stavem výstupu. Přecházející výstupní úroveň napětí je uložena jako náboj ve výstupním uzlu. Přenosová charakteristika CMOS invertoru s malým napájecím napětím je zobrazena na

Page 46: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

46 FEKT Vysokého učení technického v Brně

0

Vout [V]

Vin [V]51 2 3 4

1

2

3

4

5

VDD = 5 V

VDD = 4 V

VDD = 3.3 V

VDD = 2 V (limitující případ) = VT0,n+ |VT0,n|

VT0,n = 1.0 VVT0,p = -1.0 VkR = 1

Obr. 6.13: Přenosová charakteristika v závislosti na velikosti napájecího napětí.

0

Vout [V]

Vin [V]VDD

VDD

VT0,nVDD-|VT0,p| Obr. 6.14: Přenosová charakteristika CMOS invertoru pracující s napájecím napětím menší

než v limitujícím případě

Page 47: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 47

7 CMOS invertor: dynamická charakteristika

Cíle kapitoly: Kapitola se snaží objasnit dynamické chování CMOS invertoru zejména v časové oblasti. Pochopení postupů potřebné k návrhu CMOS invertoru z hlediska časových omezení.

V této kapitole se zaměříme na dynamické chování CMOS invertor zejména v časové oblasti. Dynamické chování invertorů budeme analyzovat na základě obdélníkového vstupního generátoru a pozorováním výstupního signálu invertoru. Jedním z nejdůležitějších faktorů u digitálních integrovaných obvodů je spínací charakteristika, která určuje celkový pracovní kmitočet, se kterým může digitální systém pracovat, aniž by došlo ke ztrátě funkčnosti a výkonu. Při každém návrhu digitálního systému by měl mít návrhář na paměti, že pracovní kmitočet je jedním z nejdůležitějších parametrů určující výkon daného systému.

7.1 Úvod

Předpokládejme, že máme kaskádní zapojení dvou CMOS invertorů, jak je zobrazeno Obr. 7.1. Na obrázku jsou zobrazeny parazitní kapacity jednotlivých MOS tranzistorů. Kapacity Cgd a Cgs vznikají díky přesahu terminálu gate a příslušných difúzí. Kapacity Cdb a Csb jsou napěťové závislé kapacity. Kapacita Cg je kapacita vzniklá tenkou vrstvou oxidu pod terminálem gate. Kapacita Cint představuje parazitní kapacitu vzniklá díky propojení mezi dvěma invertoru.

VDD

Vin Vout

Cgs,p Csb,p

Cgd,p Cdb,p

Cgd,n Cdb,n

Cgs,n Csb,nCint Cg

Page 48: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

48 FEKT Vysokého učení technického v Brně

Obr. 7.1: Kaskádní zapojení CMOS invertorů s parazitními kapacitami

Předpokládejme, že na vstup prvního invertoru bude přiveden obdélníkový signál. Budeme analyzovat výstup prvního invertoru.

Analýza výstupního napětí je skutečně komplikovaná, dokonce i pro jednoduché zapojení, protože zapojení většinou obsahuje množství nelineárních napěťově závislých kapacit. Bude považovat všechny kapacity na Obr. 7.1 za lineární. Celkovou kapacitu, která je na výstupu prvního invertoru, budeme nazývat zatěžovací kapacit Cload.

, , , ,load gd n gd p db n db p int gC C C C C C C= + + + + + ( 7.1 )

Některé kapacity, které nejsou zahrnuty do celkové zatěžovací kapacity Cload, nemají vliv na průběh výstupního napětí.

Invertor s výstupní zatěžovací kapacitou je zobrazen na Obr. 6.13. Zjednodušené schéma bude sloužit pro lepší analýzu v časové oblasti. Ve skutečnosti bude analýza časové odezvy spočívat k nalezení doby, která je potřebná nabití a vybití výstupní kapacity Cload.

Obr. 7.2: CMOS invertor s výstupní celkovou zatěžovací kapacitou

7.2 Definice časových zpoždění

Typický časový průběh vstupního a výstupního napětí invertoru je zobrazen Obr. 7.3. Časová zpoždění τPHL a τPLH určují zpoždění signálu ze vstupu na výstup během změny

Page 49: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 49

z log.0 do log.1 a z log.1 do log.0. Zpoždění τPHL je definováno jako doba mezi 50% náběžné hrany vstupního signálu a 50% sestupné hrany výstupního signálu. Zpoždění τPLH je definováno jako doba mezi 50% sestupné hrany vstupního signálu a 50% nástupné hrany výstupního signálu. Ke zjednodušení analýzy budeme předpokládat, že na vstupu budeme mít ideální obdélníkový signál s nulovou dobou náběžné a sestupné hrany.

Vin [V]

VOL

V50%

t

VOHideální vstupní

signál

Vout [V]

VOL

V50%

t

VOH

PHL PLH

t1t0 t2 t3

Obr. 7.3: Vstupní a výstupní signál CMOS invertoru a jednotlivá zpoždění

Napětí V50% je definováno jako

( ) ( )50%1 12 2OL OH OL OL OHV V V V V V= + ⋅ − = ⋅ + ( 7.2 )

Zpoždění jsou definovány jako

1 0

3 2

PHL

PLH

t tt t

ττ

= −= −

( 7.3 )

Page 50: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

50 FEKT Vysokého učení technického v Brně

Průměrné zpoždění je pak vyjádřeno jako

2PHL PLH

Pτ ττ +

= ( 7.4 )

Nyní vyjádříme dobu sestupné a náběžné hrany výstupního signálu (Obr. 7.4). Doba nástupné hrany τrise je čas, kdy výstupní napětí stoupá z hodnoty V10% na hodnotu V90%. Doba sestupné hrany τfall je čas, kdy výstupní napětí klesá z hodnoty V90% na hodnotu V10%.

Obr. 7.4: Doba sestupné a nástupné hrany výstupního signálu CMOS invertoru

Napětí V10% a V90% jsou definovány jako

( )( )

10%

90%

0.1

0.9OL OH OL

OL OH OL

V V V V

V V V V

= + ⋅ −

= + ⋅ − ( 7.5 )

Doba sestupné a nástupné hrany je vyjádřena jako

fall B A

rise D C

t t

t t

τ

τ

= −

= − ( 7.6 )

7.3 Výpočet časového zpoždění CMOS invertoru

Výpočet zpoždění je založen na přepočtu průměrného kapacitního proudu při na nabíjení a vybíjení kapacitní zátěže Cload. Předpokládejme, že při změně výstupního napětí teče invertorem konstantní kapacitní průměrný proud Iavg,HL a Iavg,LH. Pak jsou časová zpoždění vyjádřena jako

( )50%

, ,

load OHload HLPHL

avg HL avg HL

C V VC VI I

τ⋅ −⋅Δ

= = ( 7.7 )

Page 51: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 51

( )50%

, ,

load OLload LHPLH

avg LH avg LH

C V VC VI I

τ⋅ −⋅Δ

= = ( 7.8 )

Pro změnu výstupního napětí z log.1 do log.0 může být průměrný kapacitní proud vyjádřen jako

[ ], 50%1 ( , ) ( , )2avg HL c in OH out OH c in OH outI i V V V V i V V V V= ⋅ = = + = = ( 7.9 )

Pro změnu výstupního napětí z log.0 do log.1 může být průměrný kapacitní proud vyjádřen jako

[ ], 50%1 ( , ) ( , )2avg LH c in OL out c in OL out OLI i V V V V i V V V V= ⋅ = = + = = ( 7.10 )

Zatímco průměrná proudová metoda je relativně jednoduchá k minimalizaci výpočtu, ale je zde bohužel zanedbána změna kapacitního proudu, která vzniká během změny výstupního napětí. Proto nemůžeme očekávat, že tato metoda poskytne určitý přesný odhad časových zpoždění. Tento přístup je tedy nevhodný a není doporučován při kalkulaci časových zpoždění.

Přesnější metoda pro určení časových zpoždění je použití stavové rovnice v časové oblasti pro výstupního uzel. Zapíšeme diferenciální rovnici

, ,out

load c D P D NdVC i i i

dt= = = − ( 7.11 )

Z rovnice je vidět, že kapacitní proud je nyní funkcí výstupního napětí. To v předcházející průměrné metodě nebylo.

Nyní budeme analyzovat tyto dva případy.

7.3.1 Vstupní napětí přechází z log.0 do log.1

Na počátku je výstupní napětí Vout=VOH=VDD. Tranzistor NMOS je otevřený a začne se vybíjet výstupní zatěžovací kapacita Cload. Ve stejný okamžik je tranzistor PMOS zavřený.

, 0D Pi ≈ ( 7.12 )

Zapojení CMOS invertoru může být zjednodušeno, tak že PMOS tranzistor vypustíme a bude zde pouze NMOS tranzistor a zatěžovací kapacita Cload.

Page 52: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

52 FEKT Vysokého učení technického v Brně

Obr. 7.5: Zjednodušené schéma CMOS invertoru při změně Vin z úrovně L do H

Diferenciální rovnice může být napsána jako

,out

load D NdVC i

dt= = − ( 7.13 )

Všechny typy invertoru, které byly uvedeny v předcházející kapitole, mohou použít tuto rovnici k výpočtu časových zpoždění pro daný případ změny vstupního napětí z L-H. A to proto, že proud, který protéká zátěží je zanedbatelný vůči proudu, který protéká řídícím tranzistorem.

Na Obr. 7.6 je zobrazeno vstupní a výstupní napětí pro změnu výstupního napětí z úrovně H do L.

( ),'

1 0 2,

2 load T N

n OH T N

C Vt t

k V V

⋅ ⋅− =

⋅ − ( 7.14 )

V čase t=t’1 je výstupní napětí Vout=VDD-VT,N a tranzistor NMOS přechází se saturačního režimu do lineární oblasti.

( )

( )

2, ,

2, ,

22

2 , kde2

nD N in T N out out

nOH T N out out out OH T N

ki V V V V

k V V V V V V V

⎡ ⎤= ⋅ − ⋅ − =⎣ ⎦

⎡ ⎤= ⋅ − ⋅ − ≤ −⎣ ⎦

( 7.15 )

Page 53: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 53

Vout [V]

t

Vin [V]

t

VOL

VOH

VOH

VOH-VT,N

V50%

PHL

NMOS v saturaci

NMOS v lineárním režimu

t1t0 t'1 Obr. 7.6: Vstupní a výstupní napětí při změně výstupního napětí z úrovně H do L

Řešení rovnice ( 7.13 ) v časovém intervalu t1 až t’1 je pak vyjádřeno jako

( )

1 50%

'1 ,

50%

,

,

2,

1

122

out

out OH T N

out

out OH T N

t t V V

load outt t V V VD N

V V

load outV V Vn OH T N out out

dt C dVi

C dVk V V V V

= =

= = −

=

= −

⎛ ⎞= − ⋅ =⎜ ⎟⎜ ⎟

⎝ ⎠⎛ ⎞⎜ ⎟= − ⋅ ⋅⎜ ⎟⎡ ⎤⋅ ⋅ − ⋅ −⎣ ⎦⎝ ⎠

∫ ∫

∫ ( 7.16 )

Řešením tohoto integrálu je

( ) ( )

50%

,

'1 1

, ,

2 1 ln2 2

out

out OH T N

V V

load out

n OH T N OH T N outV V V

C Vt tk V V V V V

=

= −

⎛ ⎞⋅− = − ⋅ ⋅ ⎜ ⎟⎜ ⎟⋅ − ⋅ − −⎝ ⎠

( 7.17 )

( )( ), 50%'

1 150%,

2ln OH T Nload

n OH T N

V V VCt tVk V V

⎛ ⎞⋅ − −− = ⋅ ⎜ ⎟⎜ ⎟⋅ − ⎝ ⎠

( 7.18 )

Page 54: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

54 FEKT Vysokého učení technického v Brně

Celkové časové zpoždění τPHL je pak vyjádřeno z rovnic ( 7.14 )a ( 7.18 ) jako

( )( ),,

,,

42ln 1OH T NT Nload

PHLOH T N OH OLn OH T N

V VVCV V V Vk V V

τ⎡ ⎤⎛ ⎞⋅ −⋅⎢ ⎥= ⋅ + −⎜ ⎟⎜ ⎟− +⋅ − ⎢ ⎥⎝ ⎠⎣ ⎦

( 7.19 )

Zavedeme substituci VOH=VDD a VOL=0, pak je rovnice ( 7.19 ) vyjádřena jako

( )( ),,

,,

42ln 1DD T NT Nload

PHLDD T N DDn DD T N

V VVCV V Vk V V

τ⎡ ⎤⎛ ⎞⋅ −⋅⎢ ⎥= ⋅ + −⎜ ⎟⎜ ⎟−⋅ − ⎢ ⎥⎝ ⎠⎣ ⎦

( 7.20 )

Příklad 7.1 VDD=3.3V. V-A charakteristika NMOS tranzistoru je definována: když VGS=3.3V, pak proud ID=Isat=2mA pro VDS≥2.5V. Přivádíme vstupní signál, který se má skokovou změnu z 0V na 3.3V. Vypočítejte časové zpoždění τPHL výstupního napětí CMOS invertoru z počáteční hodnoty 3.3V do 1.65V. Na výstupu CMOS invertoru předpokládejte zatěžovací kapacitu Cload=300 fF.

Řešení:

Při řešení bude použito schéma na Obr. 7.5. Předpokládáme, že NMOS tranzistor pracuje v saturaci v čase t=0 do t=t’1= tsat. V řase do t=t2=tdelay pracuje NMOS tranzistor v lineárním režimu. Z definice V-A charakteristiky NMOS tranzistoru vyplývá, že prahové napětí NMOS tranzistoru VT,N=0.8 V.

Proudová rovnice pro saturační režim je vyjádřena jako

( )2,2

out nload D sat OH T N

dV kC i I V Vdt

⋅ = − = − = − ⋅ −

Nyní spočítáme čas, kdy pracuje NMOS v saturačním režimu

2.5

0 3.3

sat out

out

t t V loadoutt V

D

Cdt dVI

= =

= =

⎛ ⎞= − ⎜ ⎟

⎝ ⎠∫ ∫

15

3

0.8 300 10 120ps2 10

loadsat

sat

V CtI

Δ ⋅ ⋅ ⋅= = =

Vyjádříme si transkonduktanční parametr kn

( ) ( )

33 2

2 2,

2 2 2 10 0.64 10 A/V3.3 0.8

satn

OH T N

IkV V

−−⋅ ⋅ ⋅

= = = ⋅−−

Page 55: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 55

Nyní spočítáme čas, kdy pracuje NMOS v lineárním režimu

( ) 2,2

2out n

load D OH T N out outdV kC I V V V V

dt⎡ ⎤⋅ = − = − ⋅ ⋅ − ⋅ −⎣ ⎦

( )1.65

22.5,

122

delay out

sat out

t t V

load outt t Vn OH T N out out

dt C dVk V V V V

= =

= =

⎛ ⎞⎜ ⎟= − ⋅⎜ ⎟⎡ ⎤⋅ − ⋅ −⎣ ⎦⎝ ⎠

∫ ∫

( ) ( )

( )( ) ( )

( )

1.65

, ,2.5

, 1.65 , 2.5

1.65 2.5,

12

3

1 ln2

2 21 ln ln

0.3 10 1 5ln0.64 10 3.3 0.8

out

out

V

laod outdelay sat

n OH T N OH T N outV

OH T N OH T Nlaod

n OH T N

C Vt tk V V V V V

V V V V V VCk V VV V

=

=

⎛ ⎞− = − ⋅ ⋅ =⎜ ⎟⎜ ⎟− ⋅ − −⎝ ⎠

⎡ ⎤⎛ ⎞ ⎛ ⎞⋅ − − ⋅ − −⎢ ⎥= ⋅ ⋅ − =⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟− ⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦

⋅ −= ⋅ ⋅

⋅ −1.65 5 2.5ln 133ps

1.65 2.5⎡ ⎤−⎛ ⎞ ⎛ ⎞− =⎜ ⎟ ⎜ ⎟⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦

Časové zpoždění τPHL CMOS invertoru je pak rovno

120 133 253psPHL delaytτ = = + =

Průměrovou proudovou metoda může být také použita pro celkem přesný výpočet doby sestupné hrany τfall a nástupné hrany τrise. Průměrná proudová metoda je velmi jednoduchá výpočet, ale není samozřejmě tak přesná jako diferenciální metoda ukázaná v předchozím příkladu. V následujícím příkladě je srovnaní obou metod.

Příklad 7.2 VDD=5V. Určete dobu sestupné hrany τfall pro napětí v rozsahu Vout=V90%=4.5V a Vout=V90%=0.5V. Použijte průměrnou proudovou a diferenciální metodu. Výstupní zatěžovací kapacita Cload=1pF. NMOS tranzistor má tyto parametry: μCox=k’n=20 μA/V2, (W/L)n=10, VT,N=1V.

Řešení: 1) metoda průměrného proudu

Použijeme rovnici ( 7.9 ) pro výpočet průměrného proudu při vybíjení zatěžovací kapacity Cload.

[ ], 90% 10%1 ( , ) ( , )2avg HL c in OH out c in OH outI i V V V V i V V V V= ⋅ = = + = =

Page 56: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

56 FEKT Vysokého učení technického v Brně

[ ]

( ) ( )( )

( ) ( )( )

,

2 2, ,

62 2

1 ( 5V, 4.5V) ( 5V, 0.5V)21 22 2 21 20 10 10 5 1 2 5 1 0.5 0.5 0.9875mA2 2

avg HL c in out c in out

n nin T N in T N out out

I i V V i V V

k kV V V V V V

= ⋅ = = + = = =

⎡ ⎤= ⋅ ⋅ − + ⋅ ⋅ − ⋅ − =⎢ ⎥⎣ ⎦⋅ ⎡ ⎤= ⋅ ⋅ ⋅ − + ⋅ − ⋅ + =⎣ ⎦

Čas τfall je pak určena jako

( )129

3,

1 10 4.5 0.54.05 10 s 4.05ns

0.9875 10fall loadavg HL

VCI

τ−

−−

⋅ ⋅ −Δ= ⋅ = = ⋅ =

2) diferenciální metoda

NMOS tranzistor pracuje v saturační režimu za podmínky 4V≤Vout≤4.5V. Nyní napíšeme proudovou rovnici pro tento případ

( )2,2

out nload D sat in T N

dV kC I I V Vdt

⋅ = − = − = − ⋅ −

( ) ( ) ( )6

2 2 2, ,

20 10 10 5 1 1.6 mA2 2 2n n ox

D in T N in T Nk C WI V V V V

Lμ −⋅ ⋅

= ⋅ − = ⋅ ⋅ − = ⋅ ⋅ − =

4

0 4.5

sat out

out

t t V loadoutt V

D

Cdt dVI

= =

= =

⎛ ⎞= − ⎜ ⎟

⎝ ⎠∫ ∫

129

3

0.5 1 10 0.3125 10 s 0.3125ns1.6 10

loadsat

sat

V CtI

−−

Δ ⋅ ⋅ ⋅= = = ⋅ =

NMOS tranzistor pracuje v lineárním režimu za podmínky 4V≤Vout≤4.5V. Nyní napíšeme proudovou rovnici pro tento případ

( ) 2,2

2out n

load D OH T N out outdV kC I V V V V

dt⎡ ⎤⋅ = − = − ⋅ ⋅ − ⋅ −⎣ ⎦

( )0.5

22.5,

122

fall out

sat out

t V

load outt t Vn OH T N out out

dt C dVk V V V V

τ= =

= =

⎛ ⎞⎜ ⎟= − ⋅⎜ ⎟⎡ ⎤⋅ − ⋅ −⎣ ⎦⎝ ⎠

∫ ∫

Page 57: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 57

( ) ( )

( )( ) ( )

( )

0.5

, ,4.0

, 0.5 , 4.0

0.5 4.0,

9

6

1 ln2

2 21 ln ln

1 10 1 8 0.5ln20 10 10 5 1 0.5

out

out

V

laod outfall sat

n OH T N OH T N outV

OH T N OH T Nlaod

n OH T N

C Vtk V V V V V

V V V V V VCk V VV V

τ

=

=

⎛ ⎞− = − ⋅ ⋅ =⎜ ⎟⎜ ⎟− ⋅ − −⎝ ⎠

⎡ ⎤⎛ ⎞ ⎛ ⎞⋅ − − ⋅ − −⎢ ⎥= ⋅ ⋅ − =⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟− ⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦

⋅ −⎛ ⎞= ⋅ ⋅ ⎜⋅ ⋅ − ⎝98 4ln 3.385 10 s 3.385 ns

4−⎡ ⎤−⎛ ⎞− = ⋅ =⎟ ⎜ ⎟⎢ ⎥⎠ ⎝ ⎠⎣ ⎦

Doba sestupné hrany výstupního signálu CMOS invertoru je pak rovna

0.3125 3.385 3.695 nsfallτ = + =

7.3.2 Vstupní napětí přechází z log.1 do log.0

Pokud se mění vstupní napětí z log.1 do log.0, dochází k nabíjení zatěžovací kapacity Cload a odvození časového zpoždění τPLH je analogické jako pro časové zpoždění τPHL. V tomto případě je tranzistor NMOS uzavřen a zatěžovací kapacita Cload je nabíjena přes PMOS tranzistor.

( )( )

,

,,

,

22ln 1

loadPLH

p OH OL T P

OH OL T PT P

OH OLOH OL T P

Ck V V V

V V VVV VV V V

τ = ⋅⋅ − −

⎡ ⎤⎛ ⎞⋅ − −⋅⎢ ⎥⎜ ⎟⋅ + −⎢ ⎥⎜ ⎟+− −

⎝ ⎠⎣ ⎦

( 7.21 )

Zavedeme substituci VOH=VDD a VOL=0, pak je rovnice ( 7.21 ) vyjádřena jako

( )( ),,

,,

42ln 1DD T PT Pload

PLHDDDD T Pp DD T P

V VVCVV Vk V V

τ⎡ ⎤⎛ ⎞⋅ −⋅⎢ ⎥⎜ ⎟= ⋅ + −⎢ ⎥⎜ ⎟−⋅ − ⎝ ⎠⎣ ⎦

( 7.22 )

Pokud budou porovnány rovnice ( 7.20 ) a ( 7.22 ) a cílem bude dosáhnout stejných časových zpoždění (τPLH=τPHL) CMOS invertoru, pak musí platit následující podmínky

, , aT N T P n pV V k k= = ( 7.23 )

Při výpočtu časových zpoždění jsme zavedli do výpočtů zjednodušení pro vstupní napětí, které bylo ideální bez časového zpoždění vzestupné a sestupné hrany. Nyní budeme předpokládat, že vstupní signál nebude ideální a bude mít dobu vzestupné hrany τr a dobu sestupné hrany τf. Výpočet zpoždění výstupního napětí je v tomto případě značně složité. Ke

Page 58: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

58 FEKT Vysokého učení technického v Brně

zjednodušení výpočtu využijeme vypočet zpoždění pro ideální vstupní signál a aktuální časová zpoždění je pak vyjádřeno empiricky jako

2

, , 2r

PHL actual PHL idealττ τ ⎛ ⎞= + ⎜ ⎟

⎝ ⎠ ( 7.24 )

2

, , 2f

PLH actual PLH ideal

ττ τ

⎛ ⎞= + ⎜ ⎟

⎝ ⎠ ( 7.25 )

7.4 Návrh CMOS invertoru s časovými omezeními

Časová specifikace je u CMOS digitálních systémů jedním z nejzákladnějších parametr, který je potřeba vždy mít na pamětí pří návrhu digitálních integrovaných obvodů a určuje celkový výkon daného digitálního systému. Časová omezení je potřeba zahrnout k dalším důležitým parametrům jako jsou šumové rezervy, prahové napětí CMOS invertoru, plocha a výkonová spotřeba.

V této kapitole se zaměříme na návrh CMOS invertoru na základě specifikace časových omezení. Návrh bude zaměřen na výpočet rozměru Wn NMOS tranzistoru a Wp PMOS tranzistoru pro dané časové omezení. Budeme předpokládat, že délka kanálu Ln, a Lp bude nejmenší možná délka, která je závislá na zvolené technologii. Je potřeba poznamenat, že zatěžovací kapacita Cload bude funkcí rozměrů tranzistorů (Obr. 7.7). Se změnou rozměru se budou měnit parazitní kapacity tranzistorů.

Obr. 7.7: CMOS invertor a závislost na rozměrech tranzistorů

Page 59: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 59

Pokud budou dominantní kapacity jako je např. kapacita propojení, která je nezávislé na rozměrech tranzistorů, pak se může výpočet provádět je popsáno dále. Pro cílové časové zpoždění τPHL je poměr (Wn,Ln) vyjádřen jako

( )( ),,

,,

42ln 1DD T NT Nn load

n DD T N DDPHL ox DD T N

V VVW CL V V VC V Vτ μ

⎡ ⎤⎛ ⎞⋅ −⋅⎛ ⎞⎢ ⎥= ⋅ + −⎜ ⎟⎜ ⎟ ⎜ ⎟−⋅ ⋅ ⋅ − ⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦

( 7.26 )

Pro cílové časové zpoždění τPLH je poměr (Wp,Lp) vyjádřen jako

( )( ),,

,,

42ln 1DD T PT Pp load

p DDDD T PPLH p ox DD T P

V VVW CL VV VC V Vτ μ

⎡ ⎤⎛ ⎞⋅ −⎛ ⎞ ⋅⎢ ⎥⎜ ⎟= ⋅ + −⎜ ⎟⎜ ⎟ ⎢ ⎥⎜ ⎟−⋅ ⋅ ⋅ −⎝ ⎠ ⎝ ⎠⎣ ⎦ ( 7.27 )

Návrh CMOS invertoru pro s časovými omezeními je ukázán v následujícím příkladu.

Příklad 7.3 Navrhněte Wn a Wp CMOS invertoru podle zadaných požadavků a parametrů.

VDD= 3.3 V

μnCox = 120 μA/V2

μpCox = 60 μA/V2

L = 0.6 μm pro typy tranzistorů

VT0,N = 0.8 V

VT0,P = - 1.0 V

Wmin = 1.2 μm

Požadavky:

• Vth = 1.5 V

• Časová zpoždění τPHL ≤ 0.2 ns a τPLH ≤ 0.15 ns

• Zpoždění výstupního napětí tdelay ≤ 0.35 ns při změně z 2 V na 0.5 V . Na výstupu předpokládáme zatěžovací kapacitu Cload = 300 fF

Řešení: Nejprve nalezneme minimální rozměry pro daná časová omezení

Page 60: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

60 FEKT Vysokého učení technického v Brně

( )( )

( )( )

,,

,,

15

9 6

42ln 1

4 3 0.8300 10 2 0.8 ln 1 7.90.2 10 120 10 3 0.8 3 0.8 3

DD T NT Nn load

n DD T N DDPHL ox DD T N

V VVW CL V V VC V Vτ μ

− −

⎡ ⎤⎛ ⎞⋅ −⋅⎛ ⎞⎢ ⎥= ⋅ + − =⎜ ⎟⎜ ⎟ ⎜ ⎟−⋅ ⋅ ⋅ − ⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦

⎡ ⎤⎛ ⎞⋅ −⋅ ⋅= ⋅ + − =⎢ ⎥⎜ ⎟⋅ ⋅ ⋅ ⋅ − −⎢ ⎥⎝ ⎠⎣ ⎦

( )( )

( )( )

,,

,,

15

9 6

42ln 1

4 3 1300 10 2 1 ln 1 25.20.15 10 60 10 3 1 3 1 3

DD T PT Pp load

p DDDD T PPLH p ox DD T P

V VVW CL VV VC V Vτ μ

− −

⎡ ⎤⎛ ⎞⋅ −⎛ ⎞ ⋅⎢ ⎥⎜ ⎟= ⋅ + − =⎜ ⎟⎜ ⎟ ⎢ ⎥⎜ ⎟−⋅ ⋅ ⋅ −⎝ ⎠ ⎝ ⎠⎣ ⎦⎡ ⎤⎛ ⎞⋅ −⋅ ⋅

= ⋅ + − =⎢ ⎥⎜ ⎟⋅ ⋅ ⋅ − −⎢ ⎥⎝ ⎠⎣ ⎦

NMOS tranzistor pracuje v lineární oblasti, když výstupní napětí klesá ze 2 V na 0.5 V. Proudová rovnice je vyjádřena jako

( ) 2,2

2out n ox

load OH T N out outdV CC V V V V

dtμ ⋅ ⎡ ⎤⋅ = − ⋅ ⋅ − ⋅ −⎣ ⎦

( )0.5

20 2.00,

122

delay out

out

t t V

load outt Vn ox OH T N out out

dt C dVC V V V Vμ

= =

= =

⎛ ⎞⎜ ⎟= − ⋅⎜ ⎟⎡ ⎤⋅ ⋅ ⋅ − ⋅ −⎣ ⎦⎝ ⎠

∫ ∫

( ) ( )

( ) ( ) ( )

0.5

, 0,2.0

159

1 ln2

1 0.5 2ln ln3 0.8 2 3 0.8 0.5 2 3 0.8 2

300 100.35 1012

out

out

V

laod outdealy

OH T N OH T N outn Vn oxn

laoddealy

nn ox

n

C VtV V V V VWC

L

CtWCL

μ

μ

=

=

−−

⎛ ⎞= − ⋅ ⋅ ⎜ ⎟⎜ ⎟⎛ ⎞ − ⋅ − −⎝ ⎠⋅ ⋅⎜ ⎟

⎝ ⎠⎡ ⎤⎛ ⎞ ⎛ ⎞

= − ⋅ ⋅ −⎢ ⎥⎜ ⎟ ⎜ ⎟⎜ ⎟ ⎜ ⎟− ⋅ − − ⋅ − −⎛ ⎞ ⎢ ⎥⎝ ⎠ ⎝ ⎠⎣ ⎦⋅ ⋅⎜ ⎟⎝ ⎠

⋅⋅ = − [ ]

6

2.054 0.1820 10 2.2n

n

WL

⋅ − +⎛ ⎞

⋅ ⋅ ⋅⎜ ⎟⎝ ⎠

Řešení rovnice je

6.1n

n

WL

⎛ ⎞=⎜ ⎟

⎝ ⎠

Page 61: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 61

Tento poměr je menší než při výpočtu poměru s časovým omezenímτPHL. Proto jako korektní výsledek bude považován větší poměr, který bude uspokojovat obě časová omezení. Rozměry NMOS tranzistoru budou tedy Wn=4.7μm pro Ln=0.6μm.

Dalším požadavkem je velikost prahového napětí Vth CMOS invertoru.

( )0, 0,1

1.5 V11

T N DD T PR

th

R

V V Vk

V

k

+ ⋅ += =

⎛ ⎞+⎜ ⎟⎜ ⎟

⎝ ⎠

2 20,

0,

3 1 1.5 0.511.5 0.8

DD T P thnR

p th T N

V V Vkkk V V

⎛ ⎞+ − − −⎛ ⎞= = = =⎜ ⎟ ⎜ ⎟⎜ ⎟− −⎝ ⎠⎝ ⎠

6

6

120 10 7.9 0.5160 10

n oxn

R

p oxp p

WCLk

W WCL L

μ

μ

⎛ ⎞⋅ ⋅⎜ ⎟ ⋅ ⋅⎝ ⎠= = =⎛ ⎞ ⎛ ⎞⋅ ⋅ ⋅ ⋅⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠

Řešením rovnice je

31p

p

WL

⎛ ⎞=⎜ ⎟⎜ ⎟

⎝ ⎠

Tento poměr je větší než poměr, který byl vypočítán dříve. Proto jako korektní výsledek bude považován větší poměr, který bude uspokojovat obě omezení. Rozměry PMOS tranzistoru budou tedy Wp=18.6μm pro Lp=0.6μm.

7.5 CMOS kruhový oscilátor

CMOS kruhový oscilátor je typickým obvodem, ve kterém lze dobře demonstrovat astabilní chování digitálních obvodů. Na Obr. 7.8 je zobrazen příklad CMOS kruhového oscilátoru, který představuje kaskádní zapojení tří invertorů. Výstup třetího invertoru je spojen se vstupem prvního invertoru. CMOS kruhový oscilátor musí být vždy sestaven s lichého počtu CMOS invertorů. Analýza CMOS kruhového oscilátoru je maličko složitější, protože se jedná o astabilní digitální obvod. V této kapitole bude názorně ukázán vliv časových zpoždění každého invertoru.

Page 62: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

62 FEKT Vysokého učení technického v Brně

1 1 11 2 3

V1 V2 V3

Cload,1 Cload,2 Cload,3

Obr. 7.8: CMOS kruhový oscilátor se třemi CMOS invertory

V [V]

V2 V1 V3 V2 V1

VOL

VOH

V50%

PHL2 PHL3 PHL1 PHL2 PHL3 PHL1

T

t

Obr. 7.9: Časové průběhy CMOS kruhového oscilátoru se třemi CMOS invertory

Na Obr. 7.9 jsou znázorněny napěťové průběhy CMOS kruhového oscilátoru. Jestliže výstupní napětí V1 prvního invertoru roste z hodnoty VOL na hodnotu VOH, tak toto napětí řídí výstupní napětí V2 druhého invertoru, které klesá z hodnoty VOH k hodnotě VOL. Rozdíl mezi těmito dvěmi napětími v hodnotě V50% představuje zpoždění t druhé invertoru. Když výstupní napětí druhého invertoru klesá, tak toto napětí řídí výstupní napětí třetího invertoru, které roste z hodnoty VOL na hodnotu VOH. Rozdíl mezi těmito dvěmi napětími v hodnotě V50% představuje zpoždění t třetího invertoru. Podobně je to i s prvním invertorem.

V případě tří stupňového CMOS kruhového oscilátoru, je perioda T rovna součtu všech šesti zpoždění jak je vidět na Obr. 7.9. Předpokládáme, že všechny zatěžovací kapacity jsou rovny Cload,1=Cload,2=Cload,3. Oscilační časová perioda T je vyjádřena jako

1 1 2 2 3 3

2 2 2 6PHL PHL PHL PHL PHL PHL

P P P P

T τ τ τ τ τ ττ τ τ τ

= + + + + + == ⋅ + ⋅ + ⋅ = ⋅

( 7.28 )

Page 63: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 63

Vztah mezi frekvenci f a libovolným lichým počtem invertorů n je vyjádřen jako

1 12 P

fT n τ

= =⋅ ⋅

( 7.29 )

Kruhový oscilátor může být použit jako velmi jednoduchý pulzní generátor. Jeho výstupní signál může být rozveden na čipu jako hlavní hodinový signál. Pro větší přesnost a stabilitu oscilační frekvence se používá krystalový oscilátor.

7.6 Dynamická výkonová spotřeba CMOS invertoru

V kap.0 byla probrána statická výkonová spotřeba CMOS invertoru, která byla naprosto zanedbatelná. Na obr. je zobrazeno schéma CMOS invertoru, na kterém bude provedena analýza dynamické výkonové spotřeby.

Obr. 7.10: CMOS invertor pro dynamickou analýzu výkonové spotřeby

Při spínaní CMOS invertoru dochází k tomu, že je výstupní zatěžovací kapacita Cload nabíjena přes PMOS tranzistor a vybíjena přes NMOS tranzistor. Budeme předpokládat, že vstupní napětí má tvar ideální tvar s nulovou dobou nástupné a sestupné hrany. Typické vstupní a výstupní průběhy a kapacitní proud jsou zobrazeny na Obr. 7.11.

Page 64: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

64 FEKT Vysokého učení technického v Brně

Vin,Vout

VOL t

VOH

0 T/2 T

T/2 T

ic

t

NMOS aktivní

PMOS aktivní

NMOS aktivní

Obr. 7.11: Typické vstupní, výstupní průběhy a kapacitní proud při spínaní CMOS invertoru

Když vstupní napětí přejde z log.0 do log.1, pak je tranzistor PMOS uzavřen a NMOS tranzistor začíná vést proud. Během této fáze začne výstupní zatěžovací kapacita Cload vybíjet přes tranzistor NMOS. Kapacitní proud se v této fázi drainovému proudu NMOS tranzistoru. Pokud vstupní napětí přejde z log.1 do log.0, pak je tranzistor NMOS uzavřen a PMOS tranzistor začíná vést proud. Během této fáze začne výstupní zatěžovací kapacita Cload nabíjet přes tranzistor PMOS. Kapacitní proud se v této fázi drainovému proudu PMOS tranzistoru.

Za předpokladu, že vstupní napětí bude periodické, pak bude i výstupní napětí periodické, pak je průměrná výkonová spotřeba dána vztahem

( ) ( )0

1 T

avgP v t i t dtT

= ⋅ ⋅∫ ( 7.30 )

Během spínaní CMOS invertoru, dochází k tomu, že NMOS tranzistor a PMOS tranzistor vede proud pouze vždy jen v jedné půl-periodě.

Page 65: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 65

Průměrná výkonová spotřeba je pak vyjádřena jako

( )/ 2

0 / 2

1 T Tout out

avg out load DD out loadT

dV dVP V C dt V V C dtT dt dt

⎡ ⎤⎛ ⎞ ⎛ ⎞= ⋅ ⋅ − + − ⋅⎢ ⎥⎜ ⎟ ⎜ ⎟⎝ ⎠ ⎝ ⎠⎣ ⎦

∫ ∫ ( 7.31 )

Vypočet integrálu je / 22

2

/ 20

1 12 2

T Tout

avg load DD out load load outT

VP C V V C C VT

⎡ ⎤⎛ ⎞ ⎛ ⎞⎢ ⎥= ⋅ − + ⋅ ⋅ − ⋅ ⋅⎜ ⎟ ⎜ ⎟⎢ ⎥⎝ ⎠⎝ ⎠⎣ ⎦ ( 7.32 )

21avg load DDP C V

T= ⋅ ⋅ ( 7.33 )

Průměrnou výkonovou spotřebu vyjádříme s frekvencí f 2

avg load DDP f C V= ⋅ ⋅ ( 7.34 )

Průměrná výkonová spotřeba CMOS invertoru je přímo úměrná spínací frekvencí f. Proto výhoda nízkého výkonu u CMOS obvodů se ztrácí při vysoko rychlostních operací, kde je spínací frekvence vysoká. Průměrná výkonová spotřeba je plně nezávislá na všech tranzistorových vlastnostech a rozměrech tranzistorů. Na průměrnou výkonovou spotřebu nemají vliv ani časová zpoždění, protože při průměrné výkonové spotřebě jde o nabíjení a vybíjeni zatěžovací kapacity Cload mezi hodnotami napětí VOL a VOH.

Je potřeba si uvědomit, že předcházející výpočet průměrné výkonové spotřeby byl spočítán pro ideální vstupní napětí, které má nulovou dobu nástupné sestupné hrany. Pokud by nebyl vstupní signál ideální, pak dochází k tomu, že při tomto jevu vzniká další přídavný výkon, který je způsoben proudem, který teče tranzistorem NMOS a PMOS při nástupné a sestupné hraně vstupního signálu. V tomto případě nemůže být výkonová spotřeba vypočítaná podle rovnice ( 7.34 ). Pokud je ovšem výstupní zatěžovací kapacita dostatečně vysoká, pak je možné zanedbat tento přídavný výkon způsobený neideálním vstupním signálem a pro výpočet průměrné výkonové spotřeby můžeme použít rovnici ( 7.34 ).

Page 66: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

66 FEKT Vysokého učení technického v Brně

8 Kombinační logické obvody CMOS

Cíle kapitoly: Kapitola se snaží objasnit využití kombinačních logických obvodů MOS pro návrh digitálních integrovaných obvodů. Na mnoha příkladech je tato problematika popsána a vysvětlena.

8.1 Úvod

Kombinační logické obvody vykonávají operace vstupních signálů podle Booleovi algebry a určují výstupní signály, které jsou funkcí vstupních signálů. Kombinační logické obvody jsou základními bloky využívané v digitálních systémech. V této kapitole se zaměříme na statickou a dynamickou charakteristiku různých kombinačních logických obvodů. Bude zde ukázáno, že mnoho základních principů využité při návrhu a analýze MOS invertorů, můžou být aplikovány při návrhu dalších kombinačních logických obvodů.

Jako první budou představeny kombinační logické obvody MOS s tranzistorovou NMOS zátěží s trvalým kanálem. Začneme touto oblastí a na těchto typech kombinačních logických obvodech si ukážeme podrobnou analýzu, kterou je možné použít pro další typy kombinačních logických obvodů.

Kapitola bude zaměřena na srovnání MOS kombinačních logických s tranzistorovou NMOS zátěží a CMOS kombinačních logických obvodů. Budou zde popsány výhody CMOS kombinačních logických obvodů pro návrh digitálních systémů. Následně se detailněji zaměříme na analýzu CMOS spínače, který je při návrhu kombinačních logických systémů nesdílnou součástí.

Obr. 8.1: Obecná struktura kombinačního logického obvodu

Page 67: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 67

Zobecněná struktura kombinačního logického obvodu je znázorněna na Obr. 8.1. Všechny vstupy jsou reprezentovány napěťovými uzly vztažené k zemi. Pokud bude použita pozitivní logika, pak je úroveň log.1 vyjádřena jako napětí VDD a úroveň log.0 je vyjádřena jako napětí 0. Na výstupu je připojena výstupní zatěžovací kapacita Cload, která představuje celkovou parazitní kapacitu daného obvodu v daném uzlu. Tato výstupní zatěžovací kapacita Cload představuje významnou roli pro dynamickou analýzu obvodového řešení.

8.2 Dvou-vstupové hradlo NOR

Návrh a analýza CMOS kombinačních logických obvodů je založena základních postupech, které byly popsány na MOS kombinačních logických obvodech. Na Obr. 8.2 je zobrazen dvou-vstupové hradlo NOR (NOR2). Obvod se skládá z paralelního zapojení NMOS tranzistorů a sériového zapojení PMOS tranzistorů.

Pokud je alespoň jedno ze vstupních napětí je v úrovni log.1, dojde k otevření jednoho z NMOS tranzistorů a výstupní uzel je připojen na zem, zároveň jsou PMOS tranzistory uzavřeny. Na druhou stranu, pokud jsou oba vstupní napětí v úrovni log.0, pak dojde k otevření obou PMOS tranzistorů a výstupní uzel je propojen z napájecím napětím VDD. Za stejnosměrných podmínek neprotéká hradlem NOR žádný proud pro jakoukoliv vstupní kombinaci. Výhody CMOS invertoru už byly popsány výše a stejné výhody platí pro jakýkoliv CMOS kombinační logický obvod.

Obr. 8.2: CMOS hradlo NOR2

Na výstupu hradla NOR2 můžou nastat dva případy, buď je Vout=VOL=0 nebo Vout=VOH=VDD. Tak jako u CMOS invertoru se stává důležitým parametrem pro návrh prahové napětí Vth. Nyní začneme analyzovat daný obvod pro případ, když se budou oba vstupní signály rovnat VA=VB. Dále budeme předpokládat, že rozměry NMOS tranzistorů se

Page 68: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

68 FEKT Vysokého učení technického v Brně

budou identické (W/L)n,A=(W/L)n,B a rozměry PMOS tranzistorů budou rovněž stejné (W/L)p,A=(W/L)p,B. Vliv napětí VSB na prahová napětí rovněž zanedbáme.

A B out thV V V V= = = ( 8.1 )

Z této podmínky je zřejmé, že oba NMOS tranzistory budou pracovat saturačním režimu, protože VGS=VDS. Drainový proud, který vtéká do NMOS tranzistorů je vyjádřen jako

( )2,D n th T nI k V V= ⋅ − ( 8.2 )

Nyní vyjádříme prahové napětí

,D

th T nn

IV Vk

= + ( 8.3 )

Z Obr. 8.2 je vidět, že tranzistor M3 pracuje v lineárním režimu, zatímco tranzistor M4 pracuje v saturačním režimu pro podmínku Vin=Vout.

( ) 23 , 3 32

2p

D DD th T p SD SD

kI V V V V V⎡ ⎤= ⋅ ⋅ − − ⋅ −⎣ ⎦ ( 8.4 )

( )2

4 ,2p

D DD th T p

kI V V V= ⋅ − − ( 8.5 )

Drainový proud obou PMOS tranzistorů je stejný ID3=ID4=ID. Potom

, 2 DDD th T p

p

IV V Vk

− − = ⋅ ( 8.6 )

Nyní vyjádříme prahové napětí z rovnic ( 8.3 )a ( 8.6 )

( ), ,12

( 2)112

pT n DD T p

nth

p

n

kV V V

kV NOR

kk

+ ⋅ ⋅ −=

+ ⋅

( 8.7 )

Nyní porovnáme prahové napětí CMOS invertoru a prahové napětí hradla NOR2.

( )0, 0,1

( )11

T N DD T PR

th

R

V V Vk

V INV

k

+ ⋅ +=

⎛ ⎞+⎜ ⎟⎜ ⎟

⎝ ⎠

( 8.8 )

Page 69: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 69

Pokud je kn=kp a VT,n=VT,p, potom je prahové napětí CMOS invertoru Vth=VDD/2. Pokud se dosadí stejné parametry do rovnice prahového napětí hradla NOR2, pak dostaneme

,( 2)3

DD T nth

V VV NOR

+= ( 8.9 )

Z rovnice vyplývá, že prahové napětí není rovno VDD/2. Např. VDD=5V a VT,n=VT,p=1V, pak je prahové napětí CMOS invertoru Vth(NOR2)=2V a prahové napětí hradla NOR2 Vth(INV)=2.5V.

Prahové napětí hradla NOR2 se dá také určit použitím ekvivalentního zapojení CMOS invertoru. Pokud budou oba vstupy stejné, paralelní zapojení NMOS tranzistorů bude reprezentováno jako 2kn. Sériové zapojení PMOS tranzistorů bude reprezentováno jako kp/2. Na Obr. 8.3 je zobrazeno ekvivalentní schéma CMOS invertoru, který odpovídá zapojení hradlu NOR2.

Obr. 8.3: Hradlo NOR2 a ekvivalentní zapojení CMOS invertoru

Pokud použijeme vzorec pro výpočet prahového napětí CMOS invertoru, tak pro ekvivalentní zapojení CMOS invertoru bude definován jako

( )

n

p

pTDDn

pnT

th

kk

VVk

kV

V

⋅+

−⋅⋅

+=

41

4 ,,

( 8.10 )

Page 70: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

70 FEKT Vysokého učení technického v Brně

Z rovnice ( 8.10 ) je patrné, že pokud budeme chtít navrhnout hradlo NOR2 s prahovým napětím Vth=VDD/2, pak musí být VT,n=|VT,p| a kp=4kn.

8.3 Obecná struktura hradla NOR s více vstupy

Na Obr. 8.4 je zobrazena obecná struktura N-vstupového hradla NOR. Na výstupu N-vstupového hradla NOR můžou nastat dva případy, buď je Vout=VOL=0 nebo Vout=VOH=VDD. Tak jako u CMOS invertoru se stává důležitým parametrem pro návrh prahové napětí Vth. Prahové napětí N-vstupového hradla NOR se dá určit použitím ekvivalentního zapojení CMOS invertoru. Pokud budou všechny vstupy na stejné logické úrovni, pak paralelní zapojení NMOS tranzistorů bude reprezentováno jako Nkn. Sériové zapojení PMOS tranzistorů bude reprezentováno jako kp/N. Na

Obr. 8.5 je zobrazeno ekvivalentní schéma CMOS invertoru, který odpovídá zapojení

N-vstupového hradla NOR.

Page 71: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 71

Obr. 8.4: Obecná struktura N-vstupového hradla NOR

Obr. 8.5: N-vstupové hradlo NOR a ekvivalentní zapojení CMOS invertoru

Pokud použijeme vzorec pro výpočet prahového napětí CMOS invertoru, tak pro ekvivalentní zapojení CMOS invertoru bude prahové napětí definován jako

Page 72: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

72 FEKT Vysokého učení technického v Brně

( ), ,2

21

pT n DD T p

nth

p

n

kV V V

N kV

kN k

+ ⋅ −⋅

=

+⋅

( 8.11 )

Z rovnice ( 8.10 ) je patrné, že pokud budeme chtít navrhnout N-vstupové hradlo NOR s prahovým napětím Vth=VDD/2, pak musí být VT,n=|VT,p| a kp=N2kn.

8.4 Dvou-vstupové hradlo NAND

Na Obr. 8.2 je zobrazen dvou-vstupové hradlo NAND (NAND2). Obvod se skládá ze sériového zapojení NMOS tranzistorů a paralelního zapojení PMOS tranzistorů.

Pokud jsou obě vstupní napětí v úrovni log.1, dojde k otevření obou NMOS tranzistorů a výstupní uzel je připojen na zem, zároveň jsou PMOS tranzistory uzavřeny. Na druhou stranu, pokud je alespoň jeden ze vstupního napětí v úrovni log.0, pak dojde k otevření PMOS tranzistor a výstupní uzel je propojen z napájecím napětím VDD. Za stejnosměrných podmínek neprotéká hradlem NAND žádný proud pro jakoukoliv vstupní kombinaci.

K vyjádření prahového napětí Vth hradla NAND2 využijeme předcházející poznatky, které jsou popsány u hradla CMOS NOR2.

Budeme opět předpokládat, že všechny tranzistory mají stejné rozměry (W/L)n,A=(W/L)n,B a (W/L)p,A=(W/L)p,B.

( ), ,

4

41

pT n DD T p

nth

p

n

kV V V

kV

kk

⋅+ ⋅ −

=⋅

+

( 8.12 )

Z rovnice ( 8.12 ) je patrné, že pokud budeme chtít navrhnout hradlo NAND2 s prahovým napětím Vth=VDD/2, pak musí být VT,n=|VT,p| a kn=4kp.

Page 73: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 73

VDD

NMOS

VoutVin

2kp

Vin

VDD

Vout

kp

kn

kp

kn

kn/2

Obr. 8.6: Hradlo NAND2 a ekvivalentní zapojení CMOS invertoru

8.5 Obecná struktura hradla NAND s více vstupy

Na Obr. 8.7 je zobrazena obecná struktura N-vstupového hradla NAND. Na výstupu N-vstupového hradla NAND můžou nastat dva případy, buď je Vout=VOL=0 nebo Vout=VOH=VDD. Tak jako u CMOS invertoru se stává důležitým parametrem pro návrh prahové napětí Vth.

Prahové napětí N-vstupového hradla NAND se dá určit použitím ekvivalentního zapojení CMOS invertoru. Pokud budou všechny vstupy na stejné logické úrovni, pak sériové zapojení NMOS tranzistorů bude reprezentováno jako kn/N. Sériové zapojení PMOS tranzistorů bude reprezentováno jako Nkp. Na Obr. 8.8 je zobrazeno ekvivalentní schéma CMOS invertoru, který odpovídá zapojení N-vstupového hradla NAND.

Pokud použijeme vzorec pro výpočet prahového napětí CMOS invertoru, tak pro ekvivalentní zapojení CMOS invertoru bude prahové napětí definován jako

( )2

, ,

2

1

pT n DD T p

nth

p

n

N kV V V

kV

N kk

⋅+ ⋅ −

=⋅

+

( 8.13 )

Z rovnice ( 8.13 ) je patrné, že pokud budeme chtít navrhnout hradlo NAND2 s prahovým napětím Vth=VDD/2, pak musí být VT,n=|VT,p| a kn=N2kp.

Page 74: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

74 FEKT Vysokého učení technického v Brně

Obr. 8.7: Obecná struktura N-vstupového hradla NAND

Obr. 8.8: N-vstupové hradlo NAND a ekvivalentní zapojení CMOS invertoru

Page 75: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 75

Příklad 8.1 Vypočítejte prahové Vth napětí 3-vstupového hradla NAND. Poměr pro všechny tranzistory (W/L)=10. μnCox=120μA/V2, μnCox=40μA/V2,VT,n=0.8V, VT,p=-0.9V a VDD=5V.

Řešení: Nejdříve vyjádříme transkonduktanční poměr pro 3-vstupový NAND

22 2 6

6

3 40 10 10 1.73120 10 10

p oxp p

nn ox

n

WN CN k L

Wk CL

μ

μ

⎛ ⎞⋅ ⋅ ⋅⎜ ⎟⋅ ⋅ ⋅ ⋅⎝ ⎠= = =

⋅ ⋅⎛ ⎞⋅ ⋅⎜ ⎟⎝ ⎠

Vypočítáme prahové napětí 3-vstupového hradla NAND

( ) ( )

2

, ,

2

0.8 1.73 5 0.92.9 V

1 1.731

pT n DD T p

nth

p

n

N kV V V

kV

N kk

⋅+ ⋅ −

+ ⋅ −= = =

+⋅+

Pokud bychom chtěli, aby bylo prahové napětí Vth=VDD/2 a víme, že (W/L)p=10. Dopočítáme (W/L)p

2 20,

0,

1 2.5 0.8 0.8855 0.9 2.5

th T N

R DD T P th

V Vk V V V

⎛ ⎞− −⎛ ⎞= = =⎜ ⎟ ⎜ ⎟⎜ ⎟+ − − −⎝ ⎠⎝ ⎠

1.13Rk =

2

1 p oxp

Rn ox

n

WN CL

Wk CL

μ

μ

⎛ ⎞⋅ ⋅ ⋅⎜ ⎟⎝ ⎠

=⎛ ⎞⋅ ⋅⎜ ⎟⎝ ⎠

22 6

6

3 40 10 10 341 120 10 0.885

p oxp

nn ox

R

WN CLW

L Ck

μ

μ

⎛ ⎞⋅ ⋅ ⋅⎜ ⎟⋅ ⋅ ⋅⎝ ⎠⎛ ⎞ = = ≈⎜ ⎟ ⋅ ⋅⎝ ⎠ ⋅ ⋅

Page 76: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

76 FEKT Vysokého učení technického v Brně

8.6 Komplexní kombinační logické obvody CMOS

PMOS síť musí být doplňkem NMOS sítě a naopak. Paralelní zapojení NMOS sítě koresponduje sériovému zapojení PMOS sítě. Na obr. je zobrazen jednoduchý konstrukce p-sítě a zní vytvořena korespondující n-síť. Každý řídící tranzistor představuje propojení a každý uzel je reprezentován bodem.

A

D E C

B

ZVDD

Z

GND

Obr. 8.9: Graf představující n-síť a korespondující p-síť logického obvodu

Na Obr. 8.10 jsou zobrazeny základní CMOS logické bloky.

Page 77: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 77

Obr. 8.10: Základní CMOS kombinační logické bloky

Na obr.Obr. 8.11 je zobrazeno tranzistorové zapojení funkce Chyba! Nenalezen zdroj odkazů.. Je zde rovněž zobrazena příslušná n-síť a p-síť.

Obr. 8.11: Komplexní kombinační logický obvod představující funkci Chyba! Nenalezen

zdroj odkazů.

Page 78: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

78 FEKT Vysokého učení technického v Brně

8.6.1.1 CMOS kombinační logické obvody AND-OR-INVERT(AOI)

a OR-AND-INVERT(OAI) CMOS kombinační logické obvody AOI umožňují realizovat log. funkce součet

součinů. Na druhou stranu, CMOS kombinační logické obvody OAI umožňují realizovat log. funkce součin součtů. CMOS kombinační logické obvody AOI a OAI se využívají zejména z toho důvodu, že vykazují daleko menší časová zpoždění než realizace určité logické funkce na hradlové úrovni.

Na obr. Obr. 8.12 je zobrazena funkce AOI na hradlové a tranzistorové úrovni.

1

&

&

&

A1A2A3

B1

B2

C1C2C3

Z

PMOSsíť

VDD

A1

A2

A3

B1

B2

C1

C2

C3

Z

Obr. 8.12: AOI kombinační logická funkce na hradlové a tranzistorové úrovni

Příklad 8.2 Použijte AOI kombinační logiku na tranzistorové úrovní k realizaci zadané funkce

Z A BC= +

Řešení:

První možné řešení je na . Tento výsledek není úplně ideálním řešení. Existuje řešení, které se obejde bez invertoru na výstupu.

Použijeme Booleovu algebru k úpravě zadané funkce. Řešení dané funkce na tranzistorové úrovni je na Obr. 8.14.

( ) ( )Z A BC Z A BC A B C Z A B C= + ⇒ = + = ⋅ + ⇒ = ⋅ +

Page 79: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 79

Z A BC= + Z A BC= +

Obr. 8.13: Realizace funkce zadané v Příklad 8.2

( )Z A B C

A BC

= ⋅ +

= +

Obr. 8.14: Realizace funkce zadané v Příklad 8.2

Page 80: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

80 FEKT Vysokého učení technického v Brně

8.6.2 CMOS úplná 1-bitová sčítačka

1-bitová úplná sčítačka je jedním z nejrozšířenějším obvodem, který se využívá ve všech aplikacích, kde dochází k digitálnímu zpracování signálů. Návrh bude zaměřen na realizaci 1-bitové úplné sčítačky na tranzistorové úrovni.

Pravdivostní tabulka úplné 1-bitové sčítačky je v Tab. 8.1 .

Tab. 8.1: Pravdivostní tabulka úplné 1-bitové sčítačky Cn A B S Cn+1

0 0 0 0 0

0 0 1 1 0

0 1 0 1 0

0 1 1 0 1

1 0 0 1 0

1 0 1 0 1

1 1 0 0 1

1 1 1 1 1

Z pravdivostní tabulky vyjádříme signál pro součet S a signál pro přetečení Cn+1

n n n nn nn n n n n n n n nS A B C A B C A B C A B C A B C= ⊕ ⊕ = + + +

( )1 1 1 1n n n n n n n n n n n nC A B A C B C A B C A B+ − − −= + + = + ⋅ +

( ) ( )1 n n n nn nC A B C A B+ = + ⋅ + ⋅

Funkce S může být přepsána do součtu součinů jako

( ) 1nn n n n n n n n nS A B C A B C A B C C += ⊕ ⊕ = + + + ⋅

Řešení úplné 1-bitové úplné sčítačky na hradlové úrovni je na Obr. 8.15. Místo dvou nezávislých funkcí využijeme signál Cn+1 k realizaci signálu S. Tato implementace 1-bitové úplné sčítačky maximálně redukuje velikost plochy na čipu. Na obrázku jsou také vidět ohraničené bloky, které budou použity pro realizaci 1-bitové úplné sčítačky na tranzistorové úrovní jako AOI kombinační logický obvod.

Realizace 1-bitové úplné sčítačky na tranzistorové úrovni je zobrazeno na . Zapojení na tranzistorové úrovni se skládá ze 14 NMOS tranzistorů a ze 14 PMOS tranzistorů dohromady i s výstupními CMOS invertory.

Page 81: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 81

1

&

&

1&

1

An

Bn

Cn

Cn+1

&

1

AnBnCn

S1

1

Obr. 8.15: 1-bitová úplná sčítačka na hradlové úrovni

Obr. 8.16: 1-bitová úplná sčítačka na tranzistorové úrovni

Page 82: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

82 FEKT Vysokého učení technického v Brně

8.7 Další aritmetické operace v digitálních obvodech

8.7.1 Binární odčítačka

Při odečítání dvou binárních čísel se používá dvojkový doplněk.

Příklad 8.3: Mějme dvě binární čísla A, B a vypočteme jejích rozdíl A-B pomocí dvojkového doplňku

A = 0101

B = 0011

1) Určíme dvojkový doplněk čísla B

0011

1100

+1

jednotkový doplněk

1101 dvojkový doplněk

2) Sečteme číslo A s dvojkovým doplňkem

0101

1101

+5

-3

1 0001 +2

Odčítaní dvou binárních čísel lze jednoduše navrhnout pomocí paralelní binární sčítačky. Je potřeba jeden invertovat všechny bity jednoho z operandů. Zapojení odčítačky je zobrazeno na Obr. 8.17

A3 A2 A1 A0 B3 B2 B1 B0

1 1 1

S3 S2 S1 S0

A3 A2 A1 A0 B3 B2 B1 B0

S3 S2 S1 S0

C4 C0 1

1

Obr. 8.17: Binární odčítačka pomocí dvojkového doplňku

Page 83: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 83

Čtyři invertory generují binární vektor v jednotkovém doplňku. Na výstupu paralelní binární sčítačky je korektní výsledek realizující odečet A-B. Paralelní binární sčítačka realizuje tuto operaci:

( ) 1 1A B A B A B− = + − + = + + .

8.7.2 Binární sčítačka/odčítačka

Na je zobrazeno zapojení binární sčítačky/odčítačky. Vstup C0 rozhoduje o tom, zda obvod bude pracovat jako sčítačka nebo odčítačka. Pokud je signál ADD_SUBB=0, pak obvod pracuje jako sčítačka. Výstupy obvodů XOR kopírují vstupní signál B. Pokud je signál ADD_SUBB=1, pak obvod pracuje jako odčítačka. Na výstupu obvodů XOR se objeví negace vstupního signálu B.

4-bitová sčítačka

A3 A2 A1 A0 B3 B2 B1 B0

S3 S2 S1 S0

A3 A2 A1 A0

C4' C0

S3 S2 S1 S0

B3 B2 B1 B0

ADD_SUB

Obr. 8.18: Binární sčítačka/odčítačka pomocí dvojkového doplňku

Strukturální VHDL popis daného zapojení vypadá následovně 1

2

3

4

5

6

7

8

9

10

11

12

13

library ieee ;

use ieee.std_logic_1164.all ;

use ieee.numeric_std.all;

use ieee.std_logic_unsigned.all;

entity addsub is

port (

add_sub : in std_logic;

a,b : in std_logic_vector(3 downto 0);

c4 : out std_logic;

sum : out std_logic_vector(3 downto 0)

);

end addsub;

Page 84: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

84 FEKT Vysokého učení technického v Brně

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

architecture Behavioral of addsub is

--deklarace komponenty full_add

component full_add

port (

a,b,c_in : in std_logic;

c_out, sum : out std_logic

);

end component;

--definice vnitrnich signalu

signal c : std_logic_vector(4 downto 0);

signal b_comp : std_logic_vector(3 downto 0);

begin

c(0) <= add_sub;

adders:

for i in 0 to 3 generate

b_comp(i) <= b(i) xor add_sub;

adder: full_add port map (a(i),b_comp(i),c(i),c(i+1),sum(i));

end generate;

c4 <= c(4);

end Behavioral;

8.7.3 BCD sčítačka

V některých případech je vhodné aby byl výstup binární sčítačky vyjádřen jako BCD číslo. Problém nastává v případě, kdy je výstupní 4-bitové binární číslo v rozsahu 1010(1010)-1111(1510). Rozsah BCD kódu je od 0000(010)-1001(910).

Pokud je součet čísel do hodnoty 1001, pak je BCD a binární číslo stejné. Pokud je součet větší než 1001, pak musí dojít k převodu na další BCD číslo. Mějme binární číslo 100112(1910). BCD číslo je pak vyjádřeno dvěma BCD čísly 0001BCD a 1001BCD.

Nejvýznamnější BCD číslice součtu nebude vyšší než 1, protože součet dvou BCD čísel nebude vyšší než číslo 1910.

V

Tab. 8.2 jsou zobrazeny všechny součty dvou BCD číslic(A a B) a příznaku přetečení (C).

Page 85: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 85

Tab. 8.2: Součet dvou BCD čísel v binárním a BCD tvaru

Binární součet

(A + B + C) Dekadický tvar

Upravený BCD tvar

(C + BCD)

00000 0 0 + 0000

00001 1 0 + 0001

00010 2 0 + 0010

00011 3 0 + 0011

00100 4 0 + 0100

00101 5 0 + 0101

00110 6 0 + 0110

00111 7 0 + 0111

01000 8 0 + 1000

01001 9 0 + 1001

01010 10 1 + 0000

01011 11 1 + 0001

01100 12 1 + 0010

01101 13 1 + 0011

01110 14 1 + 0100

01111 15 1 + 0101

10000 16 1 + 0110

10001 17 1 + 0111

10010 18 1 + 1000

10011 19 1 + 1001

Na je zobrazeno zapojení operace součtu dvou BCD číslic. BCD sčítačka se skládá se základní paralelní 4-bitové sčítačky a převodníku binárního čísla na BCD (BIN/BCD) číslo.

Page 86: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

86 FEKT Vysokého učení technického v Brně

převodník BIN/BCD

B3 B2 B1 B0C0

D3 D2 D1 D0C4

4-bitová sčítačka

A3 A2 A1 A0 B3 B2 B1 B0

S3 S2 S1 S0

A3 A2 A1 A0 B3 B2 B1 B0

C4' C0

C4 D3 D2 D1 D0

BCD číslice BCD číslice

BCD číslicepřetečení

Obr. 8.19: BCD sčítačka

Převodník BIN/BCD pracuje se vstupním binárním číslem následovně:

1. Příznak přetečení C je generován v případě, pokud je binární součet v rozsahu 01010 ≤ sum ≤ 10011. V upraveném BCD tvaru je součet v rozsahu 1 0000 ≤ sum ≤ 1 1001.

2. Pokud je binární součet menší nebo roven 01001, pak je výstupní číslo převodníku BIN/BCD rovno vstupnímu číslu.

3. Pokud je binární součet v rozsahu 01010 ≤ sum ≤ 10011, musí být nejnižší 4-bity vstupního binárního čísla převedeny na korektní BCD číslo. To může být provedeno přičtením čísla 01102 (610).

Příznak přetečení C4 bude roven 0 pro binární součet v rozsahu od 00000 do 01001. Příznak přetečení C4 bude roven 1 pro binární součet v rozsahu od 10000 do 10011. Pokud je příznak přetečení C4’ paralelní 4-bitové paralelní sčítačky roven 1, pak je příznak přetečení C4 převodníku BIN/BCD rovněž roven 1. Pokud je binární součet v rozsahu od 01010 do 01111, pak musí být bit MSB binárního součtu převeden na číslo 1. Vyjádříme si tento vztah příznakem přetečená C4“ a navrhneme příslušnou Karnaughovu mapu a funkci zjednodušíme.

4 3 2 3 1"C S S S S= +

Page 87: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 87

0 0 0 0

0 0 0 0

1 1 1 1

0 0 1 1

S0

S1

S2

S3

Obr. 8.20: Karnaughova mapa pro vyjádření příznaku přetečení C4“

Výsledný příznak přetečení C4 je pak vyjádřen jako součet příznaku C4’ a C4“.

4 4 4 4 3 2 3 1" ' " 'C C C C S S S S= + = + +

Zapojení příznaku přetečení C4 na hradlové úrovní je zobrazeno na Obr. 8.21 .

Obr. 8.21: Zapojení příznaku přetečení C4 na hradlové úrovní

Na Obr. 8.22 je zobrazeno zapojení úplné BCD sčítačky. Pokud je příznak přetečení C4 = 0, pak je součet S3S2S1S0 = S3’S2‘S1‘S0‘+ 0000. Pokud je příznak přetečení C4 = 1, pak je součet S3S2S1S0 = S3’S2‘S1‘S0‘+ 0110.

Page 88: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

88 FEKT Vysokého učení technického v Brně

BCD číslice BCD číslice

4-bitová sčítačka

A3 A2 A1 A0 B3 B2 B1 B0

S3 S2 S1 S0

C4' C0'

A3 A2 A1 A0 B3 B2 B1 B0

4-bitová sčítačka

A3 A2 A1 A0 B3 B2 B1 B0

S3 S2 S1 S0

C4 C0

&

1

&

S3 S2 S1 S0C4

převodníkBIN/BCD

S3' S2' S1' S0'

Obr. 8.22: Úplné zapojení BCD sčítačky

Paralelním zapojením BCD sčítaček je možné sčítat víceúrovňových BCD čísel. Na je zobrazeno schéma BCD sčítačky pro výstupní součet v rozsahu od 00000 do 19999.

B1A1B10A10B100A100B1000A1000

S1S10S100S1000S10000

4-bitovásčítačkaC4' C0'

4-bitovásčítačkaC4' C0'

4-bitovásčítačkaC4' C0'

4-bitovásčítačkaC4' C0'

BIN/BCDC0

C4

BIN/BCDC0

C4

BIN/BCDC0

C4

BIN/BCDC0

C4

Obr. 8.23: BCD sčítačka čítající v rozsahu od 00000 do 19999

Page 89: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 89

8.7.4 Násobička založena na binární sčítačce

Násobička se řadí mezi komplexní digitální obvody. Syntéza VHDL popisu záleží na vyzrálosti návrhového systému a cílové technologii. V této kapitole si ukážeme návrh jednoduché násobičky založené na binární sčítačce. Obecný zápis násobení dvou 4-bitových binárních čísel je zobrazen na .

a3 a2 a1 a0 násobenec

x b3 b2 b1 b0 násobitel

a3b0 a2b0 a1b0 a0b0

a3b1 a2b1 a1b1 a0b1

a3b2 a2b2 a1b2 a0b2

+ a3b3 a2b3 a1b3 a0b3

y7 y6 y5 y4 y3 y2 y1 y0 výsledek

Obr. 8.24: Obecný zápis násobení dvou 4-bitových binárních čísel

Algoritmus násobení se skládá z těchto základních kroků:

1. Dochází k násobení násobence (b3,b2,b1 a b0) násobitelem (A). Po násobení získáme vektory b3*A, b2*A, b1*A a b0*A. Pokud je bi=1, pak bude dílčí výsledek roven A. Pokud je bi=0, pak bude dílčí výsledek roven 0.

2. Dochází k posunutí bi*A o pozici i do leva.

3. Následně jsou sečteny všechny dílčí výsledky bi*A k dosažení konečného výsledku.

VHDL popis 8-bitové násobičky vypadá následovně. Nejprve jsou vytvořeny 8-bitové vektory bibibibibibibibi pro každý bit bi. Vektory bv0, bv1, bv2, bv3, bv4, bv5, bv6, bv7 jsou použity k vytvoření posunutých dílčích výsledků bi*A. Dílčí výsledky bi*A jsou následně sečteny k získání konečného výsledku prod. Výsledná syntéza takto navržené 8-bitové násobičky obsahuje přibližně 800 hradel.

1

2

3

4

5

6

7

8

9

10

library ieee ;

use ieee.std_logic_1164.all ;

use ieee.numeric_std.all;

use ieee.std_logic_unsigned.all;

entity mult8 is

port (

a,b : in std_logic_vector(7 downto 0);

y : out std_logic_vector(15 downto 0)

);

Page 90: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

90 FEKT Vysokého učení technického v Brně

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

end mult8;

architecture rtl of mult8 is

constant WIDTH : integer := 8;

signal au, bv0, bv1, bv2, bv3, bv4, bv5, bv6, bv7:

std_logic_vector(WIDTH-1 downto 0);

signal p0, p1, p2, p3, p4, p5, p6, p7, prod:

std_logic_vector(2*WIDTH-1 downto 0) ;

begin

au <= a;

bv0 <= (others => b(0));

bv1 <= (others => b(1));

bv2 <= (others => b(2));

bv3 <= (others => b(3));

bv4 <= (others => b(4));

bv5 <= (others => b(5));

bv6 <= (others => b(6));

bv7 <= (others => b(7));

p0 <= "00000000" & (bv0 and au );

p1 <= "0000000" & (bv1 and au ) & "0";

p2 <= "000000" & (bv2 and au ) & "00";

p3 <= "00000" & (bv3 and au ) & "000";

p4 <= "0000" & (bv4 and au ) & "0000";

p5 <= "000" & (bv5 and au ) & "00000";

p6 <= "00" & (bv6 and au ) & "000000";

p7 <= "0" & (bv7 and au ) & "0000000";

prod <= ((p0+p1)+(p2+p3))+((p4+p5)+(p6+p7));

y <= prod;

end rtl;

Efektivnější možností realizace 8-bitové násobičky je zobrazena v následujícím příkladu. Takto navržená 8-bitová násobička pracuje s dílčími výsledky. V této realizaci došlo k redukci šířky použitých sčítaček z 2n bitů na n+1 bitů. Obecný popis operace násobení dvou 4-bitových binárních čísel efektivnější metodou je zobrazen na Obr. 8.25. Výsledná syntéza takto navržené 8-bitové násobičky obsahuje přibližně 670 hradel. Nejdříve je potřeba vynásobit b0*A. Přidáním jednoho bitu na pozici MSB získáme první dílčí výsledek pp0. LSB dílčího výsledku pp0 představuje bit prod(0) konečného výsledku. Bit pp0 (0) nemá žádný

Page 91: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 91

další vliv na následující výpočty. Nyní je potřeba získat další dílčí výsledek pp1. Ten získáme součtem vektoru b0*A a horními bity přecházejícího dílčího výsledku pp0. LSB dílčího výsledku pp1 představuje bit prod(1) konečného výsledku. Bit pp1(0) nemá rovněž žádný vliv na následující výpočty. Tento proces se opakuje jak je zobrazeno na Obr. 8.25.

a3 a2 a1 a0 násobenec

x b3 b2 b1 b0 násobitel

a3b0 a2b0 a1b0 a0b0

pp04 pp03 pp02 pp01 pp00 dílčí výsledek pp0

+ a3b1 a2b1 a1b1 a0b1

pp14 pp13 pp12 pp11 pp10 dílčí výsledek pp1

+ a3b2 a2b2 a1b2 a0b2

pp24 pp23 pp22 pp21 pp20 dílčí výsledek pp2

+ a3b3 a2b3 a1b3 a0b3

pp34 pp33 pp32 pp31 pp30 dílčí výsledek pp3

pp34 pp33 pp32 pp31 pp30 pp20 pp10 pp00 výsledek

Obr. 8.25: Obecný zápis násobení dvou 4-bitových binárních čísel efektivnější metodou

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

library ieee ;

use ieee.std_logic_1164.all ;

use ieee.numeric_std.all;

use ieee.std_logic_unsigned.all;

entity mult8_1 is

port (

a,b : in std_logic_vector(7 downto 0);

y : out std_logic_vector(15 downto 0)

);

end mult8_1;

architecture rtl of mult8_1 is

constant WIDTH : integer := 8;

signal au, bv0, bv1, bv2, bv3, bv4, bv5, bv6, bv7:

std_logic_vector(WIDTH-1 downto 0);

signal pp0, pp1, pp2, pp3, pp4, pp5, pp6, pp7:

Page 92: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

92 FEKT Vysokého učení technického v Brně

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

std_logic_vector(WIDTH downto 0);

signal prod: std_logic_vector(2*WIDTH-1 downto 0) ;

begin

au <= a;

bv0 <= (others => b(0));

bv1 <= (others => b(1));

bv2 <= (others => b(2));

bv3 <= (others => b(3));

bv4 <= (others => b(4));

bv5 <= (others => b(5));

bv6 <= (others => b(6));

bv7 <= (others => b(7));

pp0 <= "0" & (bv0 and au );

pp1 <= ("0" & pp0(WIDTH downto 1)) + ("0" & (bv1 and au));

pp2 <= ("0" & pp1(WIDTH downto 1)) + ("0" & (bv2 and au));

pp3 <= ("0" & pp2(WIDTH downto 1)) + ("0" & (bv3 and au));

pp4 <= ("0" & pp3(WIDTH downto 1)) + ("0" & (bv4 and au));

pp5 <= ("0" & pp4(WIDTH downto 1)) + ("0" & (bv5 and au));

pp6 <= ("0" & pp5(WIDTH downto 1)) + ("0" & (bv6 and au));

pp7 <= ("0" & pp6(WIDTH downto 1)) + ("0" & (bv7 and au));

prod <= pp7 & pp6(0) & pp5(0) & pp4(0) & pp3(0) &

pp2(0) & pp1(0) & pp0(0);

y <= prod;

end rtl;

Následující VHDL popis představuje parametrizovanou N-bitovou násobičku efektivnější metodou s využitím dílčích výsledků. 1

2

3

4

5

6

7

8

library ieee ;

use ieee.std_logic_1164.all ;

use ieee.numeric_std.all;

use ieee.std_logic_unsigned.all;

entity mult8_1 is

GENERIC (N : integer := 8);

port (

Page 93: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 93

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

a,b : in std_logic_vector(N downto 0);

y : out std_logic_vector(2*N-1 downto 0)

);

end mult8_1;

architecture rtl of mult8_1 is

signal au : std_logic_vector(N-1 downto 0);

signal prod: std_logic_vector(2*N-1 downto 0) ;

type arr_N is array(0 to N-1) of std_logic_vector(N-1 downto 0);

signal bv : arr_N;

type arr_N1 is array (0 to N-1) of std_logic_vector(N downto 0);

signal pp : arr_N1;

begin

au <= a; -- multiplicand vector

multiplication_vectors: -- generating of multiplication vectors

FOR i IN 0 to N-1 GENERATE

bv(i) <= (others => b(i));

END GENERATE;

pp(0) <= "0" & (bv(0) and au );

partial_products:

FOR i IN 1 to N-1 GENERATE

pp(i) <= ("0" & pp(i-1)(N downto 1)) + ("0" & (bv(i) and au));

END GENERATE;

final_products:

FOR i IN 0 to N-2 GENERATE

prod(i) <= pp(i)(0);

END GENERATE;

prod(2*N-1 downto N-1) <= pp(N-1);

y<=prod;

end rtl;

Page 94: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

94 FEKT Vysokého učení technického v Brně

9 Sekvenční logické obvody CMOS

Cíle kapitoly: Kapitola se snaží objasnit využití sekvenčních logických obvodů MOS pro návrh digitálních integrovaných obvodů. Na mnoha příkladech je tato problematika popsána a vysvětlena.

9.1 Úvod

V předcházející kapitole byly popsány kombinační logické obvody MOS. Kombinační logické obvody jsou obvody, které postrádají schopnost zapamatovat si předcházející stav. Tyto obvody nemají žádnou zpětnou vazbu a jsou zařazeny mezi neregenerativní obvody. Výstupy těchto systémů v určitém okamžiku závisely tedy právě jen na stavech vstupů této sítě v témže okamžiku (přesněji před dobou danou dobou průchodu elektronickými obvody tvořícími tuto síť). Funkční závislost mezi vstupy a výstupy byla jednou provždy dána zapojením sítě a nebylo možné tuto závislost měnit jinak, než změnou zapojení. Kombinační logické systémy tedy nemají paměť, tj. nemohou v sobě uchovat informaci obsaženou ve vstupech sítě po dobu delší, než je tato informace na vstupech fyzicky přítomna.

Řada logických sítí pracuje v synchronismu s posloupností impulsů, které jsou generovány zvláštním generátorem, který není součástí této sítě. Změna stavu výstupu takové logické sítě pak závisí jednak na stavu vstupů sítě při přítomnosti impulsu, jednak může záviset na historii vstupů, tj. na jejich stavech při přítomnosti dřívějších impulsů. Takovýmto obvodům říkáme sekvenční logické systémy a řídící impulsy nazýváme hodinovými impulsy. Je zřejmé,že sekvenční obvody musí obsahovat prvky, které jsou schopny si pamatovat informace minimálně po dobu mezi dvěma hodinovými impulsy.

Řekli jsme, že principem sekvenční funkce, sekvenční logiky, je uplatnění paměťového prvku v logické síti. Paměťové chování logického obvodu lze dosáhnout různými způsoby. Vždy se však jedná o nějaké uplatněni zpětné vazby, způsobující, že vlastní obvod nepůsobí v závislosti na vstupních signálech pouze směrem "ven" na výstup, ale i sám na sebe. Tím v určitém čase nabývá specifického, tzv. vnitřního stavu. Podle něj pak reaguje (změněným způsobem) na vstupní proměnné v čase následujícím. V tom pák opět nabývá nového vnitřního stavu, vytváří se nová podmínka pro reakci obvodu na vstupní proměnné atd. V nejjednodušších sekvenčních obvodech se pro zavedeni paměťového členu používají např. i běžné články RC (monostabilní klopný obvod). Další časté použití nachází ve stejné, tentokrát staticky definované funkci známý obvod R-S. Rozsáhlejší obvody ovšem s využitím jednoduchých obvodů R-S řešit nelze, složitost jejich návrhu by mnohonásobně překračovala únosné meze. Aby vůbec bylo možno přistupovat k návrhu obecného sekvenčního obvodu systematickým způsobem, je nutno vycházet z principu synchronizace všech vzájemně navazujících stavů. Tato synchronizace se v číslicové technice zajišťuje zavedením synchronizačního, hodinového signálu. Je většinou jednoduchý, někdy však i dvou nebo několikafázový. Celá sekvence elementárních akcí je tak periodickým vzorkováním rozdělena na stejné dlouhé (ekvidistantní) časové úseky, z nichž vždy jeden právě existující (tn) a druhý navazující (tn+1) jsou vyhodnocovány a registrovány pouze v okamžiku výskytu hodinového impulsu. Pro tyto aplikace byly postupným vývojem odvozeny od obvodu R-S některé další, dnes již standardní typy klopných obvodů. Jejich společným rysem je to, že jsou synchronní. Jejich činnost je řízena taktem hodinového signálu. Jedná se především o klopné obvody typu D, J-K a Master/Slave J-K. Mezi nimi se pak ještě rozlišuji obvody se statickým a dynamickým datovým přístupem.

Page 95: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 95

9.2 Klopný obvod RS

Klopný obvod (KO) RS je bistabilní KO, který má dva stabilní stav. Na Obr. 9.1 je zobrazen jednoduchý CMOS KO RS na tranzistorové úrovni.

Obr. 9.1: CMOS KO RS na tranzistorové úrovni založený na hradlech NOR2

KO RS má dva vstupy. První vstup se značí S a představuje funkci nastavení. Druhý vstup se znační R a představuje funkci nulování.

Na Obr. 9.2 je znázorněn KO RS na hradlové úrovni. Obvod obsahuje dvě hradla CMOS NOR2.

Obr. 9.2: Klopný obvod RS na hradlové úrovni NOR2

Jestliže je vstup S v úrovni log.1 a vstup R v úrovni log.0, pak je výstup Q nastaven do úrovně log.1, zatímco výstupQ je nastaven do úrovně log.0. Výstup Q je nastaven bez ohledu na přecházející stav. Na druhou stranu, pokud je vstup R v úrovni log.1 a vstup S v úrovni

Page 96: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

96 FEKT Vysokého učení technického v Brně

log.1, výstup Q je nastaven do úrovně log.0, zatímco výstupQ je nastaven do úrovně log.1. Výstup Q je nastaven bez ohledu na přecházející stav.

Pokud oba vstupy v úrovni log.1, pak budou oba výstupy v úrovni log.0 a dochází k chybě, která vyplývá z komplementárního zapojení KO RS. Proto je tato kombinace vstupních signálu zakázaná.

Tab. 9.1: Pravdivostní tabulka KO RS založený na hradlech NOR2

S R Qn+1 n+1Q Funkce

0 0 Qn nQ přecházející stav

1 0 1 0 nastavení

0 1 0 1 nulování

1 1 0 0 zakázaný stav

Nyní se podíváme na funkci CMOS KO RS (Obr. 9.1) detailněji z hlediska NMOS tranzistorů M1,M2,M3 a M4. Pokud je na vstupu S napětí VOH a na vstupu R je napětí VOL, pak budou tranzistory M1 a M2 otevřeny. Výstupní uzel Q bude v úrovni VOL. Ve stejný okamžik budou tranzistory M3 a M4 uzavřeny a na výstupním uzlu Q bude napětí VOH. Pokud je na vstupu R napětí VOH a na vstupu S je napětí VOL, pak budou tranzistory M3 a M4 otevřeny a tranzistory M1 a M2 uzavřeny. V jsou popsány všechny operační módy tranzistorů CMOS KO RS založený na hradlech NOR2.

Tab. 9.2: Funkce tranzistorů v CMOS KO RS založeného na hradlech NOR2

S R Qn+1 n+1Q Funkce tranzistorů

VOH VOL VOH VOL M1 a M2 otevřeny, M3 a M4 uzavřeny

VOL VOH VOL VOH M1 a M2 uzavřeny, M3 a M4 otevřeny

VOL VOL VOH VOL M1, M3 a M4 uzavřeny, M2 otevřen

VOL VOL VOL VOH M1, M2 a M4 uzavřeny, M3 otevřen

Jiným způsob vyjádření CMOS KO RS je využití hradel NAND2. Na je schéma CMOS KO RS na tranzistorové úrovní založený na hradlech NAND2. Funkce je naprosto identická, s tím rozdílem, že vstupní signály S a R jsou invertovány. Na Obr. 9.4 je znázorněn KO RS na hradlové úrovni. Obvod obsahuje dvě hradla CMOS NAND2.

Page 97: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 97

Obr. 9.3: CMOS KO RS na tranzistorové úrovni založený na hradlech NAND2

Obr. 9.4: Klopný obvod RS na hradlové úrovni založený na hradlech NAND2

9.3 Klopné obvody řízené hodinovým signálem

Předcházející klopné obvody neměly zavedeny hodinový signál, proto se jim také říká asynchronní klopné obvody. Zavedením hodinového signálu do klopného obvodu se stává klopný obvod synchronním zapojením . Klopný obvod může být tímto hodinovým signálem řízen a většinou reaguje na určitou úroveň hodinového impulsu. Budeme předpokládat, že hodinový signál bude obdélníkový periodický signál.

9.3.1 Klopný obvod RS řízený úrovní hodinového signálu

Na Obr. 9.5 je zobrazen KO RS řízený úrovní hodinového signálu založený na hradlech NOR2. Z obrázku je vidět, že pokud bude úroveň hodinového signálu clk v log.0, pak KO RS

Page 98: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

98 FEKT Vysokého učení technického v Brně

nereaguje na změnu vstupních signálů R a S. Pokud bude úroveň hodinového signálu clk v log.1, pak KO RS funguje, jak bylo popsáno v přecházející kapitole.

Obr. 9.5: Klopný obvod RS řízený úrovní hodinového signálu založený na hradlech NOR2

Na Obr. 9.6 jsou zobrazeny průběhy klopného obvodu RS řízený úrovní hodinového signálu. Z obrázku je vidět, že výstup je citlivý na změnu vstupních signálů, pokud je úroveň hodinového signálu v log.1.

Obr. 9.6: Časový průběh KO RS řízený úrovní hodinového signálu založený na hradlech

NOR2

Na obr. je CMOS implementace klopného obvodu RS řízený úrovní hodinového signálu. Je potřeba poznamenat, že tato AOI implementace je lepší, než realizace na hradlové úrovní z hlediska plochy na čipu a zpoždění daného obvodu.

Page 99: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 99

Obr. 9.7: AOI implementace KO RS řízený úrovní hodinového signálu založený na

hradlech NOR2

Na Obr. 9.8 je další zapojení KO RS RS řízený úrovní hodinového signálu založený na hradlech NAND2. Blokové schéma je na .

&S

Q

&Q

R

clk

&

&

Obr. 9.8: KO RS řízený úrovní hodinového signálu založený na hradlech NAND2

Page 100: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

100 FEKT Vysokého učení technického v Brně

Obr. 9.9: Blokové schéma KO RS řízený úrovní hodinového signálu založený na hradlech

NAND2

9.3.2 Klopný obvod JK řízený úrovní hodinového signálu

Pro odstranění neurčitého stavu klopného obvodu R-S byl vyvinut tzv. dvojčinný klopný obvod JK. Na Obr. 9.10 je Blokové schéma KO JK řízeného úrovní hodinového signálu založený na hradlech NAND2.

Obr. 9.10: Blokové schéma KO JK řízeného úrovní hodinového signálu založený na hradlech

NAND2

Tab. 9.3: Detailní pravdivostní tabulka KO JK řízeného úrovní hodinového signálu

J K Qn nQ S R Qn+1 n+1Q Funkce

0 0 0

1

1

0

1

1

1

1

0

1

1

0 přecházející stav

0 1 0

1

1

0

1

1

1

0

0

0

1

1 nulování

1 0 0

1

1

0

0

1

1

1

1

1

0

0 nastavení

1 1 0

1

1

0

0

1

1

0

1

0

0

1 negace

Page 101: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 101

Na obr. je AOI implementace KO JK řízeného úrovní hodinového signálu založený na hradlech NOR2.

Obr. 9.11: AOI implementace KO JK řízený úrovní hodinového signálu založený na

hradlech NOR2

Pokud budou oba vstupy v úrovni log.1, pořád zde nastává potenciální problém, že obvod nebude stabilní. Při této kombinaci vstupních signálů dochází k tomu, že výstup Q bude oscilovat při aktivní úrovni hodinového signálu a to do té doby, pokud nenastane neaktivní úroveň hodinového signálu nebo jeden ze vstupů nepřejde do úrovně log.0. K odstranění tohoto nežádoucího problému je potřeba zajistit, aby aktivní úroveň hodinového signálu musí být menší než časové zpoždění vstupu na výstup. Toto časové omezení je velice obtížné dodržet v praktických aplikacích.

9.3.3 Klopný obvod Master-Slave JK

Nevýhody přecházejícího zapojení týkajících se časových omezeních je eliminováno zapojením Master-Slave. Zapojení se skládá z kaskádního zapojení dvou JK klopných obvodů, jak je ukázáno na Obr. 9.12. První KO JK (Master) reaguje kladnou úroveň

Page 102: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

102 FEKT Vysokého učení technického v Brně

hodinového signálu clk. Druhý KO JK (Slave) reaguje na opačnou úroveň hodinového signálu.

Obr. 9.12: Klopný obvod JK Master-Slave

9.4 CMOS klopný obvod D jako záchytný registr a řízený hranou hodinového signálu

V této kapitole se zaměříme na sekvenční logické obvody, které jsou založeny na CMOS přenosovém hradle (CMOS spínač), protože doposud popsané struktury potřebují více tranzistorů než s využitím CMOS přenosového hradla. Na Obr. 9.13 je zobrazen klopný obvod D jako záchytný registr na hradlové úrovni. Toto zapojení vzniklo jednoduchou modifikací klopného obvodu RS. V tomto zapojení je vstup D přímo připojen na vstup S a přes invertor na vstup R. Zapojení na obrázku reaguje na úroveň hodinového signálu clk=1.

Obr. 9.13: Klopný obvod D jako záchytný registr na hradlové úrovni

Záchytný klopný obvod D se využívá v mnoha aplikacích. Nyní se zaměříme na CMOS implementaci. Na Obr. 9.14 je zobrazena CMOS implementace klopného obvodu D jako záchytný registr. Zapojení obsahuje dva invertory a dva CMOS přenosové hradla.

První CMOS přenosové hradlo je řízeno hodinovým signálem clk. Druhé CMOS hradlo je řízeno negovaným hodinovým signálem clk, respektive první CMOS přenosové hradlo je otevřené pokud je hodinový signál clk=1 a druhé CMOS přenosové hradlo je otevřené pokud je hodinový signál clk=0. Tento typ záchytného registru je náchylný na časování. Celý obvod

Page 103: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 103

se může stát nestabilní. Tomuto nestabilnímu chování se říká metastabilní chování synchronizátoru.

Není-li dodržen předstih a přesah signálu D vzhledem k aktivní úrovni signálu clk, může synchronizátor přejít po této hraně do metastabilního stavu, tedy do stavu, kdy je na jeho výstupu signál s úrovní v zakázaném pásmu, a zde může teoreticky zůstat neohraničenou dobu. Ve skutečnosti dříve nebo později přejde do úrovně H nebo L – dojde k rozhodnutí (resolution) hodnoty signálu D, a pravděpodobnost, že zůstane v zakázaném pásmu klesá exponenciálně s dobou uplynulou od hrany signálu clk, která vznik metastabilního stavu vyvolala. Teoreticky však tato pravděpodobnost nikdy nedosáhne nulové hodnoty. Byla podniknuta řada pokusů o vytvoření synchronizátoru, který by měl deterministický charakter, žádný však nebyl úspěšný a dnes je všeobecně přijímáno, že jediný způsob, jak lze metastabilitu potlačit, spočívá v zavedení dostatečného zpoždění do synchronizovaného signálu tak, aby pravděpodobnost toho, že k rozhodnutí hodnoty synchronizovaného signálu dojde včas, tj. ještě před jeho vyhodnocením, a že tedy pravděpodobnost, že metastabilita způsobí nesprávné chování navazujícího synchronního systému, byla akceptovatelná – dostatečně malá.

Obr. 9.14: CMOS implementace klopného obvodu D jako záchytný registr

Na Obr. 9.15 je zobrazen klopný obvod D řízený nástupnou hranou hodinového signálu clk na hradlové úrovni

Page 104: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

104 FEKT Vysokého učení technického v Brně

Obr. 9.15: Klopný obvod D řízený nástupnou hranou hodinového signálu clk

10 Jazyk VHDL pro syntézu digitálních systémů

10.1 ÚVOD

Název VHDL představuje akronym – VHSIC Hardware Description Language. Samo označení VHSIC je další akronym představující název projektu, v rámci něhož byl jazyk VHDL zpracován, a znamená Very High Speed Integrated Circuits. I když označení VHDL v tomto kontextu není příliš přiléhavé, vžilo se a obecně se používá. Jazyk VHDL byl původně vyvinut především pro modelování a simulaci rozsáhlých systémů. Na mnoha jeho konstruktech je to znát, některé z nich nemají pro syntézu vůbec význam. Zde se však budeme zabývat především použitím jazyka VHDL k vytváření modelů určených pro syntézu číslicových systémů. České termíny budou v prvním výskytu zapsány tučně. Často tyto termíny nejsou ustálené, a proto budeme uvádět i jejich anglické ekvivalenty, které již většinou mají ustálenou podobu. Anglické termíny a často užívané fráze jsou v textu uváděny kurzívou (zpravidla v závorce). V delších zdrojových textech, které demonstrují probírané jazykové konstrukty, jsou příslušné úseky textu pro lepší přehlednost uvedeny tučně. Pro popis modelu navrhovaného systému v jazyku VHDL budeme používat termín zdrojový text nebo stručněji kód, což odpovídá často užívanému anglickému termínu code.

Page 105: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 105

Základní vlastnosti jazyka VHDL: ∗ Je to otevřený standard (open standard). K jeho použití pro sestavení návrhových systémů

není třeba licence jeho vlastníka, jako je tomu u jiných jazyků HDL (například u jazyka ABEL). To je jeden z důvodů, proč je tento jazyk v návrhových systémech často používán.

∗ Umožňuje pracovat na návrhu, aniž je předtím zvolen cílový obvod. Ten může být zvolen až v okamžiku, kdy jsou známy definitivní požadavky na prostředí, v němž má navrhovaný systém pracovat, a je možno cílový obvod měnit podle potřeby při zachování textu popisu-jícího systém, může být zvolen obvod PLD nebo FPGA. (Device-independent design.)

∗ Je možno provést simulaci navrženého obvodu na základě téhož zdrojového textu, který pak bude použit pro syntézu a implementaci v cílovém obvodu. Zdrojový text je možno zpraco-vávat v různých simulátorech a v syntetizérech různých výrobců. Odsimulovaný text může být použit v dalších projektech s různými cílovými obvody, což je podporováno hierar-chickou strukturou jazyka. Této vlastnosti jazyka se říká přenositelnost (portability) kódu.

∗ V případě úspěšného zavedení výrobku na trh lze popis modelu systému v jazyku VHDL použít jako podklad pro jeho implementaci do obvodů ASIC vhodných pro velké série.

Některé námitky proti VHDL: ∗ Jazyk VHDL je dosti „upovídaný“, jazykové konstrukty nejsou navrženy tak, aby zdrojový

text byl stručný a při popisu modelu určitého systému se setkáme s opakováním bloků stejného znění. Ty je však možno snadno vytvářet využitím kopírování a podobných možností současných editorů.

∗ V jazyku VHDL je možno vytvořit neefektivní konstrukce, efektivnost nebo její nedostatek nemusí být na první pohled ze zdrojového textu patrné. To je však vlastnost i jiných jazyků vyšší úrovně a výsledná efektivnost konstrukce závisí nejen na kvalitě programových návrhových prostředků, ale také na zkušenosti konstruktéra (návrháře). Jak vyzrávají návrhové systémy, přebírají na sebe stále větší díl potřebné dovednosti a „chytrosti“, dříve nezbytných u konstruktéra. Tyto vlastnosti samozřejmě bude konstruktér nadále potřebovat, budou však nasměrovány poněkud jinak než dříve.

Základní verze jazyka VHDL byla přijata jako standard IEEE číslo 1076 v roce 1987. Konstrukty odpovídající tomuto standardu se označují jako konstrukty jazyka VHDL-87. Podobně jako další standardy IEEE, i tento standard se v pravidelném pětiletém intervalu akutalizuje. Upravená verze standardu byla přijata v roce 1993, odkazuje se na ni jako na standard VHDL-93. Lze očekávat, že v krátké době vyjde další aktualizace, patrně s ozna-čením VHDL-98. V tomto textu je popsána především verze VHDL-87. Některé doplňky verze VHDL-93, které jsou důležité pro syntézu, jsou uvedeny s patřičným upozorněním. Vedle jazyka VHDL se setkáme také s jazykem Verilog, který má podobné použití. Uvádí se, že jazyk VHDL je rozšířený zejména v Evropě, zatímco Verilog se používá hlavně v asijských zemích. V USA se používají oba tyto jazyky.

V dále uvedených způsobech popisu různých jazykových konstruktů se někdy vyskytují slova a fráze jako „obvykle“, „měl by být“ a podobně. Tím je myšlena skutečnost, že současně vyskytující návrhové systémy jsou na různé úrovni vyzrálosti a inteligence. Systém, který by bylo možno označit jako vyspělý, bude takové konstrukty schopen zpracovat a optimalizovat bez problémů. Ne všechny současné systémy to však zvládnou. Obecně je možno říci, že čím blíže odpovídá popis skutečné fyzické realizaci popisované struktury v cí-lovém obvodu, tím pravděpodobnější je optimální výsledek syntézy. Například některé způsoby behaviorálního popisu s algoritmickým charakterem mohou působit při syntéze problémy, i když jsou syntakticky správné, protože zapojení, které má být výsledkem syntézy, žádný algoritmický charakter ve skutečnosti nemá. Začneme-li pracovat s novým systémem, je vhodné ověřit si na jednoduchých příkladech, zda syntéza probíhá podle očekávání. Někdy se může stát, že zdánlivě jasný text je syntetizován do struktury, která obsahuje nadbytečnou logiku, případně její část může být nevhodná (například s hazardy) nebo úplně nefunkční. Je

Page 106: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

106 FEKT Vysokého učení technického v Brně

však možno očekávat, že průběhem doby budou programové bloky představující nástroje pro syntézu, v angličtině zvané synthesis tools (my jim budeme říkat syntetizéry) stále dokonalejší a problémů bude čím dál méně. K přenositelnosti kódu je nutno připojit poznámku. Jazyk VHDL je velmi rozsáhlý. Byl původně určen především pro simulaci velkých číslicových systémů. Jeho použití pro syntézu číslicových systémů se začalo rozpracovávat později a využívá se při něm jen část jeho prostředků. V počátečních fázích tohoto směru využití jazyka VHDL byly vytvářeny jednoduché syntetizéry se značně omezeným rozsahem prostředků jazyka, které jimi byly podporovány. Postupně, jak syntetizéry vyspívaly, tento rozsah se rozšiřoval. Proto je možno očekávat, že základní konstrukty jazyka budou různými syntetizéry zpracovány stejně, ale neobvyklé způsoby popisu a některé vyšší jazykové struktury mohou dávat různé výsledky při zpracování různými syntetizéry. Je také nutno počítat s tím, že různé syntetizéry podporují odlišný rozsah prostředků jazyka. Postupem doby, jak budou syntetizéry vyzrávat, se patrně bude rozšiřovat oblast jazykových konstruktů využitelných v syntéze, které budou dávat výsledky syntézy skutečně nezávislé na použitých návrhových systémech. Způsoby sestavení modelu: Postup shora dolů (top-down): definuje se funkce navrhovaného systému jako celku, pak se v něm vyčlení bloky, jejichž funkce se specifikuje spolu s vzájemnou návazností jednotlivých bloků, a tyto bloky pak mohou detailně zpracovávat různí konstruktéři. Postup zdola nahoru (bottom-up): nejprve se vytvoří dílčí bloky modelu a ty se pak skládají do větších celků. Model plochého typu (flat) neobsahuje členění odpovídající výše uvedeným typům. Představuje systém jako jeden monolitický blok. První dva způsoby sestavení konstrukce se označují jako hierarchické. Jazyk VHDL hierarchičnost konstrukcí podporuje. Rozumně zvolená hierarchie usnadňuje orientaci v popisu modelu navrhovaného systému.

10.2 ZÁKLADNÍ STRUKTURA MODELU V JAZYKU VHDL

Konstrukce (model) v jazyku VHDL má dvě základní části: deklaraci entity (entity declaration) a tělo (popis) architektury (architecture body). Deklarace entity popisuje vstupy a výstupy konstrukce, popis architektury definuje její funkci. Mezery, tabulátory a znaky nového řádku slouží jako oddělovače, nemají další význam a můžeme je používat podle libosti k rozčlenění textu tak, aby byl přehledný. Příklad – model čtyřbitového komparátoru:

1 -- EqComp4 -- TXT1 2 ENTITY EqComp4 IS 3 PORT(a,b: IN bit_vector(3 DOWNTO 0); -- vstupy 4 Equals: OUT bit); -- výstup 5 END EqComp4; 6 7 ARCHITECTURE Dataflow OF EqComp4 IS 8 BEGIN 9 Equals <= '1' WHEN (a = b) ELSE '0'; 10 END Dataflow;

V příkladu jsou řádky uvedeny čísly, která nejsou součástí textu v jazyku VHDL, jsou zde jen pro usnadnění odvolávek na řádky. Vyhrazená (klíčová) slova (reserved words) jsou psána velkými písmeny – jsou to slova, jejichž význam je stanoven v definici jazyka VHDL. Význam některých dalších vícepísmenových slov je definován dalšími standardy, které rozvíjejí základní definici jazyka VHDL, užitými knihovnami ( o těch bude podrobnější informace ve stati věnované hierarchii) apod. – zde např. bit_vector nebo bit. Pro ně

Page 107: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 107

budou užívána malá písmena. Identifikátory (uživatelské symboly) slouží k označení signálů, proměnných a podobných objektů. Volí je návrhář. Identifikátor musí začínat písmenem anglické abecedy a na dalších pozicích může obsahovat písmena, číslice 0 až 9 nebo znak podtržítko. Podtržítko nesmí být posledním znakem identifikátoru, dvě po sobě následující podtržítka nejsou přípustná. Budeme je zapisovat s velkým počátečním písmenem. Pokud tyto symboly budou složeny z více částí, budou takto vyznačena jejich počáteční písmena. Jednopísmenové symboly budeme však psát malým písmem. Velká a malá písmena se v klíčových slovech a v identifikátorech nerozlišují, v některých jiných jazykových konstruktech však mohou být rozlišována. Zde budou klíčová slova psána velkými písmeny jen pro přehlednost. Standard VHDL-93 zavádí tzv. rozšířené identifikátory (extended identifiers) – jsou ohraničeny zpětnými lomítky, kde se velká a malá písmena rozlišují. Komentáře (comments) v textu VHDL začínají dvěma pomlčkami (--) a končí vždy na konci řádku; má-li komentář pokračovat na dalším řádku, musí toto pokračování opět začínat dvěma pomlčkami. (Skupinu pomlček používanou pro vyjádření nedefinovaných hodnot – don’t care – dokážou syntetizéry od symbolu komentáře rozeznat.) Deklaraci entity nazvané EqComp představují řádky 2 až 5. Na řádcích 3 a 4 jsou deklarovány vstupy komparátoru – čtyřbitové brány a a b, a jednobitový výstup Equals. Deklarace entity představuje textovou formu označení bloku, který komparátor představuje, analogickou schématické značce pro integrovaný obvod používané ve schématech. Každý prvek bitových vektorů, např. a(0), je bit, což znamená, že může nabývat hodnoty '0' nebo '1'. Apostrofy se používají při uvádění jednotlivých znaků (characters), uvozovky se pak užívají pro řetězce (strings), které umožňují zápis hodnoty bitových vektorů, např. "0101". Užitím klíčového slova DOWNTO je definováno pořadí bitů podle jejich binární váhy, takže zde je bit a(3) nejvýznamnější bit (MSB), bit a(0) nejméně významný bit (LSB) vektoru a. Při zápisu hodnoty bitového vektoru se jednotlivé číslice zapisují v obvyklém pořadí, tj. zleva (MSB) doprava (LSB). Někdy se můžeme setkat i s opačnou definicí pomocí klíčového slova TO, např. bit_vector(0 TO 3). Pak má nejvýznamnější bit index 0. Řádky 7 až 10 – tělo architektury, stručněji architektura, popisují funkci entity EqComp4. Podobně jako deklarace entity, i tělo architektury má svůj název, zde Dataflow. Oba názvy mohou, ale nemusí být totožné. K jedné deklaraci entity může být přiřazeno i více architektur s různými jmény. Například sčítačka může být sériová (s postupným přenosem) nebo paralelní, a obě tyto varianty mohou mít společnou deklaraci entity. Odpovídající architektury je pak možno odlišit různými jejich názvy. Pro přiřazení některé z architektur entitě poskytuje jazyk VHDL další prostředky, tzv. konfigurace, o kterých bude pojednáno dále. Před klíčo-vým slovem BEGIN může být zařazena deklarativní část (declarative part) architektury, v níž mohou být například deklarovány signály, za ním následuje příkazová část (statement part). Deklarace entity, architektura a další kódová uskupení definovaná v jazyku VHDL jako jsou komponenty, funkce, procedury atd., která mohou být jako celek zkompilována, uschována v knihovnách a používána v dalších konstrukcích, představují konstrukční jednotky (design units) kódu – stručně jim budeme říkat jednotky. Konstrukční jednotky vytvářené uživatelem v jazyku VHDL jsou v počítači obvykle obsaženy ve formě souborů (files). Detaily představující organizaci těchto souborů jsou specifické pro každý návrhový systém. Obecně lze říci, že nezáleží na tom, ve kterém souboru je která konstrukční jednotka obsažena. Návrhové systémy zajišťují přiřazení souborů určitému projektu obvykle pomocí uživatelského rozhraní, v němž uživatel soubory patřící k určitému projektu vyznačí a pak jsou již všechny jednotky z těchto souborů pro projekt dostupné. Deklarace entity spolu s odpovídajícím tělem architektury tvoří konstrukční entitu (design entity), stručně řečeno – entitu.

Page 108: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

108 FEKT Vysokého učení technického v Brně

10.2.1 Deklarace entity

Brány (ports) jsou v deklaraci entity deklarovány v závorce za klíčovým slovem PORT. Patří k datovým objektům. Deklarace brány se skládá ze jména brány, tj. identifikátoru příslušného signálu, a dále z určení směru jejího přenosu (mód – mode) a typu dat, která signál představují. Módy mohou být: ∗ IN – vstup; ∗ OUT – výstup (výstupní signál nemůže být použit uvnitř konstrukční entity); ∗ BUFFER – výstup se zpětnou vazbou, signál z něj může být použit uvnitř entity; ∗ INOUT – obousměrný vývod. Význam módů můžeme ilustrovat na zapojení vývodů známého obvodu GAL 16V8 – viz obr. 1.1. Módy odpovídající každé konfiguraci nakreslené na tomto obrázku jsou uvedeny nad nákresem. Brána s módem BUFFER je vybavena zpětnovazebním kanálem, tím však nemůže být do obvodu veden signál z vnějšího zdroje. Brány s módem OUT i INOUT mohou obecně být i registrové. Brány s módem OUT však nelze použít například pro výstupy čítače, protože jejich signály musí být dostupné uvnitř obvodu (vhodný je např. mód BUFFER).

Page 109: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 109

poleAND

poleAND

poleAND

poleAND

BUFFER (kombinační výstup se zpětnou vazbou):

OUT (kombinační třístavový výstup):

BUFFER (registrový výstup):

MÓD 1

MÓD 2

MÓD 3

poleAND 8 termů

OUT (jednoduchý kombinační výstup):

INOUT (kombinační obousměrný vývod):

CLK

8 termů

7 termů

7 termů

8 termů

pin

pin

pin

pin

pin

OE

TE

D

C

poleAND

IN (vstup):

pin

Obr. 1.1. Struktura vývodů u obvodu GAL 16V8 jako příklad módů bran v jazyku VHDL

Page 110: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

110 FEKT Vysokého učení technického v Brně

U některých systémů se mohou vyskytnout problémy při kompilaci textů obsahující brány s módem BUFFER. Tyto brány můžeme nahradit pomocí bran s módem OUT, jestliže jim odpovídající signál deklarujeme jako vnitřní signál (klíčové slovo SIGNAL) pod jiným identifikátorem, čímž jej učiníme dostupným uvnitř obvodu, a příslušné bráně tento vnitřní signál přiřadíme přiřazovacím příkazem. Jinou možností je přiřadit jim mód INOUT. Typy dat v jazyku VHDL mohou být velmi různorodé. K nejjednodušším patří typ bit a bit_vector, které jsme poznali v textu TXT1. Nejčastěji se užívají typy, které jsou předdefinovány v základních standardech, jako je standard IEEE 1076/93, kde je definována tzv. sloha (package) std_logic_1164. Lze ji najít v knihovně IEEE. Zde je deklarován typ dat zvaný std_logic, který může nabývat devíti hodnot, jak bude uvedeno dále, a je široce používán jak v textech VHDL psaných pro syntézu, tak i pro simulaci. Chceme-li v kódu VHDL tyto typy použít, musí zde být na jejich deklaraci odkázáno klauzulemi LIBRARY a USE. Setkáme se však i s typy definovanými přímo konstruktérem, jak uvidíme například v části věnované stavovým automatům. Podrobněji se k typům i ke slohám vrátíme později.

10.2.2 Tělo architektury Architektura může být popsána různými styly jazyka VHDL. Pojem stylu není v tomto

jazyku přímo definován, ale některé jazykové konstrukty ve VHDL mohou být zařazeny do skupin, které tyto styly představují. Nejčastěji se mluví o stylu behaviorálním, o stylu popisujícím tok dat a o stylu strukturálním.

Pojem behaviorální styl je užíván dvěma způsoby. V literatuře týkající se syntézy se obvykle tento styl charakterizuje užitím jazykového konstruktu zvaného proces (process). Výše uvedený čtyřbitový komparátor můžeme popsat textem zapsaným behaviorálním stylem s využitím procesu takto:

LIBRARY ieee; -- TXT2 USE ieee.std_logic_1164.ALL; ENTITY EqComp4 IS PORT(a,b: IN std_logic_vector(3 DOWNTO 0); -- vstupy Equals: OUT std_logic); -- výstup END EqComp4;

ARCHITECTURE Behavioral1 OF EqComp4 IS BEGIN Comp: PROCESS (a,b) BEGIN IF a = b THEN Equals <= '1'; ELSE Equals <= '0'; END IF; END PROCESS Comp; END Behavioral1; Řádek obsahující slovo PROCESS začíná návěštím (Comp:), které je nepovinné. Po slovu

PROCESS následuje seznam signálů (sensitivity list), jejichž změna může vyvolat změnu některého ze signálů, které jsou procesem definovány (v souvislosti se simulací se říká, že tato změna spustí provedení procesu). Popis procesu pak je ohrazen slovy BEGIN a END PROCESS s příslušným návěštím.

Význačným rysem procesu je jeho algoritmický charakter, čímž se text procesu podobá počítačovým programovacím jazykům. Tato podoba odpovídá skutečnosti, je-li v procesu zpracovávána tzv. proměnná, je zde však významná odlišnost, jde-li o zpracovávání signálu (zatím jsme pracovali jen se signály, podrobnosti o proměnných a o signálech budou uvedeny později). Tato odlišnost spočívá v tom, že jsou-li v procesu uvedeny příkazy postupně přiřazující jednomu určitému signálu různé hodnoty, jsou při každém tomto přiřazení předcházející příkazy přepsány posledním z nich. Po kompilaci je tento signál vytvořen tak, jak to odpovídá poslednímu přiřazovacímu příkazu v procesu, všechny předcházející příkazy se ignorují. To platí i tehdy, vyskytuje-li se signál, jemuž se přiřazuje nová hodnota, mezi

Page 111: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 111

signály, z nichž se nová hodnota počítá (viz příklad v textu TXT4), přičemž až do ukončení procesu má tento signál svou původní hodnotu. Proces můžeme chápat jako myšlenkovou přípravu na vytvoření signálů v procesu popsaných. To se skutečně děje při činnosti simulátorů – v angličtině se přiřazení hodnot signálům v procesu říká scheduled assignment, čemuž by mohl v češtině odpovídat název plánované či odložené přiřazení, na rozdíl od přiřazení označovaného jako immediate assignment (okamžité či bezprostřední přiřazení), které nastává u přiřazovacích příkazů uvedených mimo proces, a také u zpracování proměnných v procesu. Tento rozdíl si můžeme si představit tak, že ve skutečnosti dojde k přiřazení nových hodnot všem signálům v procesu najednou v okamžiku skončení procesu podle posledního příkazu v myšleném časovém rozvinutí procesu platného pro každý z těchto signálů (odložené přiřazení), zatímco při bezprostředním přiřazení nabývá signál či proměnná nové hodnoty ihned po provedení příkazu. Odložené přiřazení v procesu se u signálů značí operátorem "<=", zatímco pro přiřazení bezprostřední u proměnných se používá symbol ":=". Podobnost s programem pro počítač je u signálů především v tom, že výsledek procesu závisí na pořadí zápisu jednotlivých příkazů v něm. To z textu TXT2 není příliš patrné, lépe to uvidíme v textu TXT3, který popisuje tentýž komparátor:

ARCHITECTURE Behavioral2 OF EqComp4 IS BEGIN -- TXT3 Comp: PROCESS (a,b) BEGIN Equals <= '0'; IF a = b THEN Equals <= '1'; END IF; END PROCESS Comp; END Behavioral2; Zde se první příkaz přiřazující nulovou hodnotu signálu equals přepíše druhým příkazem

při splnění podmínky a = b, v opačném případě se příkaz Equals <= '1' neprovede a zůstane v platnosti první. Uvědomme si však, že výsledný signál Equals představuje ve skutečnosti kombinační funkci signálů a a b, která může být zapsána i jinak, například pomocí logického výrazu, a rozvinutí procesu v čase (postupné přepisování přiřazovacích příkazů) je jen pomůcka pro naši představu, která někdy umožňuje stručnější nebo přehlednější zápis než jiné způsoby vyjádření.

Jako příklad syntakticky správného, věcně však chybného textu uvedeme popis modelu čtyřvstupového součinového členu pomocí smyčky (TXT4, syntaxe smyček bude popsána později):

LIBRARY ieee; -- TXT4 USE ieee.std_logic_1164.ALL; ENTITY And4 IS PORT(a: IN std_logic_vector(3 DOWNTO 0); x: INOUT std_logic); END And4;

ARCHITECTURE AndErr OF And4 IS BEGIN PROCESS (a) BEGIN x <= '1'; FOR i IN 3 DOWNTO 0 LOOP x <= a(i) AND x; END LOOP; END PROCESS; END AndErr; Nezkušený konstruktér by mohl očekávat, že tak vznikne součinový člen s počtem vstupů

daným deklarací a hodnotou zadanou v příkazu smyčky (zde se čtyřmi vstupy). Kompilací však zjistíme, že výsledkem je bez ohledu na šířku vektoru a zápis x = a_0 * x (ve WARPu: Info => Report file...), což odpovídá poslednímu z příkazů, které představují rozvinutí

Page 112: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

112 FEKT Vysokého učení technického v Brně

smyčky. Náprava může být v tom, že se v procesu deklaruje proměnná, se kterou se vykoná příslušná iterativní operace (smyčka), a na závěr se její hodnota přiřadí signálu x:

ARCHITECTURE AndOK OF And4 IS BEGIN -- TXT5 PROCESS (a) VARIABLE Xvar: std_logic; BEGIN Xvar := '1'; FOR i IN 3 DOWNTO 0 LOOP Xvar := a(i) AND Xvar; END LOOP; x <= Xvar; END PROCESS; END AndOK; Tato architektura patří ke stejné entitě And4, ve které však mód INOUT brány x může být

nahrazen módem OUT, protože zde není signál x použit jako vstupní signál, jak je tomu ve smyčce architektury AndErr. Kompilací snadno zjistíme, že vyjádření pro signál x je nyní správné.

Architektura může obsahovat více procesů, a v tomto případě musíme přijmout představu, že všechny procesy probíhají souběžně.

Často, zejména v pracích týkajících se simulace systémů – například v literatuře [13], se můžeme také setkat s užitím pojmu behaviorální styl s poněkud jiným, obecnějším obsahem: behaviorálním stylem se zde rozumí popis na vysoké úrovni abstrakce, kde nemusí být uvažovány konkrétní hodnoty šířky datových a adresových sběrnic, kde nejsou specifikovány hodinové signály a podobně. Například při abstraktním modelování počítače se operace ADD chápe zcela obecně, bez uvažování určitého způsobu kódování dat. Tento styl se používá k simulaci, pro syntézu je nutno úroveň abstrakce snížit. Styl popisu demonstrovaný výše uvedenými příklady se pak nazývá styl (popis) typu RTL (register transfer level). Toto označení vychází z obecné představy o struktuře číslicového systému, který je možno rozdělit na kombinační část a registr. Modelování systému stylem RTL se pak provádí po blocích s hranicemi vymezenými rozsahem „od registru k registru”, případně jednou z hranic (nebo i oběma u kombinačních funkcí) může být vstup nebo výstup cílového obvodu. Po takových blocích se pak také obvykle provádí i optimalizace, která zahrnuje algoritmy analogické minimalizaci známé z obecného kursu číslicové techniky (Karnaughovy mapy), volbu nejvhodnějšího typu registru (D, T, JK) a podobně. To právě odpovídá uvedeným příkladům.

Styl popisující tok dat (dataflow) je ilustrován výše uvedeným textem TXT1. Často se tento styl pokládá za zvláštní případ behaviorálního stylu. Vedle prostých přiřazovacích příkazů se zde používají příkazy typu podmíněných přiřazovacích příkazů CASE-WHEN nebo výběrových přiřazovacích příkazů WITH-SELECT-WHEN, tedy tzv. souběžné příkazy (podrobnosti budou uvedeny později), z nichž každý můžeme pokládat za zjednodušený tvar procesu s vynechanými slovy PROCESS a END PROCESS, na rozdíl od sekvenčních příkazů používaných v procesech zapsaných úplnou formou. U souběžných příkazů nezávisí výsledek na pořadí jejich zápisu v textu.

V dalším textu se obvykle budeme přidržovat základního dělení na styl behaviorální, do něhož budeme zahrnovat i styl popisující tok dat, a na styl strukturální. Tam, kde to bude potřebné nebo účelné, použijeme slovní zpřesnění.

Strukturální popis je třetím význačným stylem. Spočívá ve vkládání tzv. komponent (component) do kódového útvaru zvaného netlist. Podrobnosti o komponentách budou uvedeny v kapitole Prostředky jazyka VHDL pro úsporný zápis kódu. Strukturální styl se používá nejčastěji v hierarchickém uspořádání konstrukce jako vrcholný (top-level) popis propojení dílčích bloků nižší úrovně. Náš známý komparátor může být popsán tímto stylem podle textu TXT6:

Page 113: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 113

LIBRARY ieee; -- TXT6 USE ieee.std_logic_1164.ALL; ENTITY EqComp4 IS PORT(a,b: IN std_logic_vector(3 DOWNTO 0); -- vstupy Equals: OUT std_logic); -- výstup END EqComp4;

USE work.Gatespkg.ALL ARCHITECTURE Struct OF EqComp4 IS SIGNAL x: std_logic_vector(0 to 3); BEGIN u0: Xnor2 PORT MAP (a(0),b(0),x(0)); u1: Xnor2 PORT MAP (a(1),b(1),x(1)); u2: Xnor2 PORT MAP (a(2),b(2),x(2)); u3: Xnor2 PORT MAP (a(3),b(3),x(3)); u4: And4 PORT MAP (x(0),x(1),x(2),x(3),Equals); END Struct; Komponenty použité v textu TXT6 nejsou definovány ve standardu VHDL. Předpokládá se,

že komponenty Xnor2 a And4 jsou definovány ve sloze Gatespkg vytvořené uživatelem a ta že je zkompilována do knihovny work. Klauzule USE work.Gatespkg.ALL zpřístupňuje tyto komponenty v uvedené architektuře. Klíčové slovo ALL v těchto klauzulích znamená, že jsou zpřístupněny všechny jednotky (zde komponenty) z příslušných sloh. (Pokud by v několika použitých slohách byly jednotky se stejným jménem, je možno místo slova ALL uvést jednotku, kterou chceme v příslušné sloze zpřístupnit, a tak vybrat určitou z nich.) Funkce takto popsaného komparátoru spočívá v porovnání jednotlivých bitů bran a a b a ve vytvoření logického součinu dílčích výsledků. Obecně se tímto způsobem popisuje propojení komponent nižší úrovně do vrcholného celku.

Strukturální styl popisu na rozdíl od jiných stylů obvykle nedává mnoho možností pro optimalizaci při syntéze, a poskytuje tak konstruktérovi větší kontrolu nad výsledkem syntézy. To však nemusí vždy představovat výhodu tohoto stylu, protože se tím nevyužívá inteligence zabudovaná do návrhového systému. Strukturální styl popisu je také obvykle méně přehledný ve srovnání s behaviorálním stylem. Proto se obvykle tam, kde je to možné, používá raději jiných stylů. Někdy se však může stát, že použití behaviorálního stylu vede po syntéze k jiné struktuře, než bylo původně zamýšleno, ať již proto, že inteligence systému není dostatečná, nebo když chceme vytvořit nějakou netypickou strukturu. Pak může být strukturální popis vhodným prostředkem k dosažení cíle. Často jsou určité komponenty definovány pro syntézu výrobci obvodů PLD a FPGA a jsou optimalizovány tak, aby odpovídaly struktuře cílových obvodů. To umožňuje využít specifických vlastností těchto obvodů, přitom se však snižuje nebo odstraňuje nezávislost popisu na cílovém obvodu. Mohou rovněž vzniknout problémy při simulaci, protože simulátor nemusí mít k dispozici stejné modely jako syntetizér. Syntaxe a další podrobnosti budou uvedeny později, při popisu hierarchických konstrukcí.

Nyní je na místě se ptát, jestli konstrukce s určitou danou funkcí bude syntetizérem implementována do cílového obvodu vždy stejným způsobem, bude-li popsána různými styly, nebo v rámci určitého stylu různými způsoby zápisu kódu, kterých bývá obvykle více. Obecně to nemusí platit, ale čím dokonalejšího nástroje použijeme, tím větší pravděpodobnost bude, že výsledkem bude optimální implementace nezávislá na stylu a způsobu popisu. Jak syntetizéry vyzrávají, získávají stále větší inteligenci a schopnost optimum najít. Ne vždy však je takové optimum jednoznačné. V některých aplikacích se například klade důraz na řešení, které spotřebuje co nejméně prostředků (resources) v cílovém obvodu a vede k nej-nižší ceně, jindy je důležitějším kritériem rychlost reakce, opět jindy může být optimem jistý kompromis. V praxi může však být nejdůležitějším kritériem i rychlost nalezení přijatelného řešení bez zvláštní optimalizace, která umožní rychlé uvedení výrobku na trh. Zkušený

Page 114: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

114 FEKT Vysokého učení technického v Brně

konstruktér dokáže odhadnout, co lze od řešení určitého problému za daného stavu techno-logie očekávat, a umí syntetizér přinutit, aby našel řešení, které je optimální pro daný případ.

10.3 DATOVÉ OBJEKTY

Jazyk VHDL definuje čtyři třídy (classes) datových objektů: konstanty, signály, proměnné a soubory. Datové objekty musí být před svým užitím deklarovány.

Konstanty (constants). Konstanty mají hodnotu, která je neměnná. Ta je konstantě přiřazena při její deklaraci. Konstanty zlepšují přehlednost kódu. Mohou být v textu vícenásobně použity, a pokud se při další úpravě textu vyskytne potřeba hodnotu konstanty změnit, stačí to učinit v deklaraci. Například může konstanta definovat šířku registru:

CONSTANT Width: integer := 8; Signály (signals). Signály jsou datové objekty, které se v realizované konstrukci skutečně

vyskytují (obvykle ve formě elektrických signálů). Patří k nim i brány, jak jsme je poznali výše. Vnitřní signály v konstrukci se deklarují užitím syntaxe podle následujícího příkladu:

SIGNAL Count: bit_vector(3 DOWNTO 0); Signálům může být v deklaraci přiřazena počáteční hodnota podobně jako konstantám. Pro

syntézu toto přiřazení nemá význam, je však respektováno při simulaci. Signály deklarované jako brány mají definován mód (IN, OUT atd.), signály deklarované klíčovým slovem SIGNAL mód nemají definován.

Proměnné (variables). Proměnné nepředstavují skutečné signály. Používají se jako pomocné objekty například pro počítání cyklů v behaviorálním popisu. Jejich použití v proce-sech může pomoci při algoritmickém vyjádření signálů (připomeňme, že přiřazení proměnných je bezprostřední, zatímco přiřazení signálů v procesu je odložené), jak to bylo ukázáno v textech TXT4 a TXT5. Používají se často v textech určených k simulaci, a také ve funkcích a v procedurách, zejména při konverzi typů dat a podobně. Při psaní zdrojových textů určených k syntéze je třeba mít na paměti, že se z proměnných nevytvářejí fyzické struktury v cílovém obvodu. Některé současné systémy mohou mít s jejich zpracováním problémy. Nejedná-li se o použití, kde je jejich význam zcela jednoznačný, jako v uvedeném případě počítání cyklů, je lepší se jim v textech určených k syntéze vyhnout.

Z výše uvedeného nevyplývá, že všechny signály, tj. objekty deklarované v textu jako SIGNAL, popřípadě PORT v hierarchickém popisu, také budou fyzicky přítomny ve struktuře obvodu, která vznikne zpracováním textu systémem. Při tomto zpracování se provádí optimalizace, při níž se některé signály mohou ukázat nadbytečnými (například představuje-li signál mezivýsledek v kombinačním obvodu, který je možno zjednodušit do dvoustupňové struktury AND-OR s nevelkým počtem termů), a následně mohou být vypuštěny. Naopak při syntéze složitějších kombinačních obvodů bývá nutno zavést další signály, které umožňují automaticky syntetizovat funkce vyžadující větší počet termů než je k dispozici v jednotlivých makrobuňkách obvodů PLD (štěpení součtů). Analogicky to platí i u systémů používajících jiných vstupních prostředků (například jazyk ABEL, schéma a podobně). Pouze u velmi jednoduchých systémů, jako je easyABEL, se všechny deklarované signály při zpracovávání plně zachovají (systém neumí s nimi pracovat jinak než je zjednodušovat), ale systémy používající jazyk VHDL obvykle již jsou vybaveny inteligencí potřebnou k automatickému provedení složitější optimalizace včetně uvedeného vynechávání nadbytečných signálů, popřípadě přidávání dalších při štěpení součtů. Z proměnných se však žádné fyzické struktury nevytvářejí. Na vzniku fyzické struktury se proměnná může podílet pouze tak, že se například její hodnota přiřadí signálu, jak je to třeba v textu TXT5.

Soubory (files). Soubory obsahují data určitého typu a používají se například pro vstupní a výstupní data při simulaci.

Page 115: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 115

Datovým objektům jsou v deklaracích přiřazeny identifikátory. Někdy může být výhodné přiřadit objektům více identifikátorů, což můžeme zajistit užitím aliasů. Například:

SIGNAL Address: std_logic_vector(31 DOWNTO 0); ALIAS TopAdd: std_logic_vector( 3 DOWNTO 0) IS Address(31 DOWNTO 28); ALIAS RowAdd: std_logic_vector(11 DOWNTO 0) IS Address(23 DOWNTO 12); Aliasy se používají obvykle pro označení určitých skupin signálů, které jsou členy vektoru,

jak je to zřejmé z uvedeného příkladu. Často může být výhodné naopak sdružovat jednotlivé signály do větších skupin. To je možno provést deklarací takové skupiny jako signál a přiřazením jejích členů signálům, které chceme sdružit. Viz např. dále uvedený příklad převodníku kódu (TXT30).

10.3.1 Typy dat Jazyk VHDL je definován jako přísně typový (strongly typed), což znamená, že před

každým použitím nějakého objektu musí být deklarován jeho typ (type). Ten určuje, jakých hodnot může deklarovaný objekt nabývat. Datové objekty různých typů nemohou být vzájemně přiřazovány bez konverze. Podobně operátory mohou být užity jen pro datové typy, pro něž jsou definovány, není-li uživatelem definováno jejich přetížení (overloaded operators). Český termín „přetížení“ není zvolen příliš zdařile, patrně by bylo výstižnější slovo rozšíření nebo předefinování, ale je již vžitý a proto jej zde budeme používat. Nejčastěji používané typy jsou definovány přímo v příslušných standardech, uživatel si však může definovat i své vlastní typy podle potřeby, jak to poznáme například u stavových automatů.

Pro syntézu jsou nejdůležitější skalární (scalar) a složené (composite) typy dat. Skalární typy mohou být: výčtové (enumeration), celočíselné (integer), s pohyblivou čárkou (floating) a fyzické (physical). Složené typy jsou pole (array) a záznam (record).

Výčtové typy. Tyto typy jsou definovány výčtem hodnot, kterých objekt tohoto typu může nabývat, uvedeným v závorce v deklaraci typu. Výčtové typy jsou uspořádané (ordered). Pořadí, v němž jsou ve výčtu uvedeny, definuje toto uspořádání: nejlevější položka se pokládá za nejmenší, každá další za větší než předchozí. Konstruktér si může definovat vlastní výčtové typy; setkáme se s tím především při modelování stavových automatů. Standard IEEE 1076 definuje dva výčtové typy důležité pro syntézu: bit a boolean:

TYPE bit IS ('0','1'); TYPE boolean IS (false,true); Typ bit může představovat běžné dvouhodnotové signály. Typ boolean můžeme chápat

jako abstrakci předchozího typu, kde nejsou zvoleny logické úrovně přiřazené příslušnému signálu.

Page 116: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

116 FEKT Vysokého učení technického v Brně

Standard IEEE 1164 definuje typ std_ulogic: TYPE std_ulogic IS ('U', -- Uninitialized 'X', -- Forcing Unknown '0', -- Forcing 0 '1', -- Forcing 1 'Z', -- High Impedance 'W', -- Weak Unknown 'L', -- Weak 0 'H', -- Weak 1 '-'); -- Don’t care

Literály jako 'Z', 'L' a další musí zde být psány velkým písmem. Tento typ umožňuje například práci s třístavovými výstupy a dovoluje také vyjádřit hodnotu, na níž nezáleží ('-') a využít jí ke zjednodušení syntetizovaného obvodu (pokud to ovšem použitý syntetizér podporuje).

Definuje také často používaný subtyp std_logic, pro nějž je std_ulogic základním typem. Sada hodnot je stejná, ale tento subtyp má navíc přiřazenu rozlišovací funkci (resolution function) nazvanou resolved. Tato rozlišovací funkce je důležitá při simulaci, kde dovoluje pracovat s obvody, které mají propojeny výstupy, jako je to např. u obvodů s tří-stavovými výstupy. Podrobněji je tato problematika popsána například v [8]. Obecně se za subtyp označuje typ, který má stejné vlastnosti jako základní typ, je však úžeji vymezen – například uvedenou rozlišovací funkcí, omezenějším rozsahem hodnot a podobně. Různé subtypy téhož základního typu mohou vystupovat v operacích, aniž vznikne chyba při kompilaci (nesouhlas typů operandů).

Standard IEEE 1076 definuje dále pole std_ulogic_vector a std_logic_vector, některé další subtypy a také funkce pro přetížení operátorů, konverzní funkce a další užitečné pomůcky. Chceme-li je použít, musíme před deklaraci entity zapsat následující odkazy:

LIBRARY ieee; USE ieee.std_logic_1164.ALL; Celočíselné typy. V jazyku VHDL jsou definovány tyto typy a operátory pro relační a

aritmetické operace s nimi. Nástroje zpracovávající texty v jazyku VHDL musí podporovat rozsah celých čísel od -(231 - 1) do +(231 - 1). Signál, který má být syntetizován, musí být omezen rozsahem (range), z něhož vyplyne požadavek na počet bitů, například:

SIGNAL a: integer RANGE 0 TO 255; Subtyp natural obsahuje nulu a kladná celá čísla, subtyp positive jen kladná celá čísla. Typy pole. Objekt tohoto typu je složen z více prvků téhož typu. Nejběžnější typy tohoto

druhu jsou definovány ve standardech 1076 a 1164: TYPE bit_vector IS ARRAY (natural RANGE <>) OF bit; TYPE std_logic_vector IS ARRAY (natural RANGE <>) OF std_logic;

V závorce uvedené slovo natural zde znamená typ indexů. Zápis RANGE <> znamená, že jde o neomezená pole, jejichž rozsah musí být vymezen při jejich užití v deklaraci (TO, DOWNTO).

Při zápisu hodnot objektů typu pole je možno užívat znakových řetězců, např.: a <= "01111010"; V takovém řetězci se mohou vyskytovat i jiné prvky dovolené u příslušného typu, jako Z, -

apod. Pro pole typu bit_vector lze užít i binárního, oktalového nebo hexadecimálního for-mátu. Standard VHDL-93 rozšiřuje tuto možnost pro všechny typy polí, které obsahují prvky '0' a '1'. Základ (X – hexadecimální, O – oktalový, B – binární zápis) se specifikuje takto:

a <= X"7A"; Pokud není základ uveden, je předpokládán zápis binární. Je-li žádoucí vyznačit v zápisu bitových vektorů skupiny, je možno k tomu použít podtržítko (_), které se při kompilaci

Page 117: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 117

ignoruje (některé systémy však použití podtržítka tímto způsobem nedovolují). Další možností je zápis ve tvaru agregátu (aggregate):

a <= ('0','1','1','1','1','0','1','0').

10.3.2 Atributy Atributy poskytují informaci o jejich nositelích. Těmi mohou být typy, vektory, pole a

podobně. Standardně jsou definovány atributy příslušející předdefinovaným typům, uživatel si však může vytvořit vlastní atributy pro uživatelsky definované typy. Nejčastěji se setkáme s následujícími atributy:

'left – nejlevější hodnota ve výčtu v typu, levá hranice indexů; 'right – nejpravější hodnota ve výčtu v typu, pravá hranice indexů; 'low – nejnižší index pole, 'high – nejvyšší index pole. 'length – počet prvků v poli, 'range – rozsah pole, tedy například 0 TO 7 nebo 7 DOWNTO 0 u osmibitového vektoru.

Apostrof se v angličtině čte jako „tick“, tedy tick-left apod.

Příklad: Signál a a typy Count, States a Word jsou deklarovány zápisem SIGNAL a: bit_vector(7 DOWNTO 0); TYPE St IS (Idl,Prepar,Rd,Wr); TYPE Cnt IS integer RANGE 0 TO 63; TYPE Wrd IS ARRAY(31 DOWNTO 0) OF std_logic;

Uvedeme dále výraz s atributem a jeho význam:

a'left ⇒ 7 St'left ⇒ Idl Cnt'left ⇒ 0 Wrd'left ⇒ 31 a'right ⇒ 0 St'right ⇒ Wr Cnt'right ⇒ 63 Wrd'right ⇒ 0 a'low ⇒ 0 St'low ⇒ Idl Cnt'low ⇒ 0 Wrd'low ⇒ 0 a'high ⇒ 7 St'high ⇒ Wr Cnt'high ⇒ 63 Wrd'high ⇒ 31 a'length ⇒ 8 St'length ⇒ 4 Cnt'length ⇒ 64 Wrd'length ⇒ 32 a'range ⇒ 7 DOWNTO 0 Cnt'range ⇒ 0 TO 63 Wrd'range ⇒ 31 DOWNTO 0

Velmi často se setkáme s atributem 'event – změna, který dává hodnotu typu boolean, která je true v případě, že u signálu, k němuž se atribut vztahuje, nastala změna. Povšimněte si rozdílu mezi klíčovým slovem RANGE a atributem 'range!

Atributům jsou syntakticky podobné tzv. vymezené výrazy (qualified expressions). Je-li například v kódu zapsáno '1', není z tohoto zápisu zřejmé, k jakému typu tato hodnota patří – může to být typ bit nebo std_logic a další. Chceme-li typ explicitně uvést (type casting), můžeme k tomu užít vymezeného výrazu podle syntaxe:

typ'(literál nebo výraz) Například zápis: bit'('1') představuje hodnotu '1' typu bit.

10.4 MODELOVÁNÍ KOMBINAČNÍCH OBVODŮ

Způsoby modelování číslicových systémů začneme probírat od popisu kombinačních obvodů. Ty se ovšem používají i při modelování sekvenčních systémů. Jak je známo ze základního kursu číslicové techniky, sekvenční systémy jsou složeny z kombinační a paměťové části, a pro popis první z nich se tedy používají konstrukty jazyka VHDL, které nyní uvedeme.

K modelování kombinačních obvodů můžeme užít souběžných příkazů (concurrent statements) nebo procesů, v nichž se užívají příkazy sekvenční (sequential statements). K souběžným příkazům patří prosté přiřazovací příkazy s logickými, aritmetickými a relační-mi výrazy, podmíněné přiřazovací příkazy WHEN-ELSE a výběrové přiřazovací příkazy WITH-SELECT-WHEN. Prosté přiřazovací příkazy můžeme užít i v procesech. Příkazy WHEN-ELSE a

Page 118: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

118 FEKT Vysokého učení technického v Brně

WITH-SELECT-WHEN se používají jen mimo procesy. Tyto příkazy mají své ekvivalenty používané v procesech, ve funkcích a v procedurách, kterými jsou sekvenční příkazy IF-THEN-ELSE a CASE-WHEN.

10.4.1 Souběžné příkazy Výrazy. Výrazy jsou skupiny identifikátorů vzájemně propojených operátory, přičemž se

pro vyznačení pořadí operací (tam, kde pořadí není definováno standardem) používají závorky. V jazyku VHDL se používají výrazy s datovými objekty různých typů, přičemž je nutno rozlišovat, jde-li o výrazy, které mají být zpracovány syntézou, nebo o výrazy, které nejsou určeny pro syntézu (výrazy s pomocnými proměnnými v cyklech, v deklaracích a podobně), jejichž výběr je bohatší, protože se nemusí řešit problémy s jejich fyzickou realizací. Operátory uvedené v následujícím výčtu jsou definovány ve standardu VHDL-87 s výjimkou operátorů posuvu a rotace, které jsou definovány standardem VHDL-93.

Ve výrazech určených pro syntézu se používají: ∗ Logické operátory: AND, OR, NAND, NOR, XOR, XNOR a NOT. Mají běžně známý význam. Jsou

definovány pro typy bit nebo boolean a pro jednorozměrná pole tohoto typu. Oba operandy musí mít tutéž délku (mimo případu negace). Standard IEEE 1164 rozšiřuje tyto operátory na typy std_ulogic a std_logic a na jejich jednorozměrná pole. Není mezi nimi definována precedence, tu je nutno vyznačit závorkami, s výjimkou operátoru NOT; operace negace má nejvyšší prioritu. Zápis složitějších logických výrazů je dosti těžkopádný.

∗ Relační operátory: =, /=, <, <=, >, >=, opět s obvyklým významem. První dva jsou definovány pro všechny typy, ostatní pro skalární typy a pro pole s omezeným rozsahem. Na obou stranách operátoru však musí být data téhož typu. Výsledek relační operace je typu boolean, tj. true nebo false.

∗ Operátory posuvu a rotace: SLL, SRL (posuv vlevo a vpravo logický), SLA, SRA (posuv vlevo a vpravo aritmetický), ROL, ROR (rotace vlevo a vpravo) jsou definovány pro stejné typy jako logické operátory.

∗ Aritmetické operátory: + (sčítání) a - (odčítání nebo negace). Jsou definovány pro všechny numerické typy (určené pro zápis číselných informací). K aritmetickým operátorům se počítá také operátor sjednocení (concatenation) značený symbolem &.

Ve výrazech, které nejsou určeny pro syntézu, se mohou používat i další operátory (v některých systémech jsou podporovány i pro syntézu): ∗ Operátory násobení a dělení: *, /, MOD, REM. ∗ Operátory mocniny a absolutní hodnoty: ** a ABS. Operace sjednocení se používá pro vytváření vícebitových signálů z jejich dílčích částí. Například signál "00111100" se šířkou 8 bitů můžeme zapsat jako sjednocení dvou čtyřbitových signálů: "0011" & "1100". Jsou-li ve výrazu použity operátory jen jednoho druhu, mluvíme o výrazu tohoto druhu, např. o logickém, relačním nebo aritmetickém výrazu. Výrazy ovšem mohou být i smíšené. Mezi uvedenými skupinami operátorů platí priorita: čím níže je skupina uvedena, tím vyšší prioritu mají její operátory (s výjimkou operátoru NOT). V možnosti použití různých operátorů se jednotlivé návrhové systémy mohou lišit, zejména pokud jde o možnost použití pro syntézu. Příkaz WHEN-ELSE (podmíněný přiřazovací příkaz) se zapisuje podle vzoru:

Jméno_signálu <= Hodnota_a WHEN Podmínka_1 ELSE Hodnota_b WHEN Podmínka_2 ELSE ... ... ... ... ... ... ELSE Hodnota_x;

Page 119: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 119

Podmínkou bývá relační výraz, jehož vyhodnocením vznikne výsledek typu boolean. Je-li tento výsledek true, říkáme, že je podmínka splněna. Signálu Jméno_signálu je přiřazena ta z hodnot, která je uvedena v prvním z řádků, v nichž je podmínka splněna. Pořadí řádků zde tedy definuje jejich prioritu. Na rozdíl od výběrového přiřazovacího příkazu, který bude popsán dále, nejsou kladeny na podmínky v podmíněném přiřazovacím příkazu žádné dodatečné požadavky. Jako příklad uvedeme popis prioritního enkodéru:

LIBRARY ieee; -- TXT7 USE ieee.std_logic_1164.ALL; ENTITY Priority IS PORT(a,b,c,d: IN std_logic; -- datové vstupy w,x,y,z: IN std_logic; -- podmínky f: OUT std_logic); -- výstup END Priority;

ARCHITECTURE ArchPri OF Priority IS BEGIN f <= a WHEN w = '1' ELSE b WHEN x = '1' ELSE c WHEN y = '1' ELSE d WHEN z = '1' ELSE '0'; END ArchPri;

Pokud se v posledním příkazu vypustí část ELSE '0', nehlásí obvykle kompilátory syntaktickou chybu, ale u některých syntetizérů (např. WARP) to způsobí vznik záchytného registru, podobně jako u příkazů IF-THEN-ELSE (viz dále), u jiných (jako Altera MAX+PLUS II) nemá tato změna na výsledek vliv. Aby byl výsledek jednoznačný, lze doporučit, aby závěrečné přiřazení (např. zde zmíněné ELSE '0'), k němuž dojde při nesplnění všech podmínek, nebylo vypuštěno či opomenuto. Příkaz WITH-SELECT-WHEN (výběrový přiřazovací příkaz) se zapisuje podle vzoru:

WITH Výběrový_signál SELECT Jméno_signálu <= Hodnota_a WHEN Hodnota_1_výběrového_signálu, Hodnota_b WHEN Hodnota_2_výběrového_signálu, ... ... ... Hodnota_x WHEN Poslední_hodnota_výběrového_signálu;

Signálu Jméno_signálu je přiřazena ta z hodnot, která je uvedena v řádku obsahujícím aktuální hodnotu výběrového signálu. V tomto příkazu musí být uvedeny všechny možné hodnoty výběrového signálu. Zápis můžeme zestručnit využitím klíčových slov TO a OTHERS a symbolu | (některé systémy, mezi nimi i WARP a MAX+PLUS II, nedovolují použít zde klíčové slovo TO) podle následujícího vzoru:

WITH s SELECT x <= a WHEN "0000" TO "0100", b WHEN "0101"|"0111", c WHEN "1010", d WHEN OTHERS;

Klíčovým slovem TO v prvním řádku jsou pokryty hodnoty výběrového signálu mezi uvedenými krajními hodnotami, v dalším symbol | čteme jako "nebo" (význam je zřejmý). Význam slova OTHERS vysvětlíme v následujícím příkladu popisu multiplexoru čtyř čtyřbitových signálů:

LIBRARY ieee; -- TXT8 USE ieee.std_logic_1164.ALL; ENTITY Mux IS PORT(a,b,c,d: IN std_logic_vector(3 DOWNTO 0); -- datové vstupy s: IN std_logic_vector(1 DOWNTO 0); -- výběrový vstup x: OUT std_logic_vector(3 DOWNTO 0)); -- výstup END Mux;

ARCHITECTURE ArchMux OF Mux IS BEGIN

Page 120: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

120 FEKT Vysokého učení technického v Brně

WITH s SELECT x <= a WHEN "00", b WHEN "01", c WHEN "10", d WHEN OTHERS; END ArchMux;

Vyhrazené slovo OTHERS zde zastupuje všechny ostatní možné hodnoty výběrového signálu. Není to jen hodnota "11". Syntaxe jazyka vyžaduje, aby byly zastoupeny i další hodnoty přípustné u typu std_logic_vector, jako "1X", "UU" a všechny další, celkem tedy 81 hodnot – možných variací dvou hodnot z devíti uvedených ve výčtu v definici typu std_logic. Pro syntézu má ovšem význam jen hodnota "11" z těchto zastupovaných hodnot. Vynecháme-li v deklaracích proměnnou d a nahradíme-li poslední řádek těla architektury textem "----" WHEN OTHERS;, provede se minimalizace s využitím nedefinované hodnoty x pro tyto hodnoty signálu s ke zjednodušení výsledku (platí jen pro systémy, které toto využití podporují, například pro WARP). Dalším zajímavým příkladem je následující text popisující model detektoru hodnoty signálu s rozsahem od -8 do +7 kódovaného zápisem v dvojkovém doplňku:

ENTITY Detector IS -- TXT9 PORT(InSig: IN bit_vector(3 DOWNTO 0); Limit: OUT bit); END Detector; ARCHITECTURE ArchDet OF Detector IS BEGIN WITH InSig SELECT Limit <= '1' WHEN "0110"|"0111"|"1000"|"1011"|"1010", '0' WHEN OTHERS; END ArchDet;

Některé návrhové systémy dovolují nahradit výčet hodnot signálu InSig zápisem "0110" TO "1010". Signál Limit zde má jedničkovou hodnotu, je-li signál InSig v abso-lutní hodnotě roven číslu 6 nebo většímu. Vkládání komponent (component instantiation). Komponenty vložené do netlistu při strukturálním popisu jsou také druhem souběžných příkazů. Příklad (TXT6) byl uveden v části pojednávající o tomto stylu. Přetížené operátory (overloaded operators). Operátory jsou definovány standardem VHDL pro určité typy, přetížení operátorů dovoluje používat je ve větším rozsahu. Operátory mohou být přetíženy uživatelem definovanými funkcemi. Mnoho jich je definováno ve standardech IEEE 1164 a 1076.3. Např. v systému WARP jsou ve sloze std_arith definovány funkce přetěžující aritmetické a relační operátory tak, že mohou interpretovat typ std_logic_vector jako unsigned, což dovoluje například následující zápis:

LIBRARY ieee; -- TXT10 USE ieee.std_logic_1164.ALL; USE work.std_arith.ALL; ENTITY Compare IS PORT(a: IN std_logic_vector(3 DOWNTO 0); x: OUT std_logic); END Compare;

ARCHITECTURE ArchCmp OF Compare IS BEGIN x <= '1' WHEN a = 123 ELSE '0'; END ArchCmp;

Bez přetížení operátoru = by došlo k chybě při kompilaci podmínky v předposledním řádku, protože číslo 123 nepatří k typu std_logic_vector. V dalších návrhových systémech mohou být příslušné funkce obsaženy v jiných slohách, které bývají optimalizovány pro podporované cílové obvody, takže je nutno místo slohy std_arith užít příslušnou slohu podle použitého

Page 121: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 121

systému – např. u systému MAX+PLUS II (Altera) je to sloha std_logic_unsigned. I když určitý syntetizér může být schopen zpracovat kód slohy jiného výrobce, může se stát, že výsledek zpracování aritmetických a logických struktur nebude optimální, protože použitá sloha nebyla optimalizována pro tento systém. Aritmetické operátory. Významné použití nachází princip přetěžování operátorů u arit-metických operací. Aritmetické operátory jsou definovány pro typy integer a floating. I když je možno s těmito typy pracovat při syntéze, vhodnější cesta spočívá v přetížení aritmetických operátorů na další datové typy. Mnoho přetížených operátorů je definováno ve standardech IEEE 1164 a 1076.3. Poslední z nich přetěžuje operátory + a - (sčítání a odčítání) na páry operandů s těmito typy: (unsigned, unsigned), (unsigned, integer), (signed, signed) a (signed, integer). Jsou definovány ve sloze numeric_std standardu 1076.3. Mnoho firem produkujících syntetizéry dodává slohy přetěžující aritmetické operátory na datové typy std_logic. Ty obvykle definují také přetížení relačních operátorů na tyto typy, takže syntetizér je zpracovává tyto typy jako čísla bez znaménka nebo jako některou z repre-zentací čísel se znaménkem, nejčastěji jako čísla v kódu dvojkového doplňku. Při práci s aritmetickými operátory je třeba prostudovat dokumentaci k syntetizéru, který používáme – potřebné údaje bývají uvedeny v části pojednávající o slohách. V systému WARP umožňují práci s aritmetickými operátory slohy numeric_std a std_arith. Druhá z nich dovoluje používat aritmetických operátorů pro data typu std_logic_vector. (V systému MAX+PLUS II je to sloha std_logic_unsigned.) Jako příklad uveďme popis modelu sčítačky:

LIBRARY ieee; -- TXT11 USE ieee.std_logic_1164.ALL; USE work.std_arith.ALL; ENTITY AddVec IS PORT(a,b: IN std_logic_vector(3 DOWNTO 0); s1,s2: OUT std_logic_vector(3 DOWNTO 0)); END AddVec;

ARCHITECTURE Add4 OF AddVec IS BEGIN s1 <= a + b; s2 <= a + 2; END Add4;

Signály zde mají šířku jen 4 bity, i když výsledek může být pětibitový. Operátor + však ve WARPu dává jako výsledek vektor o šířce, která odpovídá operandu (sčítanci) s větší šířkou. To dovoluje snadné modelování čítačů, u nichž není vytvořen přenosový bit, zápisem

Cnt <= Cnt + 1; Pokud chceme vytvořit sčítačku s přenosovým bitem, můžeme ji popsat následujícím textem:

LIBRARY ieee; -- TXT12 USE ieee.std_logic_1164.ALL; USE work.std_arith.ALL; ENTITY Add_w_ca IS PORT(a,b: IN std_logic_vector(3 DOWNTO 0); sum: OUT std_logic_vector(4 DOWNTO 0)); END Add_w_ca;

ARCHITECTURE Add4Ca OF Add_w_ca IS BEGIN sum <= ('0' & a) + b; END Add4Ca;

10.4.2 Sekvenční příkazy Tyto příkazy se používají v procesech (které byly již dříve popsány), ve funkcích a v pro-cedurách. Připomeňme, že proces jako celek představuje souběžný příkaz, tj. nezáleží na

Page 122: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

122 FEKT Vysokého učení technického v Brně

pořadí, v němž jsou jednotlivé procesy a další souběžné příkazy v kódu uvedeny. Příkazy uvnitř procesu však mají sekvenční charakter a jejich pořadí ovlivňuje výsledek procesu. Nezaměňujte je s modelováním sekvenčních obvodů! Pomocí procesů se sekvenčními příkazy je možno modelovat jak kombinační, tak i sekvenční systémy. Probereme nyní použití procesů a sekvenčních příkazů v nich obsažených při modelování kombinačních obvodů. Příkaz IF-THEN-ELSE je sekvenčním ekvivalentem příkazu WHEN-ELSE. Používá se k výběru skupiny příkazů, která se má vykonat v závislosti na vyhodnocení podmínky, z několika takových skupin. Zapisuje se podle vzoru:

IF Podmínka_1 THEN Skupina_příkazů_1 ELSIF Podmínka_2 THEN Skupina_příkazů_2 ELSIF ... ... ... ... ... ... ... ELSE Skupina_příkazů_n END IF;

Je-li Podmínka_1 splněna, bude platit Skupina_příkazů_1, v opačném případě, je-li splněna Podmínka_2, platí Skupina_příkazů_2, atd. Syntaxe jazyka dovoluje zapsat tento příkaz i s jen jednou podmínkou a s odpovídající skupinou příkazů, bez částí ELSIF a ELSE. Je-li v některé skupině příkazů v příkazu IF-THEN-ELSE přiřazena určitému signálu nějaká hodnota, pak se v jazyku VHDL předpokládá, že signál má mít tuto hodnotu až do nového přiřazení. Není-li v procesu, v němž je příkaz IF-THEN-ELSE zapsán, uvažovanému signálu přiřazena před tímto příkazem jiná hodnota a není-li tomu tak ani v jiné jeho skupině příkazů, vytvoří se syntézou procesu struktura záchytného klopného obvodu nebo registru (latch – podrobněji viz dále), jehož zapisovací signál je vytvořen z podmínky. To je významný rozdíl od jiných jazyků, například od jazyka ABEL. Této skutečnosti se říká implicitní paměť. Její vznik může být nežádoucím důsledkem nepromyšleně zapsaného zdrojového textu. K tomu může snadno dojít, má-li příkaz IF-THEN-ELSE jen jednu skupinu příkazů (není-li v něm část ELSE) a není-li v procesu předtím přiřazena signálu počáteční hodnota. Není-li vytvoření záchytného registru naším úmyslem, můžeme jeho vzniku zabránit tím, že v procesu před příkazem IF-THEN-ELSE zapíšeme definici počátečních hodnot signálů, které tento příkaz mění, jako je tomu v textu TXT3, nebo tím, že uvedeme část ELSE s přiřazením opačné hodnoty tomuto signálu (TXT2).

Page 123: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 123

Příklad procesu s příkazem IF-THEN-ELSE – popis modelu multiplexoru: PROCESS (a,b,c,d,s) BEGIN -- TXT13 IF s = "00" THEN x <= a; ELSIF s = "01" THEN x <= b; ELSIF s = "10" THEN x <= c; ELSE x <= d; END IF; END PROCESS;

Příkaz CASE-WHEN je dalším ze sekvenčních příkazů používaných v procesech. Je to sekvenční ekvivalent příkazu WITH-SELECT-WHEN. Jeho syntaxe je:

CASE Výběrový_signál IS WHEN Hodnota_1_výběrového_signálu => Skupina_příkazů_1 WHEN Hodnota_2_výběrového_signálu => Skupina_příkazů_2 ... ... ... WHEN Hodnota_n_výběrového_signálu => Skupina_příkazů_n

Příkazy CASE-WHEN se používají nejčastěji při modelování stavových automatů. Příklady jejich použití jsou uvedeny v příslušné kapitole. Priorita u příkazů WHEN-ELSE a IF-THEN-ELSE. Souběžný příkaz WHEN-ELSE může být nahrazen procesem s příkazem IF-THEN-ELSE. Podobně je možno příkaz WITH-SELECT-WHEN nahradit procesem s příkazem CASE-WHEN. Příkazy WHEN-ELSE a IF-THEN-ELSE mají charakter prioritního přiřazení, kdy skupiny příkazů uvedené dříve (s nižším číslem podmínky v uvedeném popisu syntaxe) mají prioritu před skupinami příkazů uvedenými později (s vyš-ším číslem). Pokud příslušné podmínky mají tvar relačních příkazů, v nichž se jeden signál testuje na všechny možné hodnoty, jichž může nabývat, jsou tyto příkazy ekvivalentní příkazům WITH-SELECT-WHEN a CASE-WHEN. Příkazy WHEN-ELSE a IF-THEN-ELSE však mohou vést při syntéze ke složitějšímu výsledku, pokud obsahují různé signály a přesto se podmínky v nich vzájemně vylučují, protože tyto příkazy vytvářejí logiku s uvedenou prioritou, která v tomto případě není potřebná. Na příkladu dalších dvou textů ukážeme, jak se projeví rozdíl mezi příkazy vytvářejícími prioritu a příkazy, které ji nevytvářejí:

LIBRARY ieee; -- TXT14 USE ieee.std_logic_1164.all; ENTITY Srovn IS PORT(a,b,c,d: IN std_logic; j,k: IN std_logic; x: OUT std_logic); END Srovn;

ARCHITECTURE Cond OF Srovn IS BEGIN PROCESS (a,b,c,d,j,k) BEGIN IF a = '1' THEN x <= j OR k; ELSIF b = '1' THEN x <= j AND k; ELSIF c = '1' THEN x <= j XOR k; ELSIF d = '1' THEN x <= j XNOR k; ELSE x <= '-'; END IF; END PROCESS; END Cond;

Kompilací tohoto textu například systémem WARP pro cílový obvod 22V10 zjistíme, že je zapotřebí sedmi termů. Podobnou funkci však můžeme vytvořit pro stejnou entitu architekturou s příkazy CASE-WHEN:

ARCHITECTURE Excl OF Srovn IS -- TXT15 SIGNAL Sel: std_logic_vector(3 DOWNTO 0); BEGIN Sel <= (a & b & c & d); PROCESS (a,b,c,d,j,k) BEGIN

Page 124: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

124 FEKT Vysokého učení technického v Brně

CASE Sel IS WHEN "1000" => x <= j OR k; WHEN "0100" => x <= j AND k; WHEN "0010" => x <= j XOR k; WHEN "0001" => x <= j XNOR k; WHEN OTHERS => x <= '-'; END CASE; END PROCESS; END Excl;

Zde je u obvodu 22V10 zapotřebí jen čtyř termů. Oba texty jsou rovnocenné v případě, že je zajištěno, že ze vstupních signálů bude nejvýše jeden aktivní. Samozřejmě bez splnění této podmínky texty ekvivalentní nejsou. Při kompilaci systémem MAX+PLUS II však zjistíme, že výsledky jsou výrazně odlišné. Příčiny jsou dvě. Jednak uvedený systém nedokáže využít neúplné definice logických funkcí (symboly '-' v textu) ke zjednodušení jejich realizace a nahrazuje tyto hodnoty nulami, a dále obvody PLD firmy Altera řady 7000, pro něž systém texty kompiluje, obsahují tzv. expandéry, jejichž využitím může být konfigurace cílového obvodu zjednodušena. Zde má zřejmě největší vliv první uvedená skutečnost, takže výsledek kompilace je složitější než pro obvod 22V10. I zde však druhá varianta vychází jednodušeji než první.

10.4.3 Třístavové výstupy, výstupy s otevřeným kolektorem a obousměrné brány

Třístavové výstupní signály mohou nabývat hodnot '0', '1' a 'Z', které jsou obsaženy mezi možnými hodnotami signálů typu std_logic. Signály na výstupech s otevřeným kolektorem mohou nabývat hodnot '0'a 'Z'. Behaviorální popis obvodu s třístavovými výstupy si ukážeme na příkladu multiplexoru:

LIBRARY ieee; -- TXT16 USE ieee.std_logic_1164.ALL; ENTITY Mux_3s IS PORT(a,b,c,d: IN std_logic_vector(3 DOWNTO 0); -- datové vstupy s: IN std_logic_vector(1 DOWNTO 0); -- výběrový vstup Oe: IN std_logic; -- řídicí signál X_3s: OUT std_logic_vector(3 DOWNTO 0)); -- třístavový výstup END Mux_3s;

ARCHITECTURE ArchMux_3s OF Mux_3s IS SIGNAL x: std_logic_vector(3 DOWNTO 0); -- vnitřní uzel BEGIN WITH s SELECT x <= a WHEN "00", b WHEN "01", c WHEN "10", d WHEN OTHERS; Tristate: PROCESS (Oe,x) BEGIN -- popis 3stavových IF Oe = '0' THEN X_3s <= (OTHERS => 'Z'); -- výstup. zesilovačů ELSE X_3s <= x; END IF; END PROCESS Tristate; END ArchMux_3s;

Konstrukt (OTHERS => 'Z') v jazyku VHDL představuje agregát. V tomto případě mají všechny signály v něm obsažené hodnotu 'Z', tedy jde o stav vysoké impedance. Klíčové slovo OTHERS zde zastupuje všechny prvky agregátu s hodnotou 'Z'. Pokud by některé prvky agregátu měly jinou hodnotu, je možno použít například zápisu:

SIGNAL y: std_logic_vector(7 DOWNTO 0); y <= ('0','1',OTHERS => '0');

Page 125: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 125

Zde je signál y definován jako agregát ('0','1','0','0','0','0','0','0'). Pomocí klíčového slova OTHERS můžeme zapsat prvky agregátu se stejnou hodnotou, které se v něm vyskytují na pozicích nejvíce vpravo, a lze jej také použít, jsou-li všechny prvky agregátu stejné. S hodnotou 'Z' můžeme zacházet podobně jako s obvyklými hodnotami číslicových signálů '0' a '1' (samozřejmě jen tehdy, je-li tato hodnota uvedena v deklaraci typu příslušného signálu). Způsobů zápisu třístavových signálů je více. Způsob uvedený v textu TXT16 odpovídá představě, že se v cílovém obvodu nejprve vytvoří běžný dvoustavový signál x a z něj se pak třístavovým výstupním zesilovačem vytvoří signál X_3s. Jiné způsoby popisu nemusí tuto představu formálně vystihovat, výsledek zpracování kódu návrhovým systémem by však měl být stejný. Signál pro řízení výstupního třístavového zesilovače (Oe v uvedeném příkladu) nemusí být v textu explicitně vyjádřen, může být vytvořen například dekódováním vstupních nebo vnitřních signálů (například hodnota 'Z' může být jednou z hodnot přiřazovaných signálu x v příkazu WITH-SELECT-WHEN). Behaviorální popis výstupů s otevřeným kolektorem je podobný jako popis třístavových výstupů. V tomto případě je z hlediska jejich fyzické realizace výstižnější například popis pomocí příkazu WHEN-ELSE. Například popis členu NAND s otevřeným kolektorovým výstupem může být:

y <= '0' WHEN (a AND b) = '1' ELSE 'Z'; Můžeme však i zde použít například popis pomocí procesu, příslušný nástroj návrhového systému si s tím obvykle poradí (s výše uvedenou výhradou k typu výstupního signálu). Obousměrné brány se popisují zcela analogicky. V deklaraci entity musí mít deklarován typ INOUT. Jako příklad uveďme popis modelu registru se statickým řízením (latch):

LIBRARY ieee; -- TXT17 USE ieee.std_logic_1164.ALL; ENTITY RegBidir IS PORT(q: INOUT std_logic_vector(7 DOWNTO 0); -- obousměrná brána En: IN std_logic; -- latch enable Oe: IN std_logic); -- řídicí signál výstupu END RegBidir;

ARCHITECTURE ArchReg OF RegBidir IS SIGNAL Qa: std_logic_vector(7 DOWNTO 0); -- vnitřní uzel BEGIN Load: PROCESS (En,q) BEGIN IF (En = '1') THEN Qa <= q; -- naplnění END IF; -- implicitní paměť END PROCESS Load; Output: PROCESS (Oe,Qa) BEGIN -- popis 3stavových IF Oe = '0' THEN q <= (OTHERS => 'Z'); -- výstupních zesilovačů ELSE q <= Qa; END IF; END PROCESS Output; END ArchReg;

Uvedený text je zpracován syntetizérem zpravidla bez problémů, obsahuje-li cílový obvod hardwarové registry se statickým řízením (např. CY371 firmy Cypress a mnoho dalších obvodů CPLD). Není-li tomu tak, dokážou inteligentní syntetizéry vytvořit registr ve struktuře makrobuněk, pokud to struktura cílového obvodu dovoluje (například v obvodu 22V10 nelze vytvořit takový registr s třístavovými výstupy, protože se zde zpětná vazba odebírá až za výstupem třístavových zesilovačů a uvedou-li se tyto zesilovače do stavu vysoké impedance, rozpojí se tím smyčka zpětné vazby v registru). U syntetizérů s menším stupněm inteligence však mohou nastat problémy s hazardy, případně může být výsledek zcela chybný.

Page 126: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

126 FEKT Vysokého učení technického v Brně

10.5 MODELOVÁNÍ ASYNCHRONNÍCH SEKVENČNÍCH OBVODŮ

K nejzákladnějším asynchronním sekvenčním obvodům patří klopné obvody typu RS, klopné obvody typu D se statickým řízením a můžeme k nim počítat i asynchronní čítače. Klopné obvody typu RS se v jazyku VHDL popisují nejlépe pomocí logických výrazů podobně jako v jazyku ABEL a není zde žádný zvláštní problém. Pokud jde o čítače, behaviorální styl je vhodný zejména pro synchronní čítače. Asynchronní čítač pak můžeme hierarchicky popsat tak, že jej rozdělíme na bloky, z nichž každý má synchronní charakter (u binárního asynchronního čítače obvyklého zapojení to jsou jednotlivé klopné obvody), které lze popsat behaviorálním stylem (můžeme ale použít i jiného stylu), a ty pak náležitě propojíme ve vyšším stupni hierarchie. Příklad je uveden dále (TXT22). Podrobněji se nyní podíváme na popis modelu klopného obvodu typu D se statickým řízením (latch). V češtině chybí stručný výraz pro označení tohoto typu obvodu. Zde budeme používat slovní spojení záchytný klopný obvod (více těchto obvodů se společným řízením nazýváme záchytný registr), popř. poloslangové označení anglickým termínem. Většina obvodů CPLD a FPGA má ve své struktuře záchytné klopné obvody vytvořeny jako předem připravené bloky. Pokud je hodláme využít pro vytvoření záchytného registru, můžeme použít popisu, který je ilustrován textem TXT17. Pro naplnění zde přirozeně můžeme použít jakýkoliv jiný signál (nejen signál z obousměrné brány) a výstupy nemusí být třístavové. Neobsahuje-li cílový obvod uvedené bloky, nebo je-li potřebné z jakýchkoliv důvodů vytvořit latch z běžné struktury obvodů PLD nebo FPGA, je nutno postupovat s určitou opatrností. Latch může být popsán pomocí logických výrazů zápisem:

LIBRARY ieee; -- TXT18 USE ieee.std_logic_1164.ALL; ENTITY Latch IS PORT(d: IN std_logic; -- vstup q: BUFFER std_logic; -- výstup En: IN std_logic); -- latch enable END Latch;

ARCHITECTURE LogExpr OF Latch IS BEGIN q <= (d AND En) OR (q AND NOT En) OR (d AND q); END LogExpr;

První sčítanec znamená, že při aktivním signálu En se do obvodu zapíše signál d, druhý říká, že při neaktivním signálu En zůstává výstup nezměněn. Poslední člen není zdánlivě potřebný, protože ze statického hlediska je zahrnut do předcházejících dvou, jak můžeme snadno nahlédnout zakreslením výrazu do Karnaughovy mapy. Z této mapy však také vidíme, že poslední člen představuje tzv. konsensus předcházejících dvou a odstraňuje hazard, který je při jeho vypuštění v obvodu přítomen. Je možno ukázat, že bez odstranění tohoto hazardu není funkce záchytného klopného obvodu spolehlivá. Běžný mechanismus minimalizace logických funkcí prováděný při syntéze konsensus vypouští. Některé moderní návrhové systémy však mají zabudován mechanismus, který ze zápisu textu pozná, že je vypuštění konsensu nežádoucí. Neobsahuje-li systém tuto inteligenci, musíme při kompilaci zakázat optimalizaci. Je vhodné přesvědčit se na jednoduchých příkladech, jestli systém pracuje správně i bez zákazu minimalizace, a po syntéze si prohlédout výpis a zjistit, zda byl konsensus zachován. Systémy často obsahují bloky představující záchytné klopné obvody jako tzv. tvrdá makra (hard macro), která se strukturálním popisem zanesou do návrhu a při následující syntéze se zpracovávají jako celek (neoptimalizuje se jejich vnitřní struktura), což je podmínkou jejich správné funkce. Pokud tato makra nejsou k dispozici a inteligence systému není na takové úrovni, aby konsensus zachovala bez zásahu návrháře, bývají obvykle v systému prostředky (direktivy, přepínače a podobně), které správnou syntézu umožňují. Jsou však různé v různých systémech a pro každý systém je nutno postupovat individuálně.

Page 127: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 127

Při práci s jazykem VHDL se můžeme také setkat s neúmyslně vytvořeným záchytným klopným obvodem, jak bylo již uvedeno dříve. U některých systémů může takto vytvořený obvod po syntéze obsahovat uvedený hazard, případně v něm mohou být jiné nedokonalosti. Chceme-li psát kód nezávislý na cílovém obvodu a na míře inteligence návrhových systémů, pak je vhodnější, je-li to možné, vyhnout se použití záchytného klopného obvodu, není-li realizován zvláštním blokem ve struktuře cílového obvodu – aspoň pokud připadá v úvahu, že použitý syntetizér nemusí mít potřebnou inteligenci pro automatické zachování konsensu. Mechanismus rozeznání určitého typu obvodu, který nemusí přímo vyplývat ze zápisu kódu na základě definice jazyka, se v angličtině nazývá inferencing. Tento výraz by bylo možno do češtiny přeložit jako vyvození. Jde o rozpoznání úmyslu návrháře, který je vyjádřen určitým standardním způsobem zápisu jazykového konstruktu. Je to analogie například toho, že editor WORD nahradí automaticky zápis (C) symbolem © (je-li ovšem příslušně nastaven). Inferencing se v moderních návrhových systémech často používá při mnoha příležitostech, nejen u popsaného klopného obvodu, a při seznamování se s novým systémem je důležité zjistit, jaké tyto mechanismy má zabudované. Mohou nám zjednodušit práci, pokud však o nich nevíme, mohou neočekávaně pozměnit zamýšlenou funkci konstrukce.

10.6 MODELOVÁNÍ SYNCHRONNÍCH SEKVENČNÍCH SYSTÉMŮ

V dnešní době se převážná část sekvenčních systémů realizuje formou synchronních systémů podle blokového schématu na následujícím obrázku. Popis modelu takového systému je možno vytvořit sloučením popisu kombinační části způsoby, které jsme již prodiskutovali, s popisem registru.

kombinačníčást registr stav

clk

vstupy výstupy

Obr. 1.2. Blokové schéma synchronního sekvenčního systému

Registr na obr. 1.2 může být typu D, T, JK nebo jiného typu. Důležité je, že je řízený hranou. Většina dnešních syntetizérů provádí optimalizaci typu registru, takže při modelování můžeme vycházet z livobolného typu, prakticky se předpokládá typ D.

V jazyku VHDL se nejčastěji používají tři způsoby modelování registru řízeného hranou. První z nich je naznačen v následujícím textu představujícím osmibitový registr typu D:

LIBRARY ieee; -- TXT19 USE ieee.std_logic_1164.ALL; ENTITY Reg_d IS PORT(d: IN std_logic_vector(7 DOWNTO 0); -- vstup q: OUT std_logic_vector(7 DOWNTO 0); -- výstup Clk: IN std_logic); END Reg_d;

ARCHITECTURE AttrEvent OF Reg_d IS BEGIN PROCESS (Clk) BEGIN IF (Clk’event AND Clk = '1') THEN q <= d; END IF;

Page 128: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

128 FEKT Vysokého učení technického v Brně

END PROCESS; END AttrEvent;

Proces je citlivý jen na změny signálu Clk, což odpovídá registru řízenému hranou tohoto signálu. Připomeňme, že ’event je atribut představující změnu signálu, k němuž je přiřazen. Podmínka Clk’event AND Clk = '1' je splněna, došlo-li ke změně signálu Clk a má-li tento signál hodnotu '1', tj. objevila-li se v tomto signálu vzestupná hrana. (Srovnáme-li tento popis s popisem v ABELu, zjistíme, že v jazyku VHDL jde skutečně o behaviorální vyjádření vzestupné hrany, zatímco v ABELu má popis registru řízeného hranou spíš strukturální charakter. Větší složitost popisu v jazyku VHDL můžeme chápat jako daň za čistotu stylu.) Registr řízený sestupnou hranou se modeluje stejně, jen zápis Clk = '1' se nahradí zápisem Clk = '0'. Má-li registr mít asynchronní vstup (nulovací a podobně), musí se příslušný asynchronní signál objevit v deklaraci entity a do procesu je nutno tento signál doplnit do seznamu citlivosti k hodinovému signálu. Je-li například asynchronní nulovací signál označen identifikátorem Rst, bude mít začátek popisu architektury znění:

ARCHITECTURE AttrEvent OF Reg_d IS BEGIN PROCESS (Clk,Rst) BEGIN IF Rst = '1' THEN q <= '0'; ELSIF (Clk’event AND Clk = '1') THEN q <= d; ...

Druhý způsob modelování téhož registru řízeného hranou spočívá v použití funkcí rising_edge nebo falling_edge definovaných ve sloze std_logic_1164. Pracujeme-li se signály typu std_logic, musíme před deklarací entity uvést odkaz na tuto slohu, takže jsou dostupné i uvedené funkce:

ARCHITECTURE AttrRisingEdge OF Reg_d IS BEGIN PROCESS (Clk) BEGIN IF rising_edge(Clk) THEN q <= d; ...

Zápis IF (Clk’event AND Clk ='1') THEN... je nahrazen textem IF rising_edge(Clk) THEN..., jinak vše zůstává beze změny. Z hlediska syntézy jsou oba tyto způsoby popisu ekvivalentní. Třetí způsob modelování registru řízeného hranou představuje příkaz WAIT UNTIL. Příkladem je následující architektura, která přísluší stejné entitě Reg_d:

ARCHITECTURE WaitUntil OF Reg_d IS BEGIN -- TXT20 PROCESS BEGIN WAIT UNTIL (Clk = '1'); q <= d; END PROCESS; END WaitUntil;

Tento způsob zápisu je poněkud stručnější. Proces zde neobsahuje seznam citlivosti na signály. To je nezbytné při použití příkazu WAIT, který tento seznam implicitně definuje. Pokud bychom zápis podmínku v tomto příkazu WAIT chápali doslovně, museli bychom jej chápat jako popis staticky řízeného registru: dokud má hodinový signál hodnotu '1', má být přiřazení uvedené v příkazu prováděno. V knize [13] je uveden tvar zápisu příkazu WAIT UNTIL jednoznačněji:

WAIT UNTIL rising_edge(Clk); Podle [8] musí být příkaz WAIT UNTIL u zdrojových textů určených pro syntézu prvním příkazem v procesu. Proto nemůže registr tímto způsobem popsaný obsahovat asynchronní vstup. (V některých pracích, například [14], je toto tvrzení zpochybněno.) Uvedené omezení a patrně i různé možnosti interpretace a z toho vyplývající možnost různého chování syntetizérů jsou patrně příčinou skutečnosti, že se příkaz WAIT UNTIL používá k modelování registru řízeného hranou řidčeji. Zdá se, že jazyk VHDL zde nemá jednoznačně definovanou

Page 129: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 129

interpretaci a je tedy radno, hodláme-li tyto konstrukty využívat, vyzkoušet na jednoduchých příkladech chování syntetizéru, který používáme.

10.7 PROSTŘEDKY JAZYKA VHDL PRO ÚSPORNÝ ZÁPIS KÓDU

Jazyk VHDL obsahuje prostředky, jejichž využitím je možno zapsat popis modelovaných subsystémů s určitou obecností a v konkrétních případech zpřesnit jejich implementaci jednoduchým zadáním číselné hodnoty parametrů a podobně. Sem patří konstrukty, které umožňují vytvořit strukturu v kódu VHDL se stejnou funkcí jako má určitá posloupnost příkazů, kterou je možno vygenerovat nějakým algoritmem. Tato struktura však může být zapsána stručněji a umožňuje prakticky libovolně zvolit délku nahrazované posloupnosti příkazů pouhým stanovením určité číselné konstanty. Pro úsporný zápis souběžných příkazů se používají příkazy skupiny GENERATE, z nichž zde uvedeme formou příkladu příkaz FOR-IN-TO-GENERATE. Tento příkaz je často užitečný při použití strukturálního stylu, zejména u datových struktur s velkou bitovou šířkou, kde je nutno vkládat opakovaně tytéž komponenty, může však být použit i jinak. Jako příklad uvedeme popis modelu známého zapojení osmibitového asynchronního binárního čítače, který je vytvořen jako kaskáda klopných obvodů typu T, na jejichž vstupy je přiveden konstantní signál logické jedničky, takže každý tento obvod dělí svůj hodinový signál dvěma. Hodinový vstup každého klopného obvodu je připojen na výstup předcházejícího, hodinový vstup prvního klopného obvodu je vstupem čítače. V tomto zapojení čítá čítač zpět, drobnou úpravu zapojení pro získání čítače čítajícího vpřed ponecháme jako cvičení čtenáři. Model čítače může být fyzicky rozčleněn do dvou souborů, které budou tvořit dvoustupňovou hierarchickou strukturu. V prvním z nich bude behaviorálním stylem popsán klopný obvod typu T (TXT21 – entita T_ff) představující základní prvek čítače jako nejnižší stupeň hierarchie.

LIBRARY ieee; -- TXT21 USE ieee.std_logic_1164.ALL; ENTITY T_ff IS PORT(Tin,Clk: IN std_logic; Qout: BUFFER std_logic); END T_ff;

ARCHITECTURE T_ff_arch OF T_ff IS BEGIN PROCESS (Clk) BEGIN IF (Clk'event AND Clk = '1') THEN IF (Tin = '1') THEN Qout <= NOT Qout; END IF; END IF; END PROCESS; END T_ff_arch;

V textu TXT22, který zde představuje druhou (nejvyšší) hierarchickou úroveň, je uveden strukturální popis čítače. V popisu architektury je nejprve deklarována komponenta T_ff. To je nutné, aby do následujícího strukturálního popisu mohla být tato komponenta několika-násobně vložena. Deklarace komponenty je formálně velmi podobná deklaraci příslušné entity. Její vložení zajišťují v textu TXT22 příkazy PORT MAP s navazujícím přiřazením skuteč-ných signálů v čítači (a, ClkIn a q(0) až q(6), q(0) až q(7)) signálům lokálním (Tin, Clk, Qout) vyskytujícím se v popisu komponenty T_ff – klopného obvodu. Vstupním signálem klopných obvodů je zde konstantní signál a. Způsob přiřazení uvedený v příkladu se nazývá přiřazení vyjmenováním (named association), kdy jsou vyjmenovány signály lokální a kaž-dému je za znakem => přiřazen signál skutečný, je však možno použít i stručnějšího přiřazení

Page 130: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

130 FEKT Vysokého učení technického v Brně

pozičního (positional association), u něhož se uvedou jen skutečné signály v pořadí, v němž jsou uvedeny v deklaraci komponenty. Má-li komponenta výstupy, které se nepoužívají v jed-notce, do níž je komponenta vložena, označí se tyto výstupy místo skutečných signálů, které by jim jinak byly přiřazeny, klíčovým slovem OPEN. Příkladem může být čítač využívaný ve funkci děliče kmitočtu, u něhož se využívá jen výstup nejvyššího bitu. Zapojení prvního klopného obvodu se od dalších liší tím, že jeho hodinový vstup představuje vstup čítače, zatímco hodinové vstupy dalších klopných obvodů jsou připojeny k výstupům předcházejících. Proto je vložení prvního tohoto obvodu provedeno zvláštním příkazem, zatímco zbývajících sedm je popsáno příkazem FOR-IN-TO-GENERATE s pomocnou pro-měnnou i. Tu není nutno zvlášť deklarovat, pokud se používá uvedeným způsobem v příkazu FOR-IN-TO-GENERATE. Před příkazem GENERATE musí být uvedeno návěští (g1 v násle-dujícím textu). Pod závěrečným řádkem tohoto příkazu je formou komentáře naznačeno, jak by se těchto sedm klopných obvodů vkládalo bez použití příkazu FOR-IN-TO-GENERATE.

LIBRARY ieee; -- TXT22 USE ieee.std_logic_1164.ALL; ENTITY AsynCnt IS PORT(ClkIn: IN std_logic; q: BUFFER std_logic_vector(7 downto 0)); END AsynCnt;

ARCHITECTURE AsCntGen OF AsynCnt IS COMPONENT T_ff PORT(Tin,Clk: IN std_logic; Qout: BUFFER std_logic); END COMPONENT; SIGNAL a: std_logic := '1'; BEGIN Tff0: T_ff PORT MAP (Tin=>a, Clk=>ClkIn, Qout=>q(0)); g1: FOR i IN 0 TO 6 GENERATE Tff: T_ff PORT MAP (Tin=>a, Clk=>q(i), Qout=>q(i+1)); END GENERATE; -- Tff1: T_ff PORT MAP (Tin=>a, Clk=>q(0), Qout=>q(1)); -- Tff2: T_ff PORT MAP (Tin=>a, Clk=>q(1), Qout=>q(2)); -- ... ... ... -- Tff7: T_ff PORT MAP (Tin=>a, Clk=>q(6), Qout=>q(7)); END AsCntGen;

Příkazy skupiny GENERATE mohou obsahovat mezi úvodní částí FOR-IN-TO-GENERATE a závěrečnou částí END GENERATE i vnořené podmíněné příkazy GENERATE, které dovolují vytvářet složitější struktury. Podrobnosti lze najít např. v literatuře [8], [13] a další. Při zpracování textu systémem MAX+PLUS II se tento systém chová dosti záludně: hlásí chybu údajně spočívající v tom, že chybí zdroje signálů q0 až q7. Takové signály se ve skutečnosti v textu nevyskytují. Příčinou je, že systém nepodporuje atribut 'event pro bity vícebitových signálů. Podotýkáme však, že není snadné se k této informaci dopracovat. Je zřejmé, že i u poměrně dobře zpracovaného systému, jakým je MAX+PLUS II, se občas setkáme s chováním, které není zcela domyšleno. Uvedenou nesnáz zde můžeme obejít tak, že v architektuře As_cnt_gen deklarujeme signály q0 až q7 (neindexované), ty uvedeme v pří-kazech PORT MAP místo indexovaných signálů a jejich hodnoty přiřadíme indexovaným signálům přiřazovacími příkazy. Standard VHDL-93 dovoluje v příkazu PORT MAP zapsat výrazy jako skutečné signály. Pak není nutno v předcházejícím textu deklarovat signál a a místo něj lze psát v uvedeném příkazu rovnou '1'. Tento standard dovoluje další zjednodušení zvané přímé vkládání entity (direct entity instantiation): při tom není nutno deklarovat komponentu (v textu TXT22 odpadá tučně psaný úsek mezi slovy COMPONENT a END COMPONENT), a za předpokladu, že entita T_ff je zkompilována v knihovně WORK, můžeme vložení prvního klopného obvodu popsat takto:

Page 131: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 131

Tff0: ENTITY work.T_ff PORT MAP (Tin=>a, Clk=>ClkIn, Qout=>q(0)); a podobně i pro další klopné obvody. Vložení entity je tak formálně zcela analogické používání podprogramů v programovacích jazycích. Klíčové slovo COMPONENT se pak v textu vůbec nevyskytuje. Z důvodů návaznosti na standard VHDL-87 se však v anglických textech i v tomto případě často setkáme s označením tohoto postupu jako přímého vkládání komponenty (direct component instantiation). Při zápisu sekvenčních příkazů uvnitř procesů je často možné dosáhnout podobné úspory použitím smyček (loop). Smyčky mohou být typu for nebo typu while. Mohou, ale nemusí být označeny návěštím, jak uvidíme dále. Jako příklad si uveďme zápis představující asynchronní nulování pole registrů o osmi prvcích, z nichž každý má 9 bitů. Pole může sloužit například jako paměťová struktura typu FIFO nebo LIFO (po doplnění výstupních a řídicích bran a příslušných řídicích obvodů):

LIBRARY ieee; -- TXT23 USE ieee.std_logic_1164.ALL; ENTITY RegArray IS PORT(Clk,Rst: IN std_logic; D_in: IN std_logic_vector(8 DOWNTO 0); -- vstup END RegArray;

ARCHITECTURE Arch_rarr OF RegArray IS TYPE RegArr IS ARRAY(7 DOWNTO 0) OF std_logic_vector(8 DOWNTO 0); SIGNAL Registers: RegArr; -- pole osmi devítibitových registrů BEGIN PROCESS (Clk,Rst,D_in) BEGIN IF Rst = '1' THEN FOR i IN 1 TO 7 LOOP RegArr(i) <= (OTHERS => '0'); -- asynchronní nulování END LOOP; ELSIF (Clk'event AND Clk = '1') THEN -- ... ... ... (popis synchronního plnění a další funkce registrů) END IF; END PROCESS; END Arch_rarr;

Podobně jako u příkazu FOR-IN-TO-GENERATE, i zde je proměnná i deklarována automaticky. Místo smyčky typu for můžeme použít smyčku typu while:

PROCESS (Clk,Rst,D_in) -- TXT24 VARIABLE i: integer; BEGIN i := 0; IF Rst = '1' THEN WHILE i < 7 LOOP RegArr(i) <= (OTHERS => '0'); -- asynchronní nulování i := i + 1; END LOOP; ELSIF (Clk'event AND Clk = '1') THEN -- ... ... ... (popis synchronního plnění a další funkce registrů) END IF; END PROCESS;

Zde je nutno proměnnou i deklarovat, inicializovat a inkrementovat. Připomeňme, že přiřazovací příkazy u proměnných mají charakter bezprostředního přiřazení (immediate assignment) na rozdíl od přiřazovacích příkazů užívaných v procesu pro signály (scheduled assignment), a značí se také odlišným přiřazovacím operátorem (:=). Některé systémy jako WARP vyžadují, aby tato proměnná byla inicializována uvnitř příkazové části procesu, tedy mezi klíčovými slovy BEGIN a END v procesu, jiné dovolují inicializaci v jeho deklarační části stručněji zápisem

VARIABLE i: integer := 0;

Page 132: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

132 FEKT Vysokého učení technického v Brně

Nemají-li se příkazy ve smyčce provést pro všechny hodnoty pomocné proměnné, můžeme použít k ukončení určitého průběhu smyčkou podmíněného příkazu NEXT:

PROCESS (Clk,Rst,D_in) BEGIN -- TXT25 IF Rst = '1' THEN FOR i IN 1 TO 7 LOOP NEXT WHEN i = 4; -- vynech 4. registr RegArr(i) <= (OTHERS => '0'); -- ostatní nuluj END LOOP; ELSIF (Clk'event AND Clk = '1') THEN -- ... ... ... (popis synchronního plnění a další funkce registrů) END IF; END PROCESS;

Smyčky mohou být vnořovány do sebe (nested). V tomto případě je možno jednotlivé smyčky označit návěštím a v příkazech NEXT, jsou-li použity, pak uvést, která smyčka se jimi ukončuje:

s1: WHILE i < 10 LOOP s2: WHILE i < 10 LOOP -- ... ... ... (příkazy) NEXT s2 WHEN i = j; -- ... ... ... (příkazy) END LOOP s2; END LOOP s1;

Smyčky patří ke konstruktům ve VHDL, které v současnosti nejsou zpracovávány všemi syntetizéry zcela stejně. Při jejich použití je vhodné ověřit si, jak s nimi nakládá systém, s nímž pracujeme. K prostředkům pro úsporný zápis kódu můžeme také počítat tzv. parametrizované komponenty, u nichž je některý rys (například bitová šířka registru) definován parametrem, jehož číselná hodnota se zadává až při vložení komponenty do jednotky vyšší hierarchické úrovně. Popis parametrizované komponenty je podobný popisu jakékoliv jiné komponenty, pouze s tím rozdílem, že určitý rys, například bitová šířka, je dána parametrem označeným klíčovým slovem GENERIC. V následujícím textu (TXT26) je popsáno jako parametrizovaná komponenta pole čtyř registrů se šířkou zadanou generickým parametrem Width. Signál j vybírá registr, do něhož se při aktivní hraně hodinového signálu zapisují data D_in a jehož obsah je veden na výstup D_out. (Takové pole registrů by patrně nemělo praktický smysl, ale nevelké rozšíření, kdy místo jednoho výběrového signálu budou dva, jeden pro vstup a druhý pro výstup, již smysl tomuto poli dává – ponecháme je čtenáři.) Komponenty deklarované v popisu architektury jsou přístupné jen uvnitř této architektury. Hlavní smysl parametrizovaných komponent je však v jejich použití jako stavebních prvků ve vyšší hierarchické úrovni dalších konstrukcí. Výrobci obvodů PLD a FPGA vytvářejí pak pro často používané bloky (registry, čítače apod.) předdefinované moduly optimalizované pro příslušnou strukturu cílových obvodů. Deklarace těchto komponent se uvádějí ve slohách. Jednotky deklarované ve slohách jsou pak přístupné i pro další konstrukce. Popis architektury těchto komponent pak může být výrobcem dodán v knihovnách již ve zkompilovaném tvaru, takže není pro uživatele přístupný jinak než pro vložení zkompilované komponenty do uživatelovy konstrukce.Uživatel tak nemá k dispozici zdrojový text pro tyto komponenty, čímž si jejich autoři chrání své duševní vlastnictví (intelectual property). Ve slohách mohou být kromě komponent uvedeny i další jednotky, které pak může uživatel zpřístupnit klauzulí USE ve svých konstrukcích. Tak jsme se již setkali s definicemi typů, například typu std_logic nebo std_logic_vector uvedených v knihovně IEEE ve sloze std_logic_1164. Rovněž často se využívají funkce představující přetížené operátory, které jsou také obsaženy ve standardních slohách.

Page 133: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 133

Slohy si může nadefinovat i uživatel, a umístit do nich deklarace modulů, které bude ve svých dalších konstrukcích využívat podobně jako slohy s moduly od výrobců obvodů, a další deklarace (typů, funkcí a podobně). V našem případě zkompilujeme slohu Array_pac i s popisem komponenty RegArray_p do knihovny work. Komponentu deklarovanou ve sloze pak můžeme využít například v další entitě Stack, případně v dalších podobných konstrukcích. LIBRARY ieee; -- TXT26 USE ieee.std_logic_1164.ALL; PACKAGE ArrayPac IS COMPONENT RegArray_p GENERIC (Width: integer := 16); PORT(Clk: IN std_logic; j: IN integer RANGE 0 TO 3; D_in: IN std_logic_vector(Width-1 DOWNTO 0); -- vstup D_out: IN std_logic_vector(Width-1 DOWNTO 0)); -- výstup END COMPONENT; END ArrayPac;

LIBRARY ieee; USE ieee.std_logic_1164.ALL; ENTITY RegArray_p IS GENERIC (Width: integer := 16); PORT(Clk: IN std_logic; j: IN integer RANGE 0 TO 3; D_in: IN std_logic_vector(Width-1 DOWNTO 0); -- vstup D_out: IN std_logic_vector(Width-1 DOWNTO 0)); -- výstup END RegArray_p;

ARCHITECTURE Arch_rarr OF RegArray_p IS TYPE RegArr_p IS ARRAY(3 DOWNTO 0) OF std_logic_vector(Width-1 DOWNTO 0); SIGNAL registers: RegArr_p; -- pole čtyř registrů se šířkou Width BEGIN PROCESS (Clk) BEGIN IF (Clk'event AND Clk = '1') THEN FOR i IN 3 DOWNTO 0 LOOP Registers(i) <= Registers(i); IF j = i THEN Registers(i) <= D_in; END IF; END LOOP; END IF; END PROCESS; D_out <= Registers(j); END Arch_rarr; V deklaraci komponenty je parametru Width přiřazena počáteční (default) hodnota 16. Pokud bude komponenta vložena do jednotky vyšší hierarchické úrovně bez aktuálního definování parametru Width, bude jeho hodnota rovna počáteční – zde 16. Jako příklad vložení této komponenty do vyšší hierarchické úrovně nějaké další konstrukce může sloužit následující text, v němž bude šířka registrů zvolena například 8. Jiná šířka se zvolí změnou šířky signálů D_in a D_out v deklaraci entity a odpovídající změnou hodnoty přiřazené parametru Width v příkazu GENERIC MAP. Komponenta RegArray_p zůstává přitom beze změny a při volbě jiné šířky ji není třeba znovu kompilovat. Při použití komponenty deklarované ve sloze ArrayPac umístěné v knihovně WORK musíme tuto komponentu zviditelnit klauzulí USE. LIBRARY ieee; -- TXT27 USE ieee.std_logic_1164.ALL; USE work.ArrayPac.all; ENTITY Stack IS PORT(Clk: IN std_logic; j: IN std_logic_vector(1 DOWNTO 0);

Page 134: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

134 FEKT Vysokého učení technického v Brně

D_in: IN std_logic_vector(7 DOWNTO 0); -- vstup D_out: IN std_logic_vector(7 DOWNTO 0)); -- výstup END Stack;

ARCHITECTURE Arch_stack OF Stack IS SIGNAL Jint: integer RANGE 0 TO 3; BEGIN Slv2int: PROCESS (j) VARIABLE Jvar: integer; BEGIN Jvar := 0; IF j(0) = '1' THEN Jvar := 1; END IF; IF j(1) = '1' THEN Jvar := Jvar + 2; END IF; Jint <= Jvar; END PROCESS Slv2int; Stck: RegArray_p GENERIC MAP(Width => 8) PORT MAP (Clk,Jint,D_in,D_out); END Arch_stack; V příkazu PORT MAP je zde použito pozičního přiřazení signálů. V textu TXT27 je vstupní signál j deklarován jako typ std_logic_vector. Protože je v komponentě RegArray_p tento signál typu integer, není možno jej přímo uvést ve výčtu signálů v příkazu PORT MAP, ale je nutno jej převést na typ odpovídající typu v komponentě. To je zde zajištěno procesem Slv2int. Pokud použitý systém podporuje aritmetické operace s mocninami (jako například WARP, ne však MAX+PLUS II), je možno zapsat výpočet hodnoty proměnné Jvar nezávisle na počtu bitů smyčkou (čtenář si jistě vzpomene na další způsob převodu, kde není nutno používat operací s mocninami, viz též TXT35):

Page 135: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 135

Jvar := 0; FOR i IN j'range LOOP IF j(i) = '1' THEN Jvar := Jvar + 2**i; END IF; END LOOP;

Počet průchodů smyčkou je zde určen atributem j'range, který zde znamená 1 DOWNTO 0. Výrobci systémů dodávají také slohy, kde jsou obsaženy konverzní funkce k převodu typů signálů, takže místo vypsání textu pro převod stačí vyvolat příslušnou funkci. Jinou možností by bylo deklarovat signál j i v textu TXT27 jako typ integer. Aby byl systém schopen přiřadit signálu tohoto typu potřebnou bitovou šířku, bylo by pak nutno specifikovat v deklaraci rozsah jeho možných celočíselných hodnot (deklarace SIGNAL Jint: integer RANGE 0 TO 3;). V textu TXT27 je možno vkládání komponent podle standardu VHDL-87 nahradit přímým vkládáním entit podle standardu VHDL-93. Způsob použitý v tomto textu ilustruje metodiku, která se v současnosti široce používá zejména pro vkládání komponent předdefinovaných výrobci a představuje jednoduchý příklad hierarchického modelu, jak bude obecněji popsáno dále.

10.8 VYTVÁŘENÍ HIERARCHICKÝCH MODELŮ V JAZYKU VHDL

Jazyk VHDL poskytuje možnosti pro modelování složitých číslicových systémů, které mají hierarchickou stavbu. Při vytváření modelu se takový systém rozdělí na dílčí bloky, jejichž popis je snadněji zvládnutelný a přehlednější, a které můžeme samostatně odladit (simulovat). Tyto bloky bývá nejčastěji vhodné popsat behaviorálním stylem, není to však nezbytné. Jejich propojení se pak popíše strukturálním stylem. Tak vznikne hierarchická struktura modelu, která je nejčastěji dvoustupňová. Není ale vyloučeno použít i více stupňů hierarchie, pokud to je účelné. Pak bývají bloky nejnižší úrovně modelovány behaviorálním stylem a ve vyšších hierarchických stupních se užívá styl strukturální. Příliš mnoho hierarchických stupňů však může vést k nepřehlednosti modelu. Odladěné a zkompilované bloky, kterými mohou být popisy entit a odpovídajících architektur, slohy obsahující deklarace komponent, typů a podobně si uživatel může uschovat v knihovnách (library). Jazyk VHDL nepředepisuje určitý způsob fyzické realizace knihoven, ten je zvolen až při každé konkrétní implementaci jazyka v návrhovém systému. Může to být například adresář (directory), který obsahuje soubor se seznamem prvků knihovny a další soubory s těmito prvky. Každý návrhový systém obsahuje předdefinovanou knihovnu označenou work. Do ní se ukládají prvky, na nichž uživatel právě pracuje. Tato knihovna je implicitní, tj. pokud se nespecifikuje práce s jinou knihovnou, pracuje se s touto. Pokud chceme využívat prvky jiné knihovny, musíme ji učinit viditelnou (visible) pomocí klauzule LIBRARY. Tato klauzule uvedená před popisem entity učiní příslušnou knihovnu viditelnou v tomto popisu a v při-družených popisech architektury. Do knihovny work umisťují návrhové systémy automaticky některé slohy – např. WARP tam umístí slohu std_arith a některé další, které umožňují pracovat s obvody PLD a FPGA firmy Cypress. Tyto další slohy nejsou fyzicky umístěny v adresáři, který je vytvořen vždy při vytvoření knihovny work, ale v této knihovně jsou na ně dostupné odkazy. Návrhové systémy dále obsahují standardně knihovnu ieee, ve které je obsažena sloha std_logic_1164 a některé další. Typy std_logic, std_logic_vector atd. deklarovaných v této sloze můžeme použít, jestliže je zviditelníme klauzulí USE, jak to již bylo uvedeno ve většině příkladů. Prvky hierarchické struktury nižší úrovně zkompilované v knihovně work nebo nacházející se ve slohách v jiných knihovnách zviditelněných klauzulemi LIBRARY a USE pak deklarujeme v

Page 136: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

136 FEKT Vysokého učení technického v Brně

textu popisující vyšší hierarchickou úroveň modelu jako komponenty, případně tato deklarace může být ve sloze, kterou musíme v tomto textu zviditelnit uvedeným způsobem. Deklarace komponent popisuje jejich propojovací prostředky – brány, pomocí nichž propojíme komponenty ve vyšší hierarchické úrovni strukturálním stylem. Příkladem hierarchické konstrukce jsou texty TXT21 a TXT22. (Ve cvičení budou uvedeny další příklady hierarchických modelů, jako generátor Fibonacciovy posloupnosti apod.) Prvky propojované do výsledného celku v textu nejvyšší úrovně můžeme do konstrukce vkládat přímým vložením entit (to není ještě možné ve standardu VHDL-87) nebo jejich vložením pomocí komponent. Oba tyto způsoby vkládání byly již výše popsány. Použití komponent, které je poněkud složitější, umožňuje větší variabilitu ve vytváření struktury modelu pomocí konfigurací (configurations). Konfigurace však nejsou podporovány všemi současnými nástroji pro syntézu. Pokud není popis konfigurace modelu explicitně uveden, předpokládá se platnost tzv. implicitních pravidel pro vazbu mezi komponentami vloženými do architektury modelu a entitami, které jsou pro systém k dispozici (tj. zhruba řečeno, které jsou popsány v souborech patřících k projektu nebo jsou deklarovány zde nebo v knihovnách, které byly zviditelněny a jejich zkompilované popisy jsou v knihovnách přítomny). Implicitní pravidla přiřazují komponentě užité v architektuře entitu, která má stejný název a stejné brány. Popis konfigurace se může začlenit do architektury, v níž jsou deklarovány příslušné komponenty (pak mluvíme o specifikaci konfigurace – configuration specification), nebo může představovat samostatnou jednotku, která se zařadí do projektu (pak jde o deklaraci konfigurace – configuration declaration). Ve strukturálních modelech se jako základní prvky mohou používat zkompilované bloky dodávané výrobci cílových obvodů, které jsou optimalizované pro určitý obvod (říká se jim parametrizované moduly a podobně). Pro určitou funkci je možno použít různé tyto moduly zaměřené na různé cílové obvody. Při změně typu cílového obvodu je nutno takový blok nahradit blokem, který je platný pro nový obvod. To je možno provést úpravou popisu v příslušné úrovni hierarchie a novou kompilací celého modelu, nebo změnou konfigurace a kompilací jen této konfigurace. Pomocí konfigurace je také možno určité deklaraci entity přiřadit různé popisy její architektury. Jako příklad použití konfigurací uvedeme strukturální popis sčítačky vycházející z klasického zapojení dvou půlsčítaček a součtového členu, jak je uváděno v učebnicích číslicové techniky. Na obr. 1.3(a) je znázorněna entita FullAdd představující sčítačku. Předpokládáme, že v knihovně work je zkompilována entita HalfAdd představující půlsčítačku – obr. 1.3(b) – se dvěma přiřazenými architekturami, jedna z nichž je označena identifikátorem Behavioral a druhá Structural. V další knihovně Hradla, která může být vytvořena uživatelem nebo dodána výrobcem obvodů PLD, je zkompilována entita Lpo2 s architekturou Beh_Or. Vstupy a výstup této entity jsou v knihovně Hradla označeny i1, i2 a z, jak je naznačeno na obr. 1.3(c). Ta je užita jako komponenta Or_2 v architektuře FullAddArch a označení jejích vývodů změněno na a, b, c podle obr. 1.3(d) pomocí klauzule PORT MAP. Specifikací konfigurace je vybrána pro vložení půlsčítačky H1 architektura Behavioral a pro vložení H2 architektura Structural. Výsledné zapojení sčítačky je nakresleno na obr. 1.4. Pro půlsčítačku HA (obr. 1.3b) platí: Sum = a ⊕ b, Cy = a · b. Není obtížné dokázat, že zapojení podle obr. 1.4 představuje úplnou sčítačku.

Page 137: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 137

FACinIn1In2

Sum

Cout

HAa

b

Sum

Cy

1i1

i2z

1a

bc

(a) (b) (c) (d) Obr. 1.3. Úplná sčítačka FullAdd (a) a její komponenty – půlsčítačka HalfAdd (b) a součtový člen Or_2 (c,d)

HAIn1

In2

1s3Cout

HACin Sum

s1

s2

H1

H2

O1 Obr. 1.4. Struktura úplné sčítačky FullAdd Popis sčítačky představuje následující text:

LIBRARY ieee; LIBRARY Hradla; -- TXT28 USE ieee.std_logic_1164.ALL; ENTITY FullAdd IS PORT(In1,In2,Cin: IN std_logic; Sum,Cout: OUT std_logic; END FullAdd;

ARCHITECTURE FullAddArch OF FullAdd IS

-- deklarace komponent ------ COMPONENT HalfAdd PORT(a,b: IN std_logic; Sum,Cy: OUT std_logic; END COMPONENT; COMPONENT Or_2 PORT(a,b: IN std_logic; c: OUT std_logic); END COMPONENT; SIGNAL s1,s2,s3: std_logic; -- deklarace signálů

-- specifikace konfigurace architektury FullAddArch ------ FOR H1: HalfAdd USE ENTITY work.HalfAdd(Behavioral); FOR H2: HalfAdd USE ENTITY work.HalfAdd(Structural); FOR O1: Or_2 USE ENTITY Hradla.Lpo2(Beh_Or) PORT MAP(i1=>a,i2=>b,z=>c);

-- tělo architektury FullAddArch - vložení komponent ------ BEGIN H1: HalfAdd PORT MAP(a=>In1,b=>In2,Sum=>s1, Cy=>s2); H2: HalfAdd PORT MAP(a=>Cin,b=>s1, Sum=>Sum,Cy=>s3); O1: Or_2 PORT MAP(a=>s3, b=>s2, c =>Cout); END FullAddArch;

Význam jednotlivých částí specifikace konfigurace: H1, H2, O1 – návěští pro vkládané komponenty, HalfAdd, Or_2 – název vkládané komponenty deklarované v deklarativní části architektury, work, Hradla – knihovna, kde se nachází zkompilovaná entita uvedená za tečkou, HalfAdd, Lpo2 – název entity, Behavioral, Structural, Beh_Or – použitá architektura. Tučně vypsanou část, tj. specifikaci konfigurace architektury FullAddArch, je možno z jejího popisu vypustit a její konfiguraci popsat deklarací konfigurace, která bude začleněna do projektu jako zvláštní jednotka. Ta může být samostatně zkompilována a uložena v knihovně,

Page 138: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

138 FEKT Vysokého učení technického v Brně

a při její případné modifikaci není třeba kompilovat jiné jednotky, což je výhodné zejména u rozsáhlých konstrukcí. Deklarace konfigurace tomu odpovídající je uvedena v následujícím textu, kde je navíc příkaz pro každou komponentu zakončen klauzulí END FOR: CONFIGURATION ConfigAdd OF FullAdd IS -- TXT29 FOR FullAddArch -- identifikátor konfigurované architektury FOR H1: HalfAdd USE ENTITY work.HalfAdd(Behavioral); END FOR; FOR H2: HalfAdd USE ENTITY work.HalfAdd(Structural); END FOR; FOR O1: Or_2 USE ENTITY Hradla.Lpo2(Beh_Or) PORT MAP(i1=>a,i2=>b,z=>c); END FOR; END FOR; END ConfigAdd; Sčítačka popsaná v textu TXT28 a TXT29 je samozřejmě jen školní příklad hierarchické konstrukce. Ve skutečnosti se architektura této sčítačky může v jazyku VHDL popsat mnohem jednodušším způsobem, jak to bylo uvedeno například v textu TXT12, který navíc může představovat vícebitovou sčítačku.

10.9 PŘÍKLADY KONSTRUKCÍ V JAZYKU VHDL

10.9.1 Kombinační obvody a převodníky kódu

Jedna z často používaných metod popisu těchto obvodů v jazycích typu ABEL, pravdivostní tabulka, nemá přímý ekvivalent v jazyku VHDL. V tomto jazyku je možno použít řadu různých způsobů popisu pravdivostní tabulky. Jednoduchý způsob představuje použití příkazu WITH-SELECT-WHEN. Jako příklad uvedeme převodník hexadecimálního kódu na kód sedmisegmentového displeje: LIBRARY ieee; -- TXT30 USE ieee.std_logic_1164.ALL; -- HEX to 7SEG převodník, ověř. v ispGAL ENTITY Hex2Sevn IS PORT (r,s,t,u: IN std_logic; -- datové vstupy g,f,e,d,c,b,a: OUT std_logic); -- výstupy ATTRIBUTE pin_numbers OF Hex2Sevn: ENTITY IS -- určeno pro WARP "r:2 s:3 t:4 u:5 g:17 f:18 e:19 d:20 c:21 b:23 a:24"; -- pro 22V10 PLCC, END Hex2Sevn; -- package JC

ARCHITECTURE TruthTab OF Hex2Sevn IS SIGNAL InHex: std_logic_vector(3 DOWNTO 0); SIGNAL OutSvn: std_logic_vector(7 DOWNTO 0); BEGIN InHex <= (r & s & t & u); g <= OutSvn(6); f <= OutSvn(5); e <= OutSvn(4); d <= OutSvn(3); c <= OutSvn(2); b <= OutSvn(1); a <= OutSvn(0); WITH InHex SELECT OutSvn <= X"40" WHEN X"0", X"00" WHEN X"8", X"79" WHEN X"1", X"10" WHEN X"9", X"24" WHEN X"2", X"08" WHEN X"A", X"30" WHEN X"3", X"03" WHEN X"B", X"19" WHEN X"4", X"46" WHEN X"C", X"12" WHEN X"5", X"21" WHEN X"D", X"02" WHEN X"6", X"06" WHEN X"E", X"78" WHEN X"7", X"0E" WHEN OTHERS; END TruthTab;

Přiřazení vývodů pouzdra PLCC obvodu GAL 22V10 je zde provedeno atributem v popisu entity, syntaxe je zřejmá z textu. V posledním řádku tabulky představuje klíčové slovo OTHERS hexadecimální hodnotu F, ale také všechny další možné hodnoty, které signál typu std_logic_vector může mít (připomeňme,

Page 139: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 139

že kromě hodnot '0' a '1' může každý z prvků vektoru nabývat ještě sedmi dalších hodnot z devíti možných: 'U', 'X', '0', '1', 'Z', 'W', 'L', 'H', '-'). Pro syntézu mají ovšem v tomto případě význam jen hodnoty prvků vektoru '0' a '1'.

10.9.2 Binární čítač

LIBRARY ieee; -- TXT31 USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; -- přetěžuje operátor sčítání ENTITY Cnt_bin IS PORT(Clk: IN std_logic; Rst: IN std_logic; Cnt: BUFFER std_logic_vector(7 DOWNTO 0)); END Cnt_bin;

ARCHITECTURE CntArch OF Cnt_bin IS BEGIN PROCESS (Clk,Rst) BEGIN IF Rst = '1' THEN Cnt <= (OTHERS => '0'); -- nulování (asynchronní) ELSIF (Clk'event AND Clk = '1') THEN Cnt <= Cnt + 1; -- inkrementace END IF; END PROCESS; END CntArch;

V úvodu tohoto textu je použita klauzule USE pro odkaz na slohu std_logic_unsigned, která je obsažena v systému MAX+PLUS II. V této sloze je (mimo dalších užitečných doplňků) přetížen operátor sčítání, který je jinak definován jen pro numerické typy a nelze jej přímo (bez přetížení) použít na typ std_logic_vector. Popsaný čítač obsahuje asynchronní nulovací signál Rst. Jeho asynchronní charakter je dán tím, že asynchronní nulování je v textu uvedeno před konstruktem IF (Clk'event AND Clk = '1'), kterým se uvádí další příkazy modelující synchronní chování čítače. Pokud bychom chtěli mít čítač se synchronním nulováním, stačilo by přesunout příkaz pro nulování za tento konstrukt:

PROCESS (Clk,Rst) BEGIN -- TXT32 IF (Clk'event AND Clk = '1') THEN IF Rst = '1' THEN Cnt <= (OTHERS => '0'); -- nulování (synchronní) ELSE Cnt <= Cnt + 1; -- inkrementace END IF; END IF; END PROCESS;

10.9.3 Stavové automaty

Stavové automaty patří k nejobecnějším číslicovým konstrukcím. Strukturou odpovídají nákresu na obr. 1.2. Bývá však často účelné rozkreslit tuto strukturu podrobněji, čímž dostaneme dělení na automaty Moorova a Mealyho typu, u nichž ještě můžeme rozeznávat různé varianty podle toho, jak se vytvářejí stavové a výstupní signály automatu, jsou-li výstupní signály registrové a podobně. Popis stavových automatů v jazyku VHDL se nejčastěji strukturuje podle blokového schématu z obr. 1.2 nebo z podrobnějších způsobů jeho rozkreslení. Schématu z obr. 1.2 odpovídá nejpoužívanější způsob popisu, tzv. dvouprocesový popis (two-process description) automatu, kde pro kombinační část i pro registr je v popisu vyhrazen zvláštní proces. Je však možno popsat automat i jedním procesem, kde se přímo zapisuje nový stav automatu na základě současného stavu, nebo více procesy, což může být například účelné u Mealyho automatů, pokud výstupní signály jsou závislé na stavu a vstupních signálech, které neovlivňují přechody automatu. Pak může být přehlednější popsat výstupní signály zvláštním procesem. Nejvýhodnější způsob popisu volí návrhář případ od případu.

Page 140: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

140 FEKT Vysokého učení technického v Brně

Jednoduchým příkladem stavového automatu Moorova typu může být detektor tří jedničkových bitů (obr. 1.5). Na výstupu detektoru je jednička, jsou-li přijaty tři jedničky na vstupu detektoru. Jde o detektor s nulováním, u něhož po přijetí posloupnosti tří jedniček se začíná opět od začátku odpočítávat nová posloupnost, zatímco je na výstupu nula.

x

clk

z

s0/0 s1/0 s2/0 s3/11

0

11

1

000

Obr. 1.5. Detektor posloupnosti tří jedničkových bitů a jeho stavový diagram Popis v jazyku VHDL je následující:

LIBRARY ieee; -- TXT33 USE ieee.std_logic_1164.ALL; ENTITY Det3Ones IS PORT(x,Clk IN std_logic; z OUT std_logic); END Det3Ones;

ARCHITECTURE Det3OnesArch OF Det3Ones IS TYPE StType IS (s0,s1,s2,s3); SIGNAL PrSt,NxSt: StType; BEGIN StComb: PROCESS (PrSt,x) BEGIN CASE PrSt IS WHEN s0 => z <= '0'; IF x = '1' THEN NxSt <= s1; ELSE NxSt <= s0; END IF; WHEN s1 => z <= '0'; IF x = '1' THEN NxSt <= s2; ELSE NxSt <= s0; END IF; WHEN s2 => z <= '0'; IF x = '1' THEN NxSt <= s3; ELSE NxSt <= s0; END IF; WHEN s3 => z <= '1'; IF x = '1' THEN NxSt <= s1; ELSE NxSt <= s0; END IF; END CASE; END PROCESS StComb; PROCESS StClckd: PROCESS (Clk) BEGIN IF (Clk'event AND Clk = '1') THEN PrSt <= NxSt; END IF; END PROCESS StComb; END Arch3OnesArch;

Popis architektury využívá vyšší úrovně abstrakce v behaviorálním stylu než jak tomu bylo v dosavadních textech. V deklarativní části popisu architektury je deklarován typ StType, složený ze čtyř prvků představujících stavy automatu, a signály PrSt, NxSt (současný a příští stav automatu). Na této úrovni abstrakce není definováno kódování stavů ani typ stavového registru. Tyto podrobnosti automaticky vygeneruje systém při zpracování textu. Zvolí přitom typ registru (D, T, podle zabudované inteligence i jinak) tak, aby při zvoleném kódování stavů byla realizace automatu co nejjednodušší. Proto signály PrSt, NxSt nemusí odpovídat skutečným kódovým kombinacím na vstupu a na výstupu stavového registru po syntéze (jsou-li například některé klopné obvody, z nichž je stavový registr složen, typu T, je jejich výstupní signál v příštím stavu určen funkční tabulkou tohoto obvodu a není totožný s jeho vstupním signálem v současném stavu, jako je tomu u klopných obvodů typu D). V příkazové části popisu architektury jsou dva procesy. První z nich označený návěštím StComb představuje popis kombinační části automatu, druhý s návěštím StClckd popisuje stavový registr. Pro popis kombinační části automatu bývá výhodné použít příkaz CASE, u

Page 141: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 141

něhož se při kompilaci automaticky kontroluje, zda nebyl opomenut některý z možných stavů automatu deklarovaných v typu (zde StType). Druhý proces popisuje stavový registr. Častým požadavkem bývá možnost asynchronního nebo synchronního vynulování automatu. Pro asynchronní nulování mají obvykle obvody CPLD vybavení v podobě nulovacích vstupů registrů. Popis automatu s asynchronním nulováním odpovídá již uvedenému popisu registru s asynchronním nulováním. Jednoduché obvody PLD však většinou asynchronní nulování nemají. Zde je proto jedinou možností nulování synchronní. Jako příklad nyní podrobněji rozebereme možnosti zavedení synchronního nulování do výše uvedeného detektoru tří jedničkových bitů. Nulování se vykoná při aktivní hraně hodinového impulsu, je-li aktivován vstupní signál SRst. Stavový diagram se zakreslenými přechody při synchronním nulování je nakreslen na obr. 1.6. Je zde plnou čarou nakreslený diagram z obr. 1.5, který je doplněn o přechody představujícími synchronní nulování kreslené tečkovaně. V tomto případě je možno diagram zjednodušit sloučením obou těchto druhů přechodů, což je podmíněno skutečností, že i pro neaktivní signál SRst jsou v diagramu obsaženy přechody do stavu s0. Obecně to však neplatí. Budeme proto dále vycházet z nezjednodušeného diagramu.

s0/0 s1/0 s2/0 s3/11

0

11

1

000

přechody pro SRst = 1:

přechody pro SRst = 0:(připsána je hodnota x)

Obr. 1.6. Stavový diagram detektoru se synchronním nulováním Popis automatu se synchronním nulováním v jazyku VHDL můžeme získat z popisu automatu bez nulování. Především je nutno do deklarace entity přidat příslušný identifikátor nulovacího signálu (zde SRst). Popis architektury je pak možno upravit několika způsoby: 1. Nejjednodušší je doplnit do původního popisu přechodů ze všech stavů automatu podmínku, že se přechod má uskutečnit jen při neaktivní hodnotě nulovacího signálu, a přidat přechody do počátečního stavu při jeho aktivní hodnotě:

CASE PrSt IS WHEN s0 => z <= '0'; IF SRst = '0' THEN IF x = '0' THEN NxSt <= s1; ELSE NxSt <= s0; END IF; ELSE NxSt <= s0; END IF; WHEN s1 => ...

To odpovídá stavovému diagramu nakreslenému na obr. 1.6. Využijeme-li výše uvedeného zjednodušení, můžeme text zapsat stručněji:

CASE PrSt IS WHEN s0 => z <= '0'; IF (x = '1' AND SRst = '0') THEN NxSt <= s1; ELSE NxSt <= s0; END IF; WHEN s1 => ...

U složitějších automatů je to však dosti pracné a komplikuje to popis automatu, zejména pokud původní přechody neobsahují návrat do počátečního stavu, takže je nutno tyto přechody explicitně přidat. Naskýtá se však myšlenka, zda by zde nebylo možno použít principu „vytýkání před závorku“. Na něm jsou založeny další způsoby úpravy. 2. Test na aktivní hodnotu nulovacího signálu je možno přidat před příkaz CASE:

StComb: PROCESS (SRst,PrSt,x) BEGIN IF SRst = '1' THEN NxSt <= s0; z <= '-'; ELSE CASE PrSt IS WHEN s0 => ...

Page 142: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

142 FEKT Vysokého učení technického v Brně

Příkaz CASE zůstává beze změny. Zde nesmíme zapomenout na část z <= '-'. Pro aktivní hodnotu signálu SRst se částí ELSE příkazu IF-THEN-ELSE , tedy příkazem CASE-WHEN, nepřiřazuje signálu SRst žádná hodnota, a při vynechání příkazu z <= '-' vznikne pro signál z nežádoucí latch. (Při rozvinutí procesu do kroků v něm uvedených říkáme, že je-li signál SRst aktivní, neprovede se přiřazení uvedené v části ELSE, tj. celý příkaz CASE-WHEN. Uvědomme si však, že text předepisuje, jaké hodnoty má mít výstupní signál z pro všechny možné hodnoty vstupních signálů, a uvedené rozvinutí popisu vytvoření signálu z je jen naše představa usnadňující popis a pochopení funkce struktury vzniklé syntézou. Ve skutečnosti je tato struktura vytvořena při syntéze, kdy aktuální hodnota žádného signálu, tedy ani signálu SRst, není definována!) Další potíž může nastat, používáme-li systém, který nerozeznává symbol '-' (například MAX+PLUS II, který tyto symboly nahrazuje symbolem '0'). Podle definice v jazyku VHDL znamená symbol '-' hodnotu, na níž nezáleží, což znamená, že výraz pro signál z vzniklý kompilací obsahuje pouze část vytvořenou kompilací příkazu CASE, která nezávisí na nulovacím signálu, což je naším záměrem. Nahrazení symbolu '-' symbolem '0' zde znamená, že se při aktivaci nulovacího signálu má signál z okamžitě (asynchronně) vynulovat, což znamená nežádoucí změnu chování automatu, z něhož se tak stává Mealyho automat s asynchronním výstupním signálem. Předpokládáme-li, že se k syntéze textu může používat systém s takovou interpretací symbolu '-', je lepší použít některé z možností uvedených dále. 3. Příkaz pro vynulování automatu je možno dát na konec procesu StComb:

StComb: PROCESS (SRst,PrSt,x) BEGIN CASE PrSt IS WHEN s0 => ... ... END CASE; IF SRst = '1' THEN NxSt <= s0; END IF; END PROCESS;

V tomto případě se příkaz CASE-WHEN provádí vždy a při všech hodnotách vstupních signálů přiřadí hodnotu jak signálu NxSt, tak i signálu z. Je-li však nulovací signál aktivní, provede se i závěrečný příkaz IF-THEN (část ELSE zde není uvedena, protože při nesplnění podmínky je nový stav definován předcházejícím příkazem CASE-WHEN), kterým se hodnota signálu NxSt přepíše. 4. V procesu StComb se popíšou jen přechody (kterýmkoliv z uvedených způsobů), a pro signál z se vytvoří zvláštní příkaz (souběžný nebo proces), například:

StComb: PROCESS (SRst,PrSt,x) BEGIN CASE PrSt IS WHEN s0 => IF SRst = '1' THEN NxSt <= s1; ELSE NxSt <= s0; END IF; WHEN s1 => ... -- jako v textu TXT33, s vynecháním příkazů pro z ... END CASE; IF SRst = '1' THEN NxSt <= s0; END IF; END PROCESS; WITH PrSt SELECT z <= '1' WHEN s3, '0' WHEN OTHERS; StClckd: PROCESS ...

Pokud se pro výstupní signál popíše pomocí procesu, je zde příklad tříprocesového popisu automatu.

Popis stavových automatů Mealyho typu je v jazyku VHDL formálně velmi podobný popisu automatů Moorova typu. Jsou-li výstupní signály takového automatu synchronní, je k popisu stavových signálů přidán popis výstupních signálů, což může být provedeno ve stejném procesu, nebo, je-li to účelné z hlediska přehlednosti, je možno pro výstupní signály

Page 143: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 143

vytvořit zvláštní proces se stejným hodinovým signálem. U asynchronních výstupů Mealyho automatu se prostě přidají příkazy pro výstupní signály jako souběžné příkazy nebo souběžný proces k procesům, které popisují přechody automatu.

Page 144: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

144 FEKT Vysokého učení technického v Brně

Jako další příklad uvedeme model automatu, který představuje jednoduchý řadič paměti v číslicovém systému. Jeho chování je zřejmé z následujících obrázků (obr. 1.5 a obr. 1.6). Automat bude vybaven synchronním resetem, který pro jednoduchost není do stavového diagramu zakreslen. Ve shodě s běžnou konvencí jsou ve stavovém diagramu použity symboly X pro hodnotu signálu, na níž nezáleží (připomeňme však, že v jazyku VHDL se tato hodnota značí symbolem '-'). Stavový automat Moorova typu – řadič paměti

CPU

rdyrd/wr

clk

stavový

automat

paměť

rd wr

rst

Obr. 1.5. Blokové schéma části systému s řadičem paměti

klidII

volbaII

zápisIO

čteníOI

stav

popis:

rd, wr

rdy, rd/wr IXIX

OX

IX

OXOX

XO XI

Obr. 1.6. Stavový diagram řadiče (synchronní reset v něm není zahrnut) LIBRARY ieee; -- TXT33 USE ieee.std_logic_1164.ALL; ENTITY RdWrMoo IS PORT -- Toto zpracuje i MAX+PLUS II jako Mooruv stroj! (Rdy,RdWr,Rst,Clk: IN std_logic; Rdnt,Wrnt: OUT std_logic); END RdWrMoo;

ARCHITECTURE RdWrArch OF RdWrMoo IS TYPE StateType IS (Klid,Volba,Zap,Ctn); SIGNAL PrSt,NxSt: StateType; -- současný a příští stav SIGNAL Rw: std_logic_vector(1 DOWNTO 0);

Page 145: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 145

BEGIN Rdnt <= Rw(1); Wrnt <= Rw(0); StComb: PROCESS (PrSt,Rdy,RdWr,Rst) BEGIN -- proces popisující CASE PrSt IS -- kombinační část automatu WHEN Klid => Rw <= "11"; IF Rdy = '1' THEN NxSt <= Volba; ELSE NxSt <= Klid; END IF; WHEN Volba => Rw <= "11"; IF RdWr = '1' THEN NxSt <= Ctn; ELSE NxSt <= Zap; END IF; WHEN Zap => Rw <= "10"; IF Rdy = '1' THEN NxSt <= Klid; ELSE NxSt <= Zap; END IF; WHEN Ctn => Rw <= "01"; IF Rdy = '1' THEN NxSt <= Klid; ELSE NxSt <= Ctn; END IF; END CASE; IF Rst = '1' THEN NxSt <= Klid; END IF END PROCESS StComb; StClckd: PROCESS (Clk) BEGIN -- proces popisující IF (Clk'event AND Clk = '1') THEN -- stavový registr PrSt <= NxSt; END IF; END PROCESS StClckd; END RdWrArch;

V deklarativní části architektury je definován typ stavového signálu jako výčtový, složený ze stavů klid, volba, zápis a čtení. To je poněkud abstraktnější způsob behaviorálního popisu než jsme dosud poznali. Syntetizéry dokáží obvykle rozpoznat, že jde o popis stavového automatu, a mají pak prostředky k automatickému převodu takového popisu na úroveň RTL, tedy k automatickému vytvoření stavového registru a odpovídajících signálů. Kódování stavů se pak vytváří automaticky. Typ kódu je v případě potřeby možno zvolit direktivou specifickou pro každý systém nebo pomocí prostředků, které nabízí příslušné uživatelské prostředí. Kombinační část automatu je popsána procesem StComb. Pro behaviorální styl popisu je zde výhodný příkaz CASE, u něhož, jak víme, musí být popsáno chování automatu pro všechny možné hodnoty signálu uvedeného za úvodním slovem CASE, tedy zde signálu PrSt. To zde odpovídá přirozenému požadavku, že musí být popsáno chování automatu ve všech stavech. Pokud však v automatu existují nevyužité stavy, je nutno zvážit jejich ošetření. V našem příkladu by to nastalo, pokud by například stavy Volba měly být dva (třeba z důvodů dynamického chování automatu). Podrobněji o problému nevyužitých stavů pojednáme v dal-ším textu. Abstrakcí jsou zde i signály současného stavu (PrSt) a příštího stavu (NxSt). Signál příštího stavu je skutečně realizován popsaným způsobem tehdy, je-li stavový registr typu D. Velmi často se však ve skutečnosti používá registr typu T, případně jiné typy registrů podle toho, co je k dispozici v cílovém obvodu, přičemž se příslušná konverze provádí automaticky. Signál příštího stavu se pak v automatu fyzicky nevyskytuje. Dalším možným úskalím je nulování automatu. Řadič obsahuje synchronní nulovací signál Rst. Jeho funkce je popsána v závěru procesu StComb příkazem IF Rst = '1'..., který v případě aktivace nulovacího signálu nahradí hodnotu příštího stavu vytvořenou příkazem CASE hodnotou Klid. Pak následuje druhý proces StComb modelující stavový registr. V něk-

Page 146: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

146 FEKT Vysokého učení technického v Brně

terých literárních pramenech, např. v [8], je uveden ještě další možný tvar popisu automatu, kde je úsek popisující funkci nulovacího signálu uveden před příkazem CASE:

StComb: PROCESS (PrSt,Rdy,RdWr,Rst) BEGIN -- TXT34 IF Rst = '1' THEN NxSt <= Klid Rw <= "--"; -- MAX vytvoří Mealyho automat! ELSIF CASE PrSt IS...

Tento způsob popisu je pro systém WARP ekvivalentní předcházejícímu. Nelze zde vynechat hodnotu signálu Rw <= "--"; – jinak se ve struktuře cílového obvodu vytvoří latch pro signály Rdnt, Wrnt. Systém MAX+PLUS II však zápis "--" nahrazuje logickými nulami a výsledkem je, že při aktivaci signálu Rst přejdou oba tyto výstupní signály okamžitě do úrovně L, tedy do aktivního stavu. Výsledkem kompilace je pak Mealyho automat. Z toho je zřejmé, že se v určitých detailech mohou výsledky syntézy téhož textu provedené různými systémy vzájemně lišit. Opět vidíme, jak je důležité seznámit se důkladně s vlastnosti systému, na němž pracujeme, nechceme-li být výsledkem syntézy překvapeni. U systému MAX+PLUS II je to způsobeno odlišným chápáním symbolu "--". První způsob popisu (TXT33) je zde vhodný pro oba systémy, druhý - TXT34 - je systémem MAX+PLUS II zpracován nesprávně.. Při syntéze stavového automatu rozpozná systém MAX+PLUS II, že jde o stavový automat, jsou-li dodržena určitá pravidla zápisu textu (v podstatě způsob zápisu uvedený výše). Pak systém automaticky vytváří prvky stavového automatu, jako je kódování stavů, stavový registr a podobně, a výskyt stavového automatu hlásí v souboru *.RPT (report) příslušném k syntetizovanému textu. Nepracovní (nevyužité) stavy ve stavových automatech. Standard VHDL při behaviorálním stylu popisu nedefinuje chování automatu v nevyužitých stavech, to závisí na konkrétním návrhovém systému. Abstraktní behaviorální styl popisu s existencí nevyužitých stavů nepočítá. Ty se mohou projevit až na nižší úrovni abstrakce, kde již je zvoleno kódování stavů. Jde zde o typickou ukázku postupu „shora dolů“ při konstrukci systému. Zpočátku se při konstrukci složitého systému o konkrétní implementaci, z níž vyplývá existence nevyužitých stavů, ještě neuvažuje. Jazyk VHDL umožňuje takový abstraktní systém modelovat a simulovat jeho systémové chování. Při syntéze je však již nutno kódování zvolit. To je možno pokládat za určitou nevýhodu použití uvedené abstraktní úrovně behaviorálního stylu popisu stavového automatu pro jeho syntézu. Pokud chceme psát zdrojový text tak, aby výsledek syntézy nezávisel na použitém systému, musíme použít popisu s nižší úrovní abstrakce, kde je již kódování zachyceno i v samotném popisu, případně kde se k určitému typu kódování již aspoň přihlíží. Používáme-li kódování stavů, které umožňuje využít všechny kódové kombinace, jako je například binární nebo Grayův kód, můžeme problém nevyužitých stavů vcelku snadno vyřešit doplněním skutečných stavů v jejich výčtu o stavy nepracovní tak, aby ve výčtu byly uvedeny všechny stavy (aby celkový počet stavů byl celistvou mocninou dvojky) a doplněním procesu popisujícího kombinační část automatu o jeho chování v nevyužitých stavech. Můžeme zde použít prostředků jazyka pro zkrácení zápisu: má-li automat uvedený v příkladu přecházet ze všech nepracovních stavů do jednoho určeného stavu, například do stavu Klid, doplníme příkaz CASE popisující pracovní stavy o popis nepracovních stavů např. zápisem

WHEN OTHERS => Rw <= "11"; NxSt <= Klid; Složitější situace nastává, je-li použito redundandní kódování, například kód 1 z n. To bývá časté při použití cílových obvodů typu FPGA, kde je tímto způsobem možno úsporněji vytvořit kombinační část automatu na úkor počtu potřebných klopných obvodů, kterých bývá v obvodech FPGA více než v obvodech PLD. Pokud však nechceme připustit možnost nedefinovaného chování automatu v nepracovních stavech, může to znamenat nutnost věnovat

Page 147: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 147

značné prostředky právě na jejich ošetření. Je-li například počet pracovních stavů automatu 20, je při tomto kódování celkový počet stavů 220. Nepracovních stavů je pak jen o 20 méně. Zajišťovat přechod ze všech nepracovních stavů do jednoho určeného stavu podobně jako v případě binárního kódování by zde vyžadovalo neúměrně velké množství spotřebovaných obvodových prostředků. Mnohem jednodušší může být využití některých zvláštností použitého kódu k detekci nepracovních stavů, zde například zjištění, zda není více klopných obvodů ve stavovém registru nastaveno současně. Přechod automatu do nepracovního stavu obvykle znamená fatální chybu systému, takže při jeho detekci bude pravděpodobně účelné celý systém zresetovat, případně vydat příslušné varování (dobře známé z práce s počítači PC) a další činnost ponechat na obsluze. Někdy však můžeme existenci nepracovních stavů ignorovat a případně se spolehnout na zásah obsluhy, vyskytne-li se tento stav. To může znamenat značnou úsporu obvodových prostředků. Je však nutno, aby konstruktér zvážil důsledky takového rozhodnutí a posoudil přijatelnost příslušného chování automatu.

10.10 FUNKCE

Funkce v jazyku VHDL patří ke konstruktům vyšší úrovně a používají se především v mo-delech určených pro simulaci. V textech dosud uvedených jsme se setkali s funkcemi, které byly definovány ve slohách, které se dodávají spolu s návrhovým systémem. Byla to především funkce přetěžující operátor sčítání, která je součástí systému WARP, kde je obsažena ve sloze std_arith umístěné v knihovně ieee (viz TXT11, kde je operátor sčítání původně definovaný pro signály typu integer přetížen tak, aby umožnil jeho užití pro signál typu std_logic_vector). Podobná funkce v systému MAX+PLUS II je obsažena ve sloze std_logic_unsigned ve shodné knihovně. To je typické použití funkcí v modelech určených k syntéze. Další obvyklá možnost použití funkce byla naznačena v diskusi k textu TXT27, kde šlo o převod signálu j typu std_logic_vector na signál Jint typu integer. Místo procesu Slv2int v tomto textu můžeme v systému WARP použít funkce to_integer, která je obsažena ve sloze std_arith. V tomto případě text uvedeného procesu nahradíme zápisem Jint <= to_integer(j); a současně do deklarativní části přidáme klauzuli USE work.std_arith.ALL; (předpokládáme, že sloha std_arith je zkompilována v knihovně work). Podívejme se nyní na zjednodušený text funkce to_integer z uvedené slohy. Syntaxe zápisu funkce je odtud zřejmá, takže se omezíme na poznámky vysvětlující význam jednotlivých příkazů.

Page 148: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

148 FEKT Vysokého učení technického v Brně

FUNCTION To_integer (Arg: std_logic_vector) RETURN natural IS -- TXT35 CONSTANT Arg_left: integer := Arg'length - 1; VARIABLE Xarg: std_logic_vector(Arg_left DOWNTO 0); VARIABLE Result: natural := 0;

BEGIN FOR i IN Xarg'range LOOP Result := Result + Result; IF Xarg(i) = '1' THEN Result := Result + 1; END IF; END LOOP; RETURN Result; END To_integer;

Funkce je uvedena klíčovým slovem FUNCTION následovaným identifikátorem funkce To_integer (uvádíme jej s velkým počátečním písmenem, protože nejde o přesnou verzi této funkce z uvedené slohy; ta obsahuje ještě navíc kontrolu, zda argument není prázdný a zda neobsahuje jiné symboly než 0 a 1). V závorce je pak uveden identifikátor vstupního parametru Arg, za nímž je uveden jeho typ. Za závorkou následuje klíčové slovo RETURN, za nímž je uveden typ výsledku. (Připomeňme, že natural je subtyp typu integer.) Dále je definována konstanta Arg_left a proměnná Xarg pomocí atributů vstupního argumentu, aby funkce mohla zpracovávat argumety různé délky. Následující text mezi klíčovými slovy BEGIN a END představuje smyčku pro vlastní převod. Klíčovým slovem RETURN je označen výsledek funkce, kterým se nahradí její volání při jejím použití. Funkce to_std_logic_vector je k popsané funkci inverzní. Kromě argumentu představujícího vstupní číslo obsahuje ještě druhý argument udávající šířku výsledného vektoru. Spolu s dále rozebranou funkcí pro přetížení operátoru sčítání je tak jako funkce to_integer obsažena ve sloze std_arith v systému WARP. Podívejme se nyní na příklad druhé časté aplikace funkcí v modelech určených k syntéze, a to přetížení operátoru sčítání tak, aby akceptoval součet signálu typu std_logic_vector a signálu typu natural, který představuje celé nezáporné číslo. Opět je uvedena funkce ze systému WARP: FUNCTION "+" (Lft: std_logic_vector; Rgt: natural) -- TXT36 RETURN std_logic_vector IS BEGIN RETURN Lft + to_std_logic_vector(Rgt, Lft'length); END "+";

Zde jsou symbolem Lft a Rgt označeny vstupní argumenty. Před touto funkcí je ve sloze std_arith uvedena další funkce se stejným názvem, tj. "+", která přetěžuje operátor sčítání tak, aby akceptoval jako operandy dva signály typu std_logic_vector. Takto přetížený operátor sčítání je nyní použit k vytvoření součtu operandu Lft a čísla Rgt převedeného do typu std_logic_vector funkcí to_std_logic_vector. Naskýtá se otázka, která funkce bude vlastně v konkrétním případě použití operátoru + vyvolána, když více z nich má stejné označení. Odpověď zní tak, že při kompilaci použije systém tu funkci, která odpovídá nejen označení, ale i operandům, k nimž je použita (pokud je ovšem přetížení definováno a je-li příslušná funkce viditelná). Funkce mohou mít jen vstupní operandy, tj. operandy nemohou být funkcí modifikovány. Výsledkem funkce může být jen jeden výstupní operand uvedený v definici funkce za klíčovým slovem RETURN. V tomto smyslu můžeme funkci považovat za zobecnění přiřazovacího příkazu. V definici funkce nemohou být deklarovány signály, mohou tam však být deklarovány proměnné. Jejich platnost je omezena na tuto definici. Zobecněním funkcí jsou procedury, jejichž popis může čtenář najít ve specializované literatuře.

Page 149: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 149

Seznámili jsme se s pravidly pro vytváření funkcí. V praxi se však v modelech určených k syntéze používají především funkce, které jsou předdefinovány ve standardních slohách, jako jsou std_logic_1164, std_arith a podobně. Neznamená to, že si uživatel nemůže definovat své vlastní funkce, ale syntetizéry a simulátory bývají optimalizovány pro užití sloh, které jsou dodávány jako části systému, a uživatelem definované funkce mohou být příčinou, že se tato optimalizace mine účinkem. Proto se doporučuje před užitím funkcí seznámit se s funkcemi, které jsou dodávány jako příslušenství systému. Bývají popsány v manuálech spolu se slohami (packages). Vlastní funkci se doporučuje vytvořit v případě potřeby až tehdy, není-li tam potřebná funkce k dispozici.

10.11 OVĚŘENÍ FUNKČNOSTI MODELU – SIMULACE

Po sestavení modelu navrhovaného systému v jazyku VHDL nastává nutnost zjistit, je-li model navržen správně, tj. splňuje-li požadavky zadání jak po stránce funkční, tj. jsou-li na výstupech signály správně odpovídající signálům vstupním, tak i po stránce časové, tj. jsou-li dodrženy požadavky na rychlost reakce (zpoždění), na potřebný kmitočet hodinového signálu a podobně. První z těchto dvou skupin testů představuje simulace funkční (functional simulation), druhou simulace časová (timing simulation). Funkční simulace může být provedena před syntézou (pre-synthesis simulation) nebo po syntéze, popř. po vytvoření konfiguračního souboru (post-synthesis, post-fit u PLD, post-layout u FPGA simulation). O simulátorech pro simulaci před syntézou se mluví jako o simulátorech kódu VHDL, simulátory pro simulaci po syntéze se označují jako simulátory kódu JEDEC nebo dalších typů kódů vytvářených při syntéze. Časová simulace se před syntézou neprovádí, protože v této fázi ještě nejsou známy časové parametry částí cílového obvodu, kterými bude signál procházet. Provádět funkční simulaci před syntézou má smysl tehdy, je-li navrhovaný systém natolik složitý, že syntéza trvá delší dobu, která je v případě chyby v návrhu odhalené při simulaci po syntéze zbytečně vyplýtvána, zatímco funkční simulace provedená před syntézou takové chyby odhalí bez nutnosti čekání na ukončení syntézy. Simulace prováděná po syntéze však může vycházet z mnohem podrobnějších údajů o cílovém obvodu a některé chyby, které simulace provedená před syntézou neodhalí, je v této fázi možno zachytit. Je tedy zpravidla účelné odstranit případné zásadní chyby složitých modelů simulací před syntézou a detailní chování těchto modelů odladit simulací po syntéze. U jednoduchých modelů bývá vhodnější přejít rovnou k simulaci po syntéze. Simulátory bývají obvykle samostatné programové bloky. Někdy jsou dodávány společně s nástroji pro syntézu, tyto nástroje však zpravidla umožňují připojení různých typů simulátorů. Pro simulaci po syntéze se při syntéze vytvářejí soubory dat popisující model v příslušných formátech, které simulátory ke své činnosti vyžadují. Typ generovaných dat se volí při spuštění syntézy. Syntetizéry často vytvářejí také modely v kódu VHDL charakterizující detailní propojení cílových obvodů PLD a FPGA (post-synthesis, post-fit, post-layout VHDL model), které pak mohou být zpracovány simulátory kódu VHDL. Tyto modely však mají strukturu velmi odlišnou od modelů, které jsme dosud vytvářeli jako vstupní texty pro syntézu. Jsou typicky sestaveny z vložených komponent odpovídajících architektuře cílového obvodu, a z popisu jejich propojení, takže bývají pro člověka obtížně srozumitelné, i když jsou vytvořeny v souladu se syntaktickými pravidly jazyka VHDL. Vedle zdrojového kódu nebo popisu vnitřního propojení cílového obvodu potřebuje simulátor ke své činnosti také data představující zkušební vektory. Ty se mohou vytvářet různými způsoby. Nejjednodušší a nejsnadněji zvládnutelný je způsob vytváření vstupních dat pomocí interaktivního grafického rozhraní, které nabízí různé pomůcky pro vytváření často používaných druhů stimulů, jako jsou konstantní hodnoty vstupních signálů, pulsní průběhy a podobně, a pro jejich následnou editaci. Poněkud obtížnější je vytváření zkušebních vektorů

Page 150: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

150 FEKT Vysokého učení technického v Brně

v textové formě, pro kterou se používá označení testovací pracoviště (test bench) – někdy, možná i častěji, se setkáme se stručnějším poloslangovým označením benč. Uživatelé jazyku ABEL tento způsob vyjádření vektorů znají, v jazyku VHDL je však syntaxe výrazně méně přátelská k uživateli, zejména se zde projevuje rozvleklost jazykových konstruktů. Ta se sice může zvládnout pomocí prostředků, které nabízejí textové editory, obvykle je však popis zkušebních vektorů v jazyku VHDL několikanásobně delší než popis stejných vektorů v ABELu, což nepřispívá k jejich přehlednosti. Textový zápis zkušebních vektorů je však mnohem vhodnější k dokumentaci než jejich grafický záznam a je lépe přenositelný na další typy simulátorů, popřípadě může sloužit k simulaci prováděné na různých úrovních, od simulace zdrojového textu po simulaci po syntéze. Proto bývá častým doplňkem grafických rozhraní určených pro interaktivní simulaci programový blok vytvářející z dat zadaných v grafické formě textovou formu zkušebních vektorů. Ty pak může simulátor opět načíst a vytvořit odpovídající grafické vyjádření, dostatečně zběhlý konstruktér je však může přímo v textovém tvaru prostudovat a případně podle potřeby editovat. Obvykle však bývá benč vytvářený přímo konstruktérem srozumitelnější než benč vygenerovaný z grafické podoby vektorů.

11 Synchronní návrh

Efektivní a korektní řízení hodinového signálu clk a signálu rst patří k nejzákladnějším požadavkům při návrhu synchronních systémů. Bez vhodného obvodového řešení nemůžeme očekávat, že náš synchronní systém bude pracovat podle daných požadavků a v obvodu se můžou vyskytnout nežádoucí jevy jakou je např. metastabilita.

11.1 Metastabilita

U klopných obvodů je důležité dodržovat dobu předstihu a přesahu. V případě, že jsou tyto doby porušeny, obvod přechází do stavu, který není možné předvídat. Tenhle stav se označuje jako metastabilní stav (kvazi stabilní stav). Na konci metastabilního stavu klopný obvod přejde do stabilního stavu “0“ nebo “1“. Když se obvod nachází v metastabilním stavu, jeho výstup osciluje mezi platnými hodnotami.

Page 151: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 151

stabilní stav

stabilní stav

metastabilní stav

log. 0 log. 1 Obr. 11.1: Přechod mezi logickými hodnotami a metastabilním stavem

Na Obr. 11.2 je znázorněn přechod mezi platnými logickými hodnotami a metastabilním stavem. Metastabilní stav se dá představit jako balancování vrcholku kopce. Obvod teoreticky může setrvávat v metastabilním stavu do nekonečna, ale reálně to není možné. Nakonec se překlopí do platné logické hodnoty.

Metastabilita může vzniknout za následujících podmínek:

1. Když je vstupní signál asynchronní 2. Při nedodržení náběžných a sestupných hran hodin 3. Při propojování dvou časových základen se stejnou frekvencí ale různým fázovým

posunem 4. Když vstupní signál z kombinační logiky zakmitává v době vzorkování

Kdy nastane metastabilita je možné určit chybovou funkcí MTBF (Mean Time Between Failure - střední doba mezi chybami). Tahle funkce určuje čas mezi dvěmi metastabilitami. Ve vzorci je definována pro jeden klopný obvod. Vstupní proměnné jsou frekvence vstupního signálu fin, vzorkovací frekvence fCLK a kritická doba td (čas předstihu nebo přesahu), která musí být dodržena pro správnou funkci obvodu.

dCLKin tffMTFB

⋅⋅=

1

Funkci MTBF je možné odvodit i pro synchronizační obvody nebo jinak zapojené vzorkovací obvody. V podstatě platí, že použitím synchronizačního obvodu se doba funkce MTBF násobí s každým přidaným obvodem o dobu MTBF daného obvodu a odolnost vůči metastabilitě stoupá.

Na Obr. 11.2 je zobrazeno selhání synchronizace, které nastane pokud je signál vzorkován v jedné hodinové základně příliš blízko náběžné hrany hodin z druhé časové základny.

Page 152: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

152 FEKT Vysokého učení technického v Brně

Obr. 11.2: Asynchronní hodiny a selhání synchronizace

Selhání synchronizace je způsobeno tím, že výstup registru přešel do metastabilním stavu a nekonverguje k žádnému korektnímu stavu. Proto musí být výstup znovu navzorkován. Na Obr. 11.3 zobrazuje, že metastabilní výstup může způsobit šíření nesprávné hodnoty signálu dál celým obvodem.

adatdat

aclkbclk

bdat1

aclk

adat

bclk

bdat1

??

??

’1’

’0’

Neplatná data se šíří zbytkem obvodu

Změna signálu

adat

Vzorkovaný signál je vnitřně metastabilní a

zůstává i s další náběžnou hranou

Logická hodnota signálu není definovaná

1

1

1

Obr. 11.3: Nesprávná hodnota z metastabilního výstupu bdat1

Page 153: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 153

11.2 Stromová struktura posilovačů hodinového signálu clk

Všechny klopné obvody použité v digitálním návrhu používají hodinový signál clk. V synchronním návrhu je hodinový signál clk připojen k mnoha klopným obvodům, tak že jsou schopny tyto klopné obvody měnit svůj stav synchronně. V praxi to probíhá tak, že hodinový signál clk může být připojen např. až k tisíci klopných obvodů. Hodinový signál clk by byl v tomto případě příliš pomalý z důvodů vysoké zatěžovací kapacity Cload v daném bodě. V tomto případě je potřeba použit posilovače hodinového signálu, které jsou ve většině případů zapojeny do stromové struktury. Posilovače hodinového signálu můžou většinou řídit jen několik klopných obvodů a zejména to záleží na zvolené technologii. Každá technologie má své specifika. Jedna z možných stromových struktur je zobrazena na obr. 11.4. První úroveň je složena z 6 posilovačů. V druhé úrovni je na každý posilovač z první úrovně připojeno 6 posilovačů. Výstupy posilovačů z druhé úrovně jsou připojeny ke klopným obvodům. Počet úrovní je závislý na zvolené technologii a požadavků pro konkrétní návrh.

Chyba! Objekty nemohou být vytvořeny úpravami kódů polí. Obr. 11.4: Stromová struktura posilovačů hodinového signálu clk

Při návrhu stromové struktury hod. signálu clk je kladen důraz na:

1) redukce celkové časové zpoždění ze vstupu hodinového signálu clk (clock delay) přes posilovače hod. signálu ke vstupům klopných obvodů

2) minimalizace hodinového posunu (clock skew) mezi jednotlivými klopnými obvody, tak aby byly tyto klopné obvody řízeným pokud možno stejným hodinový signálem clk. Hodinový posun je definován jako časový rozdíl mezi jednotlivými hodinovými vstupy klopných obvodů.

Celkové časové zpoždění je redukováno tak, že posilovače hod. signálu řídí pouze určitý počet klopných obvodů. Minimalizace hodinového posunu je prováděno správným umístěním posilovačů hod. signálu ve výsledné fyzické topologii a množstvím připojených klopných obvodů k výstupu posilovače.

11.3 Vliv zpoždění hodinového signálu clk v synchronním návrhu

Na Obr. 11.5 je možné vidět jednoduchý příklad, jak se projeví zpoždění signálů na funkci jednoduchého digitálního obvodu, který může být výřezem komplexního digitálního signálu. Vstupní signál D je synchronizován hodinovým signálem clk. Signály clk a signál D jsou připojeny na piny integrovaného obvodu. Hodinový signál clk řídí mnoho jiných klopných obvodů, které jsou uvnitř navrženého integrovaného obvodů. Z tohoto důvodů je potřeba, aby byla vytvořena stromová struktura posilovačů hodinového signálu. Z Obr. 11.5 je patrné, že hodinový signál prochází přes dvoustupňovou strukturu posilovačů hodinového signálu na vstup clk klopného obvodu. Hodinový signál clk bude mít daleko větší zpoždění než vstupní signál D.

Page 154: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

154 FEKT Vysokého učení technického v Brně

D

clk

Q

clk

D

zpoždění hod. signálu přesposilovače

chyba

Obr. 11.5: Vliv zpoždění hodinového signálu clk

Z Obr. 11.5 je patrné, že data, které přichází na vstup D klopného obvodu budou mít menší zpoždění než hodinový signál clk, který prochází přes posilovače hod. signálu. V tomto případě dochází k časové nesrovnalosti a celý obvod bude silně nestabilní. Výstup klopného obvodu Q bude nyní v metastabilním stavu.

V praktickém návrhu je potřeba analyzovat všechna zpoždění vstupních a výstupních signálu, posilovačů hod. signálu atd., aby se zabránilo přechodu dig. systému do metastabilního stavu.

11.4 Vliv posunu hodinového signálu clk v synchronním návrhu

Na Obr. 11.6 je ukázán vliv posunu hodinového signálu clk na funkci jednoduchého Vstupní signál D prochází přes 2 klopné obvody typu D. Hodinový signál clk prochází přes posilovače k hodinovým vstupům klopných obvodů (F1/clk a F2/clk). Hodinový signál přicházející ke vstupu F1/clk označíme clk1 a hodinový signál přicházející ke vstupu F2/clk označíme clk2. Hodinové signály clk1, clk2 jsou posunuté vůči hlavnímu signálu clk. Tento posun vznikl díky propojovacím cestám a posilovačům hodinového signálu.

Page 155: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 155

clk

D

pusun hod. signálu chybapředstihu

F1

D

clk

Q D

clk

Q

F2

chybapřesahu

clk

clk1

F1/D

F1/Q

F2/D

clk2

clk1 clk2

clk1->Q

Obr. 11.6: Vliv posunu hodinového signálu clk

Zpoždění výstupního signálu F1/Q ke vstupnímu signálu F2/D je příliš malé. Není zde žádná kombinační logika, která by vytvořila potřebné zpoždění. Díky posunu hodinového signálu dojde k tomu, že změna signálu F2/D nastane ve stejném okamžiku jako příchodu nástupné hrany hodinového signálu clk2. Dojde k porušení podmínky předstihu signálu k vzhledem nástupné hraně hodinového signálu. K porušení podmínky přesahu signálu k vzhledem nástupné hraně hodinového signálu dojde při další nástupné hraně hod. signálu clk2.

Problém časování z předcházejícího obrázku lze vyřešit vložením dodatečného zpoždění mezi signály F1/Q a F2/D

Page 156: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

156 FEKT Vysokého učení technického v Brně

Obr. 11.7: Splnění časových požadavků přídavným zpožděním

11.5 Příklad syntézy jednoduchého digitálního obvodu

Mějme jednoduchý digitální obvod, který popíšeme pomocí jazyku VHDL. Na Obr. 11.8 je zobrazena výsledná struktura obvodu po syntéze.

1 library IEEE;

2 use IEEE.std_logic_1164.all;

3 entity SIMPLE_EXAMPLE is

4 port (

5 clk : in std_logic;

6 rst : in std_logic;

7 din : in std_logic;

8 dout : out std_logic);

9 end SIMPLE_EXAMPLE;

10 architecture RTL of SIMPLE_EXAMPLE is

11 signal F1 : std_logic;

Page 157: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 157

12 begin

13 ffgen1 : process (rst, clk)

14 begin

15 if (rst=‘0‘) then

16 dout <= ‘0’;

17 F1 <= ‘0’;

18 elsif (clk’event and clk=‘1‘) then

19 F1 <= din;

20 dout <= F1;

21 end if;

22 end process;

23 end RTL;

FD2P FD2P

din

clk

rst

dout

Obr. 11.8: Schéma obvodu SIMPLE_EXMAPLE po syntéze

Pro splnění časových požadavků je potřeba použít následující skript, který je možné použít v návrhovém prostředí Synopsys.

1 set_operating_conditions BCCOM

2 set_dont_touch_network {clk* rst*}

3 CLKSKEW = 0.8

4 CLKPERIOD = 250

5 create_clock -name main_clk -period CLKPERIOD[get_port "clk"]

6 set_dont_touch_network all_inputs()

7 set_dont_touch_network all_outputs()

8 set_clock_ckew –ideal –uncertainty CLKSKEW clk

9 set_fix_hold clk

10 compile –prioritize_min_paths

Page 158: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

158 FEKT Vysokého učení technického v Brně

Na řádku 1 nastavujeme základní podmínky zpracování pro syntézu. Řádky 2,6 a 7 definujeme, že nástroj syntézy nebude sahat na všechny vstupní a výstupní signály. Řádek 5 deklaruje hodinový signál clk. Na řádku 3 a 4 nastavujeme základní proměnné. Na řádku 9 specifikujeme pro signál clk dodržení všech podmínek přesahu signálu vůči nástupné hraně hodinového signálu. Na Obr. 11.9 je zobrazeno schéma po spuštění daného skriptu.

Obr. 11.9: Schéma obvodu SIMPLE_EXAMPLE po spuštění skriptu

11.6 Redukce výkonové spotřeby hradlováním hodinového signálu (gated clock)

Hradlovaný hodinový signál je hodinový signál, který je povolen nebo zakázán jiným signálem. Používá se to zejména k vyřazení hodinových vstupů klopných obvodů a klopné obvody setrvávají v předcházejícím stavu. Zakázaní hodinového signálu klopných obvodů má za následek redukci výkonové spotřeby.

Následující VHDL kód ukazuje zápis hradlovaného hodinového signálu pro 8-bitový synchronní binární čítač. Vstupní signál psave slouží k nastavení 8-bitového synchronního binárního čítače do nízkopříkonového režimu zakázáním hodinového signálu na hodinovém vstupu klopného obvodu. Pokud je signál psave v úrovni log. 1, pak je 8-bitový synchronní čítač neaktivní. Přechod do nizkopříkonového režimu je řízen stavovým automatem fsm.

1

2

3

4

5

6

7

8

9

10

11

12

library IEEE;

use IEEE.STD_LOGIC_1164.ALL;

use IEEE.STD_LOGIC_ARITH.ALL;

use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity gated_clock is

Port ( clk : in STD_LOGIC;

rst : in STD_LOGIC;

psave : in STD_LOGIC;

cntr : out STD_LOGIC_VECTOR (7 downto 0));

end gated_clock;

architecture Behavioral of gated_clock is

type state_type is (NORMAL, SLEEP);

Page 159: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 159

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

signal state, next_state : state_type;

signal gate_clk, cntr_en : std_logic;

signal cntr_ff : std_logic_vector(7 downto 0);

begin

fsm: process(state, psave)

begin

case state is

when NORMAL =>

if (psave = '1') then

next_state <= SLEEP;

else

next_state <= NORMAL;

end if;

when SLEEP =>

if (psave = '1') then

next_state <= SLEEP;

else

next_state <= NORMAL;

end if;

end case;

end process;

seq: process (rst,clk)

begin

if (rst = '0') then

state<=NORMAL;

elsif (clk'event and clk='1') then

state <= next_state;

end if;

end process;

seq0: process

begin

wait until (clk'event and clk='0');

if (state = SLEEP) then

cntr_en <= '0';

else

cntr_en <= '1';

end if;

Page 160: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

160 FEKT Vysokého učení technického v Brně

50

51

52

53

54

55

56

57

58

59

60

61

62

end process;

gate_clk <= cntr_en and clk;

gclk : process

begin

wait until (gate_clk'event and gate_clk='1');

if (rst = '0') then

cntr_ff <= (others=>'0');

else

cntr_ff <= cntr_ff + 1;

end if;

end process;

cntr <=cntr_ff;

end Behavioral;

+1 &

FD2P

FDN1

&

FD1

psave

clk

rst

cntr[7:0]

hradlovanýhod. signál

Obr. 11.10: Schéma 8-bitového synchronního binárního čítače s hradlováním hodinového

signálu

Simulace 8-bitového synchronního binárního čítače s hradlováním hodinového signálu je zobrazena na Obr. 11.11.

Page 161: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 161

Obr. 11.11: Simulace 8-bitového synchronního binárního čítače s hradlováním hodinového

signálu

12 Návrh digitálních obvodů řízených více hodinovými signály

Cíle kapitoly: Seznámení se s návrhem digitálních obvodů řízených více hodinovými signály

Navrhování obvodů s řízených jediným hodinovým signálem je jednoduché, ale většina obvodů navržených v jazyce VHDL je řízena více hodinovými signály. Navíc jsou obvykle tyto hodinové signály vůči sobě asynchronní. Takové obvody vyžadují správné ošetření přenosu, správné časování a případně i ověření, řídících a datových signálů.

V kurzech návrhu digitálních obvodů se obvykle učí pracovat jen s kompletně synchronními logickými obvody (obsahují pouze jediný hodinový signál). Při reálné práci například na zákaznických obvodech je jen málo obvodů úplně synchronních. V této kapitole budou popsány některé metody návrhu, časové analýzy, syntézy a simulace systémů s více hodinovými signály.

Kapitola není zaměřena na kompletní popis návrhu digitálních obvodů s více hodinovými signály, ale je určena k osvojení si některých zásad, které se v praxi při takovémto návrhu používají.

12.1 Synchronizační obvody

V praxi se nejvíce používá synchronizační obvod obsahující dva klopné obvody, jak je ukázáno naObr. 12.1.

Page 162: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

162 FEKT Vysokého učení technického v Brně

adatdat

aclkbclk

bdat1

aclk

adat

bclk

bdat1

’1’

’0’

’0’

’0’bdat2

Změna signálu

adat

bdat2

Vzorkovaný signál je nejdřív metastabilní,

ale před další náběžnou hranou má

hodnotu ’1’

bdat2 je synchrnizován a má platnou hodnotu

1

1

1

Obr. 12.1: Synchronizační obvod se dvěma klopnými obvody

První klopní obvod vzorkuje asynchronní vstupní signál do nové časové základny a čeká

po dobu jedné hodinové periody kým trvá metastabilita na prvním stupni. Pak je signál z prvního stupně vzorkován znova se stejným vzorkovacím kmitočtem klopným obvodem druhého stupně. Výsledkem je stabilní platný signál synchronizován s druhou časovou základnou.

Teoreticky je možné, že výstup prvního stupně zůstane metastabilní až do doby kým je vzorkován druhým stupněm a způsobí tím že se druhý stupeň taky dostane do metastabilního stavu. Výpočet pravděpodobnosti selhání synchronizace (MTBF) je funkce více proměnných zahrnující hodinové frekvence použité ke generování vstupního signálu a synchronizaci klopných obvodů. Popis výpočtu funkce MTBF je možné najít literatuře.

Ve většině aplikací kde se použije tenhle typ synchronizačního obvodu, stačí k odstranění metastability použít dva klopní obvody.

12.2 Statická časová analýza

Statická časová analýza je proces ověření, že každá signálová cesta v obvodu vyhovuje požadované hodinové frekvenci. Statická časová analýza neslouží k ověření funkce obvodu (k tomu je určena behaviorální simulace), jenom modeluje zda obvod splňuje časové požadavky. Teoreticky může být časová analýza obsažena v kompletní simulaci na úrovni hradel se zpětnou vazbou s časovými konstantami získanými po naroutování obvodu. To se ale obvykle označuje jako dynamická časová analýza.

Statická časová analýza má oproti dynamické časové analýze tři výhody:

5. Nástroje pro statickou časovou analýzu testují každou signálovou cestu mezi všemi sekvenčními bloky.

6. Statická časová analýza nepotřebuje generování testovacích vektorů. 7. Nástroje pro statickou časovou analýzu jsou řádově rychlejší než kompletní simulace

na úrovni hradel.

Page 163: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 163

Časová analýza modulů se dvěma a více asynchronními hodinovými signály je náchylná k chybám, složitá a trvá déle. Statická časová analýza signálů generovaných v jedné hodinové základně, které jsou zachyceny registry řízenými jinou hodinovou základnou je nepřesná a většinou zbytečná. Časová informace signálu řízeného jinými hodinami (vůči němu asynchronními) než je signál vzorkován je nepřesná, protože fázový posun mezi hodinami vzorkování a signálem se stále mění. Proto musí simulátor projít nekonečné množství fázových posunů mezi signálem a k němu asynchronními hodinami. Z toho vyplývá, že přechod signálu z jedné do druhé časové základny někdy nesplní dobu předstihu nebo přesahu cílového registru.

Není důvod dělat časovou analýzu signálů, které jsou generovány v jedné časové základně a vstupují do registrů řízených jinou časovou základnou. Platí, že tyto signály poruší dobu předstihu nebo dobu přesahu cílového registru. Tohle je důvod proč je nutné používat synchronizační obvody (12.1), aby odstranili problém, který může nastat když signál přechází z jedné časové základny do jiné.

Pro bloky, které mají dva (nebo i více) vůči sobě asynchronní vstupy je potřebné při statické časové analýze označit, které signálové cesty mají být ignorovány. To je možné “označením falešných signálových cest“ pro signály, které přecházejí z jedné časové základny do jiné. To ale může být zdlouhavé a náchylné k chybám, když nejsou dodrženy pravidla popsané v následujících dvou kapitolách.

12.3 Konvence značení hodinových signálů

Pravidlo: Pro všechny signály volte takové označení, aby bylo možné identifikovat kterým hodinovým signálem jsou řízeny.

Důvod: Když na jednom návrhu pracuje více lidí, každý dokáže ihned identifikovat z které časové základny daný signál je. Tohle značení taky zjednodušuje seskupování signálů při časové analýze.

Existují různé vhodné konvence značení hodinových signálů. Jedna z nich využívá značení předponou k identifikaci ke které části obvodu hodinový signál patří. Například: uClk pro hodiny mikroprocesoru, vClk pro hodiny řízení videa a dClk pro hodiny řídící displej.

Každý synchronní signál v obvodu je řízen některým z těchto hodinových signálů a zároveň má tu samou předponu jako jeho řídící hodinový signál. Každý signál řízen hodinovým signálem uClk pak má ve svém názvu předponu u, jako například uaddr, udata, uwrite, atd. Každý signál řízen hodinami vClk má taky tuto předponu jako vdata, vhsync, vframe, atd. Takové značení se použije pro všechny signály řízeny danými hodinami.

Použití tohoto značení umožňuje rychle identifikovat u kteréhokoli signálu, kterými hodinami je řízen. Se signály se pracuje jednodušeji a po připojení k synchronizačnímu obvodu mohou být použity v jiné hodinové základně. Toto značení významně přispívá k zvýšení efektivity při návrhu obvodu. Odpadá zdlouhavé zjišťování, které signály jsou určeny pro daný blok, kterou hodinovou základnou jsou řízeny a jak bloky propojit.

Page 164: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

164 FEKT Vysokého učení technického v Brně

12.4 Rozdělení obvodu

Pravidlo: Používáme jenom jeden hodinový signál v každém bloku.

Důvod: Statická časová analýza a syntéza se zjednoduší, když je blok nebo jejich skupina řízena jenom jediným hodinovým signálem.

Pravidlo: Vytváříme synchronizační blok pro každou skupinu signálů přecházejících z jedné časové základny do jiné.

Důvod: Je známo, že signál přecházející z jedné časové základny do druhé má problém s dodržením doby předstihu a přesahu. Pro synchronizační bloky není potřeba dělat worst-case(maximální čas) časovou analýzu. Je nutné udělat jenom best-case (minimální čas) časovou analýzu mezi prvním a druhým stupněm klopných obvodů tohoto bloku a zajistit dodržení doby předstihu u všech klopných obvodů bloku synchronizace. Taky simulace na úrovni hradel se zjednoduší, protože je možné ignorovat porušení doby předstihu na prvním stupni každého synchronizačního bloku.

sync_c2a

sync_c2b

sync_a2b

aSig1aSig0

logika řízenahodinami bClk

logika řízenahodinami aClk

bSig1

bSig2

bSig3

logika řízenahodinami cClk

aSig2

aSig3

bSig0

aSig3

cSig0 cSig0 cSig3 cSig3

bSig0

aSig2

sync_b2a

bSig1

bSig2 cSig2

cSig1

sync_b2c

sync_a2c

cSig2cSig1

Každý blok, který není synchronizační je teď

kompletně synchronní, řízen pouze jediným hodinovým signálem

Je jednoduché udělat statickou časovou analýzy pro každý blok

Obr. 12.2: Obvod rozdělený na bloky podle hodinových signálů

V případě, že obvod obsahuje více asynchronních hodinových signálů, je potřeba odstranit chybová hlášení časové analýzy o nesprávném časování pomocí příkazů set_false_path. Těchto ošetření je potřeba udělat mnoho. Je to náročné na čas a velice pracné.

Rozdělením obvodu do bloků, kde je každý řízen pouze jedním hodinovým signálem se výrazně zjednoduší časová analýza, syntéza a statická časová analýza je taky jednodušší.

Další úkol při takovém návrhu je zabezpečit, že každý signál vstupující do bloku je už dopředu synchronizován stejnou hodinovou základnou jako blok do kterého vstupuje. Tohle je velice důležité. Když jsou všechny signály vstupující do a vystupující z bloku

Page 165: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 165

synchronizovány stejnou hodinovou základnou, blok je kompletně synchronní. Pak je možné dělat statickou časovou analýzu bloku bez “falešných cest“ a kompilátor může seskupit všechny moduly ve stejné hodinové základně. Statická časová analýza se pak děla pro každou časovou základnu.

Existuje jedna výjimka z tohoto doporučení. Návrh systému s více hodinovými základnami vyžaduje alespoň pár bloků s klopnými obvody pro převod signálů z jedné časové základny do jiné kvůli přepojení bloků které jsou časovány různými hodinovými signály. Proto se vytvářejí bloky, které převádějí signály časovány jednou hodinovou základnou do jiné.

Použitím konvence značení signálů popsané v kapitole 12.3 mohou být všechny signály generovány procesorem (předpona u) použity jako vstupní signály modulu řízeného hodinami pro video signál. Je potřeba vytvořit synchronizační blok, který bude mít označení “sync_u2v“. Signál vstupující do něj má předponu u a pomocí dvou klopných obvodů je vzorkován hodinovým signálem vClk. Kromě signálů vClk a reset mají všechny vstupní signály modulu “sync_u2v“ předponu u a všechny výstupní signály předponu v.

Pro synchronizační moduly (sync) není potřeba dělat worst-case časovou analýzu protože víme, že všechny vstupní signály těchto modulů budou mít problém s časováním. To znamená, že při časové analýze nemusíme převádět signály přes synchronizační bloky. Jediná časová analýza, kterou potřebujeme udělat udělat pro synchronizační bloky je analýza minimálního času (doba předstihu) mezi prvním a druhým klopným obvodem a to pro každý signál procházející synchronizačním blokem.

Když obvod obsahuje n asynchronních časových základen, bude vyžadovat n(n-1) synchronizačních bloků. Například pro uClk a vClk budou potřeba dva synchronizační bloky sync_u2v a sync_v2u. Dva synchronizační bloky je možno vypustit v případě, že žádné signály nepřecházejí mezi dvěma časovými základnami.

Po úpravě obvodu tímto způsobem na kompletně synchronní se vypustí nebo zjednoduší všechny skripty pro syntézu, které obsahují příkazy “set_false_path“. Problémy s časováním se pak odhalují a opravují snáze (protože jsou seskupeny v jedné časové základně) a finální syntéza je rychlejší.

12.5 Synchronizace rychlých řídících signálů do pomalých časových základen

Hlavním problémem synchronizačních obvodů je, že signál ze vstupní časové základny může změnit svou hodnotu více krát kým je vzorkován do pomalejší časové základny. S tímto problémem se musí počítat u každého signálu přecházejícího z jedné časové základny do jiné.

Synchronizování pomalejšího řídícího signálu do rychlejší časové základny nebývá problematické, protože rychlý hodinový signál navzorkuje pomalejší vstupní řídící signál jednou nebo více krát. Vzorkování pomalu měnícího se signálu do rychlejší hodinové základny způsobí méně problémů, než v opačném případě. V takovém případě stačí převzorkovat řídící signály rychlejšími hodinami.

Page 166: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

166 FEKT Vysokého učení technického v Brně

12.5.1 Synchronizace řídícího signálu

Když je potřeba synchronizovat řídící signál z jedné časové základny do jiné, obvykle stačí použít jednoduchý blok obsahující dva klopné obvody když jsou dodrženy pravidla popsána dále.

Výjimku tvoří případ kdy signál řídící přechází z rychlejší časové základny do pomalejší, šířka impulzu musí být větší než vzorkovací frekvence pomalejšího hodinového signálu. Když má takt vstupního řídícího signálu menší šířku než je vzorkovací frekvence, může nastat takový případ, že vstupní řídící signál bude nastaven do log. 1 a pak do log. 0 mezi náběžnými hranami pomalejších hodin a takový impulz nebude zachycen. Ukázka je na Obr. 12.3.

aclk

adat

bclk

bdat1

Tohle způsobí problém

bdat2

Signál adat byl nastaven do ’1’ a ’0’ mezi dvěma náběžnýma

hranama signálu bclk

Signály bdat1 abdat2 nebudou nikdy v log. ’1’

Obr. 12.3: Krátký impulz se ztratí v synchronizačním obvodu

Jedno řešení tohoto problému je nastavit šířku impulzu řídícího signálu na dobu, která překročí vzorkovací frekvenci druhé časové základny, jako na Obr. 12.4. Tím je zaručeno, že přecházející řídící signál je vzorkován na výstupu jednou nebo dvakrát.

Obr. 12.4: Prodloužený impulz zaručuje správné navzorkování řídícího signálu

Page 167: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 167

Druhým řešením může být navzorkování řídícího signálu do nové časové základny a pak převzorkovat signál zpět pomocí dalšího synchronizačního bloku zpátky do původní časové základny jako potvrzovací signál. Tenhle způsob bezpečně zaručí potvrzení, zda byl řídící signál správně navzorkován do nové časové základny. Vzniká při něm ale výrazné zpoždění při synchronizaci řídícího signálu oběma směry, kým se na výstupu objeví jako platný.

časová základna

bclk

bdat2bdat1

bclkaclk

adat

abdat2 abdat1

časová základna

aclk Obr. 12.5: Synchronizace řídícího signálu pomocí zpětné vazby

12.6 Synchronizace více řídících signálů

Při synchronizaci více řídících signálů z jedné časové základny do druhé se nesmí zapomenout na zachování pořadí ve kterém tyto signály nastanou a v jakém pořadí blokem synchronizace projdou. Jenom použití synchronizačních bloků na všechny řídící signály není dostatečné. Následující příklady ukazují co se může stát při takovém jednoduchém zapojení.

V případě, že je nutné dodržet pořadí změny řídících signálů, musíme zajistit aby ve správném pořadí prošli do nové časové základny. Případy které jsou zde zobrazeny jsou zjednodušené, ale přibližují co se může stát při reálném návrhu.

12.6.1 Dva současně potřebné řídící signály

Na jednoduchém příkladu z Obr. 12.6 je potřeba ve správném pořadí synchronizovat signály Load a Enable do nové časové základny, jinak se data nezapíšou korektně do registru. Při odesílání obou signálů Load a Enable do nové časové základny může nastat malý časový posun mezi signály, který způsobí že každý bude synchronizován jiným hodinovým cyklem. Pak se data do registru nezapíšou.

Page 168: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

168 FEKT Vysokého učení technického v Brně

b_load

b_en

aClk

ab_load

ab_en

a_load

a_en

adata FF00

abus 00

malý posun mezi řídícími signály

synchronizace s aClk

”enable” bez ”load”

”load” bez ”enable”

data se nenačtou

ab_load / ab_en

b_load

b_en

aClk

a_load

a_en

adata abusd qld

en

časová základna aClkbClk

synchronizační obvody

Obr. 12.6: Převod více řídících signálů mezi časovými základnami

Obr. 12.7: Sloučení řídících signálů před převodem mezi časovými základnami

Page 169: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 169

Řešení problému, který nastal v tomhle příkladu je snadné. Na Obr. 12.7 je zobrazeno, jak sloučit oba řídící signály Load a Enable do jednoho a do nové časové základny synchronizovat jen jeden řídící signál. Tím se zabrání možnosti, že by signály přišli do nové časové základny s posunem.

12.6.2 Dva fázově posunuté sekvenční řídící signály

Schéma na zobrazuje dva signály povolení aen1 a aen2, které jsou použity k povolení sekvenčního přesunu dat přes krátký pipeline. Problém nastane když v první časové základně signál aen1 skončí těsně před nastavením signálu aen2 a v druhé časové základně nastane náběžná hrana vzorkování právě v téhle mezeře. Tato malá mezera mezi vstupními signály způsobí výrazné zpoždění na výstupu a to o jeden hodinový cyklus a výstupní signál a2 nebude zachycen druhým klopným obvodem v pipeline.

ab_en1 / ab_en2

ben1

ben2

aClk

aen1

a1

časová základna aClkbClk

synchronizační obvody

aen2

a2 a3qqaClk

malý posun mezi řídícími signály

synchronizace s aClk

ben1

ben2

ab_en2

ab_en1

a_en1

a_en2

druhý enable signál je příliš zpožděn

a3 se nenačte

a3a2a1

Obr. 12.8: Synchronizace sekvenčních řídících signálů

Řešení tohoto problému je zobrazeno na Obr. 12.9. Do druhé časové základny je připojen jenom jeden řídící signál a vytvoření druhého, fázově posunutého, signálu je zabezpečeno až tam.

Page 170: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

170 FEKT Vysokého učení technického v Brně

ab_en

ben1

aClk

aen1

a1

časová základna aClkbClk

synchronizační obvody

aen2

a2 a3qqaClk

pouze jeden řídící signál

synchronizace s aClk

ben1

a3 se načte

a2a1

ab_en

a_en2

a_en1

a3

Obr. 12.9: Logika generující řídící signály v správném pořadí ve druhé časové základně

12.6.3 Převod signálu pro dekodér

Schéma na Obr. 12.10 zobrazuje přechod signálů pro enkodér mezi dvěma časovými základnami. Jakmile jsou vstupní signály mezi sebou mírně posunuty v čase vzorkování, na dekodéru se může objevit nesprávná hodnota po dobu jedné periody vzorkovacího hodinového signálu ve druhé časové základně.

Page 171: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 171

CHYBA!aen[2] neměl změnit stav

ab_dec[1:0]

bdec[1]

aClk

adec1

časová základna aClkbClk

synchronizační obvody

bdec[0] adec0aen[0]aen[1]aen[2]aen[3]

aClk

bdec[1]

bdec[0]

aen[2]

bdec=0 bdec=3

ab_dec[0]

ab_dec[1]

adec[0]

adec[1]

aen[0]aen[1]

aen[3]aen[0] aen[0] aen[2] aen[3]

Obr. 12.10: Signál pro dekodér přecházející z jedné časové základny do druhé

aClk

bdec[1]bdec[0]

aen[2]

bdec=0 bdec=3

ab_dec[0]

ab_dec[1]

adec[0]

adec[1]

aen[0]aen[1]

aen[3]

aen[0]aen[1]aen[2]aen[3]

ab_dec[1:0]

bdec[1]

aClk

adec1

časová základna aClkbClk

bdec[0] adec0

bden_n aden_nen

bden_n

aen[3]

ab_den_n

aden_nsynchronizační obvody

enable puls po synchronizaci

Obr. 12.11: Logika pro synchronizování a nastavení signálu Enable

Page 172: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

172 FEKT Vysokého učení technického v Brně

Jeden způsob jak to vyřešit tento problém je přiblížen na Obr. 12.11. Je možné použít další, Enable signál, který potvrdí platnost přenosu do druhé časové základny a uvolní výstup dekodéru. Signál musí být generován na vysílací straně, zpožděn o jednu časovou periodu po přenosu enkódovaného signálu. Vysílací strana musí zabezpečit odpojení tohoto potvrzovacího signálu jednu periodu před změnou hodnot enkódovaného výstupu. Jak již bylo popsáno výše, perioda Enable signálu musí být větší, než vzorkovací perioda časové základny do které je převáděn.

V nejhorším případě bude signál pro potvrzení vzorkován do druhé časové základny ve stejnou dobu jako vstupy enkodéru, nebo bude vynulován zároveň se změnou enkódovaného signálu v druhé časové základně. Nejlepší případ, který může nastat je když signál pro potvrzení bude vzorkován jednu periodu po nastavení enkódované informace a odpojen jednu periodu před změnou hodnoty. Tahle metoda zabezpečí, že každý signál vstupující do dekodéru bude mít správnou hodnotu ještě před tím než se v nové časové základně dekóduje.

Druhé možné řešení tohoto problému je na Obr. 12.12, dekódovat signál už v první časové základně a dekódovaný signál převádět pomocí synchronizačních obvodů do druhé časové základny. Ve druhé časové základně je stavový automat, který určí kdy byla převedenému signálu přiřazena nová hodnota. Když jsou všechny signály vynulovány, stavový automat si pamatuje poslední stav. Znamená to, že stará hodnota už neplatí, ale nová ještě nebyla nastavena. V případě, že jsou nastaveny dva dekódované signály, stavový automat přechází do dalšího stavu, protože nastala situace kdy je nová hodnota už platí, ale stará ještě nebyla zrušena, co se stane v následujícím hodinovém cyklu. Důležité je na vysílací straně zabezpečit jen to, aby každý impulz trval déle, než perioda vzorkovacího kmitočtu na přijímající straně.

Obr. 12.12: Logika se stavovým automatem pro detekci změny řídícího signálu

Vždy když více řídících signálů přechází mezi dvěma hodinovými základnami, je třeba dát pozor na dodržení správného pořadí v jakém jsou tyto signály převedeny. Jinak může obvod začít pracovat neočekávaně nebo chybně.

Page 173: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 173

12.7 Synchronizace datového signálu

Převádění datového signálu z jedné časové základny do druhé se řeší jinak než převádění řídících signálů. Jde o převod náhodně se měnícího signálu. Použití synchronizačních bloků pro takový převod není přípustné. V datovém signálu by rychlejší změna než vzorkovací frekvence synchronizačního obvodu způsobila vážné problémy.

Existují dva způsoby jak synchronizovat datové signály mezi různými hodinovými základnami:

1. Použití potvrzovacího signálu při převodu signálu mezi hodinovými základnami. 2. Ukládat data do registru FIFO (First In First Out) v jedné časové základně a číst je v

druhé.

12.7.1 Potvrzování přenosu mezi hodinovými základnami

Datové signály mohou být přesouvány mezi dvěma hodinovými základnami za pomoc dvou nebo tří potvrzovacích signálů, záleží přitom na aplikaci a spolehlivosti potvrzování. Při tomhle způsobu třeba myslet na to, že čím je použito víc potvrzovacích signálů, tím delší bude čas potřebný přenos dat z jedné hodinové základny do druhé. Čas pro potvrzování je největší nevýhodou při přenosu dat s potvrzováním.

Pro většinu přenosů je dostatečné jednoduché potvrzování pomocí dvou signálů. Vysílací strana vystaví data na sběrnici a synchronizuje je signálem “data_valid“. Když přijímací strana zachytí tento signál, data uloží do registrů ve druhé časové základně (data musí zůstat platná alespoň po dobu dvou náběžných hran hodinového signálu na vysílací straně) a vyšle signál potvrzující příjem “acknowledge“ přes další synchronizační obvod směrem k vysílací straně. Po přijetí potvrzení může vysílací strana změnit hodnotu dat na sběrnici.

V některých případech může být výhodné přidat třetí synchronizační signál “ready“, který je řízen přijímající stranou obvodu, indikující vysílací straně připravenost k přenosu. Signál “ready“ nesmí být nastaven po dobu kdy je indikován signál “data_valid“. Po tom co signál “data_valid“ přestane platit, může být odeslán signál “ready“ vysílací straně. Takové potvrzování však zabere více času, který je spotřebován k synchronizaci a spracování signálu “ready“.

12.7.2 Přesun dat mezi hodinovými základnami pomocí registru FIFO

Jeden z nepoužívanějších způsobů pro přenos dat mezi dvěmi časovými základnami je použití registru FIFO. Pro uložení dat v registru FIFO slouží dvouportová paměť RAM. Jeden port je řízen vysílací stranou, která ukládá data do paměti rychlostí jedno slovo (nebo jeden bit u sériového přenosu) na jeden hodinový impuls. Druhý port je řízen přijímací stranou, která čte data z paměti taky rychlostí jedno slovo jedním impulsem. Řídící signály jsou použity pro indikaci kdy je paměť FIFO prázdná, plná a nebo částečně plná.

Teoreticky zápis je dat do paměti v jedné hodinové základně a čtení ve druhé jednoduchý a ideální způsob jak převádět data mez dvěmi časovými základnami. Nejdůležitější část je však generování přesné informace o tom zda je paměť prázdná nebo plná, co může být složité.

Page 174: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

174 FEKT Vysokého učení technického v Brně

12.7.3 Indikace stavu paměti registru FIFO - plná / prázdná

Určení stavu, zda je paměť FIFO prázdná nebo plná vyžaduje matematické operace a porovnání ukazatelů pro zápis a čtení. Problém je, že ukazatele jsou generovány v různých časových základnách, takže jeden nebo oba ukazatele musí být synchronizovány do opačné časové základny. Jinak by nebylo možné spolehlivě vypočítat stav paměti.

12.7.4 Indikace stavu paměti registru FIFO - plná / prázdná

Ukazatel FIFO musí být synchronizován do opačné časové základny, a proto nemůže být implementován jako binární čítač.

Vlastností binárních čítačů je, že polovina inkrementací vyžaduje změnu dvou nebo více bitů v jednom kroku. Synchronizace binárního čítače mezi dvěma časovými základnami je proto obtížná a jedná se o synchronizaci více řídících signálů. Když jednoduchý 4-bitový binární čítač mění hodnotu adresy z 7 (binárně 0111) na adresu 8 (binárně 1000), všechny čtyři bity změní hodnotu naráz. Při použití synchronizačního obvodu by v případě vzorkování v průběhu změny mohlo dojít k načtení kterékoli možné kombinace 4-bitového čísla. Tato chyba by se pak přenesla do druhé časové základny (Obr. 12.13).

Hodnoty binárního

čítače

00 0 0 0 0 01 0 0 0 1 02 0 0 1 0 03 0 0 1 1 04 0 1 0 0 05 0 1 0 1 06 0 1 1 0 07 0 1 1 1 08 1 0 0 0 09 1 0 0 1 10 1 0 1 0 11 1 0 1 1 12 1 1 0 0 13 1 1 0 1 14 1 1 1 0 15 1 1 1 1

Hodnoty které mohou nastat při změně binárního čísla: 07 -> 08

0 1 1 1 -> 1 0 0 0 (07->08) 0 1 1 1 -> 0 0 0 0 (07->00) 0 1 1 1 -> 0 0 0 1 (07->01) 0 1 1 1 -> 0 0 1 0 (07->02) 0 1 1 1 -> 0 0 1 1 (07->03) 0 1 1 1 -> 0 1 0 0 (07->04) 0 1 1 1 -> 0 1 0 1 (07->05) 0 1 1 1 -> 0 1 1 0 (07->06) 0 1 1 1 -> 0 1 1 1 (07->07) 0 1 1 1 -> 1 0 0 0 (07->08) 0 1 1 1 -> 1 0 0 1 (07->09) 0 1 1 1 -> 1 0 1 0 (07->10) 0 1 1 1 -> 1 0 1 1 (07->11) 0 1 1 1 -> 1 1 0 0 (07->12) 0 1 1 1 -> 1 1 0 1 (07->13) 0 1 1 1 -> 1 1 1 0 (07->14) 0 1 1 1 -> 1 1 1 1 (07->15)

Obr. 12.13: Binární číslo navzorkováno během změny signálu

Výsledná nesprávně synchronizovaná binární hodnota by mohla způsobit chybu při určení zda je paměť prázdná nebo plná, nebo dokonce nevyhodnotit plnost paměti a způsobit přetečení FIFO bufferu, čím by se ztratili data. Další chyba by nastala při nevyhodnocení prázdné paměti a přijímající obvod by četl z paměti FIFO nesprávná data.

Page 175: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 175

12.7.5 Implementace ukazatele FIFO pomocí Grayova čítače

Navzdory tomu, že binární čítače stačí pro adresování paměti, je jejich synchronizace mezi dvěma hodinovými základnami problematická. Lepší způsob jak přesouvat data ukazatelů je použít Grayův kód pro oba čítače. Grayův kód mění najednou jenom jeden bit. Když přijde náběžná hrana synchronizačního obvodu v momentě změny Grayova čítače, mohou nastat dva případy. Na výstupu se objeví buď hodnota stará nebo nová, která má následovat, protože se mění jenom jeden bit.

12.7.6 Návrh Grayova čítače

Na Obr. 12.14 je blokové schéma Grayova čítače. V návrhu je použit registr pro uložení hodnoty v Grayově kódu. Výstup registru je přiveden do převodníku z Grayova do binárního kódu. K binárnímu číslu je přičítána jednička a tahle hodnota je přivedena do převodníku z binárního na Grayův kód, jeho výstup je vstupem registru.

Komb. logika pro převod z GRAY do

BIN

Komb. logika pro převod z

BIN do GRAY

+

binbnext gnext

inc

clk

Registr GRAY kódu

d q

rst_n

gray

binární sčítačka, jeden řádek programu

rst_n

generující kód pro kombinační logiku

generující kód pro kombinační logiku

výstupní registr GRAY kódu

hodnota bnext se inkrementuje o jedna

když je inc v ’1’

Obr. 12.14: Bloková schéma Grayova čítače

12.7.7 Převod Grayova do binárního kódu

Pro převod n-bitového Grayova kódu na ekvivalentní binární hodnotu se používají následující rovnice. Bit 0 v binárním kódu odpovídá bitu v Grayově kódu exkluzivně sečteným se všemi následujícími bity v Grayově kódu od 1 do n. Bit 1 odpovídá bitu 1 v Grayově kódu exkluzivně sečteným se všemi následujícími od 2 do n, atd. Nejvyšší bit (MSB) je v obou kódech stejný. Rovnice pro převod 4-bitový převod z Grayova do binárního kódu jsou na následovní

bin(0) = gray(3) xor gray(2) xor gray(1) xor gray(0);

bin(1) = gray(3) xor gray(2) xor gray(1);

Page 176: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

176 FEKT Vysokého učení technického v Brně

bin(2) = gray(3) xor gray(2); bin(3) = gray(3);

Příklad převodu pěti bitového čísla v Grayově kódu na binární je na Obr. 12.15. Z rovnic uvedených výše a tohoto příkladu vyplývá, že převod na úrovni hradel se provádí postupně sčítáním bitů. Tyhle součty je možné realizovat pomocí hradel XOR.

Bit LSB se v reálném obvodu převede jako poslední, se zpožděním které je součet všech zpoždění na jednotlivých hradlech. Grayův čítač na Obr. 12.14 řeší tenhle problém připojením záchytného registru k výstupu čítače. S náběžnou hranou se data přenesou na výstup a zpoždění kombinačních funkcí pro převod mezi kódy a sčítačky jsou kompenzována tak, že při náběžné hraně je následující hodnota Grayova kódu připravena a přenese se na výstup registru s minimálním zpožděním.

Obr. 12.15: Princip převodu Grayova kódu na binární číslo pomocí součtů

Na Obr. 12.16 je schéma převodníku z Grayova do binárního kódu. K převodu bitu LSB je potřeba už převedený signál z předcházejícího bitu. Jeho hodnota je ale taky závislá na předcházejícím bitu. Jednotlivé zpoždění na hradlech, kterými signál takhle prochází se kumulují a celý převod trvá tím déle, čím větší je převáděné číslo. Vhodným zapojením je možné toto zpoždění odstranit Obr. 12.14.

=1

=1

=1

G3

G2

G1

G0

B3

B2

B1

B0

převod bitu LSB závisí na všech

předchozích

na každém hradle vzniká

zpoždění

Obr. 12.16: Schéma čtyř bitového převodníku z Grayova do binárního kódu

Page 177: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 177

Nejjednodušší způsob jak převádět v jazyce VHDL Grayův kód do binárního je použít generující smyčku FOR a v ní vytvořit vhodně propojena hradla. V příkladu 1 je zdrojový kód převodníku s parametrem, který udává velikost převáděného čísla (N-bit). První řádek těla architektury přepisuje nejvyšší bit Grayova kódu do pomocného signálu binárního kódu, protože bit MSB je v obou kódech stejný. Následuje smyčka, která generuje hradla XOR potřebná pro převod dalších bitů. Poslední řádek přepojí pomocný signál na výstupní port. entity gray_bin is generic (N : integer := 16); Port ( gray : in std_logic_vector (N-1 downto 0); bin : out std_logic_vector (N-1 downto 0)); end gray_bin; architecture Behavioral of gray_bin is signal b_int : std_logic_vector (N-1 downto 0); begin b_int(N-1) <= gray(N-1); hradla: for i in 0 to N-2 generate b_int(i) <= gray(i) xor b_int(i+1); end generate; bin <= b_int; end Behavioral;

12.7.1 Převod binárního do Grayova kódu

Převod z binárního do Grayova kódu je definován rovnicemi uvedené níže. Bit MSB je v obou kódech stejný. Ostatní jsou součtem dvou po sobě následujících bitů, který je realizován funkcí XOR.

gray(0) = bin(0) xor bin(1) gray(1) = bin(1) xor bin(2) gray(2) = bin(2) xor bin(3) gray(3) = bin(3)

Na Obr. 12.17 je příklad převodu pěti bitového binárního čísla do Grayova kódu. Sčítají se dva sousední bity. Tenhle součet je pak zapsán do pozice vyššího z bitů do výsledného registru, ve kterém je hodnota v Grayově kódu.

Page 178: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

178 FEKT Vysokého učení technického v Brně

Obr. 12.17: Princip převodu binárního kódu na Grayův pomocí součtů

Při převodu z binárního do Grayova kódu odpadá problém s velikým zpožděním, který byl popsán v předešlé kapitole. Vstupní signály procházejí všechny jen jedinou vrstvou hradel a proto je zpoždění u tohoto převodu minimální.

Na obrázku X4 je schéma převodníku z binárního do Grayova kódu, ze které vyplývá, že zpoždění převodu je jen o čas za který projdou signály hradlem XOR.

=1

=1

=1

G3

G2

G1

G0

B3

B2

B1

B0

bit MSB je stejný pro oba kódy

součet je tvořen

hradly XOR

Obr. 12.18: Schéma čtyř bitového převodníku z binárního do Grayova kódu

Podobně jako v převodu z Grayova kódu na binární číslo, je pro vytvoření bloku pro převod využita generující smyčka pro vytvoření obvodu z hradel. Bit MSB je přímo přepsán a ostatní jsou sčítány pomocí hradel XOR a zapisovány do Grayova kódu. Tenhle kód je univerzální a parametrem N je možno měnit počet bitů, které jsou převáděny.

entity bin_gray is generic (N : integer := 4); Port ( bin : in std_logic_vector (N-1 downto 0); gray : out std_logic_vector (N-1 downto 0)); end bin_gray;

Page 179: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 179

architecture Behavioral of bin_gray is begin gray(N-1) <= bin(N-1); hradla: for i in 0 to N-2 generate gray(i) <= bin(i) xor bin(i+1); end generate; end Behavioral;

12.7.2 Grayův čítač Následující VHDL popis spojuje převodníky Grayova do binárního kódu a naopak se

sčítačkou a registrem. Vzniká tak Grayův čítač. Tenhle čítač je popsán tak aby vyhovoval schématu na Obr. 12.14 a je parametrický. Velikost je čítače je možné měnit parametrem N. Hodnota čítače je inkrementována v binární sčítačce ale výsledek se převádí do Grayova kódu a před vstupem do sčítačky zpět na binární číslo. entity gcnt is generic (N : integer := 4); Port ( inc, clk, rst_n : in STD_LOGIC; gray : out STD_LOGIC_VECTOR (N-1 downto 0)); end gcnt; architecture Behavioral of gcnt is signal gnext, gray_x : std_logic_vector (N-1 downto 0) := (others => '0'); signal bin, bnext : std_logic_vector (N-1 downto 0); begin -- hodiny a reset graycnt: process (clk, rst_n) begin if rst_n = '1' then gray_x <= (others => '0'); elsif clk'event and clk='1' then gray_x <= gnext; end if; end process; gray <= gray_x; -- scitacka bnext <= bin + inc; -- prevod GRAY na BIN bin(N-1) <= gray_x(N-1); g2b: for i in 0 to N-2 generate bin(i) <= gray_x(i) xor bin(i+1); end generate;

Page 180: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

180 FEKT Vysokého učení technického v Brně

-- prevod BIN na GRAY gnext(N-1) <= bnext(N-1); b2g: for i in 0 to N-2 generate gnext(i) <= bnext(i) xor bnext(i+1); end generate; end Behavioral;

12.8 Návrh registru FIFO

Pro přesunu dat mezi dvěmi časovými základnami se obvykle používá registr FIFO (First In First Out). Na Obr. 12.19 je bloková schéma návrhu registru FIFO.

Obr. 12.19: Bloková schéma registru FIFO rozdělena podle hodinových základen

12.8.1 Zápis do a čtení z registru FIFO

Operace zápisu do registru FIFO vkládá do paměti FIFO datové slovo. V anglické literatuře se někdy označuje FIFO write, FIFO fill nebo FIFO load.

Operace čtení z registru FIFO vybírá datové slovo z paměti FIFO. Označuje se jako FIFO read nebo FIFO drain.

Page 181: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 181

Protože příznaky plné nebo prázdné paměti je generován z ukazatelů, alespoň jeden z nich musí být synchronizován do druhé časové základny. Jinak by nebylo možné tyto příznaky spolehlivě nastavovat.

Jeden ze způsobů návrhu registru FIFO označuje příznak zaplnění okamžitě když tahle podmínka nastane, ale zrušení příznaku nastane se zpožděním několika hodinových period. Takový způsob se nazývá pesimistické značení příznaků.

12.8.2 Pesimistické značení příznaků plné a prázdné paměti

Pesimistické značení příznaku plné paměti nastane v okamžiku zaplnění paměti FIFO ale zrušení tohoto příznaku je zpožděno (nastane o několik čtení z registru později).

Protože ukazatel adresy zápisu je řízen stejnou hodinovou základnou jako obvod, který do FIFO zapisuje, není nutné ho synchronizovat a jeho hodnota není zpožděná. Pak v momentě zaplnění paměti se nastavuje příznak plné paměti. Ale paměť FIFO nemusí být plná, protože ukazatel čtení se mohl mezitím inkrementovat, ale jeho hodnota se jen nestihla synchronizovat do časové základny obvodu který do FIFO zapisuje. V obvodu na Obr. 12.19 je ukazatel čtení při synchronizaci do opačné časové základny vždy zpožděn o dva hodinové cykly časové základny obvodu který do FIFO zapisuje. Takže po čtení z plné paměti zůstává příznak zaplnění aktivní ještě po dobu dvou hodinových hodinových cyklů zápisu. Obvykle ale není problém když se zápis dalších dat do paměti zpozdí o dva hodinové cykly. Ukazatele adresy pro zápis a čtení by měly být realizovány jako Grayovy čítače, důvody jsou vysvětleny v předešlých kapitolách.

Obdobně to funguje pro příznak prázdné paměti, protože ukazatel není potřeba synchronizovat před testováním zda je paměť plná, nastaví se okamžitě s naplněním paměti registru FIFO. Paměť registru FIFO ale nemusí být prázdná, protože ukazatel zápisu mohl zvýšit hodnotu, ale nová hodnota se ještě nestihla synchronizovat do časové základny bloku, který z registru FIFO čte. Při použití schémata z Obr. 12.19 je ukazatel zápisu synchronizován do opačné časové základny se zpožděním o dva hodinové cykly (časové základny, ve které se z registru FIFO čte). Takže příznak prázdné paměti zůstane platný ještě po dobu dvou hodinových cyklů. Tato situace taky obvykle nezpůsobí problémy, příznak pouze informuje, že další data jsou připraveny ke čtení se zpožděním o dva hodinové cykly. Je nutné znova připomenout, že ukazatel pro čtení je vhodné implementovat pomocí Grayova čítače.

12.8.3 Podmínky pro nastavení příznaku registru FIFO plný / prázdný

Paměť registru FIFO je plná když se oba ukazatele, pro čtení i zápis, rovnají. Taky prázdná paměť je indikována stejnou hodnotou ukazatelů pro čtení i zápis, takže je nutné použít ukazatel o jeden bit větší, než je potřeba pro adresování celého rozsahu paměti registru FIFO. Další přidaný bit v ukazateli slouží jako příznak zda je paměť plná nebo prázdná. Když se přidané MSB bity rovnají, znamená to, že oba ukazatele přešli rozsah paměti registru a vrátili se na adresu 0 stejný počet krát a když mají stejné hodnoty i ostatní bity, paměť registru FIFO je prázdná. V případě, že se přidané MSB bity nerovnají, ukazatel zápisu se vrátil na adresu paměti 0 o jeden krát víc než ukazatel čtení a když se ostatní bity ukazatelů rovnají, paměť registru FIFO je plná.

12.9 Shrnutí

Metody pro kompletně synchronní návrh obvodů s jediným hodinovým signálem jsou

Page 182: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

182 FEKT Vysokého učení technického v Brně

jednoduché. Nástroje pro syntézu dokážou velmi dobře pracovat se synchronními systémy a simulátory jsou stavěny pro hledání problémů synchronních obvodů. Tato kapitola je proto zaměřena na převod obvodů pracujících s více hodinovými základnami na menší celky řízené jediným hodinovým signálem.

Důležité je si zapamatovat několik základních pravidel:

Rozdělení bloků do menších částí řízených pouze jediným hodinovým signálem zjednodušuje časování a následnou statickou časovou analýzu.

Každý synchronizační blok obsahuje vstupní řízené signály pouze jednou hodinovou základnou, které jsou převáděny do jiné časové základny, taky to zjednodušuje časování.

Konvence značení signálů podle časové základny kterou jsou řízeny umožňuje jednoduše identifikovat který signál má být synchronizován do jiné časové základny. Návrh je pak přehlednější.

Když prochází z jedné časové základny do druhé více řídících signálů, je nutné dodržet správné pořadí synchronizace těchto signálů.

Dodržení metod návrhu popsaných výše je možné vytvářet stabilní obvody, zjednodušuje simulaci, urychluje práci a zpřehledňuje zdrojové kódy.

13 Literatura

[1] LÍŠKA, M. – ŠULO, V. – STRELEC, J.: Programovatelná logická pole. GRADA, Praha 1993

[2] Lattice Semiconductor Data Book. Lattice Semiconductor Corporation, 1996

[3] Programmable Logic. Intel, 1991

[4] Altera Data Book. Altera Corporation, 1998

[5] SKAHILL, K.: VHDL for Programmable Logic. Addison-Wesley, 1996

[6] IEEE Standard VHDL Language Reference Manual, Std 1076-1993. IEEE, New York 1993

[7] Leblebici, Y., Kang S.M., CMOS Digital Integrated Circuits: Analysis and Design, ISBN 0-07-246053-9, McGraw-Hill, 2003

[8] Baker, R.J, CMOS: Circuit Design, Layout and Simulation, ISBN 0-471-70055-X, IEEE Press, 2005

[9] Wakerly, J.F., Digital Design: Principles and Practicles, ISBN 0-13-089896-1, Prentice Hall, 2001

[10] Brown, S., Vranesic, Z., Fundamentals of Digital Logic with VHDL Design, ISBN 007-124482-4, McGraw-Hill, 2005

[11] Ercegovac, M., Lang, T., Moreno, J.,H., Introduction to Digital Systems, ISBN 0-471-57299-8, Wiley, 1999

[12] Pong P. Chu, RTL Hardware Design Using VHDL: Coding for Efficiency, Portability, and Scalability, ISBN 0-471-72092-5, Wiley, 2006

Page 183: Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL · FAKULTA ELEKTROTECHNIKY A KOMUNIKAČNÍCH TECHNOLOGIÍ VYSOKÉ UČENÍ TECHNICKÉ V BRNĚ Návrh digitálních integrovaných

Návrh digitálních integrovaných obvodů VLSI a jazyk VHDL 183

[13] Deuck R., Digital Design with CPLD Applications and VHDL, ISBN 1-4018-4032-2, Thomson, 2005