BUDAPESTI MŐSZAKI ÉS GAZDASÁGTUDOMÁNYI EGYETEM VILLAMOSMÉRNÖKI ÉS INFORMATIKAI KAR MÉRÉSTECHNIKA ÉS INFORMÁCIÓS RENDSZEREK TANSZÉK Digitális rendszerek tervezése FPGA áramkörökkel SRAM FPGA Architektúrák Fehér Béla Szántó Péter, Lazányi János, Raikovich Tamás BME MIT atórium
FPGA áramkörök felépítése Az alapvetı erıforrások Logikai blokkok I/O blokkok Huzalozás Felhasználói szinten közvetlenül csak az elsı kettı jelenik meg A huzalozás nem direkt erıforrás, de kritikus esetekben az eszköz használati értékének igen fontos eleme
FPGA felépítés Egyszerősített általános kép
Technológia és piac Az FPGA flexibilis eszköz, ez költségekkel jár Költség/szolgáltatás optimalizálása fontos Technológiai lehetıségek/elfogadható ár A VLSI félvezetı technológia szempontjából az SRAM FPGA kedvezı eszköztípus Sok egyszerő, azonos modul Szabályos ismétlıdés, szimmetrikus struktúra Az I/O meghajtók és néhány PLL kivételével egyszerő, közönséges CMOS logika
Technológiai háttér Az SRAM FPGA-k jellemzıen a technológiai élvonalban vannak Altera Stratix4 40 nm Xilinx Virtex5 65 nm Lattice SC/M 90nm Ezek a technológiák költségesek Ezt nem minden alkalmazás viseli el Egyszerősített, a fontos tulajdonságokat megırzı, megjelenítı eszközök Altera Cyclone, Xilinx Spartan, Lattice EC Fıképp általános célú, fogyasztói alkalmazásokhoz
Altera Stratix3 11.168 USD Gyors összehasonlítás Xilinx Virtex4 10.558 USD Lattice SC/M 2.275 USD
Gyors összehasonlítás Altera Stratix4 Nincs ár Xilinx Virtex5 ( Slice = 4LE) 8.818 USD T13.178
Gyors összehasonlítás Altera CycloneIII 13-502 USD Xilinx Spartan3 12 442 USD Lattice ECM 11-273 USD Actel IGLO 13 295 USD
FPGA belsı felépítés SRAM FPGA mindig LUT alapú (kivétel MOT ) A LUT egy 1 bit széles memória Mélysége (címvonalak száma ) változó Korai elemzések alapján a 4 bit tőnt optimálisnak Kompromisszum a huzalozás és granularitás között Egy logikai egység 2 4 LUT közelségére épít Lokális belsı kapcsolatok a késleltetést csökkentik Legújabb irányzat a drágább termékvonalban alapelem mérete x4, azaz LUT6
Példa eszköz: Xilinx Spartan3E Általános felépítés egyszerő Homogén logikai struktúra Egyenletes CLB réteg Funkcionális blokkok BRAM MULT DCM I/O győrő
A logikai elemek Enyhe aszimmetria a CLB felépítésben 1 CLB = 2 x 2 Szelet Bal és jobb szelet eltérı Extra LUT módok Független függıleges kapcsolatok speciális logika aritmetika
A CLB struktúra Megosztott elrendezés Független belsı blokkok Szempontok nem ismertek 4 bit számláló/aritmetika Kedvezıbb huzalozás? Az extra memória funkciók hasznosak A konfigurációs memória részletei felhasználói memóriaként is elérhetık
A CLB erıforrása Az eredeti koncepció nem változott Az alap erıforrás az Logic Cell LC = 1 LUT + 1 FF LUT4 tetszıleges 4 változós fgv. 1 változóra hazárdmentes Mőködési idı bemenet és logikai komplexitás invariáns DFF Élvezérelt,, órajel eng. Szink/Aszink. SET/RESET Független kombinációs és regiszteres kimenet
Dedikált CLB erıforrások Az egységes alapkoncepció finomítása A LUT4 természetesen mindenre jó, de A sokváltozós logikai függvények, a legegyszerőbbek is túl sok szintet igényelnek lassú Az aritmetikai mőveletekben kell átvitel jel. Ez egy fontos, de csak belül szükséges, idıkritikus jel. LUT4 alapon 100% redundancia lép fel (3 bemeneti jel 2 függvénye) Hagyományos tömbszorzónál egy-egy szinten kell lokális bitszorzat (AND2) és összeadás a részszorzatokhoz
A gyors átvitelképzés Az aritmetikai mőveletek hatékonysága alapvetı Sebességük a használhatóságot egyértelmően jellemzi Az elemei mővelet: S j = A j xor B j xor C ij C oj = A j B j + A j C ij + B j C ij A teljes mővelet végrehajtási ideje a C i0 C on-1 út terjedési ideje, n-1 az adatméret függvénye A beépített egyszerő átvitel lánc feleslegessé tesz bármilyen más CLA, CS módszert
A gyors átvitel logika A mőveletet 1 bites fél összeadókra bontja A szelet Cin bejövı bitje BX input vagy alsó CLB Cout vagy fix 0 / 1 Összeg bit Fout= A0 xor B0 Xout = Fout xor Cin Átvitel Bit helyiértékenként átvitelterjesztés vagy átvitel generálás A CYMUXF vezérlése az Fout jellel Tehát ha Fout=1, terjeszt, ezért CoutF=Cin, egyébként CoutF=AB, vagyis generál, ha AB=1 Az erıforrások más logika megvalósítására is használhatók
A gyors átvitel logika Aritmetika ADD/SUB/INC/DEC mővelet SUM=A xor B xor C i Átvitel terjesztés és/vagy generálás C o = AB + AC i + BC i C o = (A xor B)? C i : A;
Szorzás logikával A szorzás erıforrás igényes Bitszorzás AND2 Összegzés FA Kezdıszinten egyszerősítés lehetséges, egybıl 2 szint összegezhetı
Szorzás CLB logikával Aritmetika MUL mővelet Bitszintő szorzat és összegzés PP ij =PP ij-1 + A ik *B kj XOR kapu felsı ága általában PP ij-1 Az ábra az elsı szintet mutatja, itt 2 bitszorzat összegezhetı
Belsı multiplexerek Szélesebb logikai kifejezésekhez A független szeletek kombinálhatók MUX4, MUX8, MUX16 egy CLB-ben
MUX használat logikához Más lehetıségek LUT5 generálása Tetszıleges 5 vált. fv. Egyedi 6 9 változós függvények Pl. MUX4 6 bemenettel
CYMUX használat logikához A MUX általános elem, lehet AND vagy OR kapu Ennek megfelelıen a LUT4 részlet logikák összevonhatók szélesebb függvényekké
A részletes struktúra Egyszerősített SliceM felsı és alsó logikai cellája
Memória funkciók a CLB-ben Elosztott memóriának hívják LUT mérető blokkokból építhetı a szükséges méret Lehet természetesen ROM (alapvetıen mindig az) RAM-nál szétválasztott adat be és kimeneti vonal Lehet szinkron beírású RAM Lehet szinkron beírású dual-port RAM 2x erıforrásigény Szinkron olvasás a CLB FF használatával Kezdıérték minden esetben megadható Sebesség illeszkedik a rendszerhez Kiváló elem regiszter készletek megvalósítására
Elızmények Ez a funkció a 4000-es családban jelent meg elıször A memória hagyományos aszinkron SRAM volt Ez nem kezelhetı megbízhatóan az idızítések miatt Ezután lett az írás szinkron Ennek megfelelıen az írás a WCLK jel élére történik Az olvasás azonos idejő, aszinkron
LUT RAM LUT RAM csak a SliceM oldalon realizálható 1 Slice 1db RAM16x1D vagy 1db RAM32x1S
LUT RAM Nagyobb méret relatív lokális elhelyezéssel A rendszer a RAM32x8S elemet 8 szeletben helyez el Használat HDL forrásnyelvi szintrıl Beépítés könyvtári primitívként
LUT shift regiszter Érdekes elem, igen flexibilisen használható Származtatható a konfigurációs mechanizus ismeretében A konfigurációs bitek bekapcsoláskor egy nagy shiftregiszterbe léptetıdnek be Minden konfigurációs elem egy-egy poziciója a konfigurációs tárnak 1 LUT 16 bitet foglal el Az SRL16 módban ezt a 16 bitet átemeljük a felhasználói logikába
LUT shift regiszter A megvalósítás Tulajdonságok Dinamikusan változtatható hosszúságú soros késleltetı (1 16) Kaszkádosítható CLB-ken át Nincs SET/RESET, párhuzamos D/Q, van CE
LUT SRL használat Alapvetıen mint késleltı, aszinkron dinamikus címzéssel Szinkron címzés FF használattal
LUT SRL használat Mőveleti láncok belsı pontjaiban pipe-line késleltetések kiegyenlítése Adatméretnek megfelelı számú LUT kell Kis mérető FIFO Adatok SRL-ben Kiegészítı logika, címszámláló, státusz jelzık
LUT SRL használat Véletlensorozat generátor LFSR használatával XAPP211, LFSR visszacsatoló polinomok n=3 és n=168 között Pl. Gold Code Generator for
LUT SRL használat Számlálók Győrős számláló max. 16 modulusig Konfigurációs inicializálás a 100..000 értékre Modulus választható a LUT címbemeneten keresztül Szabadon futó, nincs RESET, de van CE
LUT SRL számláló Nagyobb modulus SRL16-ok sorba kötve Relatív prím hosszú SRL16-ok kimenetei AND kapcsolatban Példa: 3465 modulusú osztó Legyen az SRL16-ok egyedi modulusa a 3465 faktorizációja alapján 11, 9, 7 és 5. A TC csak minden 5x7x9x11= 385. ciklusban lesz aktív 5 7 9 11
LUT FF A szekvenciális logika alaperıforrása Megjegyzés: Néhány FPGA-ban nincs dedikált regiszter erıforrás, azt az általános logikai cellából alakítják ki Az SRAM FPGA-ak mindig tartalmaznak FF-ot Élvezérelt DFF órajel engedélyezéssel Alaphelyzet beállítás SET/RESET, szinkron/aszinkron Inicializálás: INIT0/INIT1
További erıforrások Huzalozás Bıven túlméretezett huzalozási erıforrások Történelmi okokból
Huzalozás Különbözı huzalozási erıforrások Hosszú vonalak az IC teljes felületén Minden 6. CLB-hez A hatos csoportok között egyszintő átugrás Kapcsolat a második szomszédokhoz Alapvetı szomszédos, direkt kapcsolatok Speciális globális hálózatok (Nem CLK!) GSR Globális SET/RESET vonal GTS Globális Hiz az I/O kimenetekre Az órajel hálózat más!
Órajel erıforrások Az FPGA tervek legfontosabb szempontja az órajelezés Alapvetı a szinkron tervezés Egy modulon/blokkon belül egy órajelet használunk Lassabb ütemezést órajel engedélyezésen keresztül valósítunk meg. Természetesen egy teljes terven belül lehet több órajel tartomány Ezek között a kommunikációt igen gondosan kell megtervezni
Globális órajel hálózatok A teljes felület negyedekre osztva Negyedenként 8-8 globális órajel hálózat Ezek globalizálhatók vagy függetlenül használhatók (fogyasztás!) Meghajtás csak globális órajel bufferekrıl MUX funciója is van, az órajel forrás átkapcsolható Órajel forrás lehet Közvetlenül külsı dedikált GCLK láb Órajel kezelı modul kimenet Belsı jel
Órajel hálózatok tulajdonságai A teljes felületen minimális késleltetés Globális szinkron paradigma Csak FF, RAM, vagy más elem órajel bemenetére csatlakoztatható nem használható, mint általános logikai jel A FF órajel bemenet meghajtható általános jelekrıl, de ez egy nem ajánlott tervezési stílus BUFGMUX átkapcsolás glitch mentesen két tetszıleges frekvenciájú aszinkron órajel között S vált, CKa ciklus végét megvárja, kimenet 0, ezután vár CKb alacsony értékére és átkapcsol rá
Órajel kezelı modul Általános célú órajel kezelı Szinkronizáló, Frekvencia osztó 2x szorzó Fázistoló / fázis hasító DLL frekvencia szintézer Tipikus alkalmazás
Órajel kezelı modul Fázis toló egység Beállítható késleltetés, 20 40 ps lépésben Belsı felépítés: Visszacsatolt szabályozó kör, ami kompenzálja a késleltetést
Órajel kezelı egység Belsı / külsı késleltetés kompenzáció Azonos késleltetéső komponensek beépítésével az egyes késleltetések kompenzálhatók A külsı és belsı órajel események szinkronizálhatóak
Órajel kezelı egység Órajel kondicionálás Szinkronizáció Frekvencia kétszerezés 4 fázisú órajelezés Különbözı leosztott késleltetés kompenzált CLKDIV frekvenciák: 1.5, 2, 2.5, 3,..8, 9,.. 10, 16 (CLK2x/K, ahol K = 3 32)
Órajel kezelı egység Frekvencia szintézer Lényegében egy frekvencia szorzó egység Fout = F_CKin * FX_Mult/FX_Div, ahol FX_Mult 2 32 FX_Div 1 32 A kimeneti CK_FX lehet fáziszárt vagy független a referenciától (CLK_FB használata) Frekvencia szintézis lehetséges független és fáziszárt üzemmódban A használható frekvencia tartomány eltérı Spartan 3E 5MHz 250MHz, ha szinkronizált (DLL is kell) Spartan 3E 200kHz 333MHz, ha nem kell szinkronizáció
Egyéb erıforrások Az alacsony árfekvéső elemekben Nagyobb mérető memória blokkok Dedikált szorzó modulok Prémium kategóriában Többféle memória modul DSP blokk teljes MAC struktúrával Beépített CPU mag/magok Nagysebességő soros interfészek
Speciális blokkok az FPGA-ban Blokk RAM elhelyezése
Blokk RAM 2 4 kbyte dual port szinkron RAM Mérettıl függı számban 4 36 db Adatméret rugalmasan választható 16kx1, 8kx2, 4kx4, nincs paritás 2kx(8+1), 1kx(16+2), 512x(32+4)
Használati módok Blokk RAM Igazi dual port, teljesen független CLKA és CLKB Kiváló elem független órajeltartományok közötti szinkronizációra, adatcserére Teljesen szinkron mőködés Írás: cím, adat és WE aktív, mővelet CLK élére Olvasás: cím, RE aktív, CLK élére az adat a kimeneti regiszterbe kerül
Blokk RAM Beállítások NO_CHANGE a kimeneten az írást követıen
Blokk RAM Beállítások READ_FIRST
Blokk RAM Beállítások WRITE_FIRST
Blokk RAM konfliktusok Természetesen, a dual portos mőködés miatt, egy cella írásakor, ugyanahhoz a cellához fordulva problémák adódnak Dual port módban egyidıben azonos címre írás eltérı adatokkal, az adat bizonytalan lesz (nincs prioritás) Aszinkron órajeleknél, írás és azonos idejő olvasás hozzáférés esetén az olvasás eredménye bizonytalan Az új belsı adat még nem stabil az olvasás idején WRITE_FIRST vagy NO_CHANGE esetén egyik port írásakor a másik kimeneti latch tartalma módosul
BlokkRAM használat Tetszıleges memória funkció Adatméret átalakítás átvitel elıtt PAR SER soros átvitel SER PAR, 32 bit 2 bit, 2 bit 32 bit A tartalom fele függetlenül használható, mint 2 db egy portos memória Ugyanígy fele akkora 72 bit széles memória is kialakítható Bufferek, késleltetı vonalak, videó sor tároló
Blokk RAM használat Általános logika, mint egy nagyobb LUT n bemenet, m kimenet REGISZTERES! Függvénytáblázat sin/cos, stb. Mikroprogramozott vezérlı programtár és következı utasítás logika Tulajdonságok: Inicializálható felkonfiguráláskor RESET csak a kimeneti regisztert befolyásolja
Blokk RAM használat Virtex eszközökben további tulajdonságok Széles adatformátum esetén bájtonkénti írás engedélyezés Beágyazott rendszerek megvalósítása során fontos lehet CPU buszrendszere kínálja / igényli Operációs rendszer meglévı forrása használ rövid változókat (újrafordítható,.)
BlokkRAM használat FIFO használat támogatása Közvetlen HW kiegészítı logika Rendszer elem sebessége nem csökken Üzemmódok: Normál FWFT az elsı adat átesik a kimenetre Jelzések: Full, AlmostFull Empty, AlmostEmpty
Szorzó A felhasználók régi vágya Teljes párhuzamos tömbszorzó 18x18 bites Illeszkedik a BlokkRAM 18 bites konfigurációjához A fizikai beépítés is támogatja az együttes használatot, pl. FIR szőrı 2 s komplemens, elıjeles mővelet 36 bites teljes eredmény P[35] redundáns bit
Szorzó Mőködési sebessége a nagy, illeszkedik a RAM-hoz Megırizhetı az opcionális pipe-line regiszterekkel Használható Önállóan Kaszkádosítva
Szorzó Kibıvítés nagyobb pontosságra, pl. 35 x 35 bit 4 db keresztszorzat, MSW x MSW LSW x LSW MSW x LSW LSW x MSW Elıjel kiterjesztés!
Összefoglalás FPGA belsı erıforrások Logikai blokk sokféle lehet SRAM-nál tipikus a LUT4 + DFF Kiegészítı tulajdonságok: Átvitelgyorsító Elosztott memória SRL16 Speciális modulok Órajel kezelı Szorzó BlokkRAM