MIKROELEKTRONIKA, VIEEA306 Tervezés FPGA-ra, Verilog, SystemC http://www.eet.bme.hu/~poppe/miel/hu/18-ICtervezes3.ppt
Tervezés FPGA-ra 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Standard cellás IC költségei Teljes Si technológia költségeit meg kell fizetni teljes maszk készlet legyártandó (NRE költség) Si-megmunkálás költségei teljes egészében jelentkeznek; költség arányos a felhasznált Si felülettel Tokozási költségek arányos az IC kivezetéseinek a számával függ a tokozás bonyolultságától Tesztelési költségek szelet szintű tesztelés – költsége jellemzően a szelet költségének részeként jelenik meg MPW szolgáltatók pl. tesztelt szeleteket adnak small volume production esetén végső tesztelés költsége – csökkenthető a tesztelhetőre tervezéssel, lásd később 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Másik példa: FPGA-s megvalósítás Alapgondolat: a gate array alapötletét megtartjuk, de az összeköttetéseket nem fotomaszkkal programozzuk – nem egy fémezésmintázat definiálja azokat (NRE költség erős csökkentése) alapelem: logic array block Helyette: az összeköttetési hálózat architektúrája is előre ki van alakítva, a kapcsolatokat programozzuk biztosíték kiégetéses technika – helyesebben az ún. antifuse eljárás (szakadásból kisellenállású összeköttetés) kapcsolatok tárolása SRAM-ban Előre kialakított I/O áramkörök Mai fejlett FPGA-k bonyolultabb blokkokat is tartalmaznak (RAM, DSP blokk,...) 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Példa az Altera-tól: Stratix 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Altera Stratix 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Pl.: Xilinx Virtex-5 65-nm CMOS technológia 12 rétegű fémezés 1.0V core feszültség 36-Kbit block RAM/FIFO 1.2 to 3.3V I/O Operation RocketIO GTP transceiver-ek 100 Mb/s .. 3.2 Gb/s PCI Express Endpoint blokkok 10/100/1000 Mb/s Ethernet On-chip hőmérséklet monitoring On-chip power supply monitoring 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
FPGA-s tervezés folyamata Rendszerszintű leírás Specifikáció SystemC-ben HW-SW co-design Rendszer szimuláció Rendszer szintű tervezés Magasszintű szintézis időzítési paraméterek Absztrakciós szint: Reprezentáció: Szimulátor: Viselkedési leírás Specifikáció VHDL-ben vagy Verilog-ban Funkcionális tesztelés Struktúrális/logikai leírás VHDL-ben vagy Verilog-ban Logikai szimuláció Mapping és layoutgenerálás Logikai tervezés Fizikai terv (layout) Időzítési adatok kinyerése Tranzisztor szintű tervezés A tervezési munka itt koncentrálódik Ez kimarad, az összeköttetéseket reprezentáló programkód készül 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Programozás – FPGAs tervezés Szoftver FPGA hardver Programozási nyelv Fordító Object file-ok Linker Futtatható állomány HDL Szintézis "Elhelyezés és huzalozás" Netlist Bitfile 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
VHDL mintapélda 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Verilog mintapélda 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Szintézis Netlist HDL RTL 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Hardver leíró nyelvek Áttekintés Verilog Röviden a SystemC-ről 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Hardver leíró nyelvek kialakulása A 80-as évekre olyan bonyolulttá váltak a digitális áramkörök, hogy tranzisztor, illetve kapu szinten már nem voltak áttekinthetőek Szükség volt egy olyan eszközre, amellyel gyorsan és hatékonyan lehet fejleszteni és tesztelni a terveket A megoldás programnyelvek formájában érkezett (Verilog, VHDL, ABEL, stb.) Ezek speciális nyelvek, amelyek fel vannak készítve a hardvertervezés igényeire 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A Verilog története A Gateway Design Automation cég fejlesztette ki 1984-ben (Verilog-XL szimulátor) Ezt a céget felvásárolta a Cadence Design Systems, majd 1990-ben nyilvánossá tette a nyelvet, hogy az elterjedjen; ennek hatására de facto szabvánnyá vált A szabványosítás 1995-ben történt meg az Open Verilog International (OVI – másnéven Accelera) szervezet kezelésében – ekkor vált de jure szabvánnyá 2001-ben bővült a szabvány: Verilog-2001 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A HDL-ek jellemzői Speciális programnyelvek Modellezik, ábrázolják, szimulálják a digitális hardvert Képesek a konkurrens működés leírására (párhuzamosság) Követik a jelek időbeli változását, ismerik a hardver-specifikus jelszinteket Biztosítják a különböző digitális modellek egyszerű megvalósítását (kombinációs, szinkron/aszinkron sorrendi hálózatok) Támogatják a moduláris tervezést 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A HDL-ek előnyei Támogatják a struktúrált tervezési módszereket Rugalmasan particionálhatóak a projektek A nyelvi leírás alapján a kapcsolási rajz generálható, ha szükséges Magas szintű absztrakció lehetőségét biztosítják Lehetővé teszik alternatívák egyszerű összehasonlítását Módosítások gyorsan végrehajthatók Javítják a hatékonyságot és minőséget nagyobb tervezői produktivitás Gyors prototípus – kihasználja a szintézis eszközöket 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Hierarchikus építkezés elemekből 1 Verilogban modulokat definiálunk Ezek be- és kimenetekkel rendelkező áramkörrészletek Pl: module AND(inA, inB, q); input inA, inB; output q; … endmodule A inA q inB 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Hierarchikus építkezés elemekből 2 A modulokból tetszőleges számú példányt hozhatunk létre – példányosítás: module Osszetett(in, out); input [3:0] in; output [1:0] out; AND a1(in[0], in[1], out[0]); AND a2(in[2], in[3], out[1]); endmodule 4 bites bemenet 2 bites kimenet Példányosítandó modul neve A példány egyedi neve Portkapcsolati lista Az egyes bitek kiválasztása az indexelő operátor ([ ]) segítségével történik 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Hierarchikus építkezés elemekből 3 module Osszetett module AND a1 in[0] inA out[0] q in[1] inB in [3:0] out [1:0] module AND a2 inA in[2] q out[1] in[3] inB 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Vezetékek a Verilogban Vezeték: legegyszerűbb áramköri elem (wire) Folyamatosan vezérelni kell, hiszen nincsen memóriája Ez kétféleképp tehető meg: Folyamatos értékadás (continuous assignment): A kombinációs hálózat egy modellje Az értékadás jobb oldalán az értékeket folyamatosan figyeljük és ha változás történik, azonnal frissítjük a kapu értékeket Egy regiszter kimenetére kötjük: A regiszterek megjegyzik a nekik adott értékeket (ld. később), így képesek folyamatosan értéket szolgáltatni a kimenetükre kötött vezetékeknek 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Folyamatos értékadás Az assign kulcsszó segítségével történik A korábbi AND kapu megvalósítása: module (inA, inB, q); input inA, inB; output q; assign q = inA & inB; endmodule; 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Vezetékek létrehozása Ha másként nem rendelkezünk, a modulok be- és kimenetei vezetékek lesznek A wire kulcsszó segítségével hozhatunk létre további vezetékeket Például egy egybites vezeték és egy nyolcbites busz: wire vezetek; wire [7:0] busz; 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Regiszterek Egybites memóriák Csak valamilyen esemény hatására kaphatnak értéket (pl. órajel felfutó éle) Az értéküket őrzik, amíg újat nem kapnak Létrehozásuk: a reg kulcsszó segítségével reg q; reg [3:0] counter; 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Esményvezérelt értékadás 1 Regisztereknek egy adott esemény hatására egy always blokkban tudunk értéket adni: wire clk; reg counter; always @(posedge clk) begin counter = counter + 1; end Az @ jel után következik az esemény A clk vezetéken történő felfutó él hatására lesz végrehajtva a blokk belseje Az utasítás blokkokat a begin és end kulcsszavak fogják közre 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Esményvezérelt értékadás 2 Az always blokkok fejrészében lévő feltétel(eke)t a rendszer folyamatosan figyeli és teljesülésükkor végrehajtja a bennük lévő utasításblokkot Egy alwayson belül csak regiszter típusú változónak adhatunk értéket (bizonyos esetekben egy ilyen regisztert a szintézer vezetékké is alakíthat) Az egy modulon belül lévő always blokkok egymással párhuzamosan futnak Létezik feltétel nélküli always blokk is, ami folyamatosan végrehajtódik 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Egy összetettebb példa: számláló module szamlalo(clk, reset, q); input clk, reset; output reg [7:0] q; always @(posedge clk) begin if (reset == 1) q = 0; else q = q + 1; end endmodule A kimenet egyben egy regiszter (8 bites) Szinkron reset van, hiszen a reset jel csak az órajel felfutó élére jut érvényre Fontos: különbség van logikai egyenlőségvizs-gálat és értékadás között! A feltételes elágazás (if-else) pontosan úgy működik, mint más nyelvekben (pl. C) 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Tesztelés A tesztelés is a nyelv eszközeivel történik Létrehozunk egy modult, aminek nincsenek portjai Ezen belül példányosítjuk a tesztelendő modulokat A modulokat vezetékekkel összekapcsoljuk A bemenetekhez definiálunk regisztereket, ezek segítségével állítjuk elő a tesztszekvenciát Egy nem ismétlődő tesztszekvenciát az initial blokk segítségével tudunk létrehozni A kimeneteken lévő vezetékek értékeit figyeljük 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Aperiodikus tesztjelek előállítása Az initial blokk végrehajtása a szimuláció elején kezdődik Ha a végére érünk, akkor befejeződik a szimuláció Csak regisztereknek adhatunk értéket benne reg in; initial begin in = 0; #5 in = 1; end Ez öt szimulációs időegységnyi késleltetést jelent Így lehet időzíteni a változásokat egy tesztszekven-ciában Ilyen késleltetés nem helyezhető el olyan modul-ban, amit szintetizálni szeretnénk 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Periodikus tesztjelek előállítása Periodikus tesztjeleket feltételrész nélküli always blokkokban állíthatunk elő; azonban kezdeti értéket kell adni egy initial blokkban Például egy két időegységnyi periódushosszú, 50%-os kitöltési tényezőjű négyszögjel (órajel): initial clk = 0; always begin #1 clk = ~clk; end Egy időegységenként invertálja a clk regiszter értékét 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Példa: a számláló tesztelése module teszt; reg clk, reset; wire [7:0] q; szamlalo sz1(clk, reset, q); initial begin clk = 0; reset = 0; #2 reset = 1; #2 reset = 0; end always #1 clk = ~clk; endmodule 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Speciális operátorok 1 Bit-eltoló operátorok (<<, >>): Úgy működnek, mint a C nyelvben Fel lehet őket használni demultiplexer készítésére: module demux(in, addr, out); input in; input [2:0] addr; output [7:0] out; assign out = in << addr; endmodule Az addr bemeneten lévő számnak megfelelő mértékben toljuk el a bementi bitet. 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Speciális operátorok 2 Bit-összefűző operátor ({}): Egy bitmintát lehet összeállítani egyes bitekből, vagy bitsorozatokból Vesszővel elválasztva kell megadni az egyes részeket Segítségével lehet például egy regiszter bitjeit körbefor-gatni: reg [7:0] rx; always begin #1 rx = {rx[6:0], rx[7]}; end Felülre helyezzük az alsó 7 bitet, utána pedig a legfelső bitet. 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
& Speciális operátorok 3 Redukciós operátorok: Sokbemenetű logikai kapu leírását egyszerűsítik A logikai operátorok egy operandusos változatát egy változó elé írva, annak összes bitjére hajtja végre a műveletet: wire [3:0] in; wire q; q = ∈ & in[0] q in[1] in[2] in[3] 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A Verilog-2001 új lehetőségei 1 Összevont port deklaráció: A nyelv korábbi verzióiban a portoknál külön utasítással kellett megadni, ha regisztert szerettünk volna egy kimenetre tenni A Verilog-2001-ben: module m(in, out); input [7:0] in; output reg [2:0] out; … endmodule 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A Verilog-2001 új lehetőségei 2 Port deklaráció a portlistában: A Verilog-2001-ben a portok már közvetlenül a portlistában is szerepelhetnek: module m(input [7:0] in, output reg [2:0] out); … endmodule 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A Verilog-2001 új lehetőségei 3 Skálázható modulok – hardvergenerálás 1: Probléma: Sokat kell példányosítani ugyanabból a modulból Egy modul sok, egymáshoz hasonló elemből épül fel Ezekben az esetekben nagyon sok gépelésre lenne szükség (időigényes, hibalehetőslegeket rejt magában) A VHDL-ben régóta létezett: paraméteres hardvergenerálás – ezt átvette a Verilog is A generate kulcsszó segítségével egy ciklusban, paraméteresen lehet létrehozni hardverelemeket 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A Verilog-2001 új lehetőségei 4 Skálázható modulok – hardvergenerálás 2: module myMod(input a, input b, output q); ... module generator(input [7:0] a, input [7:0] b, output [7:0] q); genvar i; generate for (i = 0; i < 8; i=i+1) begin : bigMod myMod m(a[i], b[i], q[i]); end endgenerate endmodule A ciklusváltozó 8 darabot példányosítunk a myMod modulból Az összetett modul neve bigMod lesz Az egyes példányokra az m névvel lehet hivatkozni. 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A Verilog-2001 új lehetőségei 5 Skálázható modulok – hardvergenerálás 3: Hivatkozás a példányosított elemekre: bigMod[3].m A példányok sorszáma (0..7) A példányokon belüli modulok nevei (jelen esetben minden példány csak egy modult tartalmazott (a myMod egy-egy példányát)) 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Verilog Irodalom Tanszéki jegyzetek: Jegyzetek: www.eet.bme.hu/~nagyg/verilog.pdf www.eet.bme.hu/~gaertner/Segedanyagok/LXveriFS.doc Jegyzetek: www.doulos.com/knowhow/verilog_designers_guide/ www.verilog.net/docs.html www.asic-world.com/verilog/index.htm www.ee.lsu.edu/v/refcard.pdf 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Egyéb irányzatok SOC SystemC 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Egyéb irányzatok – SoC SoC = System on Chip Egy teljes rendszer egy chip-es kialakítása digitális rész beágyazott szoftver szükséges analóg interfészek Homogén gyártástechnológia – pl. minden hardver komponens CMOS Magas absztrakciós szinten tervezzük Verilog/VHDL analóg részekhez ezek analóg bővítményei: Verilog-A, VHDL-A Jellemző az IP blokkok használata Hardver-szoftver együttes tervezés: pl. SystemC-vel Ezt 2005-ben szabványosították 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
“Intellectual Property” A Protocol Processor for Wireless 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Hardver-szoftver együttes tervezés SystemC – a HSCD (hardware-software co-design) jellegzetes eszköze 2005-től IEEE szabvány: IEEE std-1666-2005 Cél: HW-SW együttes tervezése szimulációja verifikációja Nem kell várni a beágyazott szoftver tervezésével addig, amíg elkészül a hardver time-to-market csökkenthető A tervezés magas absztrakciós szinten történhet 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Hardver-szoftver együttes tervezés ESL: Electronic System Level design HSCD A hardver-szoftver együttes tervezés legfontosabb célja, hogy magas absztrakciós szintű leírással könnyebben átlátható legyen a terv, hibákat gyorsabban meg lehessen találni, optimalizálni lehessen a hardver/szoftver particionálást, csökkenjen a piacra kerülés átfutási ideje, és hogy csökkenjenek a fejlesztési költségek. Ennek egyre terjedő eszköze a SystemC Egy másik variáció: ANSI C használata, pl. Mentor Graphics CatapultC 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A SystemC A SystemC nyelv egy C++ könyvtár és metódus, ami igen hatékonyan használható szoftveres algoritmusok készítésére, hardver architektúrák modellezésére, valamint SoC és rendszer szintű modellek interfészének megvalósítására. A SystemC és a hagyományos C++ fejlesztői környezet használatával rendszer szintű modellek írhatók le, ezek azután gyorsan szimulálhatók és optimalizálhatók. A rendszert leíró modell egy C++ program, ami futtatva ugyanazt a viselkedést produkálja, amit maga a rendszer 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
A SystemC komponensei Modul: egy container, ami más modulokat és process-eket foglalhat magában Process: folyamat – egy adott funkcionalitás leírására szolgál Signal: jel – támogatott a 2 (0,1) és 4 (0,1,X,Z) értékű logika is Port: jelek csatlakozó pontja Adattípusok – sokféle típus, különféle szempontok szerint használhatók. Vigyázat – szintetizálhatóság!! Órajel: az idő modellezésére szolgáló spec. jel Szimulációs kernel – lehetővé teszi a gyors (compiled kódú) szimulációt Jelalak-figyelés: VCD (Value Change Dump), WIF (Waveform Intermediate Format) és ISDB (Integrated Signal Data Base) formátumú jelalak-file-ok támogatása 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
SystemC példa Közlekedési lámpavezérlő (BAH csomópont) 9 autós, 7 gyalogos lámpa 90 sec-os ciklus 3-féle egység számláló autós lámpa vez. gyalogos lámpa vez. Balotai Péter: Diploma dolgozat, 2007 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Közlekedési lámpa-vezérlő Balotai Péter: Diploma dolgozat, 2007 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008
Közlekedési lámpa-vezérlő // count.h #include "systemc.h" SC_MODULE(count) { //input ports sc_in<bool> clk; sc_in<bool> en; //output ports sc_out<sc_uint<7> > ido; int countval; void countproc(); SC_CTOR(count) SC_METHOD(countproc); countval = 89; sensitive_pos << clk; sensitive << en; } }; //count.cpp #include "count.h" void count::countproc() { if (en == 1) if (countval < 89) countval++; } else countval = 0; } else countval = 0x7f; ido = countval; 2009-11-24 IC tervezés 3 © Poppe András – Nagy Gergely, BME-EET 2008