Juhul, kui simulatsioonide tulemused ei klapi, tuleks proovida vea süstemaatilist otsimist. Aluseks on eeldus, et minimeerimine ja teisendused toimuvad (esialgse) DNK peal, kus implikandi aktiveerumisel on selle väärtuseks '1'. Viisin selle sama näite VHDL koodi sisse vea (vt. koodi), mille tulemusena väljundid m ja n on vigaste väärtustega osadel sisendkombinatsioonidel (punased kriipsud simulatsiooni tulemusel).
Enne vea otsimisega alustamist tuleks kokku koondada lähteülesande ja minimeerimise tulemuse tõeväärtustabelid ning minimeerimisel leitud implikandid. Siis on hea võrrelda, kuidas implikandid aktiveeruvad (või mitte). Näidislahenduse omad on alljärgnevas tabelis.
ülesanne | espresso | implikandid |
0000 1-00 0001 01-0 0010 11-1 0011 0-01 0100 1110 0101 1010 0110 -111 0111 01-0 1000 0011 1001 -10- 1010 -0-1 1011 1001 1100 11-0 1101 0-10 1110 -000 1111 1011 |
0000 1000 0001 0100 0010 1111 0011 0101 0100 1110 0101 1010 0110 1111 0111 0110 1000 0011 1001 0100 1010 0011 1011 1001 1100 1100 1101 0010 1110 0000 1111 1011 |
0--0 1000 : t0 0-10 0011 : t1 0-1- 0100 : t2 -001 0100 : t3 1-11 1001 : t4 010- 1000 : t5 -100 1110 : t6 -1-1 0010 : t7 10-0 0011 : t8 -01- 0001 : t9 |
Selle tabeli ja simulatsioonitulemuse alusel on võimalik välja kirjutada, millistel sisendkombinatsioonidel väljundid aktiveeruvad valesti (vt. alljärgnevat tabelit). Tähistus - "X" on '1', kuid peab olema '0'; "*" on '0', peab olema '1'. Samuti on tabelisse lisatud, millised implikandid peaksid vigaste väljundite korral aktiveeruma.
abcd | peab | on | vead | aktiveeruvad implikandid |
0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 |
1000 0100 1111 0101 1110 1010 1111 0110 0011 0100 0011 1001 1100 0010 0000 1011 |
1011 0100 1101 0101 1111 1010 1100 0110 0000 0100 0001 1001 1101 0010 0011 1011 |
..XX .... ..*. .... ...X .... ..** .... ..** .... ..*. .... ...X .... ..XX .... |
0--0 1000 0--0 1000 | 0-10 0011 | 0-1- 0100 | -01- 0001 0--0 1000 | 010- 1000 | -100 1110 0--0 1000 | 0-10 0011 | 0-1- 0100 10-0 0011 10-0 0011 | -01- 0001 -100 1110 mitte ükski ei tohiks aktiveeruda! |
Sisendkombinatsioonid "0110" ja "1000" on ainsad, mis ei aktiveeri mitte kumbagi vigast väljundit(1). Implikandid, mis peaksid olema '1'-d vastavatel sisendkombinatisoonidel ja mõjutavad ainult m ja n, on "0-10" (t1) ja "10-0" (t8).
Põhimõtteliselt on võimalik ka skeemi analüüsides leida, millised implikandid aktiveeruvad valesti. See võib aga osutuda liiga keeruliseks, sest teisenduste käigus teisenevad ka implikandid. Antud näites on m ja n ühisteks implikantideks t1 ja t8 (espresso tulemus). Optimeerimata skeemis(2) on ühiseks implikandiks ainult t1t8 (optimeeritud skeemis t1t8i, st. inverteeritult). Vrdl. seda implikantide aktiveerumise tulemusega, mis samuti viitab implikantidele t1 ja t8 (3). Kõik osafunktsioonid, mis mõjutavad t1t8-t või sõltuvad sellest, on järgmised:
t2 = ai & c t53 = a & bi t54 = t2 + t53 t1t8 = di & t54 m = t1t8 + t6 + t7 n = t1t8 + t4 + t9
Edasi tuleks leida vastavate osafunktsioonide väärtused nende kahe kahtlase sisendkombinatsiooni korral ja võrrelda eeldatavaid väärtusi tegelikega. Kuna lõpptulemuses on osad neist signaalidest inverteeritult (t2i, t53i ja t1t8i), siis peab ka sellega arvestama. Simulatsiooni tulemustel on vastavad kohad tähistatud värvliste joonekesega (sinine õige ja oranž vale väärtus).
Sisendkombinatsioon "0110" (a'b c d') | Sisendkombinatsioon "1000" (a b'c'd') |
t2 = ai & c == '1' --> t2i == '0' -- on '0' - OK t53 = a & bi == '0' --> t53i == '1' -- on '1' - OK t54 = t2 + t53 == '1' -- on '0' - ?! t1t8 = di & t54 == '1' --> t1t8i == '0' -- on '1' - ?! |
t2 = ai & c == '0' --> t2i == '1' -- on '1' - OK t53 = a & bi == '1' --> t53i == '0' -- on '0' - OK t54 = t2 + t53 == '1' -- on '0' - ?! t1t8 = di & t54 == '1' --> t1t8i == '0' -- on '1' - ?! |
Mõlemad variandid viitavad sellele, et midagi on valesti t54-ga. Tõepoolest, t54 peaks olema pärast DeMorgan'i teisendust "t54 <= not (t2i & t53i);" ja mitte "t54 <= t2i & t53i;", nagu on vigases kirjelduses (vrdl. õiget ja vigast koodi).
Mis puutub ülejäänud sisendkombinatsioonidesse, kus väljundid m ja n on valede väärtustega, siis ka neil juhtudel on t54 väärtus vale. Osadel juhtudel aga maskeerivad teised signaalid t54 väärtuse ja selle pärast on väljundid isegi õiged.
(1) Kuna aluseks on DNK, mille puhul aktiivsed implikandid on 1-d, siis on ka loomulik otsida neid kohti, kus mõlemad väljundid ei ole 1-d.
(2) Seda eeldusel, et ühised alamavaldised on korrektsed. Kui siit viga vaja ei tule, tuleks espresso tulemusest alustada (nt. implikante eraldi välja tuues).
(3) Viga sisse viies oletasin tegelikult, et viga hakkab hargnema implikantide t4 ja t5 kandis, sest "rikkusin" ära ju t54. Olin isegi pisut üllatunud, kui kaks osaliselt erinevat lähenemist viitasid mõlemad t1-le ja t8-le.