Az igazolás Igazolás (verification) Igazolás (verification) Próbapad (vizsgálati összeállítás) Próbapad (vizsgálati összeállítás) Órajel előállítás Órajel előállítás A kimeneti jelek vizsgálata A kimeneti jelek vizsgálata Felhúzás/lehúzás (pull up/down) Felhúzás/lehúzás (pull up/down) Alaki ellenőrzők Alaki ellenőrzők
Igazolás kivitelezése A szimulátor által létrehozott bemeneti gerjesztő jelek használata A szimulátor által létrehozott bemeneti gerjesztő jelek használata hátrány: szimulátortól függő fejlettebb változat: rendszer szimuláció a környezet modellezésével hozza létre a gerjesztést a környezet modellezésével hozza létre a gerjesztést Vizsgálati VHDL modell létrehozása, amely bemeneti jeleket nyújt az áramköri modellhez Vizsgálati VHDL modell létrehozása, amely bemeneti jeleket nyújt az áramköri modellhez egyben ellenőrzi az áramkör kimeneti jeleit is előny: platform független hátrány: ebben is lehetnek hibák Megoldás: mindkét módszer alkalmazása Megoldás: mindkét módszer alkalmazása
Próbapad (vizsgálati összeállítás) Test bench Test bench Két részből áll: Két részből áll: egyik rész létrehozza az áramköri modellhez a bemeneti jeleket másik rész ellenőrzi az áramköri modell kimeneti jeleit Egyszerű példa: Egyszerű példa: in_model <=‘1’ after 5 ns, ‘0’ after 100 ns, ‘1’ after 200 ns, ‘0’ after 300 ns + 4 ns; clk <= not clk after 50 ns; Az in_model jel egy négyszögjelet nyújt, míg a clk 100 ns-os periódusidővel rezeg Az in_model jel egy négyszögjelet nyújt, míg a clk 100 ns-os periódusidővel rezeg
Órajel előállítás Ha a clk nem bit típusú, hanem pl. std_logic, akkor gondot jelent, hogy kezdőértékre állításnál az std_logic az ‘U’ értéket fogja kapni Ha a clk nem bit típusú, hanem pl. std_logic, akkor gondot jelent, hogy kezdőértékre állításnál az std_logic az ‘U’ értéket fogja kapni Az ‘U’ negáltja pedig szintén ‘U’. Az ‘U’ negáltja pedig szintén ‘U’. Ez a gond a clk-t ‘0’ kezdő értékre való beállításával oldható meg, a clk bejelentésében (declaration): Ez a gond a clk-t ‘0’ kezdő értékre való beállításával oldható meg, a clk bejelentésében (declaration): signal clk:std_logic:=‘0’;
A kimeneti jelek vizsgálata I. Ennek során az assert utasítást gyakran használják Ennek során az assert utasítást gyakran használják Az assert parancs akkor fut le, ha egy kifejezés hamissá válik Az assert parancs akkor fut le, ha egy kifejezés hamissá válik Példa: Példa: process (clk) begin assert now < 900 ns report “a szimulátor megállítása (legnagyobb szimulációs idő 900 ns)” report “a szimulátor megállítása (legnagyobb szimulációs idő 900 ns)” severity Failure; severity Failure; end process; A szimulátor megáll a 900 ns-t elérve A szimulátor megáll a 900 ns-t elérve
A kimeneti jelek vizsgálata II. Például, ha a kimeneti és a bemeneti jelek megegyeznek, a szimulátor megáll és egy hibakódot irat ki Például, ha a kimeneti és a bemeneti jelek megegyeznek, a szimulátor megáll és egy hibakódot irat ki Az alábbi példában egy if utasítás határozza meg, hogy az assert utasítás végrehajtásra kerüljön-e vagy sem: Az alábbi példában egy if utasítás határozza meg, hogy az assert utasítás végrehajtásra kerüljön-e vagy sem: process (out_model, in_model) begin if out_model=1 and in_model=1 then assert now < 900 ns assert now < 900 ns report “A ki- és bemeneti jelek ugyanakkor vannak ‘1’-ben” report “A ki- és bemeneti jelek ugyanakkor vannak ‘1’-ben” severity Error; severity Error; end process; Ebben az esetben az assert feltétel mindig hamis (false) Ebben az esetben az assert feltétel mindig hamis (false)
A kimeneti jelek vizsgálata III. Az assert utasítás használata nélkül pl. egy erre a célra kijelölt jelet használnak az ellenőrzés eredményének jelzésére: Az assert utasítás használata nélkül pl. egy erre a célra kijelölt jelet használnak az ellenőrzés eredményének jelzésére: process (out_model, in_model) begin if out_model=1 and in_model=1 then if out_model=1 and in_model=1 then test_ok<=‘0’; test_ok<=‘0’; end if; end if; end process; Ebben az esetben az assert feltétel mindig hamis (false) Ebben az esetben az assert feltétel mindig hamis (false)
Felhúzás/lehúzás (Pull up/down) I. Ha egy tervezés alatti összetevő bemeneti jelét fel- vagy le kell húzni egy IO cellában, a fel/lehúzás két módon írható le: Ha egy tervezés alatti összetevő bemeneti jelét fel- vagy le kell húzni egy IO cellában, a fel/lehúzás két módon írható le: VHDL összetevőben VHDL próbapadban Vegyük a következő összetevőt, amelynek kétirányú io kapcsát fel kell húzni: Vegyük a következő összetevőt, amelynek kétirányú io kapcsát fel kell húzni: library ieee; use ieee.std_logic_1164.all; entity my_comp is port(a,b: in std_logic; io: inout std_logic; q: out std_logic); end; architecture rtl of my_comp is begin q<=a and io; q<=a and io; io<=‘1’ when a=‘1’ and b=‘0’ else ‘Z’; io<=‘1’ when a=‘1’ and b=‘0’ else ‘Z’; end;
Felhúzás/lehúzás II. A felhúzás modellezésének módja a kétirányú jelhez ‘H’ (gyenge ‘1’) érték adás A felhúzás modellezésének módja a kétirányú jelhez ‘H’ (gyenge ‘1’) érték adás A jelnek std_logic típusúnak kell lennie, amely feloldott (resolved) adat típus A jelnek std_logic típusúnak kell lennie, amely feloldott (resolved) adat típus Ha az io jelet folyamatosan ‘H’-val meghajtják és néha más értékekkel (‘0’ vagy ‘1’) egyszerre, a feloldási függvény meghívódik Ha a kétirányú jelet a próbapad vagy belsőleg egy áramkör meghajtja ‘0’-ba, pl., a feloldási függvény a ‘H’ és a ‘0’ bemeneti argumentumokra ‘0’-t fog adni. Ez megfelel a valóságnak is Ha a felhúzás modelljét hozzáadjuk az összetevőhöz, akkor a következő építményt kapjuk: Ha a felhúzás modelljét hozzáadjuk az összetevőhöz, akkor a következő építményt kapjuk: architecture rtl of my_comp is begin io<=‘H’; q<=a and io; io<=‘1’ when a=‘1’ and b=‘0’ else ‘Z’; io<=‘H’; q<=a and io; io<=‘1’ when a=‘1’ and b=‘0’ else ‘Z’; end;
Felhúzás/lehúzás III. Ha csak kezdőértékre akarjuk állítani az io jelet az összetevőben, akkor a következő egyedet kell létrehozni: Ha csak kezdőértékre akarjuk állítani az io jelet az összetevőben, akkor a következő egyedet kell létrehozni: library ieee; use ieee.std_logic_1164.all; entity my_comp is port(a,b: in std_logic; io: inout std_logic:=‘H’; q: out std_logic); end; port(a,b: in std_logic; io: inout std_logic:=‘H’; q: out std_logic); end; Amint az io jelhez egy értéket adnak, a kezdeti érték “leválik” a jelről Amint az io jelhez egy értéket adnak, a kezdeti érték “leválik” a jelről
Fel/lehúzás a próbapaddal library ieee; use ieee.std_logic_1164.all; entity tb is port(io: inout std_logic; q: out std_logic); end; architecture bnc of tb is begin io<=‘H’;-- Felhúzás io<=‘H’;-- Felhúzás a<=‘0’, ‘1’ after 100 ns, ‘0’ after 50 ns; a<=‘0’, ‘1’ after 100 ns, ‘0’ after 50 ns; b<=‘0’, ‘1’ after 150 ns, ‘0’ after 50 ns; b<=‘0’, ‘1’ after 150 ns, ‘0’ after 50 ns; io<=‘0’, ‘Z’ after 100 ns, ‘0’ after 50 ns;-- io belsőleg meghajtott io<=‘0’, ‘Z’ after 100 ns, ‘0’ after 50 ns;-- io belsőleg meghajtott end;
Alaki ellenőrzők Formal Checkers Formal Checkers A productivity tool for automatic generation of simulation monitors from formal specifications A productivity tool for automatic generation of simulation monitors from formal specifications It greatly aids chip designers and verification engineers in the complex, costly task of verifying chip designs before submitting them to manufacturing It greatly aids chip designers and verification engineers in the complex, costly task of verifying chip designs before submitting them to manufacturing Alaki ellenőrzők users report a drastic improvement (up to 50%) in "testbench" development time Alaki ellenőrzők users report a drastic improvement (up to 50%) in "testbench" development time Alaki ellenőrzők takes properties written in a special specification language and automatically translates them into Checkers, which in turn are integrated into the chip simulation environment Alaki ellenőrzők takes properties written in a special specification language and automatically translates them into Checkers, which in turn are integrated into the chip simulation environment These Checkers monitor the simulation results on a cycle-by-cycle basis for violation of the properties Each Checker implements a state machine that enters and asserts an error state if the respective property fails to hold in a simulation run Használhatók fedettségi elemzésre is, that is, to create checkers that track the occurrences of events of interest during simulation Használhatók fedettségi elemzésre is, that is, to create checkers that track the occurrences of events of interest during simulation Az alaki ellenőrzők VHDL kódot is létrehozhatnak, and it supports the conventions of popular simulators such as Model Technology's ModelSim
Feladatköri igazolási eszközök
Alaki Igazolás (Formal Verification) Alaki igazolási eljárások Modell ellenőrzők (model checker) are most effective when checking a high-level design model against the original spec. Since model checkers insure that each property is checked under all possible scenarios, the designer can spend more time insuring that all aspects of the spec have been considered Egyenértékűségi ellenőrzők (equivalence checker) can compare two versions of a circuit to guarantee that they are logically identical—a common and formerly tedious post-synthesis task.
Modell ellenőrzés Ez ma az alaki igazolás legfejlettebb alkalmazása Szemben az egyenértékűségi ellenőrzéssel, amely arra korlátozódik, hogy a terv két változata teljesíti-e ugyanazokat a funkciókat, a modell ellenőrzés lehetővé teszi a tervezőnek a terv viselkedésének az előíráshozt képesti igazolását Emiatt a modell ellenőrzés a szintézis előtt a leghasznosabb módszer, mert itt a legkisebb a javítás költsége Pl.: a FormalCheck, a Bell Labs tervezésautomatizálási modell ellenőrzője egyenes sablon hozzáállású, amely utat mutat a felhasználóknak egy teljes kérdezés összerakásában A FormalCheck kérdezései nemcsak az igazolandó viselkedést írják elő, hanem azokat az elő- és utófeltételeket, melyeknek fenn kell állniuk Ha a tulajdonság bizonyítottan igaz, a tervező 100%-ig biztos lehet abban, hogy az óhajtott viselkedés az összes feltétel esetén fennáll. Mindez vektorok ezreinek megírása nélkül De mi van, ha a kérdezés kudarcot vall? A modell ellenőrzők megadják az összes szükséges adatot a hibás eset forrásának kinyomozására