Subsystémy používané v obvodech CPLD a FPGA a techniky jejich implementace
Učební text pro doktorské studium
Doc. Ing. Jaromír Kolouch, CSc.
OBSAH 1
ČÍTAČE LFSR .........................................................................................................................3
2
PŘÍKLADY APLIKACÍ ČÍTAČŮ LFSR V OBVODECH FPGA XILINX ......................9 2.1 2.2
3
POSUVNÝ REGISTR S VELKÝM POČTEM BITŮ..........................................................................9 GENERÁTOR PSEUDONÁHODNÉHO SIGNÁLU ........................................................................10 IMPLEMENTACE ČÍTAČŮ A STAVOVÝCH AUTOMATŮ V OBVODECH PLD A FPGA .......................................................................................................................................11
3.1 3.2
SYNCHRONNÍ BINÁRNÍ ČÍTAČE: ...........................................................................................11 STAVOVÉ AUTOMATY S KÓDOVÁNÍM 1 Z N:.........................................................................12
INICIALIZACE PAMĚŤOVÝCH PRVKŮ V OBVODECH FPGA XILINX..........................14 4
IMPLEMENTACE PAMĚTÍ RAM (RWM) V OBVODECH FPGA XILINX ...............16
5
HRADLOVANÉ REGISTRY ...............................................................................................18
6
STANDARDY PRO PROPOJOVÁNÍ ČÍSLICOVÝCH IO ..............................................20
7
HRANIČNÍ TEST (BOUNDARY SCAN)............................................................................22
8
ASYNCHRONNÍ VSTUPY SYNCHRONNÍCH SYSTÉMŮ A METASTABILITA......27
9
PROBLÉMY PŘEDSTIHU A PŘESAHU U REGISTRŮ ŘÍZENÝCH HRANOU........30
10
NEJDŮLEŽITĚJŠÍ VLASTNOSTI OBVODŮ CPLD A FPGA XILINX A ALTERA ..31
ŘADY OBVODŮ FPGA SPARTAN (XILINX) ......................................................................................34 Řada Spartan-II .........................................................................................................................34 Řada Spartan-3 ..........................................................................................................................38 KONFIGURAČNÍ PAMĚTI ..................................................................................................................40 11
JAK SE VYJADŘUJE VELIKOST OBVODŮ PLD A FPGA ..........................................42
12
ECL – EMITOROVĚ VÁZANÁ LOGIKA, CML – CURRENT-MODE LOGIC..........43
13
TECHNIKA „PIPELINING“ – POUŽITÍ KE ZVÝŠENÍ PŘÍPUSTNÉHO KMITOČTU HODINOVÉHO SIGNÁLU ..................................................................................................47
14
SYSTÉMY PRO POPIS KONSTRUKCE A PRO JEHO DALŠÍ ZPRACOVÁNÍ.........50
15
DUŠEVNÍ VLASTNICTVÍ A POUŽITÍ JADER ...............................................................51
2
1 Čítače LFSR Čítače LFSR (Linear Feedback Shift Register) představují výhodný stavební prvek často používaný v obvodech PLD a FPGA. Čítač LFSR s n bity je charakteristický tím, že přes jednoduchost zapojení prochází cyklem se všemi možnými stavy v počtu 2n vyjma jednoho, jak dále bude podrobněji vysvětleno. Možnost vytvoření těchto čítačů vychází z prací francouzského matematika Galoise, které dokazují jejich existenci pro libovolný požadovaný počet bitů. Čítače LFSR jsou výhodné v takových aplikacích, kde je potřebné odpočítávat určitý počet stavů. Další časté použití je v generátorech pseudonáhodných posloupností, kde z nějakých důvodů nevyhovuje použití jiných, například binárních čítačů. Jejich výhody se projevují zejména u velmi velkých čítačů s mnoha desítkami (nebo i stovkami) bitů, protože logika pro vytvoření příštího stavu čítače, tj. jejich kombinační část, je velmi jednoduchá. Výhodné jsou však i pro menší čítače. Jednoduchost kombinační části je dána tím, že v jejím zapojení je minimální počet kaskádně řazených hradel (s výjimkou bitu q1 je to pouhé propojení a u bitu q1 jen jedno hradlo), čemuž odpovídá malé zpoždění a tedy vysoký kmitočet, s nímž je čítač schopen pracovat, a to nezávisle na počtu bitů čítače. Další výhodou je skutečnost, že se pro vytvoření těchto čítačů může použít posuvný registr, který lze velmi efektivně realizovat v obvodech FPGA. Poněkud nepříjemnou vlastností čítače LFSR je, že jeho teorie je poměrně složitá. Pokud však bez dalšího přijmeme jako fakt tvrzení o cyklu a pro vytvoření kombinační části použijeme například tabulku Tab. 1.1, a pokud není potřebné převádět výstupní kód čítače na jiný kód (jako binární nebo podobně), s žádnými dalšími komplikacemi se již obvykle nesetkáme. Existuje několik variant čítačů LFSR, které mají velmi podobné vlastnosti, a liší se v zapojení. Zde budeme uvažovat variantu, která představuje posuvný registr, jehož vstup je vytvořen jako funkce EX-NOR některých vybraných bitů tohoto registru. Výše zmíněná teorie ukazuje, že tyto bity je možno pro čítač s libovolným počtem n bitů vybrat tak, že čítač prochází cyklem s 2n - 1 stavy. Nevelkou úpravou je možno získat čítač s úplným cyklem, tj. s 2n stavy, i čítač s cyklem zkráceným na libovolný menší počet stavů. =1 =1 =1
D
RG<
=1
q 1 q
Q1 Q2
D
2
Clk Clk
q
Qn
RG<
Q1 Q2 Q3 Q4
q 1 q 2 q 3 q 4
n
(a)
(b)
Obr. 1.1. Obecné zapojení čítače LFSR (a) a příklad zapojení pro čtyřbitový čítač (b) Obecné zapojení čítače LFSR je nakresleno na Obr. 1.1(a). Logické členy zapojené do datového vstupu posuvného registru vytvářejí logickou funkci EX-NOR vybraných výstupních signálů posuvného registru. Příklad zapojení čtyřbitového čítače je nakreslen na Obr. 1.1(b). Podle uvedené teorie lze vždy vybrat výstupy pro vytvoření funkce EX-NOR tak, že cyklus čítače z Obr. 1.1(a) obsahuje všechny možné kombinace výstupních signálů s výjimkou kombinace složené ze samých jedniček. Tento stav představuje stav zachycení, z něhož se čítač bez vnějšího zásahu nedostane. Pokud je registr po připojení napájecího napětí vynulovaný, jak je tomu u většiny obvodů PLD a FPGA, patří tento stav do pracovního cyklu čítače.
3
Indexy výstupů, z jejichž signálů je potřebné vytvořit vstupní funkci EX-NOR, aby vzniklý čítač procházel cyklem s 2n - 1 stavy, jsou uvedeny v Tab. 1.1 (převzata z [ 1 ]). Volba těchto výstupů není jednoznačná, existují i další možné verze výběru. Místo funkce EX-NOR je možno použít také funkci EX-OR, pak je výsledný kód čítače inverzní. Pro čítače podle Tab. 1.1 s jedinou výjimkou (pro čítač s 37 bity) je počet signálů, z nichž je nutno vytvořit funkci EX-NOR, dva nebo čtyři. V Tab. 1.2a jsou vypsány stavy čítače z Obr. 1.1(b), jak v cyklu následují po sobě. Po stavu číslo 14 přechází čítač opět do vynulovaného stavu, což je zdůrazněno očíslováním posledního stavu v tabulce. Je-li přípustná existence stavu zachycení, tj. stavu se všemi výstupními signály s jedničkovou hodnotou v zapojení podle Obr. 1.1(a), je zapojení čítačů podle tohoto obrázku platné pro čítače s počtem bitů až 168 a stejný je tedy i nejvyšší pracovní kmitočet všech těchto čítačů.
4
Tab. 1.1. Indexy výstupních signálů, které je nutno přivést na člen EX-NOR u n-bitového čítače LFSR n n n n Indexy Indexy Indexy Indexy
3 4 5 6 7 8 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 39 40 41 42 43 44
3,2 4,3 5,3 6,5 7,6 8,6,5,4 9,5 10,7 11,9 12,6,4,1 13,4,3,1 14,5,3,1 15,14 16,15,13,4 17,14 18,11 19,6,2,1 20,17 21,19 22,21 23,18 24,23,22,17 25,22 26,6,2,1 27,5,2,1 28,25 29,27 30,6,4,1 31,28 32,22,2,1 33,20 34,27,2,1 35,33 36,25 37,5,4,3,2,1 38,6,5,1 39,35 40,38,21,19 41,38 42,41,20,19 43,42,38,37 44,43,18,17
45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86
45,44,42,41 46,45,26,25 47,42 48,47,21,20 49,40 50,49,24,23 51,50,36,35 52,49 53,52,38,37 54,53,18,17 55,31 56,55,35,34 57,50 58,39 59,58,38,37 60,59 61,60,46,45 62,61,6,5 63,62 64,63,61,60 65,47 66,65,57,56 67,66,58,57 68,59 69,67,42,40 70,69,55,54 71,65 72,66,25,19 73,48 74,73,59,58 75,74,65,64 76,75,41,40 77,76,47,46 78,77,59,58 79,70 80,79,43,42 81,77 82,79,47,44 83,82,38,37 84,71 85,84,58,57 86,85,74,73
87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128
87,74 88,87,17,16 89,51 90,89,72,71 91,90,8,7 92,91,80,79 93,91 94,73 95,84 96,94,49,47 97,91 98,87 99,97,54,52 100,63 101,100,95,94 102,101,36,35 103,94 104,103,94,93 105,89 106,91 107,105,44,42 108,77 109,108,103,102 110,109,98,97 111,101 112,110,69,67 113,104 114,113,33,32 115,114,101,100 116,115,46,45 117,115,99,97 118,85 119,111 120,113,9,2 121,103 122,121,63,62 123,121 124,87 125,124,18,17 126,125,90,89 127,126 128,126,101,99
5
129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168
129,124 130,127 131,130,84,83 132,103 133,132,82,81 134,77 135,124 136,135,11,10 137,116 138,137,131,130 139,136,134,131 140,111 141,140,110,109 142,121 143,142,123,122 144,143,75,74 145,93 146,145,87,86 147,146,110,109 148,121 149,148,40,39 150,97 151,148 152,151,87,86 153,152 154,152,27,25 155,154,124,123 156,155,41,40 157,156,131,130 158,157,132,131 159,128 160,159,142,141 161,143 162,161,75,74 163,162,104,103 164,163,151,150 165,164,135,134 166,165,128,127 167,161 168,166,153,151
Tab. 1.2. a) Pracovní cyklus čítače z Obr. 1.1(b)
b) Pracovní cyklus čítače z Obr. 1.2
Číslo stavu
q1
q2
q3
q4
Číslo stavu
q1
q2
q3
q4
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ≡ 0
0 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0
0 0 1 1 1 0 1 1 0 0 1 0 1 0 0 0
0 0 0 1 1 1 0 1 1 0 0 1 0 1 0 0
0 0 0 0 1 1 1 0 1 1 0 0 1 0 1 0
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ≡ 0
0 1 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0
0 0 1 1 1 1 0 1 1 0 0 1 0 1 0 0 0
0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 0 0
0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 0
=1
=1 &
D Clk
RG<
q 1 q 2 q 3 q
Q1 Q2 Q3 Q4
4
Obr. 1.2. Úprava zapojení čtyřbitovného čítače LFSR pro získání úplného cyklu se 16 stavy Na Obr. 1.2 je nakreslen čítač upravený tak, aby jeho cyklus byl úplný, tj. aby obsahoval i stav 1111. Tab. 1.2b je tabulka jeho stavů. Z této tabulky je zřejmé, že má-li čítač obsahovat stav 1111, je nutno hodnotu vstupního signálu posuvného registru ve srovnání s původním signálem podle Obr. 1.1 ve stavu číslo 3 invertovat. Aby pak se čítač v nově vzniklém stavu (stav číslo 4 v Tab. 1.2b) nezachytil, ale pokračoval původním stavem č. 4, který v Tab. 1.2b má číslo 5, musí být invertován i vstupní signál registru v nově vzniklém stavu. Proto je mezi výstup členu EX-NOR a vstup posuvného registru zařazen další člen EX-OR představující pro původní datový signál registru řízený invertor. Signál na jeho spodním - řídicím - vstupu je nulový ve všech stavech s výjimkou stavů číslo 4 a 5 z Tab. 1.2b a zajišťuje tedy požadovanou inverzi vstupního signálu registru v uvedených dvou stavech čítače. Zcela obdobná bude úprava zapojení čítače s libovolným počtem bitů pro vytvoření čítače s úplným cyklem, tedy pro zahrnutí stavu s jedničkovými hodnotami všech výstupních signálů do pracovního cyklu. Bude potřebné invertovat původní vstupní signál pro stav předcházející tomuto stavu, tj. stav, kde jsou všechny výstupní signály jedničkové až na signál s nejvyšším indexem, a pro nově přidaný stav se všemi jedničkovými výstupními signály. Rozdíl proti zapojení z Obr. 1.2 bude tedy jen v rozšíření počtu vstupů součinového členu vytvářejícího řídicí signál členu EX-OR tak, že bude vytvářet součin všech výstupních signálů čítače kromě signálu s nejvyšším indexem, a 6
samozřejmě člen EX-NOR bude zpracovávat signály určené podle Tab. 1.1 pro čítač s požadovaným počtem bitů. Toto rozšíření počtu signálů v součinu má za následek, že s rostoucím počtem bitů čítače je nutné vytvářet součin ve více úrovních, což vede k snížení nejvyššího pracovního kmitočtu čítače. U obvodů CPLD se toto omezení projeví méně výrazně než u běžných obvodů FPGA, protože obvody CPLD mají větší počet vstupů do makrobuněk než obvody FPGA (některé řady obvodů FPGA, jako například řada Virtex-II, jsou však vybaveny prostředky pro paralelní vytváření širokých součinů a uvedené omezení je zde menší). Čítač s cyklem zkráceným na menší počet stavů, který nemusí být celistvou mocninou dvojky, můžeme vytvořit z čítače s úplným cyklem dvěma způsoby: využitím synchronního nulování nebo nastavení (reset nebo preset), úpravou zapojení pro datový vstupní signál posuvného registru, případně úpravou vstupního signálu některého z klopných obvodů tvořících posuvný registr. První možnost je velmi jednoduchá, je však použitelná jen u cílových obvodů, u nichž jsou klopné obvody vybaveny synchronním nulovacím nebo nastavovacím vstupem. Na tento vstup se připojí signál představující součin výstupních signálů, který je aktivní v posledním ze stavů požadovaného cyklu a neaktivní ve všech ostatních stavech cyklu. Obecně může být potřebné vytvořit součin všech (invertovaných nebo neinvertovaných) výstupních signálů čítače, někdy však vystačíme s menším počtem signálů v součinu, pokud je možné najít kombinaci těchto signálů, která má v posledním stavu součin s aktivní úrovní a ve všech ostatních stavech pracovního cyklu je tato úroveň neaktivní, přičemž na hodnotě součinu v ostatních stavech (mimo pracovní cyklus) nezáleží. Například pro pětibitový čítač je z jeho tabulky stavů snadno možné zjistit, že pro čítač s 18 stavy stačí vytvořit součin tří neinvertovaných výstupních signálů s indexy 1, 3 a 4. Pro čítače s velkým počtem bitů však může tato úprava znamenat snížení nejvyššího pracovního kmitočtu. Druhá možnost: úpravu vstupního signálu posuvného registru pro zkrácení pracovního cyklu čítače je možno provést podobně jako byla provedena úprava zapojení v Obr. 1.2 pro získání čítače s úplným cyklem. Vyjdeme z modifikovaného zapojení odpovídajícího schématu z Obr. 1.2, které dále upravíme tak, že invertujeme vstupní signál posuvného registru ještě v některém z dalších stavů. Do řídicího signálu řízeného invertoru ve vstupu posuvného registru tedy zapojíme člen OR, na jehož jeden vstup přivedeme původní řídicí signál a na druhý vstup přivedeme signál, který bude mít jedničkovou hodnotu jen ve stavu, kterým chceme původní cyklus ukončit. Přitom však musíme mít na paměti, že na rozdíl od předcházející možnosti s využitím synchronního nulování, kdy je následující stav čítače nulový, je nyní následující stav odvozen z předcházejícího stavu posuvem o jeden bit, čímž dojde k přeskočení některých stavů původního cyklu. Stav následující po tomto přeskočení je nutno odvodit posuvem obsahu registru a inverzí prvního bitu ve srovnání s původním zapojením. Zapojení pro čtyřbitový čítač je nakresleno na Obr. 1.3. Tab. 1.3 je tabulka stavů čítače doplněná o další sloupec, v němž je uveden počet stavů čítače odpovídající dále popsanému zapojení. Křížek u signálu q4 na vstupu součinového členu A znamená, že tento signál je pro některé případy nepřipojen. Zapojení bez součinových členů A a B je původní zapojení čítače s 15 stavy, se stavem zachycení tvořeném všemi výstupními signály s hodnotou 1. Připojením součinového členu A včetně signálu q4 na tomto vstupu se stav zachycení odstraní, protože v tomto stavu je vstupní signál registru invertován, počet stavů zůstává 15. Vynecháním signálu q4 ze vstupu členu A dostaneme zapojení pro čítač s úplným cyklem 16 stavů, jak byl popsán výše.
7
q 3 q
=1
q 1 q 2 q 3 q #
&
q + 1 q + 2 q + 3 q +
&
=1
4
4
4
D
RG<
Clk 1
q 1 q 2 q 3 q
Q1 Q2 Q3 Q4
4
A
B
Obr. 1.3. Generické zapojení čtyřbitovného čítače LFSR pro získání cyklu s dvěma až 16 stavy Tab. 1.3. Pracovní cyklus čítače z Obr. 1.3 Číslo stavu q1 q2 q3 q4 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 ≡ 0
0 1 1 1 1 0 1 1 0 0 1 0 1 0 0 0 0
0 0 1 1 1 1 0 1 1 0 0 1 0 1 0 0 0
0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 0 0
0 0 0 0 1 1 1 1 0 1 1 0 0 1 0 1 0
Počet stavů q4# odpojen q4# připojen 7 11
13 10 5 3 11 9 14 6 2 5
12 4
8
Čítač se 14 stavy získáme připojením dalšího součinového členu B, přičemž signály q1+ až q4+ na vstupu tohoto členu budou rovny odpovídajícím signálům q1 až q4, pokud je hodnota těchto signálů v řádku uvedeném v Tab. 1.3 odpovídajícím 14 stavům (řádek označený číslem stavu 11) jedničková, a jejich inverzi v opačném případě. Je zřejmé, že se v tomto zapojení invertuje původní vstupní signál registru ve stavu číslo 11, takže čítač přechází z tohoto stavu do stavu 0010, tedy do stavu číslo 14 (shoda čísla tohoto stavu s počtem stavů čítače je náhodná). Součinový člen A v tomto případě odstraňuje stav zachycení. Pokud by byl vynechán, funkce čítače by zůstala zachována, pouze by stav zachycení (1111) nebyl odstraněn. Zcela analogicky se vytvoří čítače s počty stavů uvedenými v dalších řádcích ve sloupci "Počet stavů - q4# odpojen". Je však zřejmé, že pro některé řádky uvedená úprava není smysluplná. Například v řádku s číslem stavu 0 by tato úprava vedla ke vzniku čítače s dalším stavem zachycení ve vynulovaném stavu čítače. Dále je čítač s 11 stavy možno vytvořit dvěma způsoby odpovídajícími řádkům s číslem stavu 2 nebo 9. Chybějící čítače s počty stavů 4, 8 a 12 můžeme
8
vytvořit tak, že připojíme signál q4# od vstupu čítače s počtem stavů o jeden větším. Pak čítač vynechá stav 1111, čímž vznikne cyklus s žádaným počtem stavů. Podobným způsobem je možno postupovat při sestavování vícebitových čítačů. Při realizaci čítačů LFSR v obvodech FPGA je výhodné, že pro vytvoření vstupních signálů klopných obvodů, z nichž je složen posuvný registr (až na první z nich), není potřebný žádný logický obvod. To znamená, že se spotřebuje tolik funkčních bloků, kolik je zapotřebí k získání požadovaného množství klopných obvodů, k nimž je nutno někdy přidat jen několik dalších bloků pro vytvoření vstupního signálu celého posuvného registru, jak bylo výše vyloženo. U jiných čítačů se při zvětšování počtu bitů rychle stává složitějším i generování vstupních signálů jednotlivých klopných obvodů. Například u obvodů Spartan firmy Xilinx se pro výše uvedený čtyřbitový čítač s libovolným počtem stavů spotřebují dva funkční bloky, pro analogický pětibitový čítač stačí dva a půl funkčního bloku.
2 Příklady aplikací čítačů LFSR v obvodech FPGA Xilinx 2.1 Posuvný registr s velkým počtem bitů Zapojení takového registru využívá synchronní paměť RAM, jejíž 16bitovou verzi je možno vytvořit z poloviny funkčního bloku obvodů FPGA řady Spartan, a podobně tomu je i u jiných řad. Zapojení posuvného registru s 32 bity, který spotřebuje tři funkční bloky CLB, je nakresleno na Obr. 2.1. Dva funkční bloky zabere čítač LFSR generující adresu, třetí představují paměťové bloky. Din Din Dout 16x1 memory SRAM A
=1
=1 &
D
RG<
Q1 Q2 Q3 Q4 Dout Din Dout 16x1 memory SRAM A
Clk
Obr. 2.1. Zapojení posuvného registru s 32 bity, spotřeba 3 CLB Podobným způsobem je možno sestavit například posuvný registr se 100 osmibitovými paměťovými místy, který spotřebuje 26 bloků CLB v obvodech FPGA XC4000, viz [ 1 ].
9
2.2 Generátor pseudonáhodného signálu Na Obr. 2.2 je nakresleno zapojení generátoru pseudonáhodného signálu. Čítač LFSR s délkou 63 bitů má cyklus s dobou opakování 263 - 1 period hodinového signálu, což při hodinovém kmitočtu 50 MHz představuje 5849 roků. K jeho implementaci stačí čtyři bloky CLB v obvodech FPGA XC4000. =1
=1 &
D
RG<
Clk
Q1 Q2 Q3 Q4 Adr
Adr
Din Dout 15x1 memory SRAM A
D Clk
Clk
Adr
Q Adr
Din Dout 15x1 memory SRAM A
D
Q
D
Q
Clk
Clk
Din Dout 15x1 memory SRAM A
Adr
Clk
Din Dout 15x1 memory SRAM A
Clk
Clk
=1 Load/Count Data In
&
1
&
Obr. 2.2. Zapojení generátoru pseudonáhodného signálu, spotřeba 4 CLB http://www.xilinx.com/products/spartan2/recipes/rec013.htm: It is easy to reverse the direction of such an LFSR counter: • Reverse the direction of the shift register to right-to-left. • Feed the D input of the right-most bit with the output of a new XNOR gate. The inputs to this new XNOR gate are similar to the XNOR gate for the left-to-right case, but they are all rotated one position to the right, and the leftmost bit takes the place of the rightmost bit. Use the example of a 15-bit up counter. If the bit positions are counted as 1 through 15, left to right, then the XNOR of bits 14 and 15 feeds D input of position 1. The same counter running backwards, shifting right-to-left: XNOR of positions 15 and 1 feeds D input of position 15.
10
3 Implementace čítačů a stavových automatů v obvodech PLD a FPGA Při implementaci stavových automatů je možno využít některých šablon, které dovolují pro typické případy odhadnout spotřebu strukturních prvků.
3.1 Synchronní binární čítače: V obvodech FPGA s bloky obsahujícími dva klopné obvody a pro každý z nich funkční generátor aspoň se čtyřmi vstupy (například Spartan) je možno jakýkoliv čtyřbitový (nebo menší) čítač vytvořit ze dvou bloků. Na Obr. 3.1 jsou bity 0 a 1 čítače realizovány v jednom bloku a bity 2 a 3 ve druhém. Takový čítač však obecně nemůže mít žádné synchronní vstupy pro větvení nebo jiné ovlivnění cyklu, je schopen jen čítat v pořadí stavů stanoveném jeho naprogramováním, a anglicky se označuje fully programmable.
q3 q2 q1 q0 q3 q2 q1 q0
FG3
D
FG2
D
FG1
D
FG0
D
q3
q2
q1
q0
clk Obr. 3.1. Implementace čtyřbitového čítače v obvodu FPGA. Nejnižší dva bity jsou realizovány v jednom bloku, vyšší dva bity v druhém bloku Je-li možno funkční generátory v bloku spojit do jednoho s pěti vstupy, je možné libovolný pětibitový čítač analogicky realizovat pěti funkčními bloky. Ve zvláštních případech, kdy při vyjádření hodnoty příštího stavu některých bitů čítače vystačíme s menším počtem bitů současného stavu, může být počet potřebných funkčních bloků menší – například u binárního čítače je příští stav bitu qk´ vyjádřen k+1 bity současného stavu. V tomto případě není u nižších bitů omezujícím faktorem jejich realizace počet vstupů funkčních bloků, ale počet klopných obvodů v nich. Čtyřbitové čítače vytvořené popsaným způsobem mohou být snadno propojeny do širších celků, jsou-li klopné obvody vybaveny vstupem pro blokování změny stavu (takovým klopným obvodům se říká obvody typu DE – data/enable, opět například u řady Spartan). Pro každou takovou čtyřbitovou jednotku je další blok použit k detekci koncové hodnoty nižších bitů čítače, a je-li tato hodnota zjištěna, povolí inkrementaci jednotky. Na tomto principu je možno založit rozšiřování rozsahu čítače .
11
3.2 Stavové automaty s kódováním 1 z n: Stavový registr zde má tvar posuvného registru s hradlovací logikou mezi klopnými obvody. Příklad: Stavový automat je popsán stavovým diagramem z Obr. 3.2.
/C8a * /C8b 7 C2
/C8a * C8b
C1 0
1
2 /C1
C8a
8
3
4
C4
5
6
/C2 /C4
Obr. 3.2. Stavový diagram k příkladu Odpovídající zapojení je nakresleno na Obr. 3.3. C8a C2
&
/C8a * C8b S7
C1 /C8a * /C8b
S0 &
S8 1
& S2 &
/C1
&
S6
S1
1
&
1
S3 &
/C2
S4 C4 1 /C4
S5 & &
Obr. 3.3. Odpovídající zapojení Stavový automat z příkladu má 9 stavů, k čemuž při kompaktním kódování stačí 4 klopné obvody. Při kódování 1 z n je zapotřebí devíti klopných obvodů, jak je nakresleno na Obr. 3.3. Samozřejmě automat nebude správně fungovat, pokud se v jeho stavovém registru objeví obsah neodpovídající kódu 1 z n, jinak řečeno, pokud se automat dostane do nepracovního stavu. V souvislosti s tím vyvstávají dva okruhy problémů: inicializace stavového registru po připojení napájecího napětí, případně po resetu, detekce nepracovního stavu během činnosti automatu a jeho ošetření. Inicializace stavového registru synchronním nebo asynchronním resetem patří k běžným jazykovým konstruktům, příklady lze najít ve skriptech [ 10 ]. Inicializace po připojení napájecího napětí se provádí pomocí atributů zapsaných v kódu VHDL nebo v souboru ucf, jak je popsáno v příslušném oddílu tohoto textu.
12
Detekce nepracovního stavu během činnosti automatu: Tato detekce není právě jednoduchá, takže její použití lze doporučit, není-li možno spoléhat na jiné prostředky (například na zásah obsluhy). Přechod automatu do nepracovního stavu obvykle patří mezi fatální chyby, takže vhodným ošetřením tohoto stavu může být vyvolání celkového resetu kolizním signálem COL, který lze vytvořit například u stavového registru s pěti bity následujícím způsobem: col <= (s1 AND (s2 OR s3 OR s4 OR s5)) OR (s2 AND (s3 OR s4 OR s5)) OR (s3 AND (s4 OR s5)) OR (s4 AND s5) OR NOT(s1 OR s2 OR s3 OR s4 OR s5);
První čtyři řádky testují, jestli se neobjevila jednička současně ve dvou nebo ve více stavových bitech, poslední řádek zjišťuje, zda je aspoň jeden stavový bit jedničkový. Je to kombinační funkce s tolika vstupy, kolik je stavů automatu, takže pokud by se implementovala běžným způsobem, způsobila by při větším počtu stavů automatu zpravidla jeho značné zpomalení. Při fatální chybě však není obvykle rozhodující, zda se reset uskuteční okamžitě nebo po uplynutí několika taktů hodinového signálu. Proto je možné použít pro vytvoření kolizního signálu zapojení pracující na principu pipeliningu, tedy rozdělit uvedený výraz na dílčí výrazy s menším počtem vstupních signálů, za něž se zařadí registr. Princip pipeliningu je podrobněji popsán dále v tomto textu. Příklad zápisu výrazu pro kolizní bit vhodný pro použití pipeliningu: 1. stupeň: s2345 <= s2 OR s3 OR s4 OR s5; r234<= (s2 AND (s3 OR s4 OR s5)) OR (s3 AND (s4 OR s5)) OR (s4 AND s5); 2. stupeň: r1 <= s1 AND s2345; r5 <= NOT(s1 OR s2345); 3. stupeň: col <= r1 OR r234 OR r5; Odpovídající zapojení:
s2 s3 s4 s5
1
LUT
s2345
r234
r1
&
r5
1
s1
13
1
col
Inicializace paměťových prvků v obvodech FPGA Xilinx Možné způsoby inicializace:(ve verzi 6 syntetizéru XST) v kódu VHDL, v souboru ucf Výchozí hodnota, kterou se inicializují všechny paměťové prvky, u nichž není jiná specifikace zadána, je nulová hodnota. U různých typů paměťových prvků je podpora inicializace jiným počátečním obsahem v kódu VHDL různá. Syntetizér XST dokáže inferovat počáteční hodnotu u blokové paměti RAM popsané behaviorálním stylem, pokud jde o jednobránovou paměť – viz [ 15 ], kap. Initializing Block RAM. Paměť RAM vytvořenou z tabulek LUT nebo vícebránovou blokovou paměť tímto způsobem inicializovat nelze. Všechny paměťové prvky je možno inicializovat, pokud jsou vloženy jako komponenty z knihovny UNISIM, pomocí atributu INIT. Příklad zápisu tohoto atributu v souboru ucf: NET "SigName" INIT = "S";
V tomto příkladu se signálu SigName přiřazuje atributem init počáteční hodnota (hodnota po připojení napájecího napětí). Je-li atributu přiřazena hodnota "S", je počáteční hodnota signálu 1. Pokud by místo hodnoty "S" byla atributu přiřazena hodnota "R", je jeho počáteční hodnota nulová – tato hodnota je výchozí, tj. uplatní se pokud není atribut pro tento signál v textu VHDL ani v souboru ucf uveden, takže ji není nutné definovat atributem. Jestliže tedy v konstrukci nulová počáteční hodnota vyhovuje, pak se obvykle přiřazení hodnoty atributu vynechává. Například u stavového registru s kódem 1 z n je třeba atribut s hodnotou "S" uvést pro ten stavový bit, který má být v počátečním stavu nastaven, a pro ostatní bity jej není nutno uvádět. Atribut init uvedený v textu VHDL je možno zařadit do deklarativní části popisu architektury. Je nutno jej nejprve deklarovat, a pak mu přiřadit hodnotu: ATTRIBUTE init: string; -- deklarace atributu ATTRIBUTE init OF SigName IS "S"; -- hodnota
Příklad behaviorálního popisu paměti RAM s inicializací (funkce conv_integer je definována ve sloze std_logic_unsigned): ... type ram_type is array (0 to 63) of std_logic_vector(19 downto 0); signal RAM: ram_type := (X"0200A", X"00300", X"08101", X"04000", X"08601", X"0233A" ,X"00300", X"08602", X"02310", X"0203B", X"08300", X"04002" ,X"08201", X"00500", X"04001", X"02500", X"00340", X"00241" ,X"04002", X"08300", X"08201", X"00500", X"08101", X"00602" ,X"04003", X"0241E", X"00301", X"00102", X"02122", X"02021" ,X"00301", X"00102", X"02222", X"04001", X"00342", X"0232B" ,X"00900", X"00302", X"00102", X"04002", X"00900", X"08201" ,X"02023", X"00303", X"02433", X"00301", X"04004", X"00301" ,X"00102", X"02137", X"02036", X"00301", X"00102", X"02237" ,X"04004", X"00304", X"04040", X"02500", X"02500", X"02500" ,X"0030D", X"02341", X"08201", X"0400D"); begin ... process (clk) begin if rising_edge(clk) then if we = '1' then RAM(conv_integer(a)) <= din; end if; ra <= a; end if; end process; dout <= RAM(conv_integer(ra)); ...
14
Jestliže se bloková paměť RAM inicializuje a dále se do ní nic nezapisuje, odpovídá její funkce paměti ROM. Následuje příklad behaviorálního popisu paměti ROM s inicializací: ... type rom_type is array (31 downto 0) of std_logic_vector (3 downto 0); constant ROM: rom_type := ("0001","0010","0011","0100","0101","0110","0111","1000","1001","1010" ,"1011","1100","1101","1110","1111","0001","0010","0011","0100","0101" ,"0110","0111","1000","1001","1010","1011","1100","1101","1110","1111"); signal raddr: std_logic_vector(4 downto 0); begin ... process (clk) begin if (clk’event and clk = '1') then if (en = '1') then raddr <= addr; end if; end if; end process; data <= ROM(conv_integer(raddr);
Je však nezbytné uvědomit si, že tímto způsobem vznikne synchronní paměť ROM, u níž se změna adresových vstupů projeví na výstupu až při následující aktivní hraně hodinového signálu. Podrobnější popis použití blokové paměti RAM jako paměti ROM lze najít v [ 15 ], kapitoly ROMs Using Block RAM Resources a Mapping Logic onto Block RAM. Důležité upozornění: Uvedené způsoby inicializace paměťových prvků jsou v souladu se syntaxí jazyka VHDL. To však zdaleka neznamená, že jsou podporovány všemi běžnými syntetizéry. Lze říci, že právě v podpoře jazykových konstruktů tohoto druhu jsou mezi jednotlivými syntetizéry největší rozdíly. Pokud chceme využívat výhod behaviorálního popisu v těchto případech, musíme prostudovat, jaké konstrukty používaný syntetizér podporuje. Tyto informace jsou uvedeny v dokumentaci k návrhovým systémům, např. [ 15 ], a pro rychlou orientaci bývají k dispozici šablony (v návrhových systémech firmy Xilinx jsou v menu Edit => Templates…). Použití těchto konstruktů obvykle znamená, že popis je bez úpravy možno zpracovat pouze tím syntetizérem, pro který byl sestaven. Pokud je požadována přenositelnost popisu do jiných systémů, bývá obvykle nezbytné provést inicializaci jiným způsobem, například u systémů firmy Xilinx pomocí souboru ucf.
15
4 Implementace pamětí RAM (RWM) v obvodech FPGA Xilinx Možné způsoby realizace pamětí RAM v obvodech s architekturou typu Virtex (patří sem kromě obvodů s tímto označením i obvody řad Spartan-II, Spartan-IIE a Spartan-3) – lze použít následujících paměťových prvků na čipu: klopné obvody obsažené v logických buňkách, tabulky LUT obsažené v těchto buňkách, které je možno nakonfigurovat do funkce 16bitové paměti RAM – tzv. distribuovaná paměť, speciální paměťová struktura pro realizaci rozsáhlejší paměti – bloková paměť RAM. Pro realizaci systémů s velkými pamětmi lze použít externě připojené paměťové obvody, připojení je podporováno celou řadou standardů implementovaných v I/O blocích. Realizace paměti v obvodech FPGA řady Spartan-II Pro srovnání těchto způsobů realizace uvažujme například řadu obvodů FPGA Spartan-II firmy Xilinx. Základní jednotkou umožňující měřit spotřebu logických prvků v konstrukci je řez (slice) obsahující dvě logické buňky (logic cells). V každé logické buňce je kombinační logická část, jejíž hlavní složkou je tabulka LUT (look-up table) a klopný obvod. Vyšší jednotkou je pak konfigurovatelný logický blok (CLB) sdružující dva řezy a určitou část další logiky. Organizace obvodů řady Virtex je podobná – viz [ 11 ], [ 12 ]. Větší odlišnosti jsou pak u navazujících řad – například u řad Spartan-IIE, Virtex-II a podobně. Klopné obvody obsažené v logických buňkách jsou těsně propojeny s logickými prvky určenými pro realizaci kombinačních logických funkcí a používají se především pro realizaci malých pamětí, které jsou součástí klasických synchronních subsystémů jako jsou čítače či stavové automaty (stavové a podobné registry). V každém řezu jsou tedy pro tento způsob realizace paměti k dispozici dvě paměťová místa. Paměti vytvořené z tabulek LUT jsou vhodné pro nevelké paměťové subsystémy, které nepotřebují ke své funkci tolik kombinační logiky, jako jsou například posuvné registry nebo jednoči dvoubránové paměti. Umožňují několik variant konfigurace, které jsou podrobněji popsány například v [ 11 ] nebo [ 12 ]. Syntetizéry návrhových systémů podporující tyto typy cílových obvodů, jako je například syntetizér zvaný XST (Xilinx Synthesis Technology) [ 15 ], dokáží automaticky rozpoznat a syntetizovat s využitím tohoto typu paměti i složitější subsystémy, pokud jsou tímto způsobem realizovatelné. Protože v každém řezu můžeme takto získat až 32 paměťových míst, je obvykle v uvedených případech tato realizace paměti efektivnější než její realizace předcházejícím způsobem. Bloková paměť RAM je výhodná pro realizaci rozsáhlejších paměťových subsystémů na čipu FPGA. Na rozdíl od obou dříve uvedených způsobů realizace, takto realizovaný paměťový subsystém téměř nespotřebovává univerzálně použitelné logické prvky z logických buněk, nepočítáme-li nevelké struktury, které jsou v některých aplikacích potřebné pro jeho řízení. Bloková paměť RAM je podobně jako paměť vytvořená z tabulek LUT je konfigurovatelná několika způsoby, jako je jednobránová nebo vícebránová paměť, má však některé další možnosti, jako je možnost nulování výstupního registru nebo řízení přístupu (enable). Pokud se ovšem bloková paměť nevyužije tímto způsobem, není její jiné využití možné. Podrobnější popis možností využití a způsobů konfigurace tohoto typu paměti lze najít v literatuře, jako [ 11 ], [ 12 ] nebo [ 13 ]. Paměť vytvořená z klopných obvodů je nejuniverzálnější – klopnými obvody je možno vytvořit všechny další druhy pamětí. Naopak bloková paměť je nejméně univerzální, tímto způsobem lze realizovat jen takové subsystémy, které odpovídají uspořádání paměťových bloků, což je dosti úzké 16
vymezení. Na tuto skutečnost je nezbytné myslet při vytváření popisu konstrukce, pokud chceme paměť vytvořit efektivně – často se stává, že drobnou a pro výsledek nepodstatnou úpravou popisu můžeme použití úspornějšího typu paměti umožnit nebo naopak zablokovat. Chceme-li využít výhod behaviorálního stylu při popisu paměťového subsystému, musíme se smířit s tím, že syntetizéry obvykle nedokáží zcela využít všechny možnosti konfigurace prvků cílových obvodů, v tomto případě blokové paměti. Na druhé straně je nutno uvážit, že behaviorální popis je zpravidla schopen vyjádřit nejčastější typické případy využití těchto prvků, a uvedená nevýhoda se může projevit nejspíše ve výjimečných případech, kdy je netradiční využití prvků cílových obvodů nezbytné. Popis zapsaný behaviorálním stylem dává také výsledky, u nichž nedochází ke vzniku různých konfliktních situací, jak jsou uvedeny například v [ 11 ] nebo [ 14 ]. Pro využití všech možností, které bloková paměť v obvodech FPGA firmy Xilinx poskytuje, je možno použít například prostředek zvaný Core Generator, který je součástí komerčních návrhových systémů BaseX, Foundation nebo Alliance. Popis takto generovaný má strukturální charakter. Behaviorální popis, má-li využít výhod distribuované nebo blokové paměti RAM, musí být zapsán způsobem, který je syntetizér schopen rozpoznat jako popis dovolující použití tohoto druhu paměti. Přirozeně tuto schopnost nemá každý syntetizér, ale současné syntetizéry firmy Xilinx a firem podporujících výrobky této firmy toto dokážou rozpoznat, pokud je popis paměti zapsán standardizovanou formou, která se uvádí ve tvaru šablony – viz [ 11 ], [ 13 ] nebo [ 14 ]. Podobné je to u ostatních firem vyrábějících obvody FPGA s analogickými druhy paměti RAM. Je však třeba upozornit, že i drobné odchylky od této šablony mohou (ale nutně nemusí) mít za následek, že syntetizér vybere univerzálnější, avšak méně ekonomický způsob realizace paměti. Je tedy důležité po provedení syntézy prohlédnout příslušný protokol (synthesis report) a zkontrolovat, zda byl při syntéze použit předpokládaný typ paměti – viz [ 15 ].
17
5 Hradlované registry Hradlovanými registry rozumíme registry, jejichž obsah se aktualizuje jen v době, kdy je tzv. hradlovací (povolovací) signál v aktivním stavu. Existují dvě základní způsoby hradlování registrů: hradlování hodinového signálu a hradlování datového signálu. Hradlování hodinového signálu: Tato metoda spočívá v ovládání přiváděného hodinového signálu řídicím signálem, které se zpravidla vykonává součinovým nebo součtovým logickým členem. Užívá se někdy v konstrukcích, které jsou vytvářeny ručním návrhem. Při automatické syntéze však se považuje obvykle za nepříliš vhodné. K tomuto tvrzení jsou dva hlavní důvody: První důvod spočívá v tom, že algoritmy používané při automatické syntéze zpravidla nezaručují vznik signálu bez parazitních impulsů, které mohou vznikat vlivem hazardů. Hlavní úsilí u syntézy je obvykle zaměřeno na zmenšení potřebné plochy čipu a na optimalizaci rychlosti. Tyto cíle syntézy nejsou v přímém vztahu s existencí nebo neexistencí parazitních impulsů ve výstupních signálech. Parazitní impulsy v hodinových signálech představují obvykle možnost fatálního, nicméně náhodně se objevujícího selhání subsystému s takovým hodinovým signálem. Druhý důvod je v tom, že současné systémy CAD používané pro vytváření zkušebních testů a provádění dalších pomocných funkcí v současné době obvykle nepodporují syntézu logických členů v hodinovém signálu, obvykle se hodinový signál předpokládá jako signál přímo přivedený na hodinové vstupy obvodů. Jako u jiných pravidel, i zde jsou výjimky. Existují případy, kde je hradlování hodinových signálů jediným prostředkem k dosažení stanoveného cíle. Je to například v systémech citlivých na spotřebu napájecího proudu, kde již samotné vyloučení, třeba dočasné, opětného nabíjení a vybíjení parazitních kapacit uzlu hodinového signálu může vést k podstatné úspoře. Například v době čtecích cyklů registru není potřebné, aby hodinový signál měnil svou hodnotu, takže je například možno hradlovat tento signál signálem typu write enable. Je pak na konstruktérovi zajistit, aby výsledné zapojení fungovalo spolehlivě. Jednoduché pravidlo pro minimalizaci rizika je udržet hradlovací obvody co nejjednodušší a jako řídicí signál použít buď výstupní signál registru nebo vnější signál, který je možno zaručit jako prostý parazitních impulsů. Příklad zapojení s hradlováním hodinového signálu u klopného obvodu řízeného vzestupnou hranou je nakreslen na Obr. 5.1. d Clk /ClkEn
D
q
1
Obr. 5.1. Klopný obvod s hradlovaným hodinovým signálem Podstatné je, že signál ClkEn je inverzní. Předpokládá se, že je vytvářen synchronně ze signálu Clk, takže jeho změny přicházejí v době těsně po aktivní hraně signálu Clk, kdy je výstup součtového členu držen v úrovni H tímto signálem a je tedy necitlivý na změny řídicího signálu. U klopného obvodu řízeného sestupnou hranou by pro hradlování byl vhodný součinový člen s řídicím signálem přímým (aktivním v úrovni H).
18
Hradlování datového signálu: Tato metoda je odolná proti možným parazitním impulsům a je proto preferovaná. Zapojení obvodu pro toto hradlování je nakresleno na Obr. 5.2. MUX D
d /DaEn
q
Clk
Obr. 5.2. Klopný obvod s hradlovaným datovým signálem Popis hradlovaného registru v jazyku VHDL – způsob problematický z hlediska syntézy: PROCESS (Clk) BEGIN IF (Clk'event AND Clk = '1' AND DaEn = '1') THEN q <= d; END IF; END PROCESS; Tento popis bude správně interpretován při simulaci, při syntéze však mohou vzniknout problémy s tím, že většina současných syntetizérů v něm nerozpozná šablonu pro registr řízený hranou. Popis určený pro syntézu by měl mít znění: PROCESS (Clk) BEGIN IF (Clk'event AND Clk = '1') THEN IF (DaEn = '1') THEN q <= d; END IF; END IF; END PROCESS; Blok odpovídající uvedenému zapojení se často vyskytuje v obvodech PLD a FPGA jako tzv. klopný obvod typu DE (Obr. 5.3). MUX d DaEn Clk
D
d
D
DaEn
E
q
Clk
Obr. 5.3. Vnitřní struktura klopného obvodu typu DE
19
q
6 Standardy pro propojování číslicových IO Dva druhy standardů: • •
nesouměrné (single-ended) souměrné, diferenční (differential)
Nesouměrné standardy Standard pro obvody s jmenovitým napájecím napětím 3 V/3,3 V: JEDEC Standard No. 8-B – nesouměrný – viz jesd8b.pdf Nejdůležitější body standardu: Mezní hodnoty napětí VDD (-0.5 až 4.6 V), VI, VO, vstupního a výstupního proudu Doporučované pracovní podmínky: Rozsah: úzký Jmenovité napájecí napětí: 3.3 V Hodnoty napájecího napětí: 3.15 V – 3.45 V
normální 3.3 V 3.0 V – 3.6 V
rozšířený 3.0 V 2.7 V to 3.6 V
Specifíkace vstupních úrovní LVTTL a LVCMOS – totožné Specifikace výstupních úrovní LVTTL Specifikace výstupních úrovní LVCMOS Zdůvodnění požadavků na snižování napájecího napětí Upozornění na nutnost kontroly napětí, které vytvářejí budiče s napájením 5 V, na něž se připojuje vstup LVTTL nebo LVCMOS Možnost rozšíření požadavků standardu 8-B: součástky splňující nebo překračující požadavky tohoto standardu Navazující standard: EIA/JESD36: Low Voltage TTL-Compatible, 5 V-Tolerant CMOS Logic Devices (návaznost na předchozí JEDEC Standard No. 8-A), viz jesd36.pdf Přehled napěťových úrovní u obvodů se specifikací 5V CMOS, TTL STD a LVTTL je na Obr. 6.1. 5V 4,44 V
VDD VOHmin
3,5 V
VIHmin
5V
VCC
Rozsah VDD:
úzký – 3.15 až 3.45 V normální – 3.0 až 3.6 V rozšířený – 2.7 až 3.6 V
DD
2,5 V
VT
1,5 V 0,5 V 0V
VILmax
2,4 V 2,0 V 1,5 V
VOHmin VIHmin VT
2,4 V 2,0 V 1,5 V
VOHmin VIHmin VT
VOLmax
0,8 V 0,4 V
VILmax VOLmax
0,8 V 0,4 V
VILmax VOLmax
GND
5V CMOS
V
V
0V
GND
0V
TTL STD
GND
V
- 0,2 V
DD
DD
VOHmin
2,0 V 1,5 V
VIHmin VT
0,8 V
VILmax VOLma GND
0,2 V 0V
LVTTL LVCMOS standard JEDEC 8-B
Obr. 6.1. Přehled napěťových úrovní u obvodů se specifikací 5V CMOS, TTL STD a LV TTL
20
Obvody se specifikací TTL STD, LVTTL a LVCMOS je možno vzájemně propojovat, pokud je zaručeno, že nedojde k překročení dovolené vstupní hodnoty napětí u obvodu LV Při připojování obvodu se specifikací 5V CMOS k výstupu TTL STD nebo LVTTL (LVCMOS) je nutno vřadit přizpůsobovací článek – např. obvod s výstupem typu otevřený kolektor nebo typu HCT. Další podobné standardy: LVCMOS25, LVCMOS18, LVCMOS15, LVCMOS12 Diferenční standardy: Výhody: vyšší odolnost proti rušení společným (součtovým) signálem, menší vyzařování rušivých signálů do okolí, možnost výrazně snížit rozkmit signálu: LVDS_25 – 350 mV, LVPECL_25 – až na 100 mV (viz ds099-3 s. 9) – nižší rozptýlený výkon, odběr z napájecího zdroje Diferenční standardy se používají především pro rychlou komunikaci – řádově stovky MBd a výše Způsob připojování obvodů PLD a FPGA k dalším částem s různými standardy interface: IO Banking, viz ds001_2.pdf s. 3 – princip: jádro obvodu napájeno napětím VCCINT, I/O bloky napětím VCCO. V jednom obvodu PLD či FPGA může být několik bank I/O bloků, každá z nich může mít svou vlastní hodnotu napětí VCCO. Je to například v řadě Spartan II nebo CoolRunner II Standardy používané v obvodech PLD a FPGA: přehled je např. v datasheetu pro FPGA řady Spartan II, s. 30 (ds001_2.pdf) Zákmity na společném vodiči (Ground bounce) při současně spínaných výstupech a problémy spojené s neklidem zemního uzlu – viz ds001_2.pdf s. 37, PLDpdn04.pdf
21
7 Hraniční test (Boundary Scan) Podrobnější informace – viz např. [ 2 ], [ 3 ] Testování: 1. jednotlivých součástek – integrovaných obvodů (IO): u výrobce, pak vstupní test před osazením 2. holých desek (neosazených) – u vícevrstvých, na které se montují drahé součástky, je to téměř nezbytnost (automaticky generovaný elektronický test), přinejmenším je vhodné otestovat aspoň velké uzly (zkrat mezi UCC a GND apod.) 3. hotových osazených desek: a) testování jednotlivých osazených IO b) testování funkčních celků uvnitř desky c) funkční test celé desky Testování podle bodů 1 a 2 – samozřejmost; - podle bodu 3a – výhoda: relativní jednoduchost testu, funkce součástek je známá, test určité součástky lze opakovaně použít v různých případech (pro různé desky) – problémy: možnost poškození osazených součástek, možnost nežádoucího vzájemného ovlivnění a nesprávného vyhodnocení testu - podle bodu 3b – může to být vhodné před osazením drahých součástek, pokud to technologie osazování dovoluje - podle bodu 3c – test přes konektor: nejdokonalejší výsledek, podmínky odpovídají normální funkci, ale u složitých desek to může být natolik složité, že to je prakticky neproveditelné Způsob provedení testu u bodů 3a, b: jehlové pole, problémy s množstvím kontaktních míst a s přístupem k testovacím bodům, vícevrstvé desky musí mít vyvedeny kontaktní místa k vnitřním vrstvám – snížená hustota součástek
22
Možnost řešení většiny problémů: zabudování zkušební logiky do jednotlivých IO –standard ANSI/IEEE 1149.1 Boundary Scan, jehož princip je naznačen na Obr. 7.1.
BS VSTUPY
BS
VLASTNÍ
BS
LOGIKA OBVODU
VÝSTUPY
BS BS
BS
TEST ACCESS PORT - TAP
Obr. 7.1. Princip hraničního testu podle standardu ANSI/IEEE 1149.1 Černé šipky – dráha signálu při normální funkci Kromě testu desky se zabudovaná logika používá k mnoha dalším účelům, jako k programování obvodů PLD, k identifikaci obvodu atd. Červeně je na obrázku nahoře nakreslen zkušební řetězec jednoho obvodu zapojený pro zkušební data jako posuvný registr. Posuvných registrů je v logice ve skutečnosti více – jeden pro instrukci, kterou zapisuje tester (programátor), a několik pro data (nakreslen je tzv. boundary-scan registr pro test desky, další jsou pro konfigurační data při programování, pro identifikační údaje a další). Tyto registry u jednotlivých obvodů na desce se propojují do řetězce, který na celé desce tvoří jeden posuvný registr, s nímž komunikuje tester. Výběr registru, který se do řetězce zapojí, určuje instrukce, která se při každé operaci s logikou testu nasouvá do registru instrukce jako první, a řídí dále průběh operace.
k násl. buňce dráha signálu při normální funkci
0 MUX 1 A
SHIFT REG. D TE
DATA REG. D TE
0 MUX 1 A
DR - Data Reg. od předch. buňky
Shift DR
Clock DR
Update DR
Obr. 7.2. Možnost realizace buňky BS z Obr. 7.1
23
Mode
Shift DR, Clock DR, Update DR, Mode jsou signály vytvořené řadičem testu (TAP Controller) – názvy jsou normalizovány Shift DR = 0: zachycení hodnoty signálu v posuvném registru Shift DR = 1: nasunutí zkušebního vzoru a vysunutí zachycené odezvy Mode = 0: normální funkce obvodu Mode = 1: výstup údajů zachycených v Data reg. U obousměrných nebo třístavových výstupů je buňka složitější, obsahuje logiku pro oba směry přenosu signálu i pro řídicí signál třístavového výstupního zesilovače Postup kontroly spojů vně IO – instrukce EXTEST: 1. Nasunutí zkušebního vzoru: Shift DR = 1, Clock DR pulsed, pak impuls na Update DR 2. Výstup zkušebního vzoru: Mode = 1 na výstupu buněk objeví zkušební vzor 3. Zachycení odezvy na test: Shift DR = 0, impuls na Clock DR 4. Vysunutí odezvy: Shift DR = 1, Clock DR pulsed Test Access Port – TAP: brána pro signály, kterými obvod komunikuje s testovacím zařízením, případně s dalšími zařízeními, která logiku testu využívají (například programátor isp) Uspořádání logiky pro hraniční test na čipu IO je naznačeno na Obr. 7.3. TDO REG. INSTRUKCE REG. BS REG. IDCODE
TDI
REG. USERCODE BYPASS REG. hodinové a řídicí signály (Shift DR, Clock DR...) TAP CONTROLLER TMS TCK TRST
Obr. 7.3. Uspořádání registrů a řídicí logiky pro hraniční test na čipu IO TAP Controller – stavový automat s 16 stavy, řídí činnost logiky testu
24
Signály v bráně TAP: TDI – Test Data Input – vstup posuvného registru TDO – Test Data Output – výstup posuvného registru TMS – Test Mode Select – vstupní signál, řídí průběh testu TCK – Test Clock TRST – Test Reset – nepovinný, často se nevyužívá Vstupy TDI a TMS mají zdvihací rezistor (pullup), který je předepsán standardem. Registr instrukce je posuvný registr se záchytným registrem (latch), do něhož se po nasunutí zachytí kód instrukce, která se má provádět. Registry dat: paralelně řazené posuvné registry, z nichž je povinný registr pro zkušební data, dále tam může být registr pro identifikaci obvodu (IDCODE), registr pro data uživatele (USERCODE) a další. Povinný je také BYPASS registr – jednobitový registr sloužící jen pro synchronizaci dat u obvodů, s nimiž v daném časovém úseku tester nekomunikuje. Postup provedení hraničního testu: Průběh testu řídí TAP controller na základě zadané hodnoty signálu TMS. Signály TMS, TDI, TCK a event. TRST vytváří testovací zařízení (tester) podle programu testu. Z hlediska testeru můžeme proces chápat jako sériové nasouvání instrukcí do registru instrukce a dat do registrů dat. Po nasunutí instrukce nebo dat následuje krok „update“, kterým se instrukce nebo data přepíšou z posuvného registru do patřičného záchytného registru (latch). Typy stavů TAP kontroléru: - RESET - běh testu/nečinnost (dle typu současné instrukce) - obsluha registrů dat nebo instrukce (posuv, zachycení dat z obvodu do posuvného registru, update atd.) -
Příklady instrukcí: BYPASS: nic se neděje, do cesty posuvného registru je zařazen jen synchronizační klopný obvod IDCODE, USERCODE: vybírá jeden ze dvou registrů pro identifikaci obvodu – IDCODE obsahuje údaje o výrobci, typu obvodu, jeho verzi a podobně, USERCODE registr s údajem o stavu naprogramování SAMPLE/PRELOAD: PREOLAD – zápis dat nasunutých do obvodu, SAMPLE – zachycení dat procházejících mezi logikou čipu a vývody do posuvného registru, pak může následovat: EXTEST – kontrola spojů vně obvodu, INTEST – statická kontrola vnitřní logiky obvodu
Další časté užití: programování obvodů isp – reprogramovatelné obvody PLD, konfigurační paměti EEPROM pro FPGA Příklad propojení IO na desce plošného spoje pro test standardem IEEE 1149.1 je na Obr. 7.4.
25
TAP
TAP
TAP
SER IN TMS TCK TRST SER OUT
Obr. 7.4. Příklad propojení integrovaných obvodů na desce plošného spoje pro test podle standardu IEEE 1149.1 TAP Controller State Diagram – viz [ 20 ]
26
8 Asynchronní vstupy synchronních systémů a metastabilita Jakýkoliv synchronní systém má vždy asynchronní vstupy, kterými komunikuje s okolím – příklady: požadavky na přerušení, stavové příznaky (tj. příznaky že připojené zařízení je k dispozici) apod. Aby byly takové signály správně zpracovány v synchronním systému, je nutné je synchronizovat – viz např. [ 4 ].
AsyIn
D
SynIn
Clk synchronizátor
synchronní systém
Obr. 8.1. Synchronizace asynchronního signálu klopným obvodem typu D Asynchronní signál musí být synchronizován vždy jen na jednom místě, aby synchronizovaný signál byl stejný ve všech navazujících uzlech. Ukazuje se však, že i tehdy může dojít k chybě systému podobné jako by byl synchronizován na více místech, přestože je synchronizace provedena jen na jednom místě. Důvodem může být metastabilní chování synchronizátoru. Není-li dodržen předstih a přesah signálu AsyIn vzhledem k aktivní hraně signál 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 SynIn, 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á. O selhání (failure) synchronizátoru mluvíme, jestliže je hodnota signálu SynIn synchronním systémem využita (vzorkována další aktivní hranou Clk či jinak) ještě v době, než dojde ke skončení metastabilního stavu. Na přednášce bude odvozeno, že dobu mezi dvěma selháními synchronizátoru pro dobu tr trvání metastabilního stavu lze vyjádřit vztahem: MTBF(tr) = (exp(tr/τ)) / (fin . fclk . T0)
27
Konstanty τ a T0 bývají uváděny v aplikačních zprávách výrobců číslicových obvodů. Například firma Texas Instruments uvádí v [ 8 ]: 1/ τ [ns-1] 0,74 0,72 0,36 1,02 4,03 9,2 0,55 2,8 0,60 4,40 5,9
T0 [s] 2,9 . 10-4 4,8 . 10-3 1,3 . 10-9 8,8 . 10-6 1,4 . 103 1,9 . 108 1,5 . 10-6 1,1 . 10-4 1,4 . 10-5 4,0 9,6 . 10-18
TTL 74 STD TTL 74 LS TTL 74 S TTL 74 ALS TTL 74 AS TTL 74 F CMOS 74HC CMOS 74AC CMOS 74LV CMOS 74LVC XC9500 CPLD
Náčrt v grafickém vyjádření je naznačen na Obr. 8.2. MTBF [s]
74F
74AS 74AC
74ALS
1E+8 1 rok
1 den 1E+4
1 hod
74STD 74HC 74LS
1E0
1E-4 0 fCLK = 1 MHz fin = 0,5 MHz
10
20
30
40
(pro jiné hodnoty se obraz posune ve svislém směru)
Obr. 8.2. Grafické vyjádření doby mezi poruchami (MTBF)
28
tr [ns]
Upozornění: Setkáme se s několika různými způsoby vyjadřování kvantitativních charakteristik metastability. Například Texas Instruments počítá začátek doby tr od aktivní hrany hodinového impulsu, zatímco Xilinx a Cypress ji počítají jako přídavné zpoždění (po uplynutí doby tpd). Číslené hodnoty jsou tím poněkud ovlivněny, princip však zůstává. Jak se lze bránit projevům metastability: Obvykle není nezbytné, aby byla hodnota asynchronního vstupního signálu neprodleně vyhodnocena po jeho změně, takže bývá přípustné, když se při synchronizaci zavede do signálu zpoždění. Dvojitý synchronizátor – dva KO typu D zapojené jako posuvný registr do synchronizovaného vstupu, v integrovaném provedení se vyrábí s označením např. 74AS4374 – osminásobná dvojice KO typu D (s třístavovými výstupy). Pro odhad střední doby mezi poruchami dvojitého synchronizátoru lze použít vztah pro MTBF(tr), kde se za dobu tr dosadí perioda hodinového signálu zkrácená o požadovanou dobu předstihu pro druhý klopný obvod:
AsyIn
D
D
SynIn
Clk dvojitý synchronizátor
synchronní systém
Obr. 8.3. Dvojitý synchronizátor Vícecyklový synchronizátor: hodinový signál dvojitého synchronizátoru je odvozen od hodinového signálu synchronního systému děličem kmitočtu. Charakter uvedených závislostí naznačuje, že malé změny v hodnotách konstant mohou způsobit velké změny výsledku. Například podle [ 4 ] pro signál mikroprocesorového systému synchronizovaný dvojitým synchronizátorem tvořeným dvěma 74LS74 (požadovaný předstih 20 ns) s hodinovým kmitočtem 10 MHz je doba tr = 80 ns, a při kmitočtu fin = 100 kHz je MTBF(80 ns) = 3,6 . 1011 s, tj. cca 10 000 let. Jestliže ale zvýšíme hodinový kmitočet na 16 MHz, dostaneme MTBF(42,5 ns) = 3,1 s. Nahradíme-li však 74LS74 obvodem 74ALS74 (požadovaný předstih jen 10 ns, jiné konstanty), bude v druhém případě výsledek MTBF(52,5 ns) = 4,54 . 1015 s. Je zřejmé, že výpočty mají jen orientační charakter, zvláště když uvážíme, že uvedené hodnoty a tím spíš jejich závislosti na teplotě, napájecím napětí apod. nejsou nikde zaručovány, jsou jen uváděny pro informaci na základě měření, které se patrně neprovádí standardně jako jiné zkoušky. Použití klopných obvodů obsažených v PLD pro synchronizátory: je v principu možné, ale kombinační logika v cestě signálu způsobuje zvětšení požadovaného předstihu a zmenšení časové rezervy pro ustálení metastabilního signálu. Nejlepší výsledky bez použití speciálních součástek lze získat použitím diskrétních klopných obvodů s krátkou dobou požadovaného předstihu pro vytvoření synchronizátoru.
29
9 Problémy předstihu a přesahu u registrů řízených hranou Předstih a přesah datových signálů jsou parametry, jejichž podcenění může způsobit nespolehlivou funkci číslicových systémů, a to i při nízkých hodinových kmitočtech. Je proto nezbytné o těchto možných problémech vědět a účinně se jim bránit, viz [ 7 ]. Předstih představuje čas, po který musí být před příchodem aktivní hrany hodinového signálu stabilní datový signál, má-li registr na tento signál správně reagovat (například u registru typu D hodnotu datového signálu v registru zachytit). Přesah je čas, po který musí zůstat datový signál stabilní po této aktivní hraně. Požadavek kladné hodnoty předstihu omezuje nejvyšší kmitočet hodinového signálu, s nímž registr spolehlivě pracuje. To patrně nikoho nepřekvapí, protože asi nikdo nebude očekávat, že registr je schopen správně pracovat s neomezeně vysokým hodinovým kmitočtem. Požadavek kladné hodnoty přesahu však může vést k nespolehlivé funkci při jakýchkoliv hodnotách kmitočtu hodinového signálu. Proto se obvykle konstruktéři čipů číslicových obvodů snaží, aby požadavek na přesah vyloučili. Většina moderních číslicových obvodů má v katalogových listech uvedenu nulovou hodnotu požadovaného přesahu. Problémy s přesahem u klopných obvodů uvnitř obvodu na jednom čipu je možno vyloučit pečlivou konstrukcí rozvodu hodinového signálu na čipu. Je-li největší zpoždění tohoto signálu menší než nejkratší zpoždění mezi aktivní hranou hodin a odpovídající změnou výstupního signálu klopného obvodu, nemůže nastat problém s přesahem. Modelový případ – posuvný registr. Mnohem složitější je však situace u signálů, které jsou přiváděny na čip zvenku. Při specifikaci požadovaného předstihu a přesahu datového signálu vzhledem k hodinovému signálu na vývodech obvodu je nezbytné počítat se zpožděním hodinového signálu mezi tímto vývodem a vstupy klopných obvodů na čipu. Toto zpoždění posouvá časové okénko, v němž musí být signál stabilní, směrem doprava, takže se zmenšuje požadovaná doba předstihu, což je příznivé, ale zvětšuje se požadovaná doba přesahu, což je velmi nebezpečné. Je-li zpoždění hodinového signálu uvnitř čipu jakkkoliv větší než zpoždění datového signálu, což snadno může nastat, znamená to vznik požadavku na kladnou hodnotu přesahu. To znamená, že zdroj datového signálu, obvykle jiný číslicový obvod v systému buzený stejným hodinovým signálem, musí zajistit stabilní datový signál ještě po tuto dobu po aktivní hraně hodinového signálu. Jedná se tedy o souběhový hazard, jehož účinkem přijímací obvod může reagovat nikoliv na hodnotu datového signálu před hranou hodinového signálu, jak by měl, ale na hodnotu po této hraně, což znamená fatální chybu. Má-li přijímací obvod požadavek na kladnou hodnotu přesahu, musí zdrojový obvod zajistit odpovídající minimální hodnotu zpoždění mezi aktivní hranou hodin a změnou výstupního signálu. Takovou dobu nezajišťuje prakticky žádný vyráběný obvod, takže uživatel musí toto zpoždění vložit ve formě zvláštního zpožďovacího členu. To je dosti obtížná úloha. Jakýkoliv požadavek na kladnou hodnotu přesahu představuje tedy nebezpečí systémového selhání. Aby byl uživatel zbaven těchto problémů, jsou ve vstupech obvodů FPGA firmy Xilinx zařazeny zpožďovací členy, které zpoždění hodinového signálu na cestě od vývodu pouzdra ke vstupům klopných obvodů kompenzují. V některých případech lze toto zpoždění volit jako možnost, jindy je pevně dáno a jeho hodnota je konstrukcí čipu uzpůsobena ke kompenzaci skutečné hodnoty zpoždění hodinového signálu u tohoto obvodu. Příslušné údaje jsou uvedeny v katalogových listech obvodů FPGA. Jinou používanou technikou je DLL (Delay Locked Loop) nebo DCM (Digital Clock Manager), který zpoždění hodinového signálu vylučuje, čímž lze dosáhnout spolehlivé funkce při vyšších kmitočtech tohoto signálu. Řešení firmy Lattice: ispClock (www.latticesemi.com)
30
10 Nejdůležitější vlastnosti obvodů CPLD a FPGA Xilinx a Altera Uvedeno pro řady obvodů CPLD: 9500XL, 9500XV, XPLA3 (CoolRunner), XC2 (CoolRunner-II) a pro obvody FPGA řady Spartan-II Základní charakteristika obvodů CPLD a FPGA: CPLD: jsou to obvody se strukturou založenou nejčastěji na principu struktury PAL nebo PLA. Jsou složeny z bloků makrobuněk s touto strukturou, vzájemně propojených propojovacím systémem. Jednotlivé bloky jsou analogické obvodům SPLD, jejich propojení odpovídá propojení obvodů SPLD na desce plošného spoje. Uvádí se, že z hlediska zpoždění jsou obvody CPLD jednodušší než obvody FPGA, rovněž algoritmy implementace jsou snadněji zvládnutelné. FPGA: jsou založeny na principu analogickém ke hradlovým polím, tedy jde o pole logických buněk zpravidla s nevelkou kombinační částí (look-up table) a registrem, které se propojují do větších celků pomocí propojovacího systému, a s okolím komunikují pomocí vstupně/výstupních buněk. Logické buňky jsou typicky výrazně menší než makrobuňky u CPLD, což dovoluje jejich lepší využití. Implementace běžných obvodů může být u FPGA provedena mnoha různými způsoby, zatímco u CPLD je principiálně založena na zápisu logické funkce ve známém tvaru SOP nebo POS. Časové parametry konstrukce implementované do obvodu FPGA jsou výrazně závislé na způsobu implementace a jejich odhad je mnohem složitější než u obvodů CPLD. Obvody FPGA zpravidla obsahují řadu dalších speciálních bloků (bloky pro úpravu hodinových signálů, paměti RAM, hardwarově vytvořené procesory a další). Kde jsou které obvody vhodné: Obvody CPLD jsou nejvhodnější pro malé konstrukce obecného charakteru (bez potřeby speciálních bloků). Obvody FPGA dovolují implementaci větších konstrukcí s těmito bloky. Další hlediska: proudová spotřeba, dostupnost vývojových nástrojů atd.
OBVODY CPLD Řady 9500XL/9500XV: Řada XC9500 (bez dalšího označení) má napájecí napětí 5 V, je předchůdcem novějších řad XL a XV a nepatří již mezi perspektivní řady. Podrobnější údaje lze najít na www.Xilinx.com Řada 9500XL: Pracovní napájecí napětí jádra: VCCINT = 3.3 V Pracovní napájecí napětí vstupně-výstupních bloků: VCCIO = 2.5 až 3.3 V
Pracovní rozsah vstupního napětí: 0 až 5.5 V, úrovně kompatibilní s TTL, možnost přímého připojení k výstupům obvodů s napájením 5 V
Dovolený rozsah výstupního napětí 0 V až VCCIO Libovolný postup zapínání a vypínání zdrojů Odběr řádu desítek mA (9536XL: 20-50 mA v normálním módu, 10-30 mA v nízkopříkonovém módu; levá hodnota – statický odběr, pravá – při nejvyšším kmitočtu) Nízkopříkonový mód nastavitelný individuálně pro jednotlivé makrobuňky Rozsah počtu makrobuněk: 36 až 288 Klopné obvody D/T, Clock Enable, synchronní nebo asynchronní reset a preset Programování ISP JTAG
31
Podpora Boundary Scan Zaručován počet 10000 cyklů mazání/programování Zaručena doba uchování obsahu konfigurace 20 let Podrobnější údaje – viz skripta (pro přednášky, 2002) Řada 9500XV: Pracovní napájecí napětí jádra: VCCINT = 2.5 V Pracovní napájecí napětí vstupně-výstupních bloků: VCCIO = 1.8 až 3.3 V (vstupy nejsou tolerantní k 5 V!) Počet bank vstupně-výstupních bloků: 1 až 4, každá může mít svou velikost napájecího napětí z uvedeného rozsahu, takže umožňuje přímé připojení obvodů s jmenovitým napájením 1.8, 2.5, 3.0 a 3.3 V Libovolný postup zapínání a vypínání zdrojů Odběr řádu desítek mA, srovnatelný s řadou XL, Nízkopříkonový mód nastavitelný individuálně pro jednotlivé makrobuňky Vstupy s charakterem Schmittova KO, hystereze cca 50 mV, bus-hold na všech uživatelských vývodech Rozsah počtu makrobuněk: 36 až 288 Klopné obvody D/T, Clock Enable, asynchronní reset a preset Programování ISP JTAG Podpora Boundary Scan Zaručován počet 10000 cyklů mazání/programování Zaručena doba uchování obsahu konfigurace 20 let
Řady obvodů CPLD Xilinx s nízkou spotřebou – řady CoolRunner XPLA3 a XC2 Řada XPLA3 (CoolRunner): Pracovní napájecí napětí: VCC = 3.3 V, dostupná je varianta s rozšířeným rozsahem napájení 2.7 až 3.6 V
Pracovní rozsah vstupního napětí: 0 až 5.5 V, úrovně kompatibilní s TTL, možnost přímého připojení k výstupům obvodů s napájením 5 V Dovolený rozsah výstupního napětí 0 V až VCC Statický odběr menší než 100 uA Rozsah počtu makrobuněk: 32 až 512 Klopné obvody D/T/Latch, Clock Enable, asynchronní reset a preset Programování ISP JTAG Podpora Boundary Scan Možnost zasouvání při připojeném napájení – hot plugging Vývojový prostředek WebPACK volně dostupný z www Xilinx Zaručován počet 1000 cyklů mazání/programování Zaručena doba uchování obsahu konfigurace 20 let Řada XC2 (CoolRunner-II): Pracovní napájecí napětí jádra: VCCINT = 1.8 V Pracovní napájecí napětí vstupně-výstupních bloků: VCCIO = 1.5 až 3.3 V Počet bank vstupně-výstupních bloků: 1 až 4, každá může mít svou velikost napájecího napětí z uvedeného rozsahu, takže umožňuje přímé připojení obvodů s jmenovitým napájením 1.5, 1.8, 2.5, 3.0 a 3.3 V Libovolný postup zapínání a vypínání zdrojů Statický odběr menší než 100 uA Rozsah počtu makrobuněk: 32 až 512 DataGATE – řízení vstupů pro snížení spotřeby Vstupy mohou být nakonfigurovány do funkce Schmittova KO Klopné obvody D/T/Latch, Clock Enable, asynchronní reset a preset Možnost řízení registrů oběma hranami hodinového signálu (DualEDGE triggered registers) Dělič hodinového kmitočtu číslem 2, 4, 6, 8, 10, 12, 14, 16
32
CoolCLOCK – snížení spotřeby rozvodu hodinového signálu současným užitím dělení kmitočtu dvěma a volby DualEDGE Možnost konfigurace výstupů s otevřeným kolektorem pro funkci montážního součinu a buzení LED Volitelný rys bus-hold nebo slabý pullup na vybraných I/O vývodech Volitelná možnost konfigurace nevyužitých I/O vývodů jako přídavných zemnicích vývodů Možnost zasouvání při připojeném napájení – hot plugging Programování ISP JTAG Podpora Boundary Scan Vývojový prostředek WebPACK volně dostupný z www Xilinx Zaručován počet 1000 cyklů mazání/programování Zaručena doba uchování obsahu konfigurace 20 let Společné pro obě řady jsou tyto vlastnosti: Struktura PLA (modifikovaná – extended) Rozsah počtu makrobuněk: 32 až 512 Statický odběr menší než 100 uA Programování ISP JTAG Podpora Boundary Scan Možnost zasouvání při připojeném napájení – hot plugging Vývojový prostředek WebPACK volně dostupný z www Xilinx Zaručován počet 1000 cyklů mazání/programování Zaručena doba uchování obsahu konfigurace 20 let Volby pro hodinový signál a funkce DataGATE u řady CoolRunner-II: Dělení kmitočtu Zevně přiváděný hodinový signál lze dělit číslem 2, 4, 6, 8, 10, 12, 14, 16. Výsledný signál má střídu 50% pro všechny dělicí poměry. Dělič zajišťuje, že nejsou v něm přítomny žádné parazitní impulsy. Dělič je implementován u členů řady XC2 s počtem makrobuněk 128 a více. DualEDGE Každá makrobuňka může zdvojnásobit svůj hodinový kmitočet touto volbou. Používá se například v aplikacích synchronní paměti a v dalších rychlých aplikacích. CoolCLOCK Rozvod hodinového kmitočtu představuje významný prvek spotřeby energie, která je hodinovému kmitočtu úměrná. Snížením tohoto kmitočtu na polovinu výše uvedeným děličem a následujícím zdvojnásobením pomocí volby DualEDGE získáme původní kmitočet taktování se sníženou spotřebou energie. DataGATE CoolRunnery užívají strukturu CMOS i pro programovatelné pole, což dovoluje snížit statický odběr na minimum. Dynamická složka odběru, která je úměrná kmitočtu signálu zpracovávaného každým stupněm, je tedy důležitým a nezanedbatelným činitelem. Snížení odběru u řady CoolRunner-II lze dosáhnout blokováním volně běžících signálů na vstupech, které je v určité době nepotřebují. Funkce DataGATE je implementována u členů řady XC2 s počtem makrobuněk 128 a více. Každý vstup do obvodu obsahuje spínač řízený touto funkcí a latch. Konstruktér může vytvořit běžným způsobem konstrukci a pak zvolit úseky (vstupy), které mají být zařazeny do funkce DataGATE. Ta využívá jeden vstupně/výstupní vývod, který budí řídicí uzel (DataGATE Assertion Rail). Samotná řídicí funkce může být vytvořena libovolným způsobem uvnitř obvodu, může být velmi jednoduchá (užití některého vhodného vnitřního či vnějšího signálu) nebo složitější, například vytvořená zvláštním stavovým automatem. Má-li tato funkce hodnotu LOW, jsou spínače vstupů do funkce zařazených rozpojeny a poslední hodnota vstupů před rozpojením je zachycena latchem. K buzení řídicího uzlu je využita jedna makrobuňka a její signál je pak dostupný na příslušném vývodu pro možnost monitorování. Není-li funkce DataGATE využita, je tento vývod použitelný k běžné funkci.
33
OBVODY FPGA Složení těchto obvodů: • konfigurovatelné logické bloky – hlavní část logických prostředků, obsahující univerzálně použitelnou kombinační část (LUT, multiplexory atd.) a část paměťovou – klopný obvod, • vstupně-výstupní bloky, • propojovací struktury, • specializované strukturní prvky pro podporu určitých logických funkcí. Podíl specializovaných strukturních prvků uvedených v posledním bodu v současných obvodech FPGA narůstá. Patří k nim například násobičky, bloky pamětí RAM a podobně. Způsoby popisu v jazycích dovolující využít tyto prvky: • vkládání těchto prvků jako komponent (strukturální styl popisu), • jejich inference z behaviorálního popisu použitím šablon.
Řady obvodů FPGA Xilinx Spartan Tyto řady byly vyvinuty na základě řad XC4000 (Spartan a Spartan XL) a Virtex (Spartan-II, IIE a 3) jako řady s obdobnou architekturou a s nižší cenou. Tak jako u ostatních obvodů FPGA firmy Xilinx, konfigurační informace je zde uchovávána v konfigurační paměti RAM a je natahována z připojené konfigurační paměti PROM nebo z PC při připojení napájecího napětí (nebo po aktivaci signálu pro spuštění konfigurace). Původní řada Spartan s napájením 5 V již patří k zastaralým. Dnes se pro nové konstrukce doporučují řady Spartan XL (3.3 V, bude však patrně zanedlouho také překonaná), Spartan-II (2.5 V), Spartan-IIE (1.8 V) a Spartan-3 (1.2 V).
Řady obvodů FPGA Spartan (Xilinx) Tyto řady byly vyvinuty na základě řad XC4000 (Spartan a Spartan XL) a Virtex (Spartan-II, IIE a 3) jako řady s obdobnou architekturou a s nižší cenou. Tak jako u ostatních obvodů FPGA firmy Xilinx, konfigurační informace je zde uchovávána v konfigurační paměti RAM a je natahována z připojené konfigurační paměti PROM nebo z PC při připojení napájecího napětí (nebo po aktivaci signálu pro spuštění konfigurace). Původní řada Spartan s napájením 5 V již patří k zastaralým. Dnes se pro nové konstrukce doporučují řady Spartan XL (3.3 V, bude však patrně zanedlouho také překonaná), Spartan-II (2.5 V), Spartan-IIE (1.8 V) a Spartan-3 (1.2 V). Uvedená napětí se týkají napájení jádra obvodu. Vstupně/výstupní struktury zajišťující spolupráci s vnějšími obvody s jinými napětími a některé další prvky mohou mít odlišná napájecí napětí, takže například u řady Spartan-3 jsou tři napájecí napětí. Existuje úzká vazba mezi obvody FPGA řad Spartan a Virtex – řady Spartan představují cenově nižší (o 1 až 2 řády) stupně odpovídajících řad Virtex: Virtex – Spartan-II Virtex-E – Spartan-IIE Virtex-II – Spartan-3
Řada Spartan-II Pracovní napájecí napětí jádra: VCCINT = 2.5 V Pracovní napájecí napětí vstupně-výstupních bloků: VCCO = 1.4 až 3.6 V Možnost volby konfigurace I/O vývodů podle 16 standardů, některé z nich (LVTTL, LVCMOS a PCI33_5) umožňují přímou spolupráci s obvody napájenými ze zdroje 5 V (tzv. 5V tolerantní I/O). FPGA může mít nakonfigurováno několik různých standardů na různých vývodech (I/O bankách) Libovolný postup zapínání a vypínání zdrojů
34
Odběr ve statickém stavu řádu desítek mA (v průběhu konfigurace je krátkodobě potřebný větší proud), při proměnných vstupních signálech může odběr výrazně vzrůst Nejdůležitější specializované strukturní prvky jsou: prvky vytvořitelné z tabulky LUT (distribuovaná paměť RAM – DRAM nebo posuvný registr), smyčka DLL (Delay-Locked Loop), bloková paměť RAM (BRAM, jedno- nebo dvoubránová, 4Kb/blok) Nejmenší: XC2S15, 15 000 systémových hradel, 192 řezů, 6 144 bitů DRAM, 10Kb BRAM Největší: XC2S200, 200 000 systémových hradel, 2352 řezů, 75 264 bitů DRAM, 56Kb BRAM FPGA je organizováno jako pole konfigurovatelných logických bloků (CLB), které jsou hlavní složkou vytvářející logickou funkci obvodu, obklopených vstupně/výstupními bloky (IOB), které komunikují s vývody FPGA. Část plochy čipu zabírají dále specializované strukturní prvky (mimo ty, které se vytváření nakonfigurováním LUT). Každý blok CLB obsahuje dva vzájemně podobné řezy (slices), v každém řezu jsou dvě logické buňky (LC, logic cells). Každá buňka LC obsahuje 4vstupovou tabulku LUT (tabulky lze pomocí multiplexorů sdružovat k získání většího počtu vstupů) a paměťový prvek – klopný obvod. Tabulka LUT (není-li použita ve své původní funkci) může být nakonfigurována do funkce 16bitové paměti RAM v několika modifikacích – takto vytvořená paměť se nazývá distribuovaná (distributed) paměť – viz níže, nebo do funkce až 16bitového posuvného registru. Kromě toho obsahují řezy další kombinační prvky, především multiplexory sloužící k řízení cesty signálu, využitelné však i obecně k vytváření kombinačních logických funkcí, a prvky přenosového řetězce, což je specializovaná kombinační struktura určená především pro efektivní realizaci aritmetických operací, ale využitelná i pro jiné účely. Tyto prvky mohou být použity i jako dodatečné prostředky pro vytváření logických funkcí. Přenosový řetězec může sloužit také ke kaskádování tabulek LUT pro realizaci složitějších kombinačních funkcí. Na tabulku LUT můžeme pohlížet také jako na paměť ROM. K přídavným logickým prvkům v bloku CLB patří dva multiplexory F5, které v každém řezu mohou sdružovat výstupy obou tabulek LUT, a multiplexor F6, který může kombinovat výstupy multiplexorů F5. Tyto multiplexory spolu s tabulkami LUT mohou být využity k vytvoření některých funkcí většího počtu vstupních signálů (může z nich být sestaven např. osmivstupový multiplexor). Paměťový prvek v každé buňce LC může být nakonfigurován jako klopný obvod DE řízený hranou nebo staticky (latch). Jeho vstup může být připojen k výstupu LUT nebo přímo ke vstupu buňky. Dvojice klopných obvodů v řezu je řízena sdílenými signály: hodinovým signálem, signálem pro povolení hodin (clock enable), signálem pro nulování a signálem pro nastavení, které lze nakonfigurovat jako asynchronní nebo synchronní. Všechny tyto signály mohou být invertovány a jsou společné pro oba obvody v řezu. Distribuovaná paměť může být jednobránová nebo dvoubránová. Zápis je synchronní řízený aktivní hranou hodinového signálu, čtení je asynchronní. Blokové schéma jednobránové distribuované paměti v obvodech řady Spartan je nakresleno na následujícím obrázku, číslo vstupu D0 a D1 patrně odpovídá první či druhé tabulce v řezu (v datasheetu není přesně uvedeno). Z jedné tabulky LUT lze vytvořit 16-bitovou paměť, obě tabulky v řezu lze sloučit do 32-bitové paměti – viz [ 22 ]:
35
U dvoubránové distribuované paměti jen jedna brána může sloužit pro zápis dat do paměti (je vybavena datovým a zapisovacím vstupem), obě brány však mají vlastní výstupy a mohou být nezávisle adresovány (každá svým adresovým vstupem). Obsah adresované paměťové buňky se pak objeví na odpovídajícím výstupu. Funkce dvoubránové distribuované paměti spočívá ve zdvojení 16bitové paměťové struktury v řezu. Každá z obou částí paměti je vytvořena z jedné ze dvou tabulek LUT v řezu. Do obou částí se zapisují tatáž data společným zapisovacím signálem na adresu určenou společným adresovým vstupem, ke čtení z každé části však slouží adresový vstup patřící příslušné části struktury. Blokové schéma dvoubránové distribuované paměti v obvodech řady Spartan – viz [ 22 ]:
Bloková paměť může také být jednobránová nebo dvoubránová. Ve dvoubránové konfiguraci má pro každou bránu datové i zapisovací vstupy. 0bě brány jsou zcela nezávislé. Mají synchronní zápis i čtení, a jejich nezávislost dovoluje použít je pro styk mezi doménami se vzájemně nezávislými hodinovými signály. Řízení paměti je však v tomto případě citlivé na některé konfliktní situace (například pokud se z obou bran zapisuje ve stejném okamžiku do stejného paměťového místa), a je nezbytné věnovat mu patřičnou pozornost. Pro orientaci může posloužit knihovní symbol primitivy pro jednobránovou a dvoubránovou blokovou paměť RAM, jak je uveden v [ 11 ]:
36
Některé vlastnosti blokové paměti jsou odlišné od vlastností běžných pamětí vyráběných jako samostatné integrované obvody, a proto je zde stručně uvedeme. Počáteční obsah paměti po připojení napájecího napětí je možno specifikovat v popisu HDL (na rozdíl od běžných pamětí vyráběných zejména pro použití v mikropočítačích, kde je tento obsah nedefinovaný), takže se paměť může použít i jako paměť typu ROM. Toho se často využívá při implementaci procesorů do obvodů FPGA, viz například [ 23 ]. Ve výstupu paměti je bufer, do něhož se zapisuje obsah adresovaného paměťového místa hranou hodinového signálu. Obě brány mohou mít šířku dat jeden až 16 bitů (celistvé mocniny 2). Vstup EN aktivuje příslušnou bránu jako celek, při jeho neaktivním stavu je výstup brány neměnný (nikoli ve stavu vysoké impedance, jak je obvyklé u běžných pamětí) a není možný zápis do paměti ani nulování výstupního buferu (paměť nereaguje na vstup CLK). Vstup WE povoluje zápis dat ze vstupu DI do paměťového místa určeného adresou při aktivní hraně signálu na vstupu CLK; současně se zapsaná data objeví na výstupu. Není-li signál na vstupu WE aktivní, pak tato hrana způsobí pouze aktualizaci obsahu výstupního buferu paměti v souhlasu s hodnotou signálu na adresovém vstupu. Vstup RST je synchronní a nuluje obsah výstupního buferu, neovlivňuje obsah vlastní paměti. Celkovou kapacitu obou typů paměti RAM (distribuovaná a bloková) lze pro jednotlivé členy řady najít např. v publikaci [ 11 ]. Distribuovaná paměť RAM je vhodná pro takové aplikace, kde jde o nepříliš velké paměti těsně svázané s další logikou, jako jsou posuvné registry, registry pro pipelining, a pro paměti s požadavkem asynchronního čtení. Bloková paměť RAM je určena pro středně velké paměťové subsystémy se synchronním zápisem i čtením. Při požadavku na realizaci rozsáhlých pamětí je k obvodu FPGA možno připojit vnější paměťové obvody, což usnadňují I/O bloky podporující standardy používané u těchto obvodů. Distribuovanou a blokovou paměť i posuvný registr realizovaný v LUT je možno popsat behaviorálním stylem nebo vložením příslušných komponent. Při behaviorálním popisu je nutno používat šablon, z nichž je syntetizér inferuje. Má-li inference správně proběhnout, je nezbytné dodržet formální stavbu příslušné šablony. Podobně jako u blokové paměti, i u distribuované paměti a u posuvného registru vytvořeného z tabulky LUT je možno specifikovat počáteční obsah po připojení napájecího napětí.
Poznámka: Popis jednotlivých typů pamětí v obvodech FPGA firmy Xilinx je často roztříštěn do dílčích katalogových listů různých obvodů FPGA a aplikačních zpráv a není jednoduché se v nich přesně orientovat. Například popis distribuované paměti RAM v katalogovém listu řady Spartan-II [ 11 ] je velmi stručný a neúplný, a na její uspořádání lze usuzovat nejspíše z popisu tohoto druhu paměti u předcházejících řad. Není zde však jednoznačně napsáno, co přesně je z těchto řad do uvedené řady převzato. Proto je patrně při práci s pamětmi nejvhodnější používat pokud možno behaviorální popis v jazyku HDL, který požadovanou funkci paměti přesně definuje, a tento popis vytvářet na základě doporučení a šablon uváděných v návrhovém systému (Edit => Language Templates...) a v publikacích pojednávajících o syntéze, viz [ 15 ], [ 24 ], [ 25 ]. Popis v katalogovém listu je v takovém případě vhodné brát jen jako orientační vodítko (někdy však, například v katalogovém listu řady Spartan-3, je vcelku vyčerpávající popis blokové paměti použité v této řadě a jsou zde odkazy na aplikační zprávy popisující použití distribuované paměti, jakož i dalších specializovaných bloků). Bloky CLB a IOB jsou propojeny konfigurovatelnou propojovací strukturou. Mimoto FPGA obsahuje přídavné prvky (DLL, bloky RAM). Pro rozvod hodinových signálů ve struktuře obvodu jsou určeny tzv. globální buffery (Global Clock Buffers, BUFG), které jsou schopny zajistit potřebnou kvalitu tohoto signálu a syntetizér je automaticky vkládá do konstrukce, kdykoliv tato obsahuje hodinové signály přivedené zevně nebo generované uvnitř obvodu, pokud jejich větvení přesáhne určitou mez – viz [ 24 ] pro verzi 6.1, s. 4-6. Tamtéž je uveden velmi podrobný návod pro způsoby popisu hodinových signálů v jazycích HDL určený pro různé syntetizéry. V každém obvodu FPGA typu Spartan-II jsou čtyři vstupy globálního hodinového signálu a stejný počet těchto bufferů. Podrobnější údaje o rozvodu hodinových signálů lze najít např. v [ 11 ]. Každý obvod řady Spartan-II obsahuje čtyři smyčky DLL. Každá z nich je přiřazena jednomu ze čtyř globálních vstupů hodinového signálu. Jejich správná funkce je zaručena pro hodinové kmitočty v rozsahu od 25 MHz do cca 200 MHz. Tyto smyčky jsou určeny k eliminaci zpoždění mezi vstupním vývodem hodinového signálu obvodu FPGA a vstupy tohoto signálu u vnitřních strukturních prvků. To umožňuje vyloučit požadavek na přesah vstupních signálů vzhledem k aktivní hraně odpovídajícího hodinového
37
signálu bez dříve užívaného zavedení zpoždění do cesty těchto vstupních signálů, které způsobovalo snížení dosažitelného hodinového kmitočtu. Dále je tohoto prvku možno použít k vytvoření fázového posuvu hodinového signálu o celistvý násobek 90°, ke zdvojnásobení jeho kmitočtu (lze zapojit dvě smyčky do kaskády, čímž se získá čtyřnásobek původního kmitočtu), a k dělení kmitočtu čísly 1.5, 2, 2.5, 3, 4, 5, 8 nebo 16. V každé smyčce se vytváří signál LOCKED, který je neaktivní v době, kdy není smyčka zachycena na vstupní signál. Inverze signálu LOCKED se obvykle používá pro uvedení ostatních obvodů do počátečního stavu (reset). Pro popis vložení smyčky DLL v jazyku VHDL je nutno použít strukturální styl, prvek se vkládá jako komponenta. Platí zde poměrně přísná pravidla, jak musí být zapojeny vývody této komponenty k příslušným bufferům, při jejichž nedodržení hlásí syntetizér chybu. Podrobnější popis a příklady použití jsou uvedeny v [ 11 ], šablona vložení v jazycích HDL je v [ 24 ]. Několik příkladů je možno najít mezi šablonami v okně systému (ověřeno u verze 6): Edit => Language Templates… Zjednodušené blokové schéma smyčky DLL (převzato z [ 21 ]):
Organizace I/O vývodů a podporované standardy: tyto vývody jsou rozděleny do určitého počtu bank. Tento počet záleží na typu pouzdra: u pouzder TQ100 a PQ208 je to jen jedna banka, u pouzder TQ144 a CS144 jsou 4 banky, u pouzder FG256 a FG456 je bank 8. Pro každou banku je možno vybrat některý z celkového počtu možných 16 standardů: 3.3 V: PCI, LVTTL, SSTL3 I, SSTL3 II, CTT, AGP; 2.5 V: SSTL2 I, SSTL2 II, LVCMOS2; 1.5 V: HSTL I, HSTL III, HSTL IV; standardy s otevřeným kolektorem: GTL, GTL+. Standardy PCI, LVTTL a LVCMOS2 jsou 5V tolerantní (tj. na vstupy může být připojeno napětí až 5 V), ostatní ne. Některé standardy používají diferenční vstup s referenčním napětím, které je nutno přivést na vstupy k tomuto účelu vyhrazené. V jedné bance mohou být přítomny vstupy a výstupy odpovídající standardům, které mají stejné napětí VCCO.
Řada Spartan-3 Pracovní napájecí napětí jádra: VCCINT = 1.2 V Pracovní napájecí napětí vstupně-výstupních bloků: VCCO = 1.14 až 3.45 V Pro pomocné funkce je použito další napájecí napětí jmenovitě VCCAUX = 2.5 V Možnost volby 23 konfigurací I/O standardů, z toho 6 diferenčních, žádné z nich neumožňují přímou spolupráci s obvody napájenými ze zdroje 5 V, FPGA může mít nakonfigurováno několik různých standardů na různých vývodech (I/O bankách) Libovolný postup zapínání a vypínání zdrojů
38
Vestavěné násobičky 18x18 bitů, v počtu 4 (XC3S50) až 104 (XC3S5000) Podpora komunikace DDR (Double Data Rate), až 622 Mb/s Ukončovací rezistory na čipu – DCI (Digitally Controlled Impedance) Specializované logické funkce na čipu – multiplexory, řetězec rychlého přenosu Další prvky: 4x DCM (Digital Clock Manager, pro XC3S50 jen 2x) – nadstavba prvku DLL (Delay-Locked Loop), bloková paměť RAM (jedno- nebo dvoubránová, 48Kb/blok, 4 až 104 bloky) Nejmenší: XC3S50, 50K systémových hradel, 768 řezů, 12Kb DRAM, 72Kb BRAM Největší: XC3S5000, 5M systémových hradel, 33 280 řezů, 520Kb DRAM, 1 872Kb BRAM Podobně jako je tomu u jiných obvodů FPGA, jsou obvody řady Spartan-3 organizovány jako pole konfigurovatelných logických bloků (CLB) obklopených vstupně/výstupními bloky (IOB). Část plochy čipu zabírají opět specializované strukturní prvky. Blok CLB obsahuje dvě dvojice řezů, u každého z nichž má tabulka LUT funkci kombinační logiky. Tabulky v řezech z jedné dvojice, zvané „levá“, mohou mít podobně jako u obvodů Spartan-II také funkci distribuované paměti RAM nebo posuvného registru s 16 bity. Tyto řezy jsou označovány názvem SLICEM (Memory Capability). Druhá, „pravá“ dvojice řezů (SLICEL - Logic Only Capability) tuto možnost nemá. Tabulky LUT jsou čtyřvstupové, s možností sdružování pomocí multiplexorů. Ke každé tabulce LUT přísluší paměťový prvek, který může být nakonfigurován do funkce klopného obvodu typu DE řízeného hranou nebo staticky (latch). Realizaci kombinačních logických funkcí podporují ještě další prvky obsažené v blocích CLB – multiplexory a prvky přenosového řetězce. Paměťový prvek v bloku CLB není v [ 21 ] podrobně popsán, jeho funkce je však patrně shodná s funkcí paměťového prvku obsaženého v I/O bloku. Ten může být nakonfigurován jako klopný obvod typu DE řízený hranou hodinového signálu nebo staticky. Vstup SR může být nakonfigurován jako nastavovací nebo nulovací, a jako asynchronní nebo synchronní. Vstup REV má opačnou funkci (nastavení či nulování) ke vstupu SR. Podrobné chování různých konfigurací tohoto paměťového prvku je možno vysledovat například z popisu odpovídajících primitiv v [ 24 ]. Tam jsou také uvedeny způsoby jejich inference a vložení v jazycích HDL. Ke specializovaným kombinačním strukturám v obvodech řady Spartan-3 lze počítat vestavěné násobičky se dvěma 18bitovými vstupy a 36bitovým výstupem, s možností kaskádování pro násobení více čísel nebo pro získání větší bitové šířky. Násobička zpracovává celá čísla bez znaménka (unsigned) nebo se znaménkem (signed). Násobička může být také rozdělena na více částí s menší bitovou šířkou. Může být nakonfigurována jako kombinační nebo s registrovým výstupem. Podrobnosti lze najít v aplikační zprávě [ 26 ]. Princip komunikace DDR spočívá v tom, že přenášená data jsou synchronizována na obě hrany (vzestupnou i sestupnou) hodinového signálu. Výstupní i vstupní registr je zdvojen a obě jeho poloviny jsou taktovány hodinovým signálem fázově posunutým o 180°. Výstup je vybaven speciálním multiplexorem pro střídavý výběr obou signálů. DCI je dostupná v některých I/O standardech. Umožňuje dosáhnout impedančního přizpůsobení vstupů a výstupů rezistory na čipu, takže není nutné přidávat je jako vnější součástky. To je velmi užitečné zejména u pouzder s vývody na spodní ploše obvodu. Viz [ 27 ]. Multiplexory slouží především k řízení toku dat, jsou však využitelné i pro vytváření kombinačních funkcí. Podobně tomu je s řetězcem rychlého přenosu, který je určen pro vytváření aritmetických funkčních bloků (například sčítaček), jeho prvky však mohou být použity i jinak, pro obecné účely. Jinou specializovanou strukturou je DCM – Digital Clock Manager, který je rozsáhlou nadstavbou prvku DLL známého z popisu řady Spartan-II, viz [ 21 ]. Kromě funkcí prvku DLL dovoluje pomocí digitální frekvenční syntézy (DFS) vytvořit vnitřní hodinový signál. Možné hodnoty jeho kmitočtu jsou dány kmitočtem přivedeného vnějšího signálu, který je násoben a dělen dvěma zadanými celými čísly CLKFX_MULTIPLY (v rozsahu od 2 do 32) a CLKFX_DIVIDE (v rozsahu od 1 do 32): fCLKFX = fCLKIN * (CLKFX_MULTIPLY / CLKFX_DIVIDE). Dalším užitečným prvkem této struktury je PS – posouvač fáze, který umožňuje zavést fázový posuv vstupního signálu s krokem 1/256 periody tohoto signálu v rozsahu celé jeho periody. Velikost fázového posuvu je možno v průběhu činnosti posouvače inkrementovat nebo dekrementovat.
39
Zjednodušené blokové schéma bloku DCM (převzato z [ 21 ]):
Bloková paměť RAM má ve srovnání s pamětí v řadě Spartan-II několik pozoruhodných inovací - viz [ 21 ]. Mezi jinými je to způsob, jak se řídí obnovování dat ve výstupním buferu při současném jejich zápisu ze vstupu DI. Používají se k tomu atributy WRITE_FIRST, READ_FIRST, NO_CHANGE. První možnost, WRITE_FIRST, znamená, že se ve výstupním buferu objeví právě zapsaná data. Toto chování lze přirovnat k chování známých registrů ze řady 74. READ_FIRST způsobí, že se na výstupu objeví data, která byla v paměti před uskutečněním zápisu, jde tedy o zapojení analogické posuvnému registru. Při volbě NO_CHANGE se aktivací vstupu WE data zachytí ve výstupním buferu a zápis do paměti je nemění.
IO standardy zahrnují ve srovnání s předchozími řadami další podporované typy. Zajímavé jsou zejména diferenční standardy LVDS a LVPECL, které se často používají v rychlých aplikacích. Řady Spartan a Virtex - srovnání: Virtex
Virtex-E Ext.Mem. VCCINT 2.5 V 1.8 V 1.8 V VCCO 1.4-3.6V 1.2-3.6V 1.2-3.6V TolerZ 5.5 V 4.0 V 4.0 V TolerIn 5.5 V VCCO+0.5V VCCO+0.5V PdpWP
Virtex-E
V50E-300E
Virtex-II Virtex-II Pro 1.5 V 1.5 V 1.2-3.6V 1.2-3.45V 4.0 V 3.75 V VCCO+0.5V 3.75 V 2V40-250 2VP2
Spartan-II
Spartan-IIE Spartan-3
2.5 V 1.4-3.6V 5.5 V 5.5 V
1.8 V 1.2-3.6V 4.0 V 4.0 V
všechny
2S50E-300E 3S50-3S1500
1.2 V 1.14-3.45V 3.75 V 3.75 V
Řádek TolerZ obsahuje nejvyšší hodnotu napětí tolerovanou na I/O vývodech ve stavu Z. Řádek TolerIn obsahuje nejvyšší hodnotu napětí tolerovanou na vstupních vývodech (u obvodů Spartan-3 lze připojit ke vstupům i zdroje s vyšším napětím, je-li proud omezen na max. 10 mA) Řádek PdpWP obsahuje členy řady podporované systémem WebPACK 7.1i
Konfigurační paměti Paměti isp EEPROM řady XC18V00: zaručovaný počet cyklů programování a mazání je 20 000, napájecí napětí 3.3 V, s možností napájet výstupní budiče ze zdroje 2.5 V Paměti FLASH EEPROM XCF01S, 02S, 04S určené pro FPGA Virtex Pro, Virtex-II, Spartan-IIE, Spartan-3, 20 000 cyklů, napájení podobně jako u XC18V00, VCCO 1.7 až 3.6 V
40
Pro aplikace, kde se nepočítá se změnou konfigurace, lze místo pamětí řady XC18V00 použít levnější paměti PROM řady XC1700 (OTP - One Time Programmable)
Nejdůležitější produkty firmy Altera Řada Cyclone: Pracovní napájecí napětí jádra: VCCINT = 1.5 V Pracovní napájecí napětí vstupně-výstupních bloků: VCCO = 1.5, 1.8, 2.5 a 3.3 V S vnějším rezistorem jsou vstupy i výstupy tolerantní k 5V Podpora I/O standardů podobně jako u řad Spartan Bloková paměť RAM až 256Kb + paritní bit, v blocích po 4Kb Konfigurační paměti: EPCS1 - 1 Mb, EPCS4 - 4 Mb Flash paměti Počet cyklů programování/mazání: zaručováno 100 000 cyklů Programování v systému kabelem ByteBlaster II nebo v programátorech
Návrhový systém: Quartus II Web Edition - systém lze volně stáhnout z www Altera
41
11 Jak se vyjadřuje velikost obvodů PLD a FPGA Velikost programovatelných obvodů se zhruba do konce 90. let udávala jako počet tzv. ekvivalentních (logických) hradel – je to původně určeno k vyjadřování složitosti konstrukcí v hradlových polích (GA – Gate Arrays), později používáno i pro srovnání velikosti obvodů ASIC a FPGA. Co je ekvivalentní hradlo: existuje několik možných definic, používaných dříve různými výrobci obvodů ASIC, například: • 2vstupové hradlo NAND, • určitý počet tranzistorů, • 1/11 minimálního množství logiky potřebné k realizaci jednobitové úplné sčítačky atd. Pojem systémové hradlo byl zaveden pro vyjadřování složitosti obvodů FPGA a jejich srovnání s obvody ASIC. Podle [ 18 ], s. 95 a dále, je to něco mezi 1/3 a 1/5 ekvivalentního hradla, není v tom však všeobecná shoda. Pojem logické hradlo je používán ve starších dokumentech firmy Xilinx (např. [ 19 ] ) s podobným významem jako ekvivalentní hradlo. Uvedené pojmy byly používány pro snadnější orientaci uživatelů FPGA v době, kdy tito uživatelé byli zvyklí přemýšlet v pojmech zavedených při používání standardních logických řad a případně hradlových polí, a pojmy související s obvody FPGA byly širší veřejnosti málo známé. Jejich použití v případě moderních obvodů FPGA je však více než problematické. Podle [ 18 ] i [ 19 ] je dnes mnohem vhodnější vyjadřovat velikost obvodů FPGA například tabulkou, v níž je uveden počet logických buněk (čtyřvstupová tabulka LUT s přidruženým klopným obvodem), počet a velikost bloků RAM, počet a velikost hardwarových násobiček a podobně počty, velikosti a případně jiné charakteristické údaje dalších speciálních bloků obsažených v tomto obvodu FPGA (procesory, transceivery, bloky pro úpravu hodinových signálů a podobně). Takové tabulky bývají v katalogových listech moderních obvodů FPGA uváděny. Použití pojmů ekvivalentní (systémové) hradlo může být vhodné například při srovnávání velikosti obvodů PLD nebo FPGA jedné řady, jejichž architektura je příbuzná a které obsahují speciální bloky stejného druhu – například v řadě FPGA Spartan-3: nejmenší je XC3S50 (velikost 50 000 systémových hradel), větší například XC3S1000 (1 000 000 hradel) – lze pak říci, že druhý typ je zhruba 20x větší než první. S určitým omezením je možné tento způsob srovnání použít pro obvody příbuzných řad, například obvodů z řad Spartan a Vitrex. Použití těchto pojmů ke srovnání obvodů odlišných řad a zejména obvodů vyráběných různými výrobci může však být zcela zavádějící. Orientační údaje o počtu ekvivalentních hradel pro obvody PLD a FPGA: GAL 16V8
300 ekv. hradel
XC9536XL XC95288XL
800 usable gates (Datasheet 1999) 6400 usable gates (Datasheet 1999)
XCR3032XL XCR3512XL
750 usable gates (DS012.pdf, 2003) 12K usable gates (DS012.pdf, 2003)
XC2S15 XC2S200
15K System Gates (DS001-1, 2003) 200K System Gates (DS001-1, 2003)
XC3S50 XC3S5000
50K System Gates (DS099-1, 2003) 5M System Gates (DS099-1, 2003)
XCV50 XCV1000
58K System Gates (DS003, 2000) 1M System Gates (DS003, 2000)
XC2V40 XC2V8000
40K System Gates (DS031-1, 2002) 8M System Gates (DS031-1, 2002)
42
12 ECL – emitorově vázaná logika, CML – current-mode logic Je to dodnes nejrychlejší druh číslicových obvodů – viz např. [ 4 ], [ 5 ]. Bipolární technologie, nenasycené tranzistory, malý rozkmit napětí (méně než 1 V), jde o přepínání proudové cesty mezi dvěma větvemi První rodina CML – General Electric 1961, později Motorola vytvořila dvě dodnes populární řady 10K a 100K ECL, zpoždění pod 1 ns. Nová rodina – ECLinPS – zpoždění 500 ps (měřeno na vývodech). Rodina 10H – dovoluje širší rozsah napájecího napětí Největší nevýhoda: velká spotřeba, nepříliš výhodný součin spotřeby a zpoždění – např. superpočítače Cray představují problém pro chlazení srovnatelný s řešením logické funkce. Technologie CML nedovoluje velkou integraci, rychlé hrany vyžadují považovat spoje za vedení a řešit problémy jako odrazy a podobně už při délce spoje několik cm. Obtížné propojování s jinými typy logických řad – tradiční je uzemnění kladného pólu napájecího napětí (VCC ≡ GND), VEE bývá kolem -5 V (jmenovitě -5,2 V pro 10K, -4,5 V pro 100K). Řada 100K je rychlejší, má větší spotřebu než řada 10K. Nejčastější použití CML: velmi rychlé komunikační systémy, vláknová optika, vysokorychlostní sítě Ethernet a ATM PECL – zkratka pro použití standardních komponent ECL (popř. i speciálních) s napájecím napětím VCC = 5 V, VEE ≡ GND (positive ECL – umožněno použitím vícevrstvých desek PS, kde pro VCC může být vyhrazena zvláštní vrstva, využívá se i možnosti diferenčního zapojení – viz poznámku o použití tohoto zapojení v budičích a přijímačích vedení uvedenou dále). Některé součástky CMOS určené pro aplikace, kde se předpokládá užití CML, mají diferenční vstupy a výstupy kompatibilní s PECL. Místo rodiny 10K lze použít rodinu 10H, která pracuje bez problémů s napájením 5 V Základní obvod CML je nakreslen na Obr. 12.1.
VCC 5V R1 300 Ω T1
R2 300 Ω
T2
Vin = 4,4 V (HIGH)
Vout1 4,2 V (LOW)
Vout2 5,0 V (HIGH) VBB = 4,0 V
VE = 3,8 V R3 1.3 kΩ VEE 0V Obr. 12.1. Invertor/buffer typu CML se vstupem v úrovni HIGH
43
VCC 5V R2 300 Ω
R1 300 Ω T1
T2
Vin = 3,6 V (LOW)
Vout1 5,0 V (HIGH)
Vout2 4,2 V (LOW) VBB = 4,0 V
VE = 3,4 V R3 1.3 kΩ VEE 0V Obr. 12.2. Invertor/buffer typu CML se vstupem v úrovni LOW V kritických pozicích, jako jsou obvody interface (budiče a přijímače vedení) se skutečně používají diferenční vstupy a výstupy (differential), jinde obvykle jen jeden z nich je vyveden z pouzdra (single ended). Logický obvod OR/NOR je nakreslen na Obr. 12.3.
VCC 5V
y = a OR b
R2 300 Ω
R1 300 Ω
Vb
Vy Vynot
Va
VBB = 4,0 V
T2
T3
T1
R3 1.3 kΩ VEE 0V Obr. 12.3. Zapojení logického obvodu OR/NOR v provedení CML Pro sestavení součinových obvodů (y = a AND b) se používá technika zvaná series gating, kde jsou ve svislých větvích zapojeny tranzistory pro více vstupů – v [ 5 ] s. 41 se uvádí, že při napájení 5,2 V (doporučovaná jmenovitá hodnota) může být použito až tří úrovní spínání, pro jednu úroveň by stačilo napájení 2,6 až 3 V. Výstupní napětí je vztaženo k úrovni VCC – proto je potřebné, aby toto napětí bylo co nejpevnější, obvykle se pro ně používá zemnicí plocha, pak jsou ostatní napětí záporná.
44
Posuv úrovní výstupních napětí a zvýšení zatížitelnosti se dosahuje připojením emitorových sledovačů do výstupů – viz Obr. 12.4. Výstupy jsou typu „otevřený emitor“ – je nutné zapojit k nim zatěžovací rezistor. Praktické uspořádání obvodu 10102 je nakresleno na Obr. 12.4 (člen OR/NOR):
R3 220 Ω
R4 245 Ω
VCC1 0V
R7 907 Ω
VCC2 0V T5
Vynot (NOR)
Vb Va
T2 T1
R1 50 kΩ
T6
VBB = -1,29 V
Vy (OR)
T4
T3
y = a OR b
R2 R5 50 kΩ 779 Ω
VEE -5,2 V
R6 R8 6,1 kΩ 4,98 kΩ
VEE -5,2 V
Obr. 12.4. Vnitřní uspořádání obvodu OR/NOR typu 10102 Základní aplikační pravidla podle [ 5 ]: Typické je použití tří napájecích uzlů: VCC (obvykle uzemněný), VT (termination – zakončení zatěžovacích rezistorů, napětí -2 V) a VEE (-4,5 V u 100K, -5,2 V u 10K). V uzlu VEE nejsou téměř přítomny vysokofrekvenční složky proudů při spínání. Uzel VT naopak takové složky obsahuje – při zatěžovacím odporu 50 ohmů je změna proudu z 8 mA na 22 mA při sepnutí výstupu. Uzel VCC představuje součet těchto dvou složek. Obvody ECL jsou 4x citlivější na rušení v uzlu VCC než v uzlu VEE a VT, proto uzel VCC je vhodné vytvořit jako celistvou vrstvu spoje. Je-li to možné, je takto vhodné vytvořit i uzel VT. Jsou-li použity zatěžovací rezistory s odporem větším – např. 250 ohmů, mohou být připojeny na VEE. Doporučuje se pro stabilizátory používat Kelvinovo zapojení – snímat napětí zvláštními vodiči až na místě připojených logických obvodů. Blokovací kondenzátory by měly být ve vzdálenosti do 1 cm od obvodů 100K a do 5 cm pro obvody 10K. Parazitní indukčnosti mohou způsobit vznik oscilací ohrožujících vstupy i stabilizátor. Nedoporučuje se vsazovat obvody řad CML do objímek – ani u prototypů, protože zvětšení parazitních kapacit a indukčností a nedokonalé kontakty mohou způsobit zkreslení signálů nebo vznik oscilací. Je-li použití objímek naprosto nezbytné – například při testování nebo při zahořování, nemá délka přívodů přesáhnout 6 mm. Nevyužité vstupy: mají-li být ve stavu LOW, je vhodné připojit je k napětí VT (-2 V); mají-li být ve stavu HIGH, doporučuje se vytvořit zdroj napětí –0,8 V (diodou na VCC, rezistorem na VT a vstup připojit do jejich spojení), nebo připojit tyto vstupy na nějaký výstup s touto úrovní. Vstupy některých obvodů lze připojit přímo na VCC, neplatí to však obecně, platí to jen pro ty vstupy, pro něž to výrobce výslovně dovoluje. Všechny výstupy, i ty, které jsou nevyužité, musí být připojeny zatěžovacím rezistorem na napětí VT, popř. na VEE. Není-li to dodrženo, dojde k následujícímu: - změní se napětí některých vnitřních uzlů, což ovlivní i další výstupy; 45
- pro obvody s komplementárními výstupy a s rychlými hranami může nesymetrie v zátěži způsobit vznik zkreslení hran signálů a rušivých složek Nedoporučuje se využívat propojení výstupů k vytvoření montážního součtu (součinu), zejména jde-li o výstupy fyzicky od sebe vzdálené. Je nezbytné respektovat všechna doporučení na omezení napětí, proudů a ztrátového výkonu, a to i při připojování a odpojování napájecího napětí. Zejména nesmí být připojen zdroj VT ke vstupům a výstupům, dokud není připojeno napětí VEE. Nebezpečné jsou i zkraty výstupů na VEE nebo VT, popř. na jiné tvrdé zdroje. Novější údaje a doporučení (pro řady MECL firmy ON Semiconductor): viz [ 16 ], [ 17 ] Často používaný způsob vytvoření napětí VT pro delší spoje: pasívní stabilizátor napětí s referenčním obvodem TL431
VCC2 +5 V T5
T6 RT1
RT2 VT R1
R3
TL431 R2
0V Napětí VT má být VCC2 – 2V, tedy 3 V vzhledem k zemi, předpokládá se charakteristická impedance spojů 50 Ω TL431: referenční napětí (střed děliče) je 2.5 V RT1, RT2 – zatěžovací odpory (v blízkosti zátěže) – 50 Ω R1, R2 – dělič pro TL431 – 12 Ω, 62 Ω R3 – odlehčovací rezistor pro TL431 (celkový proud tekoucí přes rezistory RT1, RT2 je téměř neměnný) Zátěž může být připojena přes oddělovací kondenzátory (pak je nutno nastavit pro ni stejnosměrný pracovní bod).
46
13 Technika „pipelining“ – použití ke zvýšení přípustného kmitočtu hodinového signálu Kombinační obvody v číslicových systémech bývají obvykle zařazeny do větších celků a jejich výstupy pak bývají zachycovány registrem. Totéž zpravidla platí pro zdroje vstupních signálů. Přípustný hodinový kmitočet je pak určen zpožděním tpd kombinačního obvodu (2 v následujícím obrázku), zpožděním tco vstupního registru (1) a požadovaným předstihem tsu výstupního registru (3). Je-li kombinační obvod (2) složitý, bývá realizován víceprůchodovým zapojením a jeho zpoždění je velké. Pro snížení tohoto zpoždění je možno použít techniku zvanou pipelining. Základní myšlenkou pipeliningu je rozdělení kombinační logiky na několik menších stupňů (s menším zpožděním), a vřazení registrů mezi ně – menší kombinační stupně mohou mít menší zpoždění, takže vzroste přípustný hodinový kmitočet za cenu vzniku latence – výstupní signály jsou platné až po tolika taktech hodin, kolik stupňů pipeliningu je použito. Původní zapojení:
1 TE
2 složitý komb. obvod, velké zpoždění tpd
3 TE
clk Zapojení s pipeliningem:
TE
TE
TE
clk Obr. 13.1. Princip vložení registrů do cesty signálu – pipelining Nejvyšší přípustný kmitočet signálu clk u původního zapojení: f clk =
1 t CO1 + t pd2 + t su3
Indexy u časů v tomto výrazu značí, kterého z bloků na Obr. 13.1 se příslušný čas týká. Kmitočet tohoto signálu po zavedení pipeliningu je dán analogickým výrazem, v němž však místo času tpd2 je zpoždění nejpomalejšího z bloků, na něž byl původní kombinační obvod rozdělen. Výsledky zjištěné z reportu fitteru pro 8bitovou kombinační a registrovou sčítačku a pro 32bitovou sčítačku kombinační, registrovou a s pipeliningem jsou uvedeny na další straně. Srovnání je uvedeno pro nastavení optimalizace syntetizéru na plochu (Area) nebo rychlost (Speed), a fitteru na stupně Density, Balance a Speed. Pro každé nastavení je uveden nejmenší obvod, do něhož je sčítačku možno implementovat. Před lomítkem je uveden počet spotřebovaných prvků, za ním počet prvků, který je v uvedeném obvodu k dispozici (jen jednou v každém řádku). Tučně je pro každý typ sčítačky uvedena nejlepší dosažená hodnota časového údaje. 47
Add8Comb: pouzdro PC44
Synth: Impl: Typ IO: Rychl.: Makrob.: Termů: FB In: tpd: MClevel:
Area Density 9536XL 5 15/36 53/180 29/108 22.2ns 6
Area Balance 9536XL 5 14 122 34 9.3ns 2
Area Speed 9536XL 5 11 123 20 13.0ns 3
Speed Density 9536XL 5 17 52 44 28.1ns 8
Speed Balance 9536XL 5 14 122 35 13.3ns 3
Speed Speed 9572XL 5 13/72 206/360 47/216 17.3ns 4
Add32Cmb: pouzdro CS144 nebo TQ144
Synth: Impl: Typ IO: Rychl.: Makrob.: Termů: FB In: tpd: MClevel:
Area Area Area Speed Speed Speed Density Balance Speed Density Balance Speed 95144XL 95144XL 95288XL 95144XL 95288XL 95288XL 5 5 6 5 6 6 64/144 70 65/288 72/144 82 77 226/720 481 699/1440 257/720 709 1058 129/432 282 362/864 184/432 449 611 62.7ns 14.0ns 15.6ns 44.8ns 18.0ns 17.5ns 17 3 3 12 4 4
Add8Reg: pouzdro PC44
Synth: Impl: Typ IO: Rychl.: Makrob.: Termů: FB In: tco: tsu: MClevel:
Area Density 9536XL 5 15/36 49/180 29/108 2.5ns 23.5ns 6
Area Balance 9536XL 5 14 122 34 2.5ns 8.0ns 1
Area Speed 9536XL 5 11 123 20 2.5ns 11.7ns 2
Speed Density 9536XL 5 20 59 35 2.5ns 24.2ns 6
Speed Balance 9536XL 5 16 125 36 2.5ns 12.3ns 2
Speed Speed 9572XL 5 17/72 221/360 47/216 2.5ns 16.0ns 3
Add32Reg: pouzdro CS144 nebo TQ144
Synth: Impl: Typ IO: Rychl.: Makrob.: Termů: FB In: tco: tsu: MClevel:
Area Area Area Speed Speed Speed Density Balance Speed Density Balance Speed 95144XL 95144XL 95288XL 95144XL 95288XL 95288XL 5 5 6 5 6 6 64/144 71 65/288 79 84 79 205/720 482 699/1440 242 712 1061 135/432 302 398/864 188 465 619 2.5ns 2.5ns 3.8ns 2.5ns 3.8ns 3.8ns 56.5ns 15.0ns 14.2ns 42.8ns 16.8ns 15.5ns 16 3 2 11 3 3
Add32pip:
Synth: Impl: Typ IO: Rychl.: Makrob.: Termů:
Area Area Area Speed Speed Speed Density Balance Speed Density Balance Speed 95144XL 95288XL 95288XL 95144XL 95288XL 95288XL 5 6 6 5 6 6 112/144 117/288 115 122 133 123 320/720 669/1440 938 361 743 1147 48
FB In: tco: tcyc: MClevel: tsu: MClevel:
162/432 2.5ns 35.6ns 10 36.9ns 9
412/864 3.8ns 12.7ns 3 12.0ns 2
464 3.8ns 14.1ns 3 12.5ns 2
198 2.5ns 27.8ns 7 24.9ns 6
440 3.8ns 15.2ns 4 12.8ns 2
543 3.8ns 15.3ns 3 13.1ns 2
Zajímavou aplikací pipeliningu jsou kombinační násobičky s výstupním registrem. Současné syntetizéry, například XST, mají možnost provádět optimalizaci zvanou Flip-Flop Retiming, která spočívá ve využití skutečnosti, že ze statického hlediska je možno registr původně zapojený za kombinační obvod přesunout do vstupů tohoto kombinačního obvodu. V behaviorálním popisu se tedy za násobičku zařadí několik registrů a ty pak syntetizér při optimalizaci přesune do vhodných vnitřních uzlů v násobičce tak, aby se minimalizovalo největší výsledné zpoždění každé z takto vzniklých dílčích kombinačních bloků. Příklad popisu (A, B, MULT jsou brány násobičky), [ 15 ]: architecture beh of mult is signal a_in, b_in: unsigned (A_port_size-1 downto 0); signal mult_res: unsigned ((A_port_size+B_port_size-1) downto 0); signal pipe_1,pipe_2,pipe_3: unsigned ((A_port_size+B_port_size-1) downto 0); begin mult_res <= a_in * b_in; process (clk) begin if (clk’event and clk=’1’) then a_in <= A; b_in <= B; pipe_1 <= mult_res; pipe_2 <= pipe_1; pipe_3 <= pipe_2; MULT <= pipe_3; end if; end process; end beh;
Tato optimalizace je přirozeně možná jen tehdy, je-li násobička vytvořena z tabulek LUT, nikoli pokud je použita hardwarová (dedicated) násobička.
49
14 Systémy pro popis konstrukce a pro jeho další zpracování Systémy vytvářené výrobci obvodů – např. Xilinx ISE (WebPACK, Foundation) atd. a „third party“ (univerzální – např. FPGA Advantage) Popis grafický – tradiční je schéma, běžně užívaný strukturální typ popisu. Existují však i behaviorální grafické způsoby popisu, například stavový diagram - výhody popisu schématem: pro jednoduché zapojení je přehledný, bloková schémata jsou použitelná i pro rozsáhlejší konstrukce - nevýhody: není přenositelný mezi systémy, systémy pro kreslení jsou „proprietary“, omezené možnosti – symboly je nutno znát, je jich omezený počet, obtížná modifikovatelnost, potřeba doplnění dalších informací – atributy Popis textový – novější typ, použitelný jak pro strukturální tak i pro behaviorální popis - výhody: univerzálnější, zápis pomocí textových editorů, existence uznaných otevřených standardů – VHDL, Verilog, snadnější přenositelnost, snadnější modifikace a doplnění dalších informací, možnost snadného rozlišení kompilovaných informací a komentářů - nevýhody: pro rozsáhlé konstrukce se často ztrácí přehlednost, zejména u strukturálního popisu Pro velké konstrukce je možno sloučit výhody obou typů popisu, jestliže se pro přenos mezi systémy využije textová forma popisu, která je automaticky generována z formy grafické. Návrhové systémy obvykle dnes obsahují jak možnost vstupu údajů grafického, tak i textového typu. Systémy, u nichž jsou tyto formy propojeny tak, že z grafické formy lze vygenerovat textovou a naopak a změna jednoho z těchto vyjádření se automaticky promítne do druhého, jsou zatím velmi drahé – patří mezi ně např. systém FPGA Advantage (Mentor Graphics). Jednodušší systémy, např. Xilinx ISE, dovolují editovat grafickou formu popisu a z ní vygenerovat odpovídající strukturální popis v jazyku HDL. Grafická forma popisu ve tvaru blokového schématu je obvykle přehlednější než odpovídající textový strukturální popis a nepředpokládá-li se přenos konstrukce do jiných systémů, je tato forma obvykle vhodná pro vrcholovou jednotku u hierarchických konstrukcí, případně i pro nižší jednotky, které by v textové formě byly popsány strukturálně. Pro některé konstrukce však mohou mít textové formy popisu určité výhody. Například při vytváření pravidelných struktur, jako je třeba asynchronní čítač, je možno použít v jazyku VHDL příkaz GENERATE, zatímco v editoru schémat je nutné strukturu kompletně nakreslit. Při změně bitové šířky, přidání nebo odebrání dalších řídicích signálů (reset) a podobných změnách je pak úprava schématu často mnohem pracnější. Rovněž popis bloků pro zpracování dat (např. sčítačky, násobičky a podobně) s velkou bitovou šířkou je zpravidla v textovém tvaru snazší. Systém FPGA Advantage: - grafické formy popisu: blokové schéma, stavový diagram, pravdivostní a funkční tabulky, IBD... - textový popis: VHDL, Verilog - automatická návaznost mezi různými formami popisu - možnost převodu grafického popisu na textový a naopak Složení systému FPGA Advantage (moduly pro práci s obvody PLD a FPGA): - systém vstupu údajů – kombinace grafických a textových forem - simulace – simulátor ModelSim - syntéza – podpora různých výrobců PLD, FPGA, možnost přechodu na ASIC - mnoho dalších podpůrných bloků jako project manager, návaznost na systémy návrhu plošných spojů, podpora IP...
50
15 Duševní vlastnictví a použití jader Anglické termíny: duševní vlastnictví - intellectual property, IP; jádro - core Odkud se jádra mohou obvykle získat: - od výrobců FPGA - od firem specializovaných na software a) b) c) d)
Typy jader: nezašifrovaná jádra, popis na úrovni RTL zašifrovaná jádra, popis na úrovni RTL jádra na úrovni netlistu před krokem place-and-route jádra na úrovni netlistu po kroku place-and-route
K bodu a - nezašifrovaná jádra RTL: málokdy se prodávají, možnost zneužití; výhodné pro uživatele – lze je snadno modifikovat K bodu b – zašifrovaná jádra RTL: v současnosti není všeobecně přijatý standard pro šifrování. Každý výrobce si vytváří vlastní systém šifrování, s nímž jsou kompatibilní jen jeho syntetizéry, případně syntetizéry jeho smluvních partnerů. Příklad: Xilinx, Altera. Uživatel si jádra může přizpůsobit svým potřebám – vynechat nevyužité části nebo přidat další. K bodu c – jádra na úrovni netlistu před krokem place-and-route: je to nejčastější forma, ve které se jádra distribuují. Jsou obvykle v zašifrovaném formátu EDIF nebo ve specifickém formátu dodavatele jádra. Jádra jsou obvykle optimalizována na nejmenší spotřebu strukturních prvků a rychlost. Uživatel však nemůže vynechat nevyužité části jádra. Jádra jsou svázána s typem cílového obvodu, pro nějž jsou vytvořena. K bodu c – jádra na úrovni netlistu po kroku place-and-route: opět jsou obvykle zašifrována a poskytují největší výkon (rychlost), ostatní vlastnosti jsou podobné jako v předcházejícím bodu. Některá jádra jsou k dispozici bezplatně, bývají například součástí návrhových systémů. Pro složitější jádra je nutno získat licenci, která může představovat nutnost zaplatit nezanedbatelnou finanční částku, za kterou ovšem dostaneme výsledek někdy velmi rozsáhlé práce, kterou bychom jinak museli vykonat sami. Často se setkáme s tzv. generátory jader (core generators), generující podobné druhy jader jak bylo popsáno výše. Jádra jsou obvykle parametrizována – dovolují zvolit určité vlastnosti – šířku datových signálů, varianty nulování či počátečního nastavení atd. podle potřeby uživatele. Kde je vhodné jádra představující IP používat: Použití jader může významně zrychlit proces vytváření konstrukce. Cenou za to je, že je omezena možnost zasahovat do funkce jader a u zašifrovaných jader je obvykle omezení na určité cílové obvody, tedy snížená nebo úplně odbouraná přenositelnost kódu. Samozřejmě u složitějších jader sem přistupuje také cena, kterou za jádra musíme zaplatit. Jádra tedy budeme používat především tehdy, potřebujeme-li vytvořit složitou konstrukci, pro kterou se nevyplatí vlastní vývoj, nebo pokud nám jde o čas. Je zde velmi těsná analogie s programy pro počítač, které zakoupíme (což odpovídá použití jader), a těmi, které vyvíjíme sami.
51
Literatura [ 1 ] Efficient Shift Registers, LFSR Counters... Aplikační zpráva XAPP 052, Xilinx. Dostupné na www.xilinx.com [ 2 ] Configuration and Readback of Spartan-II FPGAs Using Boundary Scan. Aplikační zpráva XAPP188, Xilinx. Dostupné na www.xilinx.com [ 3 ] MAUNDER, C.: The Board Designer’s Guide to Testable Logic Circuits. Addison-Wesley, 1992 [ 4 ] WAKERLY, J.: Digital Design – Principles and Practices. 3rd edition, 2001 [ 5 ] Data Handbook 10/100K ECL Logic/Memory/PLD, Philips 1991 [ 6 ] SKAHILL, K.: VHDL for Programmable Logic. Addison-Wesley, 1996 [ 7 ] ALFKE, P.: Set-up and Hold Times. Aplikační zpráva XAPP 095, Xilinx, November 1997. Dostupné na www.xilinx.com [ 8 ] Digital Design Seminar. Texas Instruments, 1997 [ 9 ] KOLOUCH, J.: Programovatelné logické obvody. Přednášky (skripta, 2005) [ 10 ] KOLOUCH, J.: Programovatelné logické obvody a návrh jejich aplikací v jazyku VHDL (skripta, 2005) [ 11 ] Spartan-II 2.5V FPGA Family: Complete Data Sheet. Xilinx Data Sheet, ds001.pdf. Dostupné na www.xilinx.com [ 12 ] Virtex 2.5V Field Programmable Gate Arrays. Xilinx Data Sheet, ds003.pdf. Dostupné na www.xilinx.com [ 13 ] Using Block SelectRAM+ Memory in Spartan-II FPGAs. Xilinx Application Note XAPP173. Dostupné na www.xilinx.com [ 14 ] Using the Virtex Block SelectRAM+ Features. Xilinx Application Note XAPP130 [ 15 ] Xilinx Synthesis Technology User Guide (ISE6.1i), Xst.pdf. Dostupné na www.xilinx.com [ 16 ] MECL System Design Handbook. ON Semiconductor, HV205/D, dostupné na www. onsemi.com [ 17 ] MECL Data. ON Semiconductor, DL122/D, 2000, dostupné na www. onsemi.com [ 18 ] MAXFIELD, C.: The Design Warrior’s Guide to FPGAs. Elsevier, 2004 [ 19 ] Gate Count Capacity Metrics for FPGAs. Xilinx Application Note XAPP059, 1997. Dostupné na www.xilinx.com [ 20 ] http://www.cedcc.psu.edu/ee497f/rassp_43/sld145.htm [ 21 ] Spartan-3 FPGA Family: Complete Data Sheet. Xilinx Data Sheet, DS099.pdf. Dostupné na www.xilinx.com [ 22 ] Spartan and Spartan-XL Families FPGAs. Xilinx, DS060.pdf. Dostupné na www.xilinx.com [ 23 ] PicoBlaze 8-Bit Microcontroller for Virtex-E and Spartan-II/IIE Devices. Aplikační zpráva XAPP213.pdf. [ 24 ] Libraries Guide (lib.pdf). Dokumentace k systému ISE firmy Xilinx. Dostupné na www.xilinx.com [ 25 ] Synthesis and simulation Design Guide (sim.pdf). Dokumentace k systému ISE firmy Xilinx. Dostupné na www.xilinx.com [ 26 ] Using Embedded Multipliers in Spartan-3 FPGAs. Aplikační zpráva XAPP467. Dostupné na www.xilinx.com [ 27 ] DCI_clock.htm, http://www.xilinx.com/xlnx/xil_ans_display.jsp?getPagePath=13012
52