Sunteți pe pagina 1din 56

Diagnoza 169

IV. SIMULAREA LOGICA

În prima parte a acestui capitol vor fi puse în evidenta diferite


aspecte ale folosirii simularii logice ca un instrument pentru design-ul
testarii, examinând atît foloasele cît si limitarile sale. Apoi prezentam
principalele tipuri de simulatoare, compilate si conduse de
eveniment(event-driven).Analizam mai multe probleme care afecteaza
acuratetea si performantele simulatoarelor, ca de exemplu tratarea
valorilor logice necunoscute, modelarea întârzierilor, detectarea
hazardului, controlul oscilatiei si valorile necesare pentru logica ternara si
circuite MOS. Discutam în amanunt tehnici pentru evaluarea elementelor
si algoritmi de simulare event-driven, pe nivel de poarta . Ultima sectiune
descrie componentele hardware pentru scopul special al simularii.

1. Introducere
Simularea logica foloseste modelul sistemului proiectat. Figura B_IV-1
prezinta o vedere schematica a procesului de simulare. Programul de
simulare proceseaza o reprezentare a stimulilor de intrare si determina
evolutia în timp a semnalelor modelului.

Stimuli Program
si de Rezultate
control simulare

Figura B_IV-1 Model


Simulare intern

Verificarea unei proiectari logice încearca sa certifice ca proiectarea


asigura comportamentul specificat, care include atît functionarea cît si
170 Fiabilitate si Diagnoza

sincronizarea. Verificarea este facuta prin compararea rezultatelor


obtinute prin simulare cu rezultatele asteptate furnizate de specificatie. În
plus, simularea logica poate fi folosita pentru a verifica daca functionarea
sistemului este:
-corect independenta de starea initiala(de conectare)
-insensibila la anumite întârzieri ale componentelor
-lipsita de rate critice, oscilatii, conditii de intrare "ilegale" si stari de
oscilatie
Alte aplicatii ale simularii in procesul de proiectare sunt:
- evaluarea alternativelor de proiectare, pentru a îmbunatati relatiile
performanta/pret
-evaluarea modificarilor propuse ale unui proiect existent, pentru a
verifica daca acestea vor produce schimbarea dorita fara efecte secundare
nedorite
-documentarea(generarea diagramelor de timp etc.)
Traditional, proiectantii au folost un prototip pentru verificarea unui nou
proiect. Principalul avantaj al unui prototip este ca poate rula la viteza de
operare, dar construirea unui prototip este costisitoare si necesita timp.
Prototipurile construite cu componente discrete nu au acuratete ca modele
ale circuitelor integrate complexe. Simularea înlocuieste prototipul cu un
model software care este analizat si modificat cu usurinta. Verificarea
proiectelor bazata pe simulare beneficiaza de trasaturi aditionale, care nu
sunt disponibile unui proces bazat pe prototip, precum:
-conditii de verificare a erorii(conflicte de magistrala)
-abilitatea de a modifica întârzierile în model pentru verificarea
conditiilor de sincronizare în cel mai nefavorabil caz
-verificarea valorilor specificate de utilizator pe durata simularii
-începerea circuitului simulat în orice stare dorita
-controlul precis al evenimentelor asincrone(întreruperi)
-capacitatea de a asigura un mediu automat de testare pentru circuitul
simulat, prin cuplarea cu un model RTL care conduce
si/sau observa circuitul pe durata simularii
În mod interesant, simularea a fost folosita în timpul depanarii
prototipurilor unui nou sistem. Proiectantii au considerat ca trasarea unor
probleme pe prototipul simulat a fost mai usoara decât trasarea lor pe
prototipul hardware. Desi simularea ruleaza mult mai încet decât
hardware-ul, depanarea folosind simularea asigura utilizatorului
capacitatea de a suspenda simularea la aparitia conditiilor specificate de
Diagnoza 171

utilizator si de a afisa valoarea oricarui semnal, inclusiv a liniilor care nu


pot fi observate direct în hardware. O asemenea caracteristica devine si
mai valoroasa în proiectele bazate pe simularea logica ,unde numarul
semnalelor care nu sunt direct observabile este mare.
Software-ul de depanare sau microcodul de rulat pe un suport hardware
înca în dezvoltare poate fi început folosind un model de simulare înainte
de a fi disponibil un prototip.
Alt domeniu de folosire a simularii logice este pregatirea bazei de date
pentru testarea condusa de sonde, constînd în valorile asteptate ale liniilor
accesibile pentru sondare.

2.Probleme în verificarea proiectarii bazata pe simulare

Sunt trei probleme înlantuite în testarea verificarii proiectarii bazata pe


simulare:
-cum se genereaza stimulii de intrare(generarea testului)
-cum se poate sti daca rezultatele sunt corecte
-cît de "buni" sunt stimulii de intrare aplicati, si cît de "complet" este
experimentul de testare(evaluarea testului)
Stimulii de intrare sunt de obicei organizati ca o secventa de cazuri de
test, unde un caz al unui test intentioneaza sa verifice un anumit aspect al
comportarii modelului. Rezultatele sunt considerate corecte cînd se
potrivesc cu rezultatele asteptate, care sunt
asigurate de specificatia proiectului. Initial, specificarea consta într-un
model de informare(orala sau scrisa) despre comportamentul dorit al
sistemului. În timpul unui proces de proiectare top-down, modelul formal
de nivel cel mai înalt(de obicei un model RTL) este verificat împotriva
modelului initial neoficial. Dupa aceasta, orice model de nivel mai înalt
defineste specificatia pentru implementarea sa la nivelul imediat inferior.
Verificarea daca implementarea satisface specificatia este redusa la
aplicarea acelorasi cazuri de test celor doua modele si folosirea
rezultatelor obtinute pentru nivelul mai înalt ca rezultate asteptate pentru
nivelul mai jos.
Este importanta întelegerea diferentei între generarea testului
pentru verificarea proiectarii, unde obiectivul este gasirea erorilor de
proiectare, si generarea testului pentru detectarea defectelor fizice într-un
sistem manufacturat. Cele mai multe tipuri de defecte fizice pot fi
172 Fiabilitate si Diagnoza

reprezentate de defecte logice, ale caror efecte în comportarea sistemului


sunt bine definite. Bazat pe diferenta între comportamentul în prezenta
unui defect si comportamentul fara defect se poate obtine un test pentru
acel defect. Multe modele logice de defect permit posibilelor defecte sa
fie enumerate. Existenta unui set de defecte enumerabile ne permite sa
determinam calitatea unui test si numarul total de defecte din model.
Prin contrast, spatiul erorilor de proiectare nu este bine definit si setul
erorilor de proiectare nu este enumerabil. În consecinta, este imposibila
dezvoltarea algoritmilor de generare a testelor sau masuri riguroase de
calitate pentru testele de verificare a proiectelor.
Desi setul erorilor de proiectare nu este enumerabil, experienta
arata ca cele mai multe erori de proiectare sunt legate de secventele de
transferuri de date si transformari decât de operatiile în sine. Motivul este
ca operatiile cu date(aritmetice sau logice)sunt mai obisnuite si "locale”,
în timp ce controlul si sincronizarea lor într-un sistem complex poate
depinde de alte operatii ce apar în mod concurent. De aceea strategia
uzuala în verificarea proiectarii este sublinierea exercitarii controlului. De
exemplu, cazurile de test minimal pentru un set de instructiuni al unui
procesor constau în executarea fiecarei instructiuni din repertoriu. În plus,
proiectantul testului trebuie sa ia în considerare secventele de instructiuni
care sunt relevante pentru operatiile procesorului, interactiunile între
aceste secvente si întreruperi s.a.m.d..
Verificarea proiectarii prin simulare are câteva limitari. Cum nu
exista proceduri formale de generare a testelor, producerea stimulilor este
în general un proces euristic, care se bazeaza mai ales pe intuitia
proiectantului si întelegerea sistemului testat. Un sistem care trece testul
este corect doar cu respectarea aplicarii cazurilor testului, si de aici doar o
corectitudine partiala poate fi demonstrata. Mai mult, complexitatea
testelor nu poate fi riguros determinata.
În ciuda acestor limitari, simularea este o tehnica efectiva de
verificare a proiectarii si experienta arata ca ne ajuta sa descoperim multe
erori de proiectare devreme în acest proces.
Pentru circuitele LSI/VLSI, unde erorile de proiectare sunt
costisitoare si prototipurile impractice, simularea logica este un ajutor
nepretuit.
Diagnoza 173

3.Tipuri de simulare

Simulatoarele pot fi clasificate dupa tipul modelului intern pe care îl


proceseaza. Un simulator care executa modelul unui cod compilat este
numit simulator condus de compilator, sau simulator compilat.
Codul compilat este generat dintr-un model RTL, dintr-un model
functional scris într-un limbaj conventional de programare, sau dintr-un
model structural. Un simulator care interpreteaza un model bazat pe
structuri de date este zis condus de tabele. Structurile de date sunt
produse de un model RTL sau un model structural. Interpretarea
modelului este controlata de stimulii aplicati, si rezulta într-o serie de
apeluri ale rutinelor implementând functiile primitive(pentru un model
RTL) sau componentele structurale(model structural).
Sa consideram un circuit în functionare si sa privim semnalele care îsi
modifica valoarea la momente de timp arbitrare. Acestea sunt numite
semnale active. Raportul între numarul semnalelor active si numarul total
de semnale din circuit este numit activitate. În general activitatea unui
circuit este între 1 si 5 %.Acest fapt formeaza baza simularii dirijate de
activitate, care simuleaza doar partea activa a circuitului.
Un eveniment reprezinta o modificare în valoarea unei linii de semnal.
Cînd un astfel de eveniment apare în linia i, elementele având intrarea i
sunt zise activate. Procesul determinarii valorii iesirii unui element este
numit evaluare. Simularea dirijata de activitate evalueaza numai
elementele activate. Unele elemente activate îsi pot schimba pe rând
valorile lor de iesire, deci genereaza noi evenimente. Întrucît activitatea
este cauzata de evenimente, simularea dirijata de activitate este numita si
simulare condusa de eveniment. Pentru a propaga evenimentul de-a
lungul interconexiunilor dintre elemente, un simulator condus de
eveniment are nevoie de un model structural al cicuitului. De aici
simularea condusa de eveniment este de obicei condusa de tabele.
Simularea compilata este orientata în principal spre verificarea
functionala si nu se ocupa cu sincronizarea circuitului. Aceasta o face
aplicabila mai ales circuitelor sincrone, pentru care sincronizarea poate fi
verificata separat. Prin contrast, trecerea timpului este elementul central
în simularea condusa de eveniment, care poate lucra cu modele cu o buna
sicronizare. Deci simularea condusa de eveniment este mai generala ca
scop, fiind aplicabila si circuitelor asincrone.
174 Fiabilitate si Diagnoza

Simularea condusa de eveniment poate procesa intrari în timp real, ai


caror timpi de modificare sunt independenti de activitatea în circuitul
simulat. Aceasta este o trasatura importanta pentru testarea verificarii
proiectarii, întrucît permite o simulare corecta a evenimentelor
nesincronizate, ca de exemplu întreruperi si cereri concurente pentru
folosirea unei magistrale. Simularea compilata permite modificarea
intrarilor doar atunci cînd circuitul este stabil. Aceasta este potrivita cînd
stimulii de intrare sunt vectori aplicati la o rata de timp fixa. Observam ca
intrarile în timp real includ vectori cu o rata fixa ca un caz particular.
Adesea, cele doua tipuri de simulare sunt combinate, de exemplu un
algoritm condus de eveniment propaga evenimentele între componente si
componentele active sunt evaluate de modele cu cod compilat.
Nivelul simularii corespunde nivelului modelarii angajate sa reprezinte
sistemul simulat. Deci putem avea:
-simulare la nivel de registru, pentru sisteme modelate în întregime în
RTL sau o interconectare a componentelor modelate în RTL.
-simulare la nivel functional pentru sisteme modelate ca o
interconectare de blocuri primitive functionale(uneori acest termen este
folosit si atunci cînd componentele sunt modelate în RTL).
-simulare la nivel de poarta
-simulare la nivel de tranzistor.
-simulare la nivel mixt.

4.Valoarea logica necunoscuta

În general, raspunsul unui circuit secvential la o secventa de intrare


depinde de starea sa initiala. Cu toate acestea, cînd un circuit este pus în
functiune starea initiala a elementelor de memorie(de exemplu RAM)este
de obicei imprevizibila. De aceea, înaintea începerii functionarii, o
secventa de initializare este aplicata în scopul aducerii circuitului într-o
stare de "reset" cunoscuta. Pentru a procesa starea initiala necunoscuta,
algoritmii de simulare folosesc o valoare logica separata, notata u, pentru
a indica o valoare logica necunoscuta. Valoarea logica u este procesata
împreuna cu valorile binare pe durata simularii. Extensia operatorilor
booleeni la valorile logice triple este bazata pe urmatorul motiv: valoarea
u reprezinta o valoare în setul {0,1};similar putem trata valorile 0 si 1 ca
multimile {0} si {1} respectiv. O operatie booleana între p si q, unde p,
Diagnoza 175

q∈{0,1,u} este considerata o operatie între seturile de valori reprezentând


p si q, si este definita ca multimea reuniune a rezultatelor tuturor
operatiilor booleene posibile între componentele celor doua seturi. De
exemplu:
SI(0,u)=SI({0},{0,1})={SI(0,0),SI(0,1)}={0,0}={0}=0
SAU(0,u)=SAU({0},{0,1})={SAU(0,0),SAU(0,1)}={0,1}=u
Similar, rezultatul lui NOT(q),unde q∈{0,1,u} este definit ca multimea
reuniune a rezultatelor operatiilor NOT aplicate fiecarei componente a
setului corespunzând lui q. De aici:
NOT(u)=NOT({0,1})={NOT(0),NOT(1)}={1,0}={0,1}=u
Figura B_IV-2 arata tabelele de adevar pentru functiile SI,SAU,NOT
pentru logica cu trei valori.

AND 0 1 u OR 0 1 u
0 0 0 0 0 0 1 u NOT 0 1 u
1 0 1 u 1 1 1 1 1 0 u
u 0 u u u u 1 u

Figura B_IV-2 Tabele de adevar pentru logica cu trei valori

O procedura generala pentru determinarea valorilor functiilor


combinationale f(x1,x2,...,xn) pentru o combinatie de intrare data (v1 v2
... vn) de 0,1 si u valori este urmatoarea:
1.Formam cubul (v1 v2 ... vn/x)
2.Folosind operatorul de intersectie modificat ,dat în figura B_IV-
3,intersectam acest cub cu cuburile primitive ale lui f. Daca o intersectie
consistenta este gasita, atunci valoarea lui f este obtinuta în pozitia cea
mai la dreapta, altfel f=u’

∩ 0 1 x u
0 0 ∅ 0 ∅
1 ∅ 1 1 ∅
x 0 1 x u
u ∅ ∅ u u

Figura B_IV-3 Operatorul de intersectie modificat


176 Fiabilitate si Diagnoza

Pentru a întelege aceasta procedura, reamintim ca un x într-un cub


primitiv denota o valoare "nu-mi pasa”; de aici o valoare necunoscuta
este consistenta cu x într-un cub primitiv. Cu toate acestea, o valoare
binara de intrare specificata într-un cub primitiv este una ceruta, deci un u
în intrare nu poate genera valoarea corespunzatoare de iesire. De
exemplu, pentru o poarta SI cu doua intrari, cubul u0/x se potriveste cu
un cub primitiv, dar cubul u1/x nu.
Este o pierdere de informatie asociata cu folosirea logicii ternare.
Aceasta poate fi observata din tabela de adevar a functiei NOT: în cazul
în care atît intrarile cît si iesirile au valoarea u, pierdem relatia
complementara dintre ele. Acelasi efect apare între iesiri complementare
la un F/F a carui stare este u. În prezenta unui "fan-out" reconvergent, cu
paritati de inversiune inegale, aceasta pierdere de informatie poate duce
la rezultate pesimiste. Acest fapt este aratat în figura B_IV-4,unde iesirea
portii
SI-NU este de fapt 1,dar este calculata drept u, dupa regulile valorilor
ternare.

0 u
u
u
u
u
1

Figura B_IV-4 Rezultat pesimist în simularea cu trei valori

Poate parea ca folosirea valorilor necunoscute u si u ,împreuna cu


regulile u ⋅ u = 0 si u + u = 1 ,ar rezolva problemele de mai sus. Aceasta
este adevarat, cu toate acestea, doar cînd avem o singura variabila de
stare setata la u. Figura B_IV-5 ilustreaza cum folosirea lui u si u poate
duce la rezultate incorecte.
Diagnoza 177

u
uQ
Q u
0

u
uQ
Q u

Figura B_IV-5 Rezultat incorect din folosirea lui u si u

De aceea, este mai bine sa fim pesimisti decât incorecti ,pentru ca


folosirea lui u si u nu este o solutie satisfacatoare. O solutie corecta ar fi
sa folosim mai multe semnale necunoscute distincte u1,u2,...uk(unul
pentru fiecare variabila de stare) si regulile ui ⋅ ui = 0 si ui + ui = 1 .Din
nefericire, aceasta tehnica devine împovaratoare pentru circuite mari,
pentru ca valorile unor linii ar fi reprezentate de expresii booleene de
ui variabile.
Adesea activitatea unui element functional este determinata de
decodificarea valorii unui grup de linii de control. O problema se ridica în
simulare cînd un element functional necesita sa fie evaluat si câteva din
liniile sale de control au valoarea u. În general, daca k linii de control au
valoarea u, elementul poate executa una din cele 2 k operatii posibile. O
solutie corecta(dar potential costisitoare) este de a executa toate cele 2 k
operatii si de a lua ca rezultat reuniunea operatiilor individuale. Deci daca
o variabila este setata la 0 în unele operatii si la 1 în altele, valoarea sa
rezultanta va fi {0,1}=u. Desigur, aceasta solutie este practica daca 2 k
este un numar mic. De exemplu, presupunem ca doi biti în adresa unui
ROM au valoarea u. Aceasta conduce la 4 evaluari, fiecare accesând un
cuvânt diferit. Iesirea rezultanta va avea valoarea binara b în acele pozitii
de bit unde fiecare cuvânt accesat are valoarea b, si valoarea u oricând
cuvintele accesate nu se potrivesc.
Într-un circuit asincron, prezenta valorii u poate indica o oscilatie, dupa
cum se poate vedea din figura B_IV-6.
178 Fiabilitate si Diagnoza

...
u
1
1 u
u 1
...

Figura B_IV-6 Oscilatia indicata de valorile u

Semnalele implicate în oscilatia de înalta frecventa adesea presupun o


tensiune între nivelurile corespunzând lui 1 si 0 logic. Deci, în plus fata
de o valoare statica necunoscuta, u poate de asemenea reprezenta o
valoare dinamica necunoscuta sau o valoare logica nedeterminata.

5.Simularea compilata

În simularea compilata, modelul de cod compilat devine o parte a


simulatorului. În acest caz exterm, simulatorul nu este decât un model de
cod compilat. Acest cod citeste vectorii de intrare si produce rezultatele.
În general, modelul de cod compilat este legat de corpul simulatorului,
ale carui sarcini includ citirea vectorilor de intrare, executia modelelor
pentru fiecare vector, si afisarea rezultatelor.
Vom exemplifica functionarea unui simulator compilat folosind circuitul
din figura B_IV-7.
F
A
D Q
B

Q E C

CLK

Figura B_IV-7 Circuit sincron


Diagnoza 179

Este un circuit sincron controlat de semnalul periodic de ceas CLK.


Presupunem ca, dupa ce un nou vector de intrare este aplicat, exista
destul timp pentru intrarea datelor în F/F pentru a deveni stabil cu cel
putin t setup înaintea aplicarii semnalului de ceas, unde t setup este timpul de
setup al lui F/F. Aceasta presupunere poate fi verificata independent de
un program de verificare. Daca aceasta presupunere este satisfacuta,
simularea poate ignora întârzierile portiunilor individuale, deoarece
momentele exacte cînd semnalele din circuitul combinational se modifica
nu sunt importante. Atunci, pentru fiecare vector, simularea are nevoie
doar sa calculeze valoarea statica a lui F si sa transfere aceasta valoare lui
Q.
Modelul de cod este generat în asa fel încât calcularea valorilor se
produce nivel dupa nivel. Acestea asigura ca oricând codul evalueaza o
poarta, portile care o alimenteaza au fost deja evaluate. Valorile de intrare
primare A si B(care au nivelul 0) sunt citite dintr-un fisier de stimuli.
Unicul semnal cu nivel 0 este variabila de stare Q; mai întâi presupunem
ca valoarea sa initiala este cunoscuta. Apoi simulatorul trebuie sa
proceseze doar valori binare, stocate în variabilele A,B,Q,E si D. Este
prezentat modelul în cod de asamblare al circuitului:
LDA B
AND Q
INV
STA E
OR A
STA F
STA Q
Observam ca un simulator compilat evalueaza toate elementele din
circuit pentru fiecare vector de intrare. Daca valoarea initiala a lui Q este
necunoscuta, simulatorul trebuie sa proceseze valorile 0,1 si u. Aceste
valori sunt codate cu vectori pe doi biti, dupa cum urmeaza:
0-00
1-11
u-01
Putem observa cu usurinta ca un SI(SAU) între doi vectori pe doi biti
este executat corect facând SI(SAU) pe bitii individuali. Cu toate
acestea, o operatie NOT nu poate fi facuta prin complementarea bitilor,
180 Fiabilitate si Diagnoza

pentru ca complementul lui u ar rezulta în codul ilegal 10.Solutia pentru


NOT este schimbarea celor doi biti dupa complementare.
Sa consideram evaluarea unui SI cu intrarile A si B si iesirea C,
reprezentînd C = A ⋅ B .Daca ne limitam la logica cu doua valori, vom
avea nevoie de un singur bit pentru reprezentarea valorii unui semnal. În
evaluarea paralela dupa model folosim o locatie de memorie de W biti
în computerul gazda pentru a calcula simultan valoarea lui C în W
vectori. Desigur, aceasta este valida doar pentru circuitele
combinationale, unde ordinea în care vectorii sunt aplicati nu este
relevanta. Aceasta metoda accelereaza simularea compilata cu un factor
W(tipic, W=32).Pentru logica ternara, numai W/2 vectori pot fi simulati
concurent.
Simularea compilata poate fi folosita pentru circuite asincrone, cu
modelul din figura B_IV-8,care presupune ca întârzierile sunt prezente
numai în liniile cu revenire.

x z
C

y Y

delay

Figura B_IV-8 Modelul unui circuit asincron

Ca raspuns la un vector de intrare x, circuitul poate trece printr-o serie de


stari de tranzitie, reprezentate prin modificarea variabilei de stare y.
Presupunem ca un vector de intrare este aplicat numai cînd circuitul este
stabil, adica y=Y. Liniile cu revenire, care au nivelul 0,trebuie identificate
înainte ca modelul de cod pentru circuitul combinational C sa fie generat.
Diagnoza 181

Figura B_IV-9 schiteaza procedura generala pentru simularea unui circuit


asincron. Executia modelului calculeaza valorile lui z si Y bazîndu-se pe
x si y. Acest tip de simulare nu este potrivit pentru circuitele asincrone a
caror functionare se bazeaza pe anumite valori de întârziere. De exemplu,
circuitul din figura B_IV-10(a) ar putea fi folosit ca generator de puls:
cînd A efectueaza o tranzitie 0 → 1,întîrzierea inversorului B creeaza un
interval în timpul caruia ambele intrari ale lui C au valoarea 1,deci
cauzeaza un puls 0 → 1 → 0 în C. Fara o modelare îngrijita, acest puls nu
poate fi prevazut de un simulator compilat, care trateaza numai
comportarea statica a circuitului(static, C este întotdeauna 0).Pentru a tine
cont de întârzierea lui B, care este esentiala pentru functionarea
intentionata a circuitului, B ar trebui tratata ca o linie cu revenire, ca în
figura B_IV-10(b).Cu acest model, circuitul poate fi simulat corect. În
general, cu toate acestea, derivarea unui astfel de model "corect" nu poate
fi facuta automat si necesita intrare de la utilizator.

Citeste urmatorul
vector x

Executa codul
y=Y model pentru C

N Y
y = Y?
182 Fiabilitate si Diagnoza

Figura B_IV-9 Simularea unui circuit asincron cu model de cod


compilat

A C

B (a)
Figura B_IV-10 (a)Circuit folosit ca generator de puls

A C

B (b)

Întîrziere

Figura B_IV-10 (b)Model corect pentru simularea compilata

Chiar cînd structura circuitului permite identificarea buclelor cu


revenire, diferite modele pot fi derivate din acelasi circuit (figura B_IV-
11).
Diagnoza 183

R QN
R
QN
Q
S

Q Întîrziere
S

(a) (b)

R QN

S Q

Întîrziere
(c)

Figura B_IV-11 (a) Latch (b),(c) Modele posibile pentru simularea


compilata

Pentru ca diferite modele au diferite presupuneri despre localizarea


întîrzierilor, ele pot raspunde diferit la aplicarea acelorasi stimuli. De
exemplu, consideram simularea latch-ului prezentat în figura B_IV-11(a)
pentru vectorul 00 urmat de 11.Folosind modelul cu Q drept linie de
revenire, deducem ca Q se modifica de la 1 la 0,în timp ce QN=1.Motivul
pentru rezultatele diferite este ca cei doi vectori cauzeaza o rata critica, al
carei rezulta depinde de întârzierile actuale în circuit. Acest exemplu
arata ca un simulator compilat, urmînd procedura schitata în figura B_IV-
9,nu poate opera cu rate si hazarduri care adesea afecteaza functionarea
circuitului asincron.

6.Simularea condusa de eveniment


184 Fiabilitate si Diagnoza

Un simulator condus de eveniment foloseste un model structural al unui


circuit pentru propagarea evenimentelor. Schimbarile în valorile intrarilor
primare sunt definite în fisierul de stimuli. Evenimentele în celelalte linii
sunt produse de evaluarile elementelor activate. Un eveniment apare
numai la un anumit moment(simulat).Simularea în mecanism de flux
de timp manipuleaza evenimentele asa încât ele se vor produce în ordine
temporala corecta. Stimulii aplicati sunt reprezentati de secvente de
evenimente ale caror timpi sunt predefiniti. Evenimentele planificate sa
apara în viitor(relativ la momentul curent de timp simulat) sunt mentinute
într-o structura de date numita lista de evenimente.
Diagnoza 185

Nu mai sunt
Avanseaza timpul evenimente
de simulare

Determina
Gata
evenimentele curente

Actualizeaza
valorile

Propaga
evenimentele

Evalueaaza elementele
activate

Planifica evenimentele
rezultante

Figura B_IV-12 Fluxul principal al simularii conduse de eveniment

Figura B_IV-12 prezinta conceptual fluxul principal al simularii dirijate


de eveniment. Timpul de simulare este avansat la urmatorul moment de
timp; acesta devine timpul curent de simulare. Apoi, simulatorul gaseste
din lista de evenimente evenimentul planificat sa apara la urmatorul
moment de timp si actualizeaza valorile semnalelor active. Lista fan-out-
urilor semnalelor active este urmarita pentru a determina lista elementelor
186 Fiabilitate si Diagnoza

activate; acest proces "paralelizeaza” propagarea modificarilor în


circuitul real. Evaluarea elementelor activate poate produce noi
evenimente. Acestea sunt planificate sa apara în viitor, dupa întârzierile
asociate cu functionarea elementelor. Simulatorul insereaza evenimentul
nou-generat în lista de evenimente. Simularea continua cît timp exista
activitate logica în circuit; adica pâna cînd lista de evenimente devine
goala.
Evaluarea unui element M modelat de un RTL nonprocedural poate
genera un eveniment de stare care denota o modificare în valoarea unei
variabile interne de stare a lui M(În RTL procedural, modificarile starilor
apar imediat, fara procesarea pe lista de evenimente).Când un astfel de
eveniment de stare apare, activeaza numai elementul M care l-a generat;
de aici ,face ca M sa fie reevaluat.
Pentru simplitate, în descrierea de mai sus am presupus ca toate
evenimentele definind stimuli aplicati au fost inserate în lista de
evenimente înaintea simularii. De fapt, simulatorul trebuie sa citeasca
periodic fisierul de stimuli si sa uneasca evenimentele primare cu
evenimentele generate intern.
În plus fata de evenimentele care exprima actualizari în valoarea
semnalului, un simulator condus de eveniment poate procesa si
evenimente de control, care sunt un mijloc convenabil de a initia diverse
activitati la anumite momente de timp. Cîteva activitati tipice cerute de
evenimentele de control:
-afisarea valorilor anumitor semnale
-verificarea valorilor asteptate a anumitor semnale(si, eventual, oprirea
simularii daca o nepotrivire este detectata)
-oprirea simularii

7.Modele de întârziere

Exista multe variante ale fluxului general prezentat în figura B_IV-


12.Diferentele între ele apar în principal din diferitele modele de
întârziere asociate cu comportamentul componentelor din model.
Modelarea întârzierii este un element cheie în relatia dintre acuratetea si
complexitatea algoritmului de simulare.
Diagnoza 187

7.1.Modelarea întârzierii pentru porti

Fiecare poarta introduce o întârziere la semnalele care se propaga prin


ea. În modelarea comportamentului unei porti, separam functionarea sa si
sincronizarea sa ,ca în figura B_IV-13.În simulare un element este mai
întâi evaluat, apoi este efectuat calculul întârzierii.
x1 z x1 z
Întârziere
x2 x2 x1x2

Figura B_IV-13 Separarea între functie si întîrziere în modelarea unei


porti

Întârzieri de transport.
Modelul de baza al întârzierii este cel al unei întârzieri de transport, care
specifica intervalul d ce separa modificarea unei iesiri de modificarea
unei(unor) intrari care a cauzat-o.
Pentru a simplifica algoritmul de simulare, valorile întârzierii folosite în
simulare sunt de obicei întregi. Tipic, el sunt multipli de unitati comune.
De exemplu, daca lucram cu întârzieri de poarta de 15 , 20 si 30 ns,
pentru simulare le vom masura în 3 , 4 si 6 unitati, unde o unitate de
întârziere reprezinta cel mai mare divizor comun (5 ns) al întârzierilor
individuale.(Apoi momentele de modificare la intrarile primare ar trebui
scalate în mod similar).Daca toate întârzierile de transport într-un circuit
sunt considerate egale, atunci le putem scala la o unitate. Acest model
este numit model cu întârziere unitara.
Raspunsurile la urmatoarele doua întrebari depind de natura calculului
întârzierii:
-Depinde întârzierea de natura tranzitiei rezultante de iesire?
-Sunt întârzierile cunoscute precis?
188 Fiabilitate si Diagnoza

A C
B=1

3
A (a) d=2

C
1 5
C (b) d r=1,df=3
1 R1 1 R2
C (c) dm=1,dM=3
3 3

C (d) d l=4

2 3
C (e) dl=2,d=2

Figura B_IV-14 Modele de întârziere


(a) Întârziere nominala de transport independenta de tranzitie
(b) Întârzieri de cadere si crestere
(c) Întârziere ambigua
(d) Întârziere inertiala (supresia pulsului)
(e) Întârziere inertiala

Pentru anumite mijloace,timpii ceruti pentru semnalul de iesire la


crestere(tranzitie de la 0 la 1) si cadere (1 la 0) sunt foarte diferiti. Pentru
unele circuite MOS aceste întârzieri pot diferi printr-un raport de 3 la
1.Pentru a reflecta acest fenomen în simulare, asociem întârzieri diferite
la crestere si scadere, d c si d s ,fiecarei porti. Calculul întârzierii
selecteaza valoarea potrivita bazîndu-se pe evenimentul generat de iesirea
portii. Daca întârzierile portii nu sunt functie de directia în care se
Diagnoza 189

modifica iesirea, atunci putem folosi un model cu întârziere


independenta de tranzitie. Figura B_IV-14 (a) si (b) ilustreaza
diferentele între aceste doua modele. Observam ca rezultatul întârzierilor
diferite la crestere si scadere este modificarea latimii pulsului care se
propaga prin poarta.
Adesea întârzierea exacta de transport nu este cunoscuta. De exemplu,
întârzierea unui anumit tip de poarta SI-NU poate fi specificata de
fabricant, si poate fi cuprinsa între 5 si 10 ns. Pentru a reflecta aceasta
incertitudine în simulare, asociem un interval de ambiguitate definit de
întârzierea minima ( d m ) si maxima ( d M ) fiecarei porti. Acest model,
numit model ambiguu de întârziere ,rezulta în intervale (R1 si R2 în
figura B_IV-14(c)) în timpul carora valoarea unui semnal nu este
cunoscuta precis. Presupunînd ca întârzierile de poarta sunt cunoscute,
avem un model nominal de întârziere. Modelul cu întârzierea cresterii
si scaderii si modelul întârzierii ambigue pot fi combinate ca sa avem
intervale de ambiguitate diferite pentru crestere ( d Rm , d RM ) si scadere
( d Fm , d FM ).

Întârzierile inertiale
Toate circuitele necesita energie pentru comutarea starii. Energia unui
semnal este functie de amplitudinea si durata sa. Daca durata sa este prea
mica, semnalul nu va forta dispozitivul sa comute. Durata minima a unei
modificari a intrarii necesare pentru comutarea starii iesirii portii este
numita întârzierea inertiala de intrare a portii ,notata d I .Un puls de
intrare a carui durata este mai mica decât d I este numit "spin"(impuls)
care este filtrat (sau suprimat) de poarta (figura B_IV-14(d)).Daca latimea
pulsului este cel putin d I ,atunci propagarea sa prin poarta este
determinata de întârzierea de transport a portii. Daca poarta are o
întârziere nominala de transport independenta de tranzitie d ,atunci cele
doua întârzieri trebuie sa satisfaca relatia d i ≤ d .Figura B_IV-14(c) arata
un caz cu d i = d .
190 Fiabilitate si Diagnoza

A
C
B
dl=3

A
B
2

3 2
C
(a)

A
C
B
dl=3

A 2
2
1
B
3 3
C
(b)

Figura B_IV-15 Întârziere inertiala la iesire

Un mod usor diferit de modelare a întârzierilor inertiale este asocierea


lor cu iesirile portii. Acest model de întârziere inertiala a portii
specifica faptul ca iesirea portii nu poate genera un puls a carui durata sa
fie mai mica decât d i .Un puls de iesire poate fi cauzat de un puls de
intrare(si de aici obtinem aceleasi rezultate ca pentru modelul întârzierilor
inertiale de intrare),dar poate fi cauzat si de tranzitii de intrare "închise”,
ca în figura B_IV-15(a).Alt caz în care cele doua modele inertiale ale
întârzierii ar diferi este ilustrat în figura B_IV-15(b).Cu modelul
întârzierii inertiale de intrare, pulsatiile de intrare sunt considerate separat
si nu pot comuta iesirea portii. Cu toate acestea, cu modelul întârzierii
inertiale de iesire, efectul combinat al pulsurilor de intrare forteaza iesirea
sa comute.
Diagnoza 191

S
D Q
q
C QN
R

q SRCD Q QN Întîrzieri
0 0 1 x x 1 0 dS/Q = 4 dS/QN = 3

1 1 0 x x 0 1 dR/Q = 3 dR/QN = 4

1 1 1 ↑ 0 0 1 dfC/Q = 8 dfC/QN = 6

0 1 1 ↑ 0 1 0 dfC/Q = 6 dfC/QN = 8
x 0 0 x x u u

Figura B_IV-16 Întârzieri de intrare/iesire pentru un bistabil D

7.2.Modelarea întârzierii pentru elemente functionale

Atît functia logica cît si caracteristicile legate de timp ale elementelor


functionale sunt mai complexe decât cele ale portilor. Sa consideram, de
exemplu, comportamentul unui circuit de comutatie D F/F cu setare S si
resetare R asincrone, descris în tabelul din figura B_IV-16.Simbolul ↑
semnifica o tranzitie 0 → 1.Notatia d I / O reprezinta întârzierea în
raspunsul iesirii O la modificarea intrarii I. Indicele superior (d sau f) face
distinctia între caderi si urcari. De exemplu, a treia linie arata ca daca F/F
este în starea initiala q=1 si S si R sunt inactive (1) o tranzitie 0 → 1 a
ceasului C determina modificarea iesirii Q la valoarea D(0) dupa o
f
întârziere d C/ Q =8.Similar,iesirea QN se modifica la 1 dupa întârzierea
r
d C/ QN =6.Ultima linie specifica faptul ca conditia ilegala de intrare
192 Fiabilitate si Diagnoza

SR=00 duce ca ambele iesiri sa fie u. Similar, modelul inertial de


întârziere pentru porti, specificatiile pentru F/F pot include latimile
minime de puls pentru C,S si R cerut sa modifice starea lui F/F.
Specificatiile aditionale de timp trateaza cererile de evitare a conditiilor
de cursa între C si D. Durata de setup si durata de retinere sunt
intervalele minime ce preced sau urmeaza o tranzitie C activa în timpul
careia D ar trebui sa ramâna stabil pentru a avea o functionare F/F
corecta(predictibila).Unele sisteme de simulare pot detecta functionarea
incorecta respectând conditiile de setup si de retinere. O abordare mai
buna decât a efectua aceste verificari este includerea acestora în modele
functionale dezvoltate pentru F/F.

7.3.Modelarea întârzierii în RTL

În general modelele RTL ofera o viziune mai abstracta a


sistemului, si de aici modelarea întârzierii este mai putin detaliata. Multe
modele RTL folosesc un model ciclic al timpului. Daca întârzierile sunt
asigurate operatiilor individuale, ele au semnificatia întârzierilor
nominale de transport.

7.4.Alte aspecte ale modelarii întârzierii

În circuitele de înalta viteza,întârzierile introduse de propagarea


semnalelor de-a lungul firelor devin la fel de semnificative ca si
întârzierile componentelor. Întrucît aceste întârzieri depind de lungimea
firelor, ele sunt cunoscute numai dupa ce este parcurs circuitul. Multe
sisteme de proiectare automata sunt capabile sa extraga informatia
automat, din aranjarea datelor si sa actualizeze baza de date de simulare.
Întârzierea introdusa de o linie de semnal i cu un singur "fan-out" poate fi
asimilata cu întârzierea portii care genereaza semnalul i. Cu toate acestea,
daca i are mai multe "fan-out-uri”, fiecare dintre aceste ramuri poate duce
la o propagare diferita a întârzierii. Acestea sunt de obicei modelate prin
introducerea elementelor de întârziere în locurile potrivite(vezi figura
B_IV-17).
Diagnoza 193

d1

d2

Figura B_IV-17 Întârziere în fire modelata cu elemente de întârziere

Un element de întârziere realizeaza o functie logica de identitate, si


scopul sau este doar întârzierea propagarii semnalului. Alt factor care
afecteaza modelarea întârzierii este încarcarea unui semnal, unde
întârzierea unei porti creste cu numaratoarea semnalului sau de iesire.

8.Evaluarea elementelor

Evaluarea unui element combinational este procesul calcularii valorii


sale de iesire dându-se valorile curente de intrare. Evaluarea unui element
secvential este bazata tot pe starea sa curenta si calculeaza si noua sa
stare. Tehnicile de evaluare depind de multi factori interdependenti, ca de
exemplu sistemul valorilor logice folosite în simulare, modul în care
valorile sunt stocate, tipul elementelor si modul în care acestea sunt
modelate.
Întrucât evaluarea unui element combinational G trebuie sa analizeze
valorile de intrare ale lui G, o prima întrebare este cum sunt puse aceste
valori la dispozitia rutinei de evaluare. Mai întâi sa presupunem ca
valorile semnalului sunt stocate într-un tablou în paralel cu tablourile
semnalului.Apoi gasirea valorilor de intrare ale lui G este un proces
indirect, care determina mai întâi intrarile urmarind lista "fan-in" a lui G
si apoi acceseaza valorile lor. Un la doilea mod este mentinerea valorilor
de intrare ale lui G într-o zona contigua de memorie asociata cu G(figura
B_IV-18).
194 Fiabilitate si Diagnoza

u
u
0
1

0
1
1 0

Figura B_IV-18 Valori de intrare mentinute pe element

Desi aceasta schema poate parea neeconomica, întrucît ea multiplica


valorile unui semnal cu k "fan-out-uri" în zona de valoare a fiecaruia
dintre ele, ea prezinta mai multe avantaje:
-rutinele de evaluare sunt mai rapide, pentru ca ele pot accesa direct
valorile necesare
-valorile pot fi "împachetate" împreuna, ceea ce permite tehnici de
evaluare mai eficiente
-întrucît rutinele de evaluare nu mai au nevoie sa determine intrarile
elementelor evaluate, memoria poate fi economisita prin neîncarcarea
datelor "fan-in" pe durata simularii.
-separarea între valorile unui semnal si valorile ramurilor sale "fan-out"
este folositoare în simularea cu defect, întrucît aceste valori pot fi diferite
în prezenta defectelor(în simularea logica ele sunt întotdeauna aceleasi)

În cele ce urmeaza, presupunem ca valorile de intrare sunt


mentinute pe element(ca în figura 3.18) si ca valorile variabilelor de stare
ale elementelor secventiale sunt memorate în mod similar.
Diagnoza 195

Tabele de adevar
Fie n numarul intrarilor si variabilelor de stare ale unui element.
Presupunînd doar valori binare, o tabela de adevar a elementului are 2 n
intrari, care sunt memorate ca un tablou V, ale carui elemente sunt
vectori ai iesirii si valori ale variabilelor de stare. Pentru evaluare, cele n
valori ale intrarilor si variabilelor de stare sunt împachetate în acelasi
cuvânt, si evaluarea foloseste valoarea acestui cuvânt -sa spunem, i- ca un
index pentru regasirea iesirii corespondente si a starii urmatoare stocate
în V[i]. Tabelele de adevar pot fi generalizate pentru logica multivaloare;
fie k numarul valorilor logice ,si q numarul de biti necesari pentru
codificarea celor k valori. Deci q este cel mai mic întreg astfel încât
k ≤ 2 q .Atunci marimea tabloului necesar pentru stocarea unui tabel de
adevar al variabilei n k este 2 q⋅n .De exemplu, un tabel de adevar pentru
un element care depinde de 5 valori binare necesita 2 5 = 32 intrari.
Pentru logica cu trei valori, tabelul are 35 = 243 intrari, si marimea
tabloului necesar pentru memorare este 210 = 1024 .Tehnicile de evaluare
bazate pe tabele de adevar sunt rapide, dar din cauza cresterii
exponentiale a cererii de memorie, ele sunt limitate la elementele care
depind de un numar mic de variabile.
O relatie între viteza si memorie poate fi obtinuta prin folosirea unui
steag 1-bit în zona de valoare a unui element pentru indicarea daca vreo
variabila are valoare non-binara; altfel este folosita o rutina speciala.
Aceasta tehnica necesita mai putina memorie, întrucât tabelele de adevar
sunt acum definite numai pentru valori binare. Pierderea de viteza pentru
valori non-binare nu este semnificativa, pentru ca în general, cele mai
multe evaluari facute în timpul unei simulari implica doar valori binare.

tip t-1

tip valori index

tip 1 s

tip 0

Figura B_IV-19 Structura de tabela zoom


196 Fiabilitate si Diagnoza

Tabele zoom

O tehnica de evaluare bazata pe tabelele de adevar trebuie mai


întâi sa foloseasca tipul elementului evaluat pentru a determina tipul
tabelului de adevar de accesat. Deci verificarea tipului si accesarea tabelei
de adevar sunt pasi separati. Acesti doi pasi consecutivi pot fi combinati
într-unul singur, dupa cum urmeaza. Fie t numarul tipurilor si S marimea
celui mai mare tabel de adevar. Construim un tablou zoom de marime tS ,
în care stocam t tablouri individuale de adevar, începând de la locatia
0,S,...,(t-1)S. Pentru evaluarea unui element, împachetam codul tipului
sau (mergând de la 0 la t-1) în acelasi cuvânt cu valorile sale, asa încât
putem folosi valoarea acestui cuvânt ca un index în tabelul zoom(figura
B_IV-19). Acest tip de tablou zoom este o instantiere a unei tehnici
generale de accelerare, care reduce o secventa de k decizii într-un singur
pas. Presupunem ca fiecare pas de decizie este bazat pe o variabila x, care
poate lua una din valorile unui set de mi valori. Daca toti xi sunt
cunoscuti dinainte, îi putem combina într-o variabila încrucisata
x1 * x 2 *L *x k care poate lua una din valorile posibile m1 , m2 ,K , mk .În
acest mod cele k valori sunt examinate simultan si secventa de decizie
este redusa la un pas.

Scanarea intrarii

Setul de elemente primitive folosite în cele mai multe sisteme de


simulare include portile de baza-SI , SAU , SI-NU , SAU-NU
Aceste porti pot fi caracterizate de 2 parametri, valoarea de control c si
inversia i. Valoarea unei intrari se spune ca este de control daca
determina valoarea iesirii portii indiferent de valoarea celorlalte intrari.
Atunci valoarea de iesire este c ⊕ i. Figura B_IV-20 prezinta forma
generala a cuburilor primitive ale fiecarei porti cu trei intrari.

c i
c x x | c⊕i AND 0 0
x c x | c⊕i OR 1 0
x x c | c⊕i NAND 0 1
c c c | c ⊕i NOR 1 1
Diagnoza 197

Figura B_IV-20 Cuburile primitive pentru o poarta cu valoarea


controlata c si inversiunea i

Figura B_IV-21 schiteaza o rutina tipica de evaluare pentru o logica cu 3


valori, bazata pe scanarea valorii de intrare. Observam ca scanarea ia
sfârsit cînd o valoare de control este întâlnita.
evalueaza (G, c, i)
begin
valorile_u = FALSE
for every valoare de intrare v a lui G
begin
if v = c then return c ⊕ i
if v = u then valorile_u = TRUE
end
if valorile_u return u
return c ⊕ i
end

Figura B_IV-21 Evaluarea unei porti prin scanarea valorilor de intrare

Numararea intrarilor

Examinând figura B_IV-21,putem observa ca pentru evaluarea unei


porti, folosind o logica cu trei valori, este suficient sa stim daca poarta are
vreo valoare cu intrarea c, si daca nu, atunci daca are vreo intrare cu
valoarea u. Aceasta sugereaza ca, în locul memorarii valorii de intrare
pentru fiecare poarta, putem mentine o reprezentare comprimata a
valorilor, în cele doua numaratoare, c-count si u-count, care memoreaza,
respectiv, numarul intrarilor cu valoarea c si u. Pasul actualizarii valorii
de intrare (facuta înainte de evaluare) este acum înlocuit prin actualizarea
celor doua countere. De exemplu, o modificare 1→0 la o intrare a unui SI
face ca c-count sa fie incrementat, în timp ce o modificare 0→u rezulta în
decrementarea lui c-count si incrementarea lui u-count. Evaluarea unei
porti implica o simpla verificare a counterelor (figura B_IV-22).
198 Fiabilitate si Diagnoza

evaluate(G, c, i)
begin
if c_numarat > 0 then return c ⊕ i
if u_numarat > 0 then return u
return c ⊕ i
end

Figura B_IV-22 Evaluarea unei porti bazata pe numararea intrarii

Aceasta tehnica este mai rapida decât metoda scanarii intrarii si este
independenta de numarul intrarilor.

9.Detectarea hazardului

Hazarde statice

În circuitul din figura B_IV-23 presupunem Q=1 si A se modifica de la 0


la 1, în timp ce B se modifica de la 1 la 0.Daca aceste doua modificari
sunt în asa fel încât exista un mic interval pe timpul caruia A=B=1 ,
atunci z poate avea un puls 1→0→1,care poate reseta latch-ul. Aparitia
posibila a unui puls de tranzitie pe o linie de semnal a carei valoare
statica nu se modifica se numeste "hazard static".
A Z
R Q
B
S
1

Figura B_IV-23. Hazard static

Pentru detectarea hazardurilor, un simulator trebuie sa analizeze


comportamentul tranzitoriu al semnalelor. Fie S(t) si S(t+1) valorile unui
semnal S la doua unitati de timp consecutive. Daca aceste valori sunt
diferite ,momentul cînd S se modifica în circuitul real nu este cunoscut
exact. Pentru a reflecta aceasta incertitudine în simulare, vom introduce o
"pseudo-unitate de timp" t′ între t si t+1,în timpul careia valoarea lui S
este necunoscuta, deci S(t′)=u. Aceasta este în consecventa cu
Diagnoza 199

semnificatia lui u ca fiind o valoare din multimea {0,1},pentru ca în


timpul unei perioade de tranzitie valoarea lui S poate fi observata
independent de fiecare dintre fan-out-urile sale ca fiind fie 0,fie1.Atunci
secventa S(t)S(t′)S(t+1)=0u1 reprezinta una din secventele din setul
{001,011}.Aceste doua secvente pot fi interpretate, respectiv, ca o
tranzitie 0→1 "înceata" si "rapida”. Revenind acum la exemplul din
figura B_IV-23, secventele corespunzatoare sunt A=0u1 si
B=1u0.Secventa rezultata pentru z, calculata prin operatii pe bit, SI-NU,
este 1u1.Acest rezultat arata ca este posibila o secventa de iesire 101, si
deci detecteaza pulsul nedorit.
Procedura generala pentru detectarea hazardurilor într-un circuit
combinational C functioneaza dupa cum urmeaza. Presupunem ca C a
fost simulat la momentul t si acum este simulat la momentul t+1.Fie E
setul de intrari ce se modifica între momentele t si t+1.
Procedura 1.1.
1.Seteaza fiecare intrare din E la valoarea u si simuleaza C (celelalte
intrari îsi pastreaza valoarea).
2.Seteaza fiecare intrare din E la valoarea sa la t+1 si simuleaza C.
Teorema 1.1:Într-un circuit combinational, un hazard static exista în
linia z între momentele t si t+1 daca si numai daca secventa valorilor
z(t)z(t′)z(t+1) (calculata de procedura 3.1) este 1u1 sau 0u0.
Demonstratie: Evident, o secventa 0u0 sau 1u1 este o conditie suficienta
pentru existenta unui hazard static. Pentru a dovedi ca aceasta conditie
este si una necesara, ne bazam pe urmatoarele doua fapte, deduse cu
usurinta din tabelele de adevar pentru logica cu 3 valori, ale portilor de
baza:
1.Daca una sau mai multe intrari se modifica de la valori
binare la u, atunci iesirea sau ramâne nemodificata sau se modifica de la
o valoare binara la u.
2.Daca una sau mai multe intrari se modifica de la u la valori
binare, atunci iesirea sau ramâne nemodificata, sau se modifica de la u la
o valoare binara.
De aici, orice poarta a carei valoare în t′ nu este u are aceleasi valori
binare în t, t′ si t+1, si de aceea nu poate avea un hazard static.
Pentru ca procedura 1.1 ignora întârzierile din circuit, ea procedeaza la o
analiza a cazului cel mai nefavorabil, alee carui rezultate sunt
200 Fiabilitate si Diagnoza

independente de întârzierea modelului. De aceea, spunem ca ea foloseste


un model arbitrar de întârziere.
Urmatorul exemplu arata cum diferitele modele de întârziere (0-
întîrziere, întârziere unitara si arbitrara) afecteaza detectarea hazardului.
Ex. 1.1:-consideram circuitul din figura B_IV-10(a) si secventa de
intrare A=010.Pentru modelul 0-întîrziere obtinem B=101 si C=000.Deci
nici un hazard nu este prezis, pentru ca modelul 0-întîrziere trateaza doar
comportarea statica a circuitului, ignorând-o pe cea dinamica.
Pentru modelul de întârziere unitara, secventele de semnal sunt B=1101
si C=0010.Deci un puls este prezis în raspunsul la tranzitia 0→1 a lui A.
Pentru modelul de întârziere arbitrara, secventele de semnal (obtinute cu
procedura 1.1) sunt A=0u1u0 , B=1u0u1 , C=0u0u0.Deci un hazard este
prezis atît pentru caderea cît si pentru cresterea intrarii. Acesta este un
rezultat foarte pesimist, întrucât în general atît calea spre inversor cît si
calea directa de la A la C au întârzieri, si atunci numai una din tranzitiile
de intrare ar trebui sa cauzeze un hazard. Cu toate acestea, sub un model
arbitrar de întârziere nu se stie care cale are cea mai mare întârziere si
hazardurile sunt prezise pentru ambele situatii.

AN 0 1 R F 0* 1*
D
0 0 0 0 0 0 0
1 0 1 R F 0* 1*
R 0 R R 0* 0* R
F 0 F 0* F 0* F
0* 0 0* 0* 0* 0* 0*
1* 0 1* R F 0* 1*

Figura B_IV-25 Tabelul de adevar pentru functia SI - logica cu 6 valori

Analiza bazata pe secventele de valori consecutive sta la baza


mecanismului de detectie a hazardului folosit de cele mai multe
simulatoare. Multe simulatoare folosesc logica multivaloare care
reprezinta (implicit sau explicit) diferite seturi de secvente. Rezultatul
unei operatii logice între aceste valori (figura B_IV-25) poate fi obtinut
efectuând aceeasi operatie pe bit între secvente corespondente.
Diagnoza 201

Unele simulatoare combina valorile 0∗ si 1∗ într-o singura valoare, ceea


ce denota un hazard. Uneori aceasta valoare este de asemenea combinata
cu valoarea necunoscuta u.

Hazarduri dinamice

Un hazard dinamic este aparitia posibila a unui puls de tranzitie pe


durata unei tranzitii 0→1 sau 1→0 a unui semnal. Analiza pentru
detectarea hazardurilor dinamice necesita o secventa de 4 biti. De
exemplu, secventa 0101 descrie un 1-puls în timpul tranzitiei
0→1.Tranzitia "curata" 0→1 corespunde multimii {0001 , 0011 ,
0111}.Figura B_IV-26 prezinta un sistem logic cu 8 valori, folosit pentru
analiza hazardurilor statice si dinamice. Putem observa ca aceasta include
cele 6 valori ale figurii B_IV-24, careia i se adauga valorile R ∗ si F ∗
pentru a reprezenta hazardurile dinamice.

Valoarea Secventa(-ele) Efect


0 0000 0 static
1 1111 1 static
0/1 , R {0001,0011,0111} Tranzitie crescatoare
1/0 , F {1110,1100,1000} Tranzitie descrescatoare
0* {0000,0100,0010,01 Hazard-0 static
10}
1* {1111,1011,1101,10 Hazard-1 static
01}
R* {0001,0011,0111,01 Hazard-1 dinamic
01}
F* {1110,1100,1000,10 Hazard-0 dinamic
10}

Figura B_IV-26 Logica cu 8 valori pentru analiza hazardurilor statice si


dinamice

O operatie booleana B între p si q, unde p si q sunt printre cele 8 valori


prezentate în figura B_IV-26, este considerata o operatie între seturile de
secvente corespunzatoare lui p si q si este definita ca reuniunea
202 Fiabilitate si Diagnoza

rezultatelor tuturor posibilelor operatii între secventele din cele doua


seturi. De exemplu:

SI(R,1∗ )=SI({0001,0011,0111},{1111,1011,1101,1001})={0001,0011,01
11,0101}= R ∗

Detectarea hazardurilor în circuitele asincrone

Vom analiza hazardurile într-un circuit asincron de forma prezentata în


figura, folosind un model arbitrar de întârziere. Presupunem ca toate
valorile la momentul t sunt cunoscute (stabile).Acum aplicam un nou
vector x la momentul t+1. Fie E setul intrarilor primare care se modifica
între t si t+1.
Procedura 1.2:
1.Seteaza fiecare intrare din E la valoarea u si simuleaza C. Pentru
fiecare linie cu revenire Y, se modifica la u, seteaza variabila
corespunzatoare de stare y la u si resimuleaza. Repeta pâna cînd nu mai
sunt Yi care se modifica la u.
2.Seteaza fiecare intrare din E la valoarea sa la momentul t+1 si
simuleaza C. Pentru fiecare Yi se modifica la o valoare binara bi ,seteaza
Yi corespunzator la bi si resimuleaza. Repeta pâna cînd nici un Yi nu se
mai modifica la o valoare binara.
Teorema 1.2:Daca valoarea finala a lui Yi ,calculata de procedura 1.2
este u, atunci linia cu revenire Yi se stabilizeaza în aceasta stare (sub
tranzitia de intrare data) indiferent de întârzierile din circuit.
Urmatorul corolar este o consecinta importanta a acestei teoreme
Corolar 1.1:Daca valoarea finala a lui Yi ,calculata de procedura 1.2 este
u, atunci tranzitia de intrare data poate cauza o cursa critica sau o
oscilatie.
Procedura 1.2 nu necesita identificarea liniilor cu revenire. Poate
functiona cu un simulator condus de eveniment prin propagarea mai întâi
a modificarilor între t si t′ pâna cînd valorile se stabilizeaza, apoi a
modificarilor ce apar între t′ si t+1.În fiecare pas de simulare este
garantata stabilizarea valorilor. Din cauza modelului arbitrar de
întârziere, ordinea evaluarii elementelor nu este importanta. Observam ca
în timp ce se executa pasul 1, orice element a carui valoare este în mod
Diagnoza 203

curent u nu trebuie reevaluat. De asemenea ,în pasul 2, orice element a


carui valoare curenta este binara nu trebuie reevaluat.
O presupunere fundamentala a procedurii 1.2 este ca circuitul este operat
în modul fundamental,adica stimulii sunt aplicati doar atunci cînd
valorile din circuit sunt stabile. Aceasta presupunere împiedica simularea
intrarilor în timp real.
10.Simularea condusa de eveniment la nivel de poarta

10.1.Întîrzieri nominale de transport independente de tranzitie

Acum vom particulariza algoritmul general de simulare pentru simularea


la nivel de poarta folosind un model de întârziere nominala de transport
independenta de tranzitie.

tp

tq i,vi’ i,vj’

tr

Figura B_IV-27 Lista de evenimente implementata ca o structura de lista


înlantuita
204 Fiabilitate si Diagnoza

Mai întâi consideram ca lista de evenimente este organizata ca în figura


B_IV-27, unde evenimentele planificate sa apara la acelasi moment de
timp viitor sunt stocate în aceeasi lista. Ordinea momentelor de timp este
mentinuta prin înlantuirea antetelor în ordinea potrivita( t p < t q < t r ).O
intrare (i , Vi ′) în lista asociata cu t q indica faptul ca la momentul t q
valoarea liniei i este planificata sa ia valoarea Vi ′.
Presupunem ca valorile si întârzierile sunt pastrate în tabele; V(t)
semnifica valoarea curenta a portii i si d(i) întârzierea nominala a lui i.

while (lista de evenimente nu este goala)


begin t = data viitoare în lista
proceseaza intrarile pentru momentul t
end
Figura B_IV-28 Structura generala pentru simularea condusa de
eveniment

Figura B_IV-28 arata structura generala a algoritmilor de simulare


condusi de eveniment discutati aici. Algoritmul 1.1 ,dat în figura B_IV-
29 asigura o prima implementare a liniei "procesul intra la momentul t"
din figura B_IV-28.Algoritmul 1.1 angajeaza o strategie în dubla
trecere. În prima trecere regaseste intrarile din lista de evenimente
asociate cu momentul de timp t si determina portile activate. În a doua
trecere evalueaza portile activate si planifica valorile lor calculate.
Aceasta strategie asigura ca portile activate de mai multe ori de un
eveniment sunt evaluate o singura data.

Activated = ∅ /*setul portilor activate*/


for every intrare (i,vi' ) pîna la momentul curent t
if vi' ≠ v(i) then
begin /*este într-adevar un eveniment*/
v(i) = vi' /*actualizeaza valoarea*/
for every j din lista fan-out-urilor lui i
begin
actualizeaza valorile de intrare ale lui j
adauga j în Activated
end
Diagnoza 205

end
for every j∈Activated
begin vj' = evalueaza(j)
planifica (j,v'j) pentru momentul t + d(j)
end
Figura B_IV-29 Algoritmul 1.1
a
8 z
b

4
a
b
2

8 2
z

Figura 3.30 Exemplu de activare a unei porti deja planificate

Observam ca în algoritmul 1.1 ,o intrare (i , Vi ′) în lista de evenimente


nu reprezinta întotdeauna o modificare în valoarea lui i. Problema
determinarii cînd o noua valoare de iesire a unei porti activate este într-
adevar un eveniment este prezentata în figura B_IV-30.Ca raspuns la
evenimentul (a,1) la momentul 0, (z,1) este planificat la momentul
8.Întrucît acum poarta este într-o stare de tranzitie (evenimentul planificat
la iesire nu a aparut înca ) este o inconsistenta logica temporara între
valoarea iesirii curente (0) si valorile de intrare (ambele 1).Deci cînd
urmatorul eveniment de intrare (b,0) apare la momentul 2, algoritmul 1.1
nu poate determina daca setarea z=0 la momentul 10 va reprezenta o
modificare. Strategia angajata este sa se introduca în lista de evenimente
toate valorile noi ale portilor activate si sa se verifice activitatea cînd
intrarile sunt regasite. De exemplu în figura B_IV-30 (z,0) va fi planificat
206 Fiabilitate si Diagnoza

pentru momentul 12 ca rezultat al lui (a,0) la momentul 4, dar z va fi deja


setat la 0 în momentul 10.

Activated = ∅
for every eveniment (i , vi') pîna la momentul curent
begin
v(i) = vi'
for every j din lista fan-out-urilor luii
begin
actualizeaza valorile de intrare pentru j
vj' = evalueaza (j)
if vj' ≠ lsv (j) then
begin
planifica (j,vj') pentru momentul t + d(j)
lsv(j) = vj'
end
end

Figura 3.32 Algoritmul 3.3 - strategie one - pass

Activated = ∅
for every eveniment (i , vi') pîna la momentul curent
begin
v(i) = vi'
for every j din lista fan-out-urilor luii
begin
actualizeaza valorile de intrare pentru j
vj' = evalueaza (j)
if vj' ≠ lsv (j) then
begin
planifica (j,vj') pentru momentul t + d(j)
lsv(j) = vj'
end
end

Figura B_IV-32 Algoritmul 1.3 - strategie one - pass


Diagnoza 207

Algoritmul 1.2, dat în figura B_IV-31, este garantat sa planifice doar


evenimente adevarate. Aceasta se realizeaza prin compararea noii valori
V j ′, determinata de evaluare, cu ultima valoare planificata a lui j, notata
lsv(j).Algoritmul 1.2 face mai putine operatii de planificare decât
algoritmul 1.1, dar necesita mai multa memorie si mai multe rezervari,
pentru a mentine ultimele valori planificate. Pentru a determina care
algoritm este mai eficient, trebuie sa estimam cîte intrari nenecesare din
lista de evenimente sunt facute de algoritmul 1.1.Analiza noastra se
concentreaza asupra fluxului de evenimente în si din lista de evenimente.
Fie N numarul total de evenimente care apar în timpul unei simulari.
Daca notam cu f media numerelor fan-out-urilor unui semnal, numarul
activarilor de poarta este Nf .O poarta care are K>1 intrari active simultan
este activata de K ori, dar este evaluata o singura data(Intrarile în setul
Activated sunt unice).Pentru ca cele mai multe porti sunt evaluate ca un
rezultat al unei singure modificari, putem aproxima numarul evaluarilor
prin Nf .Fie q fractiunea de evaluari care genereaza evenimente de iesire.
Atunci N 1 =qNf reprezinta numarul total de eveniment planificate în
timpul simularii. Acestor evenimente ar trebui sa le adaugam N 2
evenimente corespunzând intrarii primare introduse în lista înainte de
simulare. Ecuatia N 1 + N 2 =N spune ca toate evenimentele care intra în
lista de evenimente sunt eventual regasite. Întrucât de obicei N 2 << N 1
obtinem qNf ≅ N .Deci qf ≅ 1.Aceasta arata ca în medie, doar una dintre
cele f porti evaluate genereaza un eveniment de iesire. De obicei, f este în
domeniul 1,5 − 3. Întrucât lista de evenimente este o structura dinamica,
aceste operatii implica anumite forme de management a spatiului liber.
De asemenea planificarea necesita gasirea momentului potrivit cînd un
articol poate fi inserat. Putem concluziona ca pretul operatiilor cu lista de
evenimente nenecesare efectuate de algoritmul 1.1 este mai mare decât
cel pentru mentinerea lsv din algoritmul 1.2.

Strategia one-pass împotriva strategiei two-pass

Motivul pentru care strategia two-pass efectueaza evaluarile numai dupa


ce toate evenimentele concurente au fost regasite este evitarea evaluarilor
repetate a portilor care au modificari de intrare multiple. Experienta arata,
cu toate acestea, ca cele mai multe porti sunt evaluate ca rezultat al
208 Fiabilitate si Diagnoza

modificarii unei singure intrari. Deci o strategie one-pass care evalueaza


o poarta de îndata ce ea este activata ar fi mai eficienta, întrucât evita
constructia setului Activated .Algoritmul 1.3 ,din figura B_IV-32,
implementeaza strategia one-pass.
a
4 z
b

a
b

4
z

Figura B_IV-33 Procesarea modificarilor multiple ale intrarii prin


algoritmul 1.3

Figura B_IV-33 ilustreaza problemele asociate cu algoritmul 1.3.


Intrarile a si b sunt planificate sa se modifice la acelasi moment de timp.
Daca evenimentele sunt regasite în secventa (b,0) , (a,1) ,atunci z nu este
planificat niciodata. Dar daca (a,1) este procesat mai întâi, aceasta rezulta
în (z,1) planificat pentru momentul 4. Apoi (b,0) cauzeaza (z,0) de
asemenea planificat pentru momentul 4.De aici, la momentul 4, z va
suferi atît o tranzitie 0→1 cît si una 1→0, care vor crea un "impuls" de
latime 0. Desi propagarea acestui impuls poate sa nu puna probleme, este
inacceptabil ca rezultatele sa depinda de ordinea procesarii evenimentelor
concurente.

Activated = ∅
for every eveniment (i , vi') pîna la momentul curent
begin
v(i) = vi'
for every j din lista fan-out-urilor luii
begin
actualizeaza valorile de intrare pentru j
vj' = evalueaza (j)
Diagnoza 209

if vj' ≠ lsv (j) then


begin
t' = t + d(j)
if t' = lst(j)
then anuleaza evenimentul (j, lsv(j)) la momentul t'
planifica (j,vj') pentru momentul t + d(j)
lsv(j) = vj'
lst(j) = t'
end
end
end

Figura B_IV-34 Algoritmul 1.4 - strategie one - pass cu suprimarea


impulsurilor de latime 0

Algoritmul 1.4, din figura B_IV-34, depaseste aceasta problema prin


detectarea cazului în care iesirea portii este planificata repetat pentru
acelasi moment de timp si prin anularea evenimentului planificat
precedent. Identificarea acestei situatii este ajutata de mentinerea
ultimului moment de timp planificat, lst(j) ,pentru fiecare poarta.
Sa verificam daca cu aceasta rezervare suplimentara, strategia one-pass
este înca cea mai eficienta. Numarul de inserari în setul Activated
,efectuat în timpul unei simulari, de catre algoritmul 1.2 este aproximativ
Nf ;acestea sunt eliminate în algoritmul 1.4. Algoritmul 1.4 efectueaza
verificarea pentru impulsuri de latime 0 numai pentru porti cu
evenimente de iesire, deci doar de N ori. Anularea unui eveniment
prevazut anterior este o operatie foarte scumpa, pentru ca implica o
cautare a evenimentului. Cu toate acestea, în cele mai multe cazuri t+d(j)
> lst(j) ,deci anularea evenimentului este putin probabila, si costul asociat
poate fi ignorat. De aceea, putem concluziona ca strategia one-pass este
mai eficienta.

Inelul sincronizarilor

Cu lista de evenimente implementate de structura de date din figura


B_IV-27, planificarea unui eveniment pentru momentul t necesita mai
210 Fiabilitate si Diagnoza

întâi o lista ordonata a antetelor pentru a gasi pozitia pentru momentul t.


Cautarea este proportionala cu lungimea listei de antete, care în general
creste cu marimea si activitatea circuitului. Lista antetelor este de obicei
densa, adica diferentele între momentele consecutive de timp la care sunt
planificate evenimentele sunt mici. Aceasta sugereaza ca angajarea unui
tablou de antete (figura B_IV-35) este mai eficienta decât o lista
înlantuita, întrucât cautarea este evitata prin folosirea momentului t
pentru a asigura un index în tablou.

ti + M - 1

ti (mod M) ti i,vi’ j,vj’

ti + 1

M-1

Figura B_IV-35 Inelul sincronizarilor

Dezavantajul este ca procesul avansarii timpului de simulare trebuie


acum sa scaneze toate antetele (care urmeaza momentului curent) pâna
cînd urmatorul antet cu activitate este gasit. Dar daca antetele sunt dense,
atunci aceasta reprezinta doar un inconvenient minor.
Tabloul de antete si listele asociate lui stocheaza evenimentele
planificate sa apara între momentul curent de simulare t c si t c +M-1
,unde M este marimea tabloului. Antetul pentru evenimente planificate la
un moment t apare în tablou în pozitia t modul M. Din cauza structurii
circulare induse de operatia modulo M, tabloul este numit inelul
sincronizarilor. Orice eveniment planificat pentru momentul t c +d ,unde
d < M ,poate fi inserat în lista de evenimente fara cautare. Evenimentele
din urma rangului inelului (d ≥ M) sunt stocate într-o lista de evenimente
"îndepartate" ca în figura B_IV-27. Inserarile în lista îndepartata necesita
Diagnoza 211

cautare, dar în general cele mai multe evenimente vor fi procesate direct
din cercul sincronizarilor. Pentru a reduce numarul de antete din lista
"îndepartata" la minimum, evenimentele di aceasta lista ar trebui aduse în
inel de îndata ce momentul lor devine inclus în domeniul inelului.

10.2.Alte valori logice

10.2.1.Logica ternara

Logica ternara permite mai multor dispozitive sa partajeze aceeasi


resursa (fir), numit, de exemplu, magistrala. O magistrala conecteaza
iesirile mai multor bus-driver-e(figura B_IV-36).
E1

O1
I1

E2 functie
pull-up
O2 (pull-down)
I2

E3
O3
I3

Figura B_IV-36 (a) Magistrala

E
O
I

if E = 1 then O = 1
if E = 0 then O =Z

Figura B_IV-36 (b) Driver de magistrala


212 Fiabilitate si Diagnoza

Fiecare driver de magistrala este controlat de un semnal activat E. Cînd


E=1 driverul este indisponibil si O trece în starea de înalta impedanta,
notata cu valoarea logica aditionala z. O=z înseamna ca iesirea este
deconectata de la magistrala, deci permite celorlalte drivere sa controleze
magistrala. În functionarea normala, cel mult un driver este disponibil la
fiecare moment de timp. Situatia în care doua drivere conduc magistrala
la valori binare opuse se numeste conflict si poate duce la defectarea
fizica a dispozitivului implicat. O functionare pull-up (pull-down)
,realizata prin conectarea magistralei la alimentare (masa) printr-o
rezistenta asigura o valoare logica "lipsa" 1 (0) pe magistrala cînd toate
driverele sunt indisponibile.
O magistrala reprezinta o alta forma de logica "filara" si poate fi
modelata în mod similar de o componenta "fictiva", a carei functie este
data în figura B_IV-37. Observam ca în timp ce valoarea observata pe
magistrala este valoarea calculata fortat de functia magistralei, pentru
fiecare driver simulatorul ar trebui sa mentina si valoarea sa proprie
,obtinuta din evaluarea driverului. O sarcina a rutinei de evaluare a
magistralei este sa raporteze conflictele, sau potentialele conflicte,
utilizatorului.

0 1 Z u
0 01 u2 0 u3
1 u2 12 1 u3
Z 0 1 Z4 u
u u3 u3 u u3

Figura B_IV-37 Functia logica a unei magistrale cu doua intrari


1 - semnaleaza mai multe drivere activate
2 - semnaleaza conflictul
3 - semnaleaza un potential conflict
4 - transforma în 1 ( 0 ) daca este prezenta functia pull-up (pull-down)

Uneori poate fi utila raportarea situatiei cînd mai multe drivere sunt
disponibile, chiar daca valorile lor nu sunt în opozitie. Cînd toate
driverele sunt indisponibile, valoarea z rezultanta este convertita la o
Diagnoza 213

valoare binara daca este prezenta o functie pull-up (pull-down), altfel


dispozitivele conduse de magistrala vor interpreta valoarea z ca fiind u.
Reamintim ca valoarea logica necunoscuta u reprezinta o valoare în setul
de valori {0,1}. În simulare, atît intrarea I cît si semnalul E al unui driver
de bus pot avea oricare din valorile logice {0,1,u}. Atunci care ar trebui
sa fie valoarea iesirii unui driver cu I=1 si E=u ? O analiza de la caz la
caz arata ca una are nevoie de o noua valoare logica "necunoscuta".
Figura B_IV-38 prezinta o tabela de adevar completa a unui driver de
magistrala; rezultatele pentru E=u sunt date ca seturi de valori.
0 1 u
0 Z 0 {0,Z}
1 Z 1 {1,Z}
u Z u {u,Z}

Figura B_IV-38 Tabelul de adevar pentru un driver de magistrala

10.2.2.Logica MOS

În acest capitol descriem mai multe tehnici care permit extinderea


metodelor traditionale de simulare la componente MOS. Componenta de
baza în logica MOS este poarta de transmisie (figura B_IV-39(a)) care
functioneaza ca un comutator controlat de semnalul de poarta G. Când
G=1, tranzistorul este în functiune si comutatorul este închis, deci
conecteaza terminalele sursa(S) si drena(D); cînd G=0 tranzistorul este
oprit si comutatorul este deschis. Desi o poarta de transmisie este
intrinsec bidirectionala ,ea poate fi folosita ca un element uni- sau
bidirectional. Ca element unidirectional (figura 3.39(b)) functionarea sa
este similara celei unui driver de bus, exceptând faptul ca atunci cînd
poarta de transmisie este deschisa, linia conectata la iesirea sa îsi
pastreaza valoarea precedenta. Aceasta este cauzata de încarcarea stocata
în capacitatea parazita C asociata cu firul de iesire. (Dupa un timp lung
de cadere ,C va fi înlaturat, dar circuitele obisnuite functioneaza suficient
de rapid ,asa încât timpii de cadere pot fi considerati infiniti). Daca
iesirea portii de transmisie este conectata la o magistrala fara o functie
pull-up (pull-down) (figura B_IV-39(c)) valoarea memorata este ultima
valoare fortata de pe magistrala. Cu toate acestea, valoarea stocata este
depasita de valoarea condusa de oricare poarta (conectata la aceeasi
214 Fiabilitate si Diagnoza

magistrala) care este pornita si deci asigura o cale de iesire pentru


încarcarea stocata.
G

D S C
(a) (b)

(c)

Figura B_IV-39 (a) Poarta de transmisie


(b) Poarta de transmisie folosita drept componenta
unidirectionala
(c) Poarta de transmisie conectata la o magistrala

Acest comportament ilustreaza conceptul de forta logica ,care este o


masura digitala a capacitatii relative curente de conducere a liniilor de
semnal. Valorile stocate în fire, numite si flotante ,sau ineficiente (slabe)
si care sunt notate prin z 0 si z1 ,corespund capacitatii de conductie a
curentilor josi. Acestea pot fi depasite de valorile tari (0 si 1) furnizate de
iesirile portilor în functiune (sau alimentari, masa ,iesiri primare) care au
capacitatea de a conduce curentii tari. Diagrama data în figura B_IV-40
arata relatia între un set de valori tipic pentru simularea MOS. Nivelul
unei valori în diagrama corespunde puterii sale. Valoarea necunoscuta u
este cea mai puternica, si înalta impedanta z cea mai slaba. valoarea slaba
necunoscuta z u semnifica o încarcare necunoscuta stocata, asociata unui
conductor. Functia B a unei magistrale conduse cu valorile v1 , v 2 ,K , v n
Diagnoza 215

poate fi definita ca producând o valoare unica vi =B( v1 , v 2 ,K , v n ) unde


v c este cea mai slaba valoare a carei putere este mai mare decât puterea
fiecarei vi (1≤ i ≤ n). Deci B(0,1)=u ,B( z 0 ,1)=1,B( z 0 , z1 )= z u , B(1,z)=1
.
Conceptul de putere permite ca încarcatura pull-up conectata la
alimentare sa fie tratata ca o componenta logica, numita atenuator , a
carui functie este sa transforme valoarea 1, puternica, asigurata de linia
de alimentare într-o valoare z1 pentru magistrala. Aceasta valoare este
depasita de o valoare puternica condusa de fiecare poarta, si depaseste
valoarea z asigurata de portile care nu functioneaza. Similar, o
încarcatura pull-down conectata la masa transforma o valoare 0 într-o
valoare z 0 .
u

0 1

Zu

Z0 Z1

Figura B_IV-40 Valori tipice folosite în simularea MOS si puterile lor


relative

Figura B_IV-41(a) prezinta o poarta de transmisie folosita drept


comutator bidirectional. Cînd G=0, comutatorul este deschis, si C si F
sunt independente. Dar cînd G=1, C si F devin conectate printr-o
216 Fiabilitate si Diagnoza

magistrala. Un mod de modelare a bidirectionalitatii unei porti controlate


de G este cu doua porti unidirectionale conectate ca în figura B_IV-41(b).

10.3.Alte modele de întârziere

10.3.1.Întârzieri ale tranzitiilor

Conceptual, modelul întârzierii crestere/cadere este o simpla extensie a


modelului întârzierii independent de tranzitie. În locul folosirii unei
valori de întârziere pentru planificarea evenimentelor, se selecteaza
întârzierile de crestere si cadere ale unui element, depinzând de rezultatul
evaluarii sale. Întrucât întârzierile de crestere si cadere sunt asociate
respectiv cu tranzitii 0→1 si
1→0, o prima întrebare este care întârzieri ar trebui folosite pentru
tranzitii ce implica valoarea u. De exemplu, o tranzitie 0→u este sau o
tranzitie 0→1 sau nici un eveniment. Deci daca un eveniment apare,
întârzierea sa asociata este întârzierea de crestere. Similar tranzitia u→1
va folosi întârzierea de crestere, si tranzitiile 1→u si u→0 vor folosi
întârzierea de cadere.
A

B
C

G (a)

F
E

(b)
G G

D
Diagnoza 217

Figura B_IV-41 (a) Poarta de transmisie folosita drept componenta


bidirectionala
(b) Modelata cu porti unidirectionale

Exemplul 1.3:consideram un inversor cu d r =12 si d f =7. Presupunem


ca un puls 1→0→1 de latime 4 soseste la intrarea sa. Prima tranzitie de
intrare (aparând la momentul 0) rezulta în planificarea iesirii sa treaca la
1 la momentul 0 + t r = 12 . A doua tranzitie de intrare la momentul 4 ar
cauza planificarea iesirii sa treaca la zero în momentul 4 + t f = 11 .
Aceasta secventa "imposibila" de evenimente apare din cauza propagarii
mai rapide a efectului celei de-a doua tranzitii de intrare decât a efectului
primeia. Aici rezultatul corect poate fi ca iesirea nu se modifica de loc;
deci primul eveniment ar trebui anulat si al doilea neplanificat. Observam
ca pulsul de intrare este suprimat, chiar fara un model de întârziere
inertiala.

Process _result (j,vj')


begin
while vj' ≠lsv(j)
begin
d = întîrzierea pentru tranzitia lsv(j)→vj'
t' = t + d
if t' > lst(j) then
planifica (j,vj') pentru momentul t'
lst(j) = t'
lsv(j) = vj'
return
end
anuleaza evenimentul (j, lsv(j)) la momentul lst(j)
actualizeaza lst(j) si lsv(j)
end
end

Figura B_IV-42 Procesarea rezultatului cu modelul întîrzierii de


crestere/cadere
218 Fiabilitate si Diagnoza

Dupa cum arata acest exemplu, dificultatea principala asociata cu


modelul întârzierii de cadere/crestere apare cînd evenimentele planificate
anterior trebuie anulate. Fie valoarea vi calculata de evaluarea unei porti
activate la momentul curent t. Procedura Process rezult ,schitata în figura
B_IV-42, proceseaza rezultatul evaluarii si determina daca anularea
evenimentului este necesara. Pentru aceasta analiza, presupunem ,ca si în
algoritmul 1.1, ca pentru fiecare semnal j, se mentine ultima sa valoare
planificata lsv(j), si ultimul sau moment planificat -lst(j). În caz "normal",
noul eveniment al lui j apare dupa ultimul eveniment planificat al lui j.
Cînd ordinea acestor doua evenimente nu este inversata, valoarea v j
ajunge la iesire înaintea lui lsv(j), si ultimul eveniment planificat este
anulat. Dupa aceasta ,lsv(j) si lst(j) sunt actualizate pentru a corespunde
noului ultim eveniment planificat al lui j si întregul proces este repetat.
Daca dupa anularea ultimului sau eveniment planificat, j mai are alte
evenimente pâna la el, gasirea ultimului eveniment necesita o cautare în
lista de evenimente. Altfel, lsv(j) poate fi setat la valoarea curenta a lui j,
si lst(j) poate fi setat la timpul curent de simulare. Aceasta analiza este
ajutata de mentinerea numaratorii evenimentelor care s-au petrecut, ale
fiecarui semnal.
Sa aplicam aceasta procedura pentru manipularea rezultatelor celei de-a
doua evaluari a inversorului din exemplul 1.3. Fie j iesirea inversorului.
La momentul t=4, ultimul eveniment planificat este o tranzitie la lsv(j)=1
la momentul lst(j)=12.Rezultatul celei de-a doua evaluari este v j ′=0.
Întârzierea d pentru tranzitia lsv(j)→ v j ′ este d f =7, asa încât
evenimentul ar aparea la momentul t′=11. pentru ca t′< lst(j) ,evenimentul
planificat pentru momentul 12 este anulat. Întrucât nu mai sunt
evenimente care s-au petrecut pâna la acest eveniment în j, lsv(j) este
setat la valoarea curenta (0) si lst(j) este setat la t=4. Acum v j ′=lsv(j) si
nici un eveniment nu este planificat.

10.3.2.Întîrzieri inertiale

Modelul întârzierii inertiale duce la probleme similare celor ale


modelului crestere/cadere. Aici anularea evenimentelor este necesara
pentru implementarea filtrarii impulsurilor. De exemplu ,consideram o
Diagnoza 219

poarta j cu întârziere inertiala de iesire d i .Presupunem ca j a fost


planificat sa treaca la lsv(j) la momentul lst(j), si ca o evaluare secunda a
lui j a calculat o noua valoare v j ≠ lsv(j) , care ar aparea la momentul t′.
Daca t′ - lst(j)< t, atunci pulsatia iesirii este suprimata prin anularea
ultimului eveniment planificat în j.

10.3.3.Întîrzieri ambigue

În modelul întârzierilor ambigue, întârzierea de transport a unei porti


este în domeniul [ d m , d M ] (presupunem întârzieri independente de
tranzitie). Deci cînd poarta raspunde unei tranzitii aparând la o intrare la
momentul t, iesirea sa se va modifica la un anumit moment din intervalul
[t + d m , t + d M ] (vezi figura B_IV-14(c)). Pentru a reflecta aceasta
incertitudine în simulare, vom folosi logica cu sase valori din figura
B_IV-24, unde 0/1 (1/0) este valoarea unui semnal în timpul intervalului
în care se modifica de la 0 la 1 (de la 1 la 0). Deci o iesire ce se modifica
de la 0 la 1 trece mai întâi de la 0 la 0/1, pastreaza aceasta valoare pe
intervalul d M - d m , , apoi trece de la 0/1 la 1. Pentru uniformitate, vom
trata o tranzitie 0→1 a unei intrari primare ca un eveniment 0→0/1,
urmat, în acelasi timp, de un eveniment 0/1→1. Cînd planificam iesirea
unei porti, întârzierea sa minima d m va fi folosita pentru modificarile la
0/1 si 1/0, si cea maxima d M pentru modificari la valori binare.
Exemplul 1.4.În circuitul din figura B_IV-43 întârzierea lui C este între 2
si 4, iar cea a lui D între 2 si 5. Presupunem ca la momentul 0, A se
modifica de la 0 la 1. C este evaluat de doua ori, mai întâi cu A=0/1, apoi
cu A=1. Prima evaluare cauzeaza modificarea lui C la 0/1 dupa o
întârziere d m (C)=2; ca rezultat al evaluarii secunde, C este planificat sa
ia valoarea 1 dupa o întârziere d M (C)=4. La momentul t=2, D este
evaluat cu C=0/1, si noua sa valoare 1/0 este planificata pentru momentul
t + + d m (D)=4. Urmatoarea evaluare a lui D (la momentul 4), produce o
valoare binara (0) care este planificata folosind întârzierea d M (D)=5. Un
simulator ce foloseste modelul de întârziere ambigua calculeaza cînd
poate aparea cea mai devreme si cea mai târzie modificare a semnalului.
220 Fiabilitate si Diagnoza

1 C D
B
A
[2,5]
[2,4]

A 4

2 0/1
C
5
D
2 1/0

Figura 3.43 Simularea cu model de întîrziere ambigua


1 C D
B
A
[2,5]
[2,4]

A 4

2 0/1
C
5
D
2 1/0

Figura B_IV-43 Simularea cu model de întârziere ambigua

În prezenta fan-out-urilor reconvergente, aceasta analiza poate duce la


rezultate pesimiste. De exemplu, în circuitul din figura B_IV-44,
presupunem ca A se modifica de la 1 la 0 pe durata intervalului [20,30].
Daca întârzierea lui B este între 6 si 10, simulatorul prezice ca B se
modifica de la 0 la 1 în intervalul [26,40]. Deci, se pare ca în intervalul
[26,30] A=1/0 si B=0/1, ceea ce creeaza un hazard static la C. Acest
rezultat ,cu toate acestea, este incorect pentru ca tranzitiile lui B si A nu
sunt independente. Tranzitia lui B apare între 6 si 10 unitati dupa tranzitia
Diagnoza 221

lui A, asa încât nici un puls nu poate aparea la C. Procesarea aditionala


este ceruta pentru înlaturarea ambiguitatilor "comune" între intrarile
aceleiasi porti.

C
A

[6,10]

A
1/0

20 30

0/1
B
26 40

0*
C

Figura B_IV-44 Rezultat pesimist în simularea cu întârziere ambigua

Un mod mai putin pesimist de tratare a întârzierilor ambigue este


executarea mai multor simulari, fiecare precedata de o selectie aleatoare a
valorii întârzierii fiecarui element, din domeniul sau specificat.
Cînd un tester aplica vectorii d intrare unui circuit, intrarile nu se vor
modifica în acelasi timp din cauza nesincronizarilor introduse de tester.
Acestea pot fi luate în considerare prin adaugarea unei porti cu întârzieri
ambigue fiecarei intrari primare a modelului în simulare.

10.4.Controlul oscilatiilor
Desi procedura 1.2 poate detecta potentialele oscilatii, modelul arbitrar
de întârziere care este folosit duce adesea la rezultate pesimiste. Problema
aceasta nu va aparea la modelele mai realiste. Alt dezavantaj al procedurii
1.2 este neaplicabilitatea ei pentru intrari în timp real. Se vor discuta în
aceasta sectiune alte metode de detectare a oscilatiilor în simularea
condusa de eveniment.
222 Fiabilitate si Diagnoza

S y S y
1
0
G
u

1 1

R y y
R
(a)
(b)
Figura B_IV-45 (a) Latch (b) Model de control al oscilatiei

De ce este importanta aceasta problema? O simulare corecta a unui


circuit care oscileaza va duce la planificarea si procesarea repetata a
aceleiasi secvente de evenimente, cu programul de simulare aparent prins
într-o bucla infinita. Aceasta poate consuma mult din timpul CPU. Figura
B_IV-45 ilustreaza un mod simplu de oscilatie. Presupunem ca fiecare
poarta are o întârziere de 3 ns, si initial S=R=1, y =0 si y =1. Daca S
trece la 0 pentru 4 ns, y si y vor oscila ca rezultat al unui puls continuu
ce strabate bucla compusa din cele doua porti.
Procesul detectarii oscilatiei pe durata simularii si al efectuarii actiunilor
potrivite pentru corectare este numit controlul oscilatiilor . Actiunea
corectoare este setarea semnalelor pe u. În plus ,este de dorit sa se
informeze utilizatorul despre oscilatie si sa se asigure o optiune pentru
abandonarea simularii, care poate deveni nefolositoare. Oscilatia poate fi
controlata la doua niveluri, numite control local si control global.
Controlul local al oscilatiei este bazat pe identificarea conditiilor
cauzatoare de oscilatii în subcircuite specifice, ca latch-urile si flip-flop-
urile. De exemplu în figura B_IV-45 y = y =0 este o conditie de
oscilatie. Observam ca aceasta implica R=S=1, care este conditia pentru a
se putea propaga în bucla. De asemenea, starile y = 0, y = u si
y = u, y = 0 pot cauza oscilatii. Actiunea de corectare este y = y = u .
Controlul local al oscilatiei poate fi implementat în mai multe moduri.
Un mod este sa avem conditia de simulator monitor, specificata de
utilizator, pentru anumite porti. Acestea sunt porti cuplate încrucisat,
Diagnoza 223

folosite în latch-uri. Un mod mai usor de a implementa controlul local al


oscilatiei este prin tehnici de modelare. Daca latch-urile sunt modelate ca
elemente primitive sau elemente functionale definite de utilizator,
verificarea conditiilor cauzatoare de oscilatii poate fi parte a modelului.
Modelele la nivel de poarta pot fi folosite pentru detectarea si corectarea
oscilatiilor. Figura B_IV-45(b) arata un astfel de model. În functionarea
normala a latch-ului ( y = 0 si y = 1, sau y = 1 si y = 0 , sau y = y = 1)
G=1 si aceasta valoare afecteaza restul circuitului. Cu toate acestea,
oricare dintre starile "ilegale" ( y = y = 0 ,sau y = 0 si y = 0 , sau y = 0
si y = u ) va cauza G=u ,care pe rând (R=S=1) va opri oscilatia prin
setarea y = y = u .
Pentru ca controlul local al oscilatiei este aplicat numai pentru
subcircuite specifice, poate esua în detectia oscilatiilor care implica bucle
cu revenire ce nu sunt continute în aceste subcircuite. Identificarea
corecta a acestui tio de oscilatie globala nu este realizabila prin calcul,
întrucât ar necesita detectarea secventelor ciclice de valori pentru fiecare
semnal din circuit. Majoritatea simulatoarelor implementeaza controlul
global al oscilatiei prin identificarea activitatii neobisnuit de înalte pe
durata simularii. O procedura tipica este numararea evenimentelor ce apar
dupa fiecare modificare a unei intrari primare. Cînd numarul depaseste o
limita predefinita, simulatorul presupune ca oscilatia a fost detectata si
seteaza toate semnalele active curent la u pentru terminarea activitatii
cauzate de oscilatie. Desigur ,procedura poate eticheta în mod eronat o
activitate înalta legitima ca o oscilatie, dar utilizatorul poate corecta
aceasta eroare de etichetare prin ajustarea limitei de activitate.

11.Masini de simulare

Simularea logica a circuitelor complexe VLSI este un proces consumator


de timp. Aceasta problema devine mai acuta prin folosirea extensiva a
simularii în ciclul de proiectare, pentru a valida numeroasele modificari
de proiectare suferite de un proiect. O solutie a acestei probleme este
asigurata de hardware-ul special proiectat pentru accelerarea simularii
prin folosirea arhitecturilor de procesare paralele si / sau distribuite. Un
astfel de echipament hardware cu scop special, numit masina de
simulare ,sau accelerator hardware al simulatorului este de obicei atasat
224 Fiabilitate si Diagnoza

la un calculator gazda de uz general. Tipic, gazda pregateste si încarca


modelul care executa simularea si returneaza rezultatele la gazda.