Předchozí díly [1, 2] byly věnovány základům simulace řízené událostmi a bylo prezentováno několik užitečných triků a nebezpečných úskalí. Tento text je zaměřen na problematiku simulace na hradlové úrovni. Čtenář bude seznámen s tím, co je simulace na hradlové úrovni, s jejími výhodami a nevýhodami a s důvody pro její provádění. O hradlové simulaci je třeba hovořit v kontextu celého procesu návrhu číslicového obvodu (design flow), a proto bude čtenář seznámen i s dalšími nástroji, které mohou potřebu simulací na hradlové úrovni omezit (ovšem ne nahradit). Text je, přestože se hovoří o návrhových nástrojích pro FPGA obvody, vesměs nezávislý na návrhové platformě a poznatky jsou tak aplikovatelné jak při návrhu číslicových systémů na FPGA platformě, tak i při návrhu plně zákaznických číslicových obvodů (ASIC, Application Specific Integrated Circuits).
V předchozích dílech jsme hovořili o RTL úrovni. Na té simulujeme abstraktní popis obvodu bez modelování skutečného zpoždění na jednotlivých obvodových prvcích a spojích mezi nimi. Oproti tomu při simulaci na hradlové úrovni (back-annotated gate level simulation) je v simulátoru modelováno skutečné za-pojení obvodových prvků v číslicovém obvodu včetně zpoždění jak na těchto prvcích, tak i na jejich vzájemných spojích. Navíc simulátor automaticky kontroluje dodržení základních parametrů časových průběhů signálů na vstupech jednotlivých obvodových prvků, tedy například dodržení předstihu a přesahu [3, 4] a doby zotavení po resetu [5] u klopných obvodů.
Simulace na hradlové úrovni představuje zajímavý kompromis mezi simulací na RTL úrovni a simulací na tranzistorové úrovni. Při zachování jednoduchosti nastavení a práce se simulátorem skoro jako na RTL úrovni návrhář dostává možnost simulovat reálné chování obvodu téměř na tranzistorové úrovni. Oproti tranzistorové úrovni navíc získáváme příjemný bonus kontroly dodržení časových parametrů obvodových prvků a významně vyšší rychlost simulace. Na druhou stranu hradlová simulace za simulací na RTL úrovni zaostává v rychlosti a tranzistorová simulace zase věrněji modeluje fyzikální realitu.
Již na RTL úrovni lze nalézt řadu problémů v návrhu pomocí tzv. statických technik kontroly návrhu. Nástroje pro statickou kontrolu mají výhodu v tom, že nevyžadují žádné stimuly a neprovádějí simulaci navrhovaného obvodu (proto statická kontrola vs. dynamická kontrola pomocí simulace). Jejich nastavení je také relativně rychlé. Nevýhodou nicméně je, že nezachytí problémy, které vznikají z dynamického běhu navrženého bloku, nemohou tedy zcela nahradit simulace; na druhou stranu nejsou spoutány omezeními pramenícími z neúplného pokrytí obvodu simulacemi.
LINT byl původně aplikací pro statickou analýzu kódu napsaného v C [7]; umožňoval odhalit některé běžné programátorské chyby, které nejsou odhalitelné kompilací zdrojového kódu a vedly by ke zhroucení aplikace později za jejího běhu. Ladění aplikace je časově náročné, a tak je praktické některé typy problémů odchytit dopředu statickou kontrolou. Nejjednodušší kontrolou tohoto typu je například kompilace v simulátoru ModelSim s přepínačem – check_synthesis [2] nebo analýza syntézního logu a následný rozbor varování hlášených ze syntezátoru.
Pomocí simulace na hradlové úrovni není možné vyzkoušet všechny myslitelné cesty v navrhovaném obvodu; navíc také často potřebujeme vědět, na jaké maximální hodinové frekvenci je obvod ještě schopen pracovat. A ani když simulací objevíme problém s funkcí obvodu způsobený příliš pomalou cestou v obvodu, nemusí být lehké zjistit, která cesta obvodem je příliš pomalá – a už vůbec ne, zda je to jen jediný lokalizovaný problém či zda je podobných špatných cest více. Přitom cestou obvodem zde rozumíme kombinační cestu obvodem, která typicky začíná hodinovým vstupem klopného obvodu nebo primárním vstupem (vstupem na rozhraní navrhovaného obvodu a vnějšího světa), prochází přes kombinační obvody mezi registry a končí na vstupu D klopného obvodu či na primárním výstupu obvodu.
Proto je návrháři dostupný nástroj nazvaný statický časový analyzátor (Static Timing Analyser, STA). Statický časový analyzátor pracuje tak, že nalezne všechny možné cesty obvodem a posléze spočítá odhad jejich zpoždění pomocí zjednodušených modelů zpoždění. Pak porovná vypočtené odhady zpoždění s nejkratší požadovanou periodou systémových hodin a poskytne informace o cestách obvodem, které jsou příliš pomalé.
Pokud by celý proces fungoval, jak je popsáno, byl by statický časový analyzátor značně pesimistický; všechny nalezené cesty obvodem totiž obsahují jak cesty, které jsou skutečně využívány, tak cesty, které v obvodě nejsou nikdy aktivovány (false paths, falešné cesty), a konečně cesty, po kterých se signál může šířit více hodinových cyklů (multicycle paths, vícecyklové cesty). Proto návrhář musí spolu s vlastním návrhem předložit také tzv. constraints. Ty představují model časování číslicového systému, jsou v nich definovány různé typy cest, které je třeba ignorovat, a dále například hodinové frekvence jednotlivých zdrojů. Například pro vývojové prostředí firmy Xilinx lze o constraints a jejich psaní nalézt více v dokumentu [8].
Velká výhoda statické časové analýzy tkví v tom, že není třeba simulace a že jsou analyzovány všechny cesty v obvodu. Na druhou stranu je primárně určena pro synchronní systémy. Jako taková nemusí poskytovat vyčerpávající analýzu návrhů s více asynchronními hodinovými doménami. Dále nedokáže identifikovat logicky chybně (ale syntakticky správně) napsané constraints; přitom statická časová analýza je jen tak dobrá, jak dobře jsou napsány constraints.
Úpravy verifikačního prostředí i testů pro provádění simulace na hradlové úrovni jsou časově náročné, proto se můžeme ptát, zda takové simulace návrhu vůbec dělat a co nám to přinese? Aby bylo možné tuto otázku zodpovědět, nejprve shrneme výhody simulace na hradlové úrovni (detailněji viz například [9, 10, 11]):
Simulace na hradlové úrovni je účinný a mocný nástroj, který je nicméně třeba používat s ohledem na nároky kladené jak na simulační čas, tak i na čas návrhářů. U běžného projektu může být připravených řádově několik set testů, které jsou pouštěny na RTL úrovni. Ne všechny je ovšem nezbytné (a někdy ani možné) pouštět i na hradlové úrovni. Obecně se literatura shoduje v potřebě pustit takovou skupinu testů, aby byl návrh uspokojivě pokryt jak po funkční, tak i po strukturní stránce. Dále množství pouštěných testů závisí na tom, jak velkou důvěru vkládáme ve výsledky statické časové analýzy (tedy také na tom, jak důkladné jsou constraints) a jak moc je navrhovaný systém synchronní. U obvodu s jednou hodinovou doménou bude situace jednodušší než u návrhu s desítkami hodinových domén a řadou vnějších rozhraní asynchronních vůči jádru číslicového systému.
Příspěvek shrnul základní vlastnosti, výhody a nevýhody simulace na hradlové úrovni. Simulace byla zasazena do kontextu návrhového cyklu a čtenář byl seznámen i s některými dalšími nástroji, které mohou potřebu simulací na hradlové úrovni zredukovat (ovšem ne zcela nahradit). Problematika simulací na hradlové úrovni je velice široká, text se díky svému omezenému rozsahu omezil jen na nejdůležitější body (v textu nebyly například zmíněny nástroje pro formální verifikaci ekvivalence, viz např. [14]). Čtenář je tak nabádán ke studiu další literatury, začít lze například s prameny uvedenými v použité literatuře.
[1] ŠŤASTNÝ, Jakub. Simulace číslicových obvodů: úvod. DPS Elektronika od A do Z, leden/únor 2015, s. 23–27
[2] ŠŤASTNÝ, Jakub. Simulace číslicových obvodů: triky i úskalí simulace. DPS Elektronika od A do Z, březen/duben 2015, s. 20–23
[3] PINKER, Jiří; POUPA, Martin. Číslicové systémy a jazyk VHDL. Praha: BEN-technická literatura, 2006. s. 349
[4] ŠŤASTNÝ, Jakub. FPGA prakticky. Praha: BEN-technická literatura, 2011. s. 200
[5] CUMMINGS, Clifford E.; MILLS, Don; GOLSON, Steve. Asynchronous & Synchronous Reset Design Techniques - Part Deux. In: SNUG 2003 Boston. [vid. 18. února 2015] Dostupné z http://www.sunburst-design.com/papers/CummingsSNUG-2003Boston_Resets.pdf
[6] IEEE 1497-2001 IEEE Standard for Standard Delay Format (SDF) for the Electronic Design Process [vid. 15. března 2015] Dostupné z http://ieeexplore.ieee.org/xpl/articleDetails.jsp?arnumber=972829
[7] Lint (software) In: Wikipedie: otevřená encyklopedie [online]. Wikimedia Foundation, 2003. Stránka naposledy edit. 3. 2. 2015 v 1:22. [vid. 15. března 2015]. Anglická verze. Dostupné z: http://en.wikipedia.org/wiki/Lint_%28software%29
[8] XILINX. Constraints Guide, dokumentace k návrhovému prostředí ISE12.2
[9] CADENCE. Gate-Level Simulation Methodology [online] [vid. 15. března 2015] Dostupné z http://www.cadence.com/rl/Resources/white_papers/Gate_Level_Simulation_WP.pdf
[10] Gate Level Simulations: A Necessary Evil - Part 1,2, and 3 [online] [vid. 15. března 2015] Dostupné z http://whatisverification.blogspot.cz/2011/06/gate-level-simulations-necessary-evil.html
[11] KHANDELWAL, A.; GAUR, A.; MAHAJAN, D. Gate level simulations: verification flow and challenges. EDN network [online]. 5. března 2014 [vid. 15. března 2015]. Dostupné z http://www.edn.com/design/integrated-circuit-design/4429282/Gate-level-simulations-verification-flow-and-challenges.
[12] CHANDRASAKAN, Anantha P.; SHENG, Samuel; BRODERSEN, Robert W. Low-Power CMOS Digital Design. IEEE Journal of Solid-State Circuits, Vol. 27, No. 4, April 1992.
[13] NOVÁK, O.; GRAMATOVÁ, E.; UBAR, R. a kol. Handbook of testing electronic systems. Praha: Nakladatelství ČVUT, srpen 2005, 395 stran, ISBN 80-01-03318-X.
[14] Formal Equivalence Checking In: Wikipedie: otevřená encyklopedie [online]. Wikimedia Foundation, 2003. Stránka naposledy edit. 18. 2. 2015 v 8:34. [vid. 13. března 2015]. Anglická verze. Dostupné z: http://en.wikipedia.org/wiki/Formal_equivalence_checking