Testarea Circuitelor Integrate Folosind Ca Metoda de Compresie Analiza de Semnatura

PARTEA I – Noțiuni teoretice

1. Introducere

1.1 Defecte, erori

Sistemele digitale reprezintă circuite digitale complexe. Testarea propiu-zisă a unui sistem digital este un experiment care are in cele mai frecvente cazuri două scopuri:

– detecția erorilor de funcționare

– localizarea defectelor

Complexitatea actuală, atât structurală cât și functională, a tuturor echipamentelor electronice (de calcul, industriale, etc.), completată cu exigențe de fiabilitate din ce in ce mai mari, a determinat implicarea testării automate in toate fazele de producție a acestor echipamente.

Când se lucrează in domeniul proiectării sistemelor cu un grad de testabilitate si implicit de fiabilitate ridicată nu se pot evita termenii : defect, eroare, defectare. Există o relație de tip cauză-efect între acești termeni. Defectele sunt cauzele erorilor, erorile sunt cauzele defecțiunilor.

Defectul este o imperfecțiune fizică sau logică care apare în cadrul unei componente hardware sau software. Ca exemple de tip fizic pot fi amintite scurtcircuitele și întreruperile traseelor electrice, întreruperi sau imperfecțiuni în structurile semiconductoare, etc. Ca defect software poate fi amintită o buclă de program din care nu se mai poate ieși.

Eroarea este manifestarea defectului și reprezintă o deviație de la corectitudinea și acuratețea de execuție a funcțiilor. De exemplu datorită unei atingeri fizice a două trasee, o linie de date este blocată in “0” logic. Dacă funcționarea circuitului impune trecerea in “1” logic, evident, va apare o eroare. Erorile conduc la executarea incorectă uneia sau mai multor dintre funcțiile sistemului și in consecința la căderea acestuia sau funționarea lui defectuoasă.

Defecțiunea sau funcționarea defectuoasă, reprezintă executarea unei funcții sau a unui set de funcții sub standardele prevăzute din punct de vedere calitativ sau cantitativ. Aceste trei aspecte le putem asimila trei zone bine delimitate.

Prima zonă este cea fizică în care apar defectele. Ea include componentele si dispozitivile semiconductoare, elemente mecanice, sursele de alimentare și altele elemente care compun un sistem. O a doua zonă este cea informațională in care se manifestă erorile. Erorile afectează unitați de informație cum ar fi octeții de date dintr-un sistem cu microprocesor. Erorile specifice acestei zone informaționale includ erorile de paritate, mesajele de eroare, biții eronați. A treia zonă este denumită a utilizatorului în care acesta sesizează efectele erorilor apărute. Aici se materializează defecțiunile si apar devieri de la comportamentul dorit sau așteptat al sistemului.

Aceste relații de tip cauză-efect conduc la alți termeni: latența defectului și latența erorii. Latența defectului reprezintă intervalul de timp între apariția defectului și momentul apariției erorii datorate acelui defect. Un defect latent este un defect care a apărut în sistem, dar nu a produs înca o eroare, adică nu a apărut încă efectul lui. La fel se definește și latența erorii ca timpul scurs de la apriția erorii până la manifestarea căderii sistemului. Utilizând modelul celor trei zone, se deduce că timpul total între momentul apariției defectului și momentul căderii sistemului este egal cu latența defectului însumată cu latența erorii.

Defectele se datorează cauzelor celor mai diverse de la cele interne (defecte în interiorul dispozitivului electronic), până la cele externe (radiații, interferența electromagnetică).

1.2. Cauzele defectelor

Posibilele cauze ale defectelor se pot grupa astfel: specificații de proiectare greșite: algoritmi, arhitecturi incorecte, specificații hardware și software greșite sau incomplete. De exemplu se poate estima greșit diagrama de timp pentru un anumit circuit digital.

-implementari greșite: se introduc erori datorate proiectării inițiale proaste, datorită utilizării componentelor cu parametri sub cei standard, greșeli de cablare pe placă cu circuit imprimat, scurtcircuite cauzate de lipire defectuoasă, coduri software greșite.

-componente defecte: defecțiuni tipice fiind imperfecțiuni aleatoare sau tehnologice în structura semiconductoare, terminale desprinse. De exemplu, contactele de aluminiu din interiorul circuitului integrat se subțiaza în timp și se pot rupe datorită migrării electronilor sau coroziunii. Factorii de mediu, cum ar fi: temperatura, umiditatea, vibrațiile, accelerează îmbătrânirea componentelor.

-perturbații exterioare sistemului: radiații, interferența electromagnetică, greșeli de operare datorate factorului uman, factori de mediu (extreme de temperatura, umiditate).

O caracteristică a defectelor este extinderea defectelor, în care se reflectă defectul ca și cauza pentru erori. Această caracterizare este relativă la dimensiunea obiectului investigat, defectele putând fi locale sau globale. Deasemenea se poate defini și valoarea defectului care poate fi determinată atunci când prin operații metrologice se cunoaște exact abaterea față de situația de funționare fără defect. Dacă se percepe numai prezența calitativă a defectului, atunci valoarea lui este nedeterminată.

Defectele pot fi parametrice sau logice. În cazul circuitelor logice caracterizarea principalilor parametri statici este oferită de intervalul de imunitate la perturbații în regim static este oferită de intervalul de imunitate la perturbații în regim static, iar în regimul dinamic aceeași carcterizare este oferită de intervalul de imunitate la perturbații în regim dinamic.

Funcționarea circuitelor digitale este influențata și de parametrii temporali ai semnalelor aplicate la intrare. Principiul de descriere a parametrilor temporali ai acestor semnale este același ca la orice alt impuls de formă trapezoidală neideală.

Amplitudinea semnalului este considerată ca fiind diferența dintre valorile stabile ale celor două nivele logice si, fără să se tină seama de supracreșterile semnalului. Timpul de creștere al semnalului este definit ca timpul în care semnalul crește de la 10% la 90% din valoarea amplitudinii. Timpul de cădere al semnalului este definit ca timpul în care semnalul scade de la 90% la 10% din valoarea amplitudinii. Durata impulsului se masoară de obicei la 50% din valoarea impulsului. În cazul circuitelor logice tensiunea de prag de comutare nu coincide în general cu această valoare și de aceea se preferă măsurarea duratei la valoarea pragului de comutare.

1.3.Tipuri de defecte

1.3.1.Defecte logice

Clasa defectelor logice modifică valorile variabilelor logice atașate semnalelor prezente în diferite noduri ale circuitului testat. Cauza acestor defecte este de natură fizică: întreruperi, scrutcircuite prezente atât la nivelul plachetelor electronice cât și în interiorul cipurilor.

Aceste tipuri de defecte, determină fixarea valorii logice dintr-un anumit nod al circuitului la valoarea logică “0” sau “1”, aceasta indiferent de evoluția celorlalte semnale logice din circuit. Să analizăm modul în care pot fi identificate aceste tipuri de defecte pornind de la erorile detectate în funcționarea structurii logice. În cazul circuitelor combinaționale să considerăm cazul unei porți SINU care se găsește undeva plasată în interiorul structurii logice analizate. Acest fapt înseamnă că semnalele de test nu pot fi aplicate direct la pinii porții investigate. Aceste semnale de test vor trebui propagate prin intermediul altor circuite logice.

fig.1.Exemplu pentru testarea unui circuit combinațional

În cazul porții considerate, defectul de tip PP1 prezent la nivelul pinului de ieșire 0, este echivalent ca mod de manifestare logică cu defectul PP0 prezent la nivelul unui pin de intrare, cazul pinului I1. Pentru a putea decide între cele două defecte posibile trebuie deplasată investigația la nivelul nodurilor circuitelor care comandă poarta pe care am analizat-o.

Pentru a pune în evidența influența defectelor de tip PP1 de la nivelul intrărilor asupra ieșirii) este suficient să se asigure la nivelul intrărilor combinațiile 01 și 10.

Iar pentru a surprinde la ieșire un defect de tip PP la una dintre intrări este suficientă aplicarea combinației 11. Deci pentru investigarea porții de mai sus nu este nevoie să fie aplicate toate cele patru combinații posibile la intrări. Această concluzie poate fi generalizată, reținând ca pentru punerea în evidență a tuturor defectelor de tip PP0 și PP1 ce pot apare la intrările unui circuit combinațional nu este necesar să se aplice toate combinațiile pentru aceste intrări ( pentru un circuit cu n intrări). O altă concluzie are implicații în reducerea timpului afectat operației de testare. Trebuie avut în vedere că în realitate modificarea celor combinații la intrările unui circuit ce se găsește în interiorul structurii testate presupune aplicarea unui număr mult mai mare de vectori de test la intrările de test utilizate, deoarece trebuie avută în vedere propagarea semnalelor prin circuitele care preced în structura circuitul analizat.

În cazul circuitelor secvențiale, trebuie să ne imaginăm cele două bistabile din schema de mai jos, undeva în interiorul schemei sistemului testat. Acest lucru implică în consecință că semnalele de test nu pot fi aplicate direct la pinii celor două bistabile.

fig.2.Exemplu pentru testarea unui circUit secvențial

În primul tabel de adevăr este prezentată o succesiune de semnale de intrare R și T care asigură trecerea celor două ieșiri prin toate stările posibile. Presupunem existența unui defect de tip PP1 la nivelul intrării R. Acesta poate fi cauzat, de exemplu, de întreruperea traseului pe plachetă și deci intrările sunt “în aer”. Pentru un circuit TTL acest fapt constituie prezența permanentă a unui “1” la intrarea respectivă. Cele patru situații, prezentate în continuare prin următoarele tabele de adevăr, arată că în prezența defectului evoluția ieșirilor este dependentă de starea inițială în care se găseau ieșirile la momentul inițial, al începerii testului (doua ieșiri = patru stări posibile). Deci la o anumită secvență de test pot fi asociate mai multe răspunsuri eronate. Pentru a evita o situație de incertitudine care apare trebuie să se cunoască starea circuitului la momentul inițierii testului.

Funcționare R cazul 1 cazul 2 cazul 3 cazul 4

corectă

Tabele de adevăr pentru circuit secvențial testat

O concluzie suplimentară care se poate desprinde pentru cazul circuitelor secvențiale este aceea că pentru o interpretare corectă a rezultatelor testului trebuie ca echipamentul de test să asigure inițierea circuitului.

1.3.2 Defecte de tip scurtcircuit

Defectele de tip scurtcircuit sunt generate de punți de legatură ce apar între trasee diferite de semnal. Acestea se pot găsi fie pe placheta cu trasee de cablaj imprimat, fie în interiorul cipului. În cazul în care defectele sunt prezente la nivelul cablajului imprimat ele sunt cauzate fie în procesul tehnologic de realizare a cablajului, fie în procesul tehnologic de realizare a lipiturilor. Aceste scurtcircuite pot apare între mai multe categorii de trasee.

În circuitul de mai jos se poate vedea cum scurtcircuitul de la ieșirea porții spre intrare va determina ca circuitul să aibă o comportare secvențială, stările ieșirilor vor depinde și de valorile lor anterioare. Pentru a pune în evidență acest tip de defect trebuie adoptată o metodă adecvată de test care eventual să nu presupună aplicarea unei succesiuni de semnale de test.

fig.3.Scurtcircuitul transformă circuitul în unul secvențial

Dacă în circuitul testat scurtcircuitul apare între două puncte între care există un număr impar de inversări, atunci circuitul poate oscila. Dacă timpul de propagare prin porțile din bucla creata este mic, rezultă oscilații de frecvență ridicată, care pot determina pentru semnalele din noduri valori intermediare celor două nivele logice.

fig.4. Apariția oscilațiilor datorită scurtcircuitelor

În exemplul de mai sus valorile logice din nodurile cfie în procesul tehnologic de realizare a cablajului, fie în procesul tehnologic de realizare a lipiturilor. Aceste scurtcircuite pot apare între mai multe categorii de trasee.

În circuitul de mai jos se poate vedea cum scurtcircuitul de la ieșirea porții spre intrare va determina ca circuitul să aibă o comportare secvențială, stările ieșirilor vor depinde și de valorile lor anterioare. Pentru a pune în evidență acest tip de defect trebuie adoptată o metodă adecvată de test care eventual să nu presupună aplicarea unei succesiuni de semnale de test.

fig.3.Scurtcircuitul transformă circuitul în unul secvențial

Dacă în circuitul testat scurtcircuitul apare între două puncte între care există un număr impar de inversări, atunci circuitul poate oscila. Dacă timpul de propagare prin porțile din bucla creata este mic, rezultă oscilații de frecvență ridicată, care pot determina pentru semnalele din noduri valori intermediare celor două nivele logice.

fig.4. Apariția oscilațiilor datorită scurtcircuitelor

În exemplul de mai sus valorile logice din nodurile circuitului permit propagarea variabilei u pe bucla creată prin existența scurtcircuitului. Dacă în schimb la întrările primei porți SI, P1 ambele valori logice ar fi “0”, atunci propagarea variabilei ar fi blocată la trecerea prin poarta P3.

Defectele de tip întrerupere apar în urma întreruperii legăturilor dintre componentele de pe placă sau în interiorul cipurilor. Dacă sunt întrerupte traseele de alimentare atunci circuitele nealimentate vor avea o comportare la ieșire de tip inaltă impedanță. Drept urmare, intrările comandate nu mai primesc semnal de comandă, situație cunoscută și sub denumirea de intrări lăsate în “aer”.

În situația întreruperii traseelor de semnal de pe plachete, consecinta funcțională este ca unele intrări nu mai primesc comanda caz în care se intamplă urmatoarele: intrările familiilor bipolare vor reacționa ca și cum ar avea o comandă de tip “1”, circuitele din familiile CMOS vor reacționa în funcție de modul în care se încarcă capacitățile echivalente de la intrări, deci nivelul prezent la intrări va fi unul incert.

În categoria defectelor de tip impuls logic eronat intră mai multe tipuri de defecte: dispariția unor impulsuri funcționale de scurtă durată, apariția unor impulsuri parazite de scurtă durată (glitches, spikes), modificarea parametrilor temporali ai impulsului (intârzierea impulsului, modificarea duratei lui). Aceste tipuri de defecte au următoarea caracteristică: ele se manifestă pe perioade de timp scurte decât durata pe care se aplică semnalele funcționale sau vectorii de test. Drept urmare, pentru identificarea prezenței lor, echipamentul de test trebuie să fie capabil să discearnă inpulsuri cu durata mai scurtă decât impulsurile de test aplicate. Cauzele aparițiilor acestor impulsuri sunt variate.

Matricile logice programabile (PLA-programmable logic arrays) sunt caracterizate de defecte specifice care constau în linii care sunt blocate pe o valoare logică, defecte de tip punte (scurtcircuit), noduri în plus sau care lipsesc. În anumite PLA-uri, fiecare nod poate fi programat on sau off. Modelul unui defect PLA generalizat poate fi inclus intr-unul din urmatoarele tipuri:

-Traseu blocat prin defecte

Toate defectele de tip trasee singulare sau multiple blocate pe o valoare logică sunt incluse în această categorie. Acest defect include blocare pe o valoare logică a traseelor de intrare, liniile produs și liniilor de ieșire. De asemenea, se include aici și blocările pe o valoare logică în registrii de intrare și de ieșire.

-Defecte de tip punte

Toate defectele de tip punte singulare sau multiple pentru liniile de intrare, liniile produs sau liniile de ieșire sunt luate în considerare aici. Defectele de tip punte între traseele de intrare și traseele produs, sau între traseele produs și cele de ieșire sunt de asemenea incluse. Scurtcircuitele între liniile de intrare și de ieșire sunt de asemenea posibile, deși probabilitatea pentru ele este mai mică. Mai mult, asemenea defecte creeză căi de reacție în circuit. Doar în situația în care se dorește o acoperire foarte ridicată a mulțimii de defecte, aceste defecte se iau în considerare.

-Defecte de intersecție

Un anumit nod poate exista într-o locație nedorită sau un nod poate lipsi de la locația dorită. Aceste defecte sunt cunoscute ca defecte tip noduri (intersecții) lipsa sau în plus, sau ca defecte de tip creștere sau micșorare de noduri. În anumite PLA-uri un comutator (switch) este folosit în nodul de intersecție, putând fi programat on sau off. Deoarece starea comutatorului definește dacă o anumită intersecție este sau nu prezentă, testarea pentru programabilitate acoperă orice defect de tip intersecție.

Un defect multiplu într-un PLA poate consta din mai multe defecte din categorii diferite. Toate defectele logice în PLA-uri pot fi incluse într-una dintre categoriile de mai sus. În PLA-uri, defectele de tip linii întrerupte sunt echivalente defectelor de tip blocare pe “0” logic și defectele de tip tranzistoare blocate echivalează cu defectele de tip intersecții lipsă. De asemenea, un PLA poate avea defecte parametrice sau temporale.

Pentru o caracterizare mai corectă a defectelor pentru memorii în literatura de specialitate se abordează o soluție prin care circuitul este impărțit în trei blocuri și anume: rețeaua de celule de memorie, circuitul de decodificare și circuitul scriere-citire sau amplificator. Într-o rețea de memorie o celulă poate avea un defect de tip cuplare cu o altă celulă.

În circuitul de decodificare, decodificatorul poate să nu acceseze celula dorită, poate adresa o altă celulă sau chiar mai multe celule simultan. Circuitul de tip citire-scriere poate avea defecte de tip blocare pe “0” sau “1” logic, care apar ca și celule de memorii blocate pe o valoare logică. În caracterizarea generală a defectelor pentru memorii am putea include: defect de tip celule de memorii blocate pe “0” sau “1” logic, defect de tip celule de memorii care oscileaza de la “1” la “0” si de la “0” la “1”, defect de tip celule de memorie scurtcircuitate între ele (cuplare de stare), defect de tip reținere de date. În general o memorie poate avea de asemenea un număr redus de defecte care pot fi modelate ca și tranzistoare blocate sau în saturatie. Pe langă acestea pot avea defecte parametrice sau de temporizare. De remarcat că defectele de temporizare include de asemenea timpul de acces al datelor, care este un parametru foarte important al memoriilor.

În cazul microprocesoarelor, care sunt circuite mai complexe, controlabilitatea și observabilitatea sunt foarte scăzute. În acest fel testarea pentru defecte de tip blocare pe valoare logică, scurtcircuite și întreruperi este extrem de dificilă, de lungă durată și costisitoare, fără a asigura o bună acoperire a setului de defecte posibile. Pentru a depăși acest obstacol, au fost dezvoltate modele ale defectului pentru a verifica funcționalitatea microprocesorului. Aceasta funcționalitate este legată de setul de instrucțiuni al microprocesorului. Se pleacă de la ipoteza că fiecare instrucțiune este compusă din multiple microinstrucțiuni și fiecare microinstrucțiune este compusă din multiple microcomenzi. În consecință se presupune existența unui defect în una din condițiile următoare:

-Una sau mai multe microcomenzi ale instrucțiunii nu este executată, ceea ce înseamnă că instrucțiunea nu este complet executată.

-În plus față de microcomenzile specificate, se execută alte câteva microcomenzi.

-Pentru o anumită instrucțiune, anumite microcomenzi specificate nu sunt

executate. În locul lor, alte microcomenzi nespecificate sunt executate.

Această caracterizare a defectelor nu acoperă nici un defect fizic. Rezultă că prin testarea unui microprocesor plecând de la caracterizarea defectelor nu vor fi identificate direct defecte fizice: blocare la această valoare logică, scurtcircuite sau întreruperi. De asemenea, nici defectele parametrice sau temporale nu sunt incluse aici. Viteza de execuție a instrucțiunilor de către microprocesor este un parametru important, care nu trebuie să fie neglijat în timpul testării.

Operarea corectă a unui circuit logic presupune ca intârzierile semnalelor de-a lungul căilor din circuit să fie cât mai mici decât o valoare limită specificată. Când limita este depasită se spune că circuitul are defecte de întârziere sau de propagare. În circuitele combinaționale detecția acestor defecte se face de obicei cu o secvență de două teste. La un moment de timp se aplică un vector de test t1 iar după ce semnalele din circuit s-au stabilizat, se aplică al doilea vector t2 la momentul . Acesta din urmă trebuie să propage o tranziție de la intrarea căii testate până la ieșirea ei. Întârzierile corespunzătoare tranzițiilor pozitive aplicate la intrarea căii pot să fie diferite de intârzierile de propagare ale tranzițiilor negative. Ieșirea căii se eșantionează la momentul , unde – corespunde vitezei de operare dorite. În lipsa defectelor, la momentulvaloarea logică de ieșire este cea corectă, adică valoarea corespunzatoare testului t2. În caz contrar, pe calea testată s-a detectat un defect de propagare. Secvența de test t1, t2 este robustă dacă și numai dacă detectează defectul indiferent de întârzierile porților din restul circuitului. Putem vorbi despre două modele de defecte: modelul cale defectă și modelul poartă defectă. Primul este mai realist, deoarece cumulează întârzierile tuturor porților de pe calea testată, însă prezintă două dezavantaje. Pe de o parte, numărul căilor poate fi foarte mare iar pe de altă parte, se risipește efort de calcul pentru testarea căilor nefuncționale. Modelul “poartă defectă” presupune ca depășirea limitelor de timp la propagare se datorează unei singure porți logice. Deși mai puțin realist, acest model este mai practic în cazul circuitelor mari.

Cantitativ, defectele de întârziere pot avea mărimi diferite. Acoperirea defectelor de propagare cu un set de pe ochi de test, în modelul cale defectă, se determină cu relația:

A=

Unde reprezintă numărul tuturor căilor din circuitul testat iar este numărul tuturor defectelor detectate. Întru-cât întârzierile depind de felul tranziției aplicate la intrarea căii, pe fiecare cale se definesc două defecte de propagare. Ca urmare, 2 reprezintă numărul tuturor defectelor. Cu toate că și depind exponențial de dimensiunile circuitului, ele se pot calcula în timp polinomial. Numărul se poate determina printr-o singură traversare a circuitului, de la ieșirile primare la intrările primare, într-un timp care depinde liniar de numărul conexiunilor din circuit. Procedura se poate descrie cam așa:

-fiecărei conexiuni j i se atribuie un număr N(j) ce reprezintă numărul căilor de la j la ieșirile primare, numărul atribuit oricărei ieșiri fiind 1;

– numărul atribuit oricărei intrări într-o poartă logică este egal cu numărul de la ieșirea porții;

-numărul atribuit unui stem este egal cu suma numerelor de pe ramurile lui de fanout;

-suma numerelor rezultate pe intrările primare reprezintă.

La estimarea lui se iau în considerare numai perechile robuste. Prin simularea circuitului fără defecte se determină subsetul conexiunilor situate pe căile ale căror defecte sunt acoperite cu o pereche de test. Utilizând o procedură similară cu aceea pentru determinarea numărului, se deduce numărul căilor definite de subsetul anterior. Acest număr este chiar numărul căilor defecte acoperite de perechea de test. Pentru următoarele perechi de test interesează numai defectele noi detectate. se obține prin sumarea tuturor defectelor noi detectate.

1.4. Modele de defecte funcționale

Modelele de defecte funcționale sunt utilizate frecvent la testarea microprocesoarelor și a memoriilor RAM. În cazul microprocesoarelor defectele pot fi impărțite în următoarele categorii:

-defecte de adresare care afectează funcția de decodificare a registrelor. Fie (R) funcția de decodificare a registrului R. În lipsa defectelor (R)=R. În prezența unui defect, fie nici un registru nu este accesat((R)=) fie se acceseaza un set de registre care include sau nu registrul R;

-defecte de adresare care afecteaza funcțiile de decodificare sau de secvențiere a instrucțiunilor. O instrucțiune este o secvența de microinstrucțiuni, fiecare compusă din microordine executate în paralel. Microordinile sunt operațiile elemente de transfer și manipulare a datelor. În prezența unui defect de adresare care afectează instrucțiunile fie nu sunt activate unele microordine, fie se activează în mod eronat unele, fie un alt set de microinstrucțiuni se activează în locul, sau impreună cu microinstrucțiunile corecte;

-defecte în funcția de stocare a datelor;

-defecte în funcția de transfer a datelor;

-defecte în funcția de manipulare a datelor;

Testarea defectelor menționate mai sus se face prin operații repetate de citire-scriere (READ-WRITE). Procedurile trebuie să fie “nedistructive” adică, după operația de testare orice registru sau celulă de memorie să conțină informația avută inițial.

Aprecierea calității testelor funcționale este dificilă. Dacă se dispune și de un model structural al sistemului testat, calitatea se poate obține prin intermediul acoperirii unor defecte structurale cu testele funcționale.

Metodele de testare sunt clasificate după mai multe criterii.

Un criteriu ar fi momentul când se face această testare . Ea se poate face simultan cu operarea normală a sistemului (testarea on-line și cea concurentă) și o activitate separată de operarea normală ( testarea off-line).

Un al doilea criteriu este după locul unde se află sursa testelor și analizorul răspunsurilor: testarea extremă cu particularitatea că, aplicarea testelor și verificarea răspunsurilor se realizează cu un dispozitiv exterior sistemului testat numit tester, autotestarea cu particularitatea ca testele sunt aplicate din interiorul sistemului testat, și autocontrol când verificarea răspunsurilor este facută chiar de sistemul testat.

Al treilea criteriu este cel al modului cum sunt produse testele împreună cu răspunsurile corecte: unde intâlnim testarea “cu modele stocate” (care sunt extrase dintr-un circuit cu memorie) si testarea “algoritmică” cu teste generate pe durata testării.

Al patrulea criteriu este modul de analizare al răspunsurilor corecte, mod care se face în două feluri: răspunsul observat este comparat bit cu bit cu răspunsul corect și răspunsul observat este comprimat într-o semnatură care va fi comparată cu semnatura corectă (testarea compactă).

Al cincilea criteriu ar fi viteza cu care sunt aplicati vectorii de test: viteza de aplicare este mult mai mică decât viteza de operare normală a sistemului (testarea statică) și testele sunt aplicate la viteza normală de operare (testarea dinamică).

Un ultim criteriu dar nu și cel din urmă ar fi felul conexiunilor care sunt accesibile pentru testare. Aici întâlnim două cazuri: numai conexiunile intrări/ieșiri primare (testare la pini) și conexiuni intrări/ieșiri primare și unele conexiuni din interiorul sistemului (testare cu sonde ghidate , testare bed-of-nails, electron-beam și emulare în circuit).

2. Simularea defectelor

Simularea defectelor constă în simularea unui circuit în prezența defectelor și compararea rezultatelor cu acelea obținute prin simularea circuitului fără defecte. Aplicând ambelor circuite, bun și defect, aceeași secvență de teste se determină defectele detectate de aceasta. Simularea defectelor este utilizată în diferite aplicații:

-Determinarea calității seturilor și secvențelor de teste. O măsură a calității utilizată de obicei este raportul dintre numărul defectelor detectate și numărul defectelor simulate, raport numit acoperirea defectelor. Această mărime este direct relevantă numai pentru defectele procesate. Multe sisteme de generare a testelor folosesc un simulator de defecte pentru a obține seturi de teste cu acoperire mare a defectelor.

-Generarea testelor orientate pe defecte. Un test generat pentru un defect specificat detectează în general și alte defecte de interes. Identificarea și eliminarea acestora reduce numărul de teste și efortul de calcul implicat în procesul de generare a testelor.

-Construirea dicționarelor de defecte, utilizate pentru diagnoză.

Majoritatea tehnicilor de simulare a defectelor au fost dezvoltate pentru modelul SSF însă ele se pot ajusta pentru a putea procesa și celelalte tipuri de defecte. Printre tehnicile de simulare se pot enumera: simularea serie, simularea paralelă, simularea deductivă, simularea concurentă. Cea mai folosită tehnică de simulare se dovedește a fi simularea concurentă.

2.1. Tehnici generale de simulare a defectelor

2.1.1. Simularea serie

Pentru un defect f specificat, modelul unui circuit fără defecte C se modifică în mod explicit astfel încât să reprezinte circuitul defect . Apoi acest circuit trebuie simulat și procesul se repetă pentru fiecare defect simulat în parte. Această metodă de simulare are un avantaj principal, care constă în faptul că nu este nevoie de un simulator de defecte special deoarece circuitul defect poate fi privit ca un nou circuit, diferit de C fără defecte. Se poate lua în considerare orice tip de defect pentru care modelul este deja cunoscut. Această metodă este diferită de celelalte metode prin două criterii fundamentale astfel: la celelalte metode de simulare se determină comportarea circuitului C în prezența defectelor fără modificarea explicită a modelului și al doilea criteriu ar fi faptul că se simulează simultan un set de defecte. Dacă toate defectele de interes ar putea fi procesate simultan atunci simularea se va face într-un singur pas.

Spre diferența de simularea unui circuit fără defecte, simularea defectelor implică anumite sarcini:

-specificarea defectelor (se stabilesc defectele de interes și în cazul defectelor SSF se realizează colapsarea defectelor);

-inserarea defectelor (selectarea unui subset de defecte ce vor fi simulate în același pas și crearea structurilor de date care să indice prezența defectelor în algoritmul de simulare);

-generarea erorilor și propagarea lor la ieșirile primare ale circuitului;

-eliminarea defectelor (setul defectelor de interes este permanent actualizat prin eliminarea acelor defecte care au fost deja detectate până la momentul sau pasul curent de simulare).

2.1.2.Simularea paralelă

Faptul că operațiile logice elementare AND, OR, NOT sunt efectuate de către procesoarele digitale între cuvinte binare de biți este exploatat de această metodă de exploatare. Valorile aceleași conexiuni din circuitul bun și respectiv din -1 circuite defecte, corespunzătoare testului aplicat, sunt împachetate împreună în aceeași locație de memorie a computerului gazdă. O locație este compusă dintr-un cuvânt sau mai multe cuvinte de lungime, în funcție de numărul de valori logice utilizate în simulare.

Simularea paralelă este cea mai potrivită pentru circuite compuse din elemente modelate prin ecuații Booleene. Rutinele de evaluare bazate pe examinarea valorilor de intrare ale elementelor de circuit sau rutine bazate pe operații aritmetice nu pot fi folosite în mod direct. Pentru integrarea acestor tehnici într-un simulator paralel, biții corespunzători fiecărui circuit defect trebuie extrași din locațiile de memorie iar după evaluarea individuală a elementelor funcționale, biții care rezultă trebuie reîmpachetați. Astfel, simularea paralelă este compatibilă numai în parte cu modelarea la nivel funcțional.

În simularea apare un eveniment când noua valoare pe o conexiune diferă de cea veche în cel puțin o poziție de bit. Un astfel de eveniment conduce la k evaluări chiar dacă numai unul din cele k elemente evaluate are evenimente la intrări. Cu toate că evaluările care nu sunt necesare nu consumă timp, deoarece sunt făcute în paralel cu cele necesare, ele constituie o risipa de calcule totuși. În plus cele k evaluări sunt făcute după ce toate defectele în afară de unul singur au fost detectate. Astfel, simularea paralelă nu poate beneficia din plin de avantajele conceptului de simulare selectivă sau de eliminare a defectelor detectate.

2.1.3 Simularea deductivă

Prin această metodă se simulează circuitul fără defecte și se deduce comportarea circuitelor defecte. Structura de date utilizată pentru reprezentarea erorilor este lista de defecte. Fiecărei conexiuni j i se asociază o listă de defecte , ce reprezintă mulțimea defectelor de interes f care determină pe conexiunea i valori diferite în circuitele și respectiv C în testul curent. Dacă j este o ieșire primară atunci defectele din lista sunt defecte detectate cu testul simulat. Am putea face o comparație între simularea paralelă și deductivă, în care s-a considerat că setul defectelor de interes F poate fi simulat paralel într-un singur pas, adică k q+1, unde k este lungimea cuvântului mașină iar q= |F| este numărul elementelor din F. În simularea paralelă cuvântul asociat conexiunii j conține valorile acesteia din circuitul bun și din circuitele defecte, pentru fiecare dintre circuite fiind rezervată câte o poziție de bit. Pe durata simulării valorile conexiunii j din majoritatea circuitelor defecte nu diferă de valoarea conexiunii j din circuitul fără defecte. Acest aspect este valorificat în simularea deductivă, păstrându-se în lista de defecte numai în pozițiile de bit, utilizate ca nume de defecte, care conțin erori.

Simulare deductivă

= {2, 5, 7}

Cunoscându-se valorile corecte și listele de defecte asociate intrărilor unui element, într-un test specificat, operațiile de baza în simularea deductivă sunt determinarea valorii logice corecte și a listei de defecte pentru ieșirea elementului. Calcularea listelor de defecte care reprezintă schimbări în valorile logice pe conexiuni, un simulator deductiv propagă și evenimente listă, care apar atunci când se modifică conținutul listelor de defecte. Să considerăm G(c,i,g) o poartă cu valoarea de control c, inversiunea i și ieșirea g, I setul conexiunilor care sunt intrări în G si C setul intrărilor în poarta G care sunt puse la valoarea c de testul simulat ( în circuitul fără defecte). Lista de defecte asociată ieșirii porții G se calculează cu relațiile următoare:

=

=

Dacă nici o intrare în G nu are valoarea c atunci orice eroare care ajunge la intrările porții se propagă la ieșirea ei; dacă anumite intrări au valoarea c atunci numai erorile care le afectează pe toate acestea și nu afectează nici o intrare cu valoarea se propagă la ieșirea porții. În ambele cazuri se adaugă listei un defect local de tip stuck-at. Pentru clarificare considerăm circuitul combinațional de mai jos și considerăm modelul de defect considerat este SSF. Calculul listelor începe de la intrările primare și continuă nivel cu nivel pană la ieșirea primară a circuitului. Un posibil set inițial de defecte, obținut prin colapsare, este F={a0, a1, b1, c0, c1, d1, e0, g0, h0, h1} în care s-a notat cu defectul l stuck-at-v. La intrările a, b, c, d, e ale circuitului se aplică o secvență compusă din doi vectori de test, 00110 și 11110. Valorile logice care se obțin pe celelalte conexiuni ale circuitului (fără defecte) sunt desenate pe figură.

fig.1.

Pentru primul vector de test aplicat ,abcde = 00110, se obțin listele de defecte:

, , ,

, ,

,

,

Setul curent al defectelor de interes devine:

F=F=

Aplicând cel de+al doilea vector de test, abcde = 11110, se obțin listele:

, , , ,

, ,

, ,

F=F=

Exceptând a,b și f celelalte conexiuni au valori identice în cele două teste adică pe ele nu apar evenimente logice. Evenimente listă apar pe conexiunile a,b,f,h,j,i,k și m. Un eveniment listă poate să apară datorită modificării vectorului de test dar și ca urmare a modificării setului F prin eliminarea defectelor detectate.

Pentru un circuit logic combinațional arbitrar care implementează funcția

z(a, b, c,……), se poate scrie o formulă generală de calcul a listei de defecte în funcție de variabilele de intrare a, b, c,…..și listelelor de defecte La, Lb, Lc…..

= z(a, b, c,….)Z(a, b, c, ….)

în care Z(A, B, C,…..) este funcția care se obține din z(a, b, c,…) prin înlocuirea operațiilor AND și OR cu și respectiv iar x= dacă x = 0 și x=negat dacă x = 1. Deoarece este lista defectelor care determină x să ia valoare diferită de cea corectă, rezultă ca x este lista defectelor care determină x=1. Relația de mai sus nu ia în considerare defectele definite în interiorul blocului combinațional și este utilă numai pentru propagarea erorilor care apar la intrări.

Propagarea listelor de defecte este mai complicată în circuitele cu reacție (circuite secvențiale). Pentru același vector de test simulat calculele trebuie repetate până când toate listele de defecte devin stabile. În anumite condiții, de exmplu la propagările critice, este posibil ca unele liste să nu se stabilizeze și atunci este nevoie de o procesare specială.

În cazul circuitelor mari este posibil să se depășească memoria disponibilă în timpul procesării listelor de defecte, acestea fiind dinamice și imprevizibile în mărime. Când se intâmplă acest lucru, setul defectelor trebuie repartiționat. Defectele care determină oscilații sau conduc la stabilizarea listelor după o cantitate mare de activitate logică trebuie identificate și inlăturate.

Complexitatea simulării deductive crește semnificativ când trebuie utilizată logica cu trei valori 0, 1, u (valoare binară necunoscută). Fiecărei conexiuni i se asociază doua liste de defecte si unde {, } = {0, 1, u}-{v}, v fiind valoarea conexiunii din circuitul fara defecte. Setul tuturor defectelor procesate la momentul curent este oricare ar fi conexiunea din circuit. Pentru poarta de mai jos , un defect care produce d = 0 trebuie sa schimbe conexiunile b si la c la valoarea “0” si sa nu modifice valoarea a. Se obtine:

Un defect care produce d = u trebuie să determine orice combinație de valori “0” și u pentru a, b și c cu excepția combinației a = b = c = 0. De unde rezultă:

fig.2

Propagarea listelor de defecte se bazează pe ecuații Booleene și este compatibilă numai parțial cu modelarea la nivel funcțional. Simularea deductivă este limitată în practică la două sau trei valori logice. Mecanismul de propagare a listelor de defecte nu beneficiază de întregul avantaj al conceptului de simulare orientată pe activitate; chiar dacă la un anumit moment există activitate numai într-un singur circuit defect, propagarea evenimentului listă respectiv necesită calcule în care sunt implicate circuite fără activitate.

2.1.4. Simularea concurentă

Această metodă are la bază observația că pe durata simulării foarte multe valori ale conexiunilor din majoritatea circuitelor defecte sunt identice cu valorile din circuitul fără defecte. Se simulează circuitul bun C și pentru fiecare circuit defect se simulează numai elementele care diferă de acelea din C. Diferențele sunt menținute pentru fiecare element de circuit X din C sub forma unei liste de defecte concurentă

C. Fie o replică a elementului X si () ansamblul valorilor de intrare, de iesire și eventual de stare asociat elementului (X). În timpul simulării lista C conține toate elementele pentru care defectul f este un defect local (neactivat incă), fie (erorile cauzate de defectul f s-au programat la elementul X). O listă de defecte concurentă este figurată mai jos sub mod grafic a) și tabel b):

fig.3a

fig.3b

Detecția și apar în lista deoarece erorile produse de acestea s-au propagat la poarta X. Defectele și sunt defecte locale; este activat iar nu este activat (conexiunile a, b, c au valori corecte).

Un defect f este vizibil pe o conexiune “l“ atunci când valorile acesteia în circuitele C și sunt diferite. Defectele și sunt vizibile pe conexiunea c. Comparând lista de defecte concurentă C cu lista de defecte deductivă ={, }, se observă ca ; listele deductive conțin numai defectele vizibile.

Structurile de date ce reprezintă listele de defecte concurente sunt dinamice. Conținutul inițial al fiecărei liste C constă în replicile corespunzătoare defectelor f locale ale elementului X; rămâne în lista până când defectul f va fi detectat. Pe durata simulării, se adaugă în lista elementele pentru care diferit de și se înlătură elementele pentru care s-a obținut =. Eliminarea unui defect f din setul curent, ca urmare a detecției lui, constă în înlăturarea din toate listele concurente a elementelor cu indicele f. Pentru o clarificare a lucrurilor să discutăm un exemplu pentru a vedea cum se modifică listele concurente pe durata simulării. Valorile logice și listele de mai jos a) corespund unei stări stabile a circuitului. Evenimentul 110 care apare pe conexiunea a în circuitul fără defecte se produce și în circuitele defecte cu excepția lui .

fig.4.a.

fig.4.b.

fig.4.c.

Schimbarea valorii pe conexiunea a determină evenimentul 011 pe conexiunea c din circuitul C. Când se face atribuirea c = 1 defectul devine vizibil pe conexiunea c și va fi inclus în lista . Defectul va fi înlăturat din această listă deoarece conexiunile c, d și e capătă valori identice în circuitul C și respectiv . Elementele se evaluează individual atât în circuitul bun cât și în circuitele defecte. Este posibil ca valoarea unei conexiuni să se modifice într-un circuit defect și să se mentină în circuitul bun (este cazul conexiunii e în circuitele d1 și ). Pot sa apară simultan evenimenmte pe o conexiune, atât în circuitul bun cât și în circuite defecte. Un eveniment generat într-un circuit defect se propagă numai în interiorul acelui circuit.

Simularea concurentă este compatibilă cu modelarea la nivel funcțional. Într-un simulator concurent pot fi incluse tehnici de evaluare rapidă a elementelor de circuit, bazate pe tabele de adevăr sau operații de numărare, și modele de intârziere detaliate. Această metodă are și un dezavantaj principal care constă în consumul mare de memorie.

2.2 Simularea SSF în CLC

Această metodă se simulare a defectelor, specializată pentru circuitele combinaționale, este mai rapidă și necesită mai puțină memorie în comparație cu metodele anterioare. Este caracterizată de unele diferențe: se identifică în mod direct defectele SSF detectate cu un test (efortul de calcul implicat în simularea defectelor care nu sunt detectate cu testul aplicat este eliminat), se operează cu defectele în mod explicit (colapsarea, inserarea defectelor, generarea-propagarea erorilor îi eliminarea defectelor detectate nu mai sunt necesare), se calculează numai valorile logice ale conexiunilor din circuitul fără defecte.

O conexiune j are valoarea critică v, într-un test t, dacă și numai dacă t detectează defectul j s-a-. Atunci j este conexiune critică în testul t. Ieșirile primare sunt conexiuni critice în orice test. Găsirea celorlalte conexiuni critice se face prin traversarea circuitului nivel cu nivel, de la iesirile primare la intrările primare. Căile formate din conexiuni critice sunt numite căi critice.

O intrare într-o poartă logică este sensibilă într-un test atunci când prin complementarea valorii de la ieșirea porții. Intrările sensibile a unei porți cu valoarea de control c se determină pe durata simulării circuitului fără defecte astfel:

– dacă o singură intrare are valoarea c atunci ea este sensibilă ;

– dacă toate intrările au valoarea atunci toate sunt sensibile;

– în afară acestor situații nici o intrare nu este sensibilă;

Pentru că toate intrările sensibile, dacă sunt, să fie critice, trebuie ca ieșirea unei porți să fie critică într-un test. Găsirea căilor critice în regiunile fără fan-out este o operație foarte simplă. Să luăm exemplul de mai jos. Intrările sensibile sunt marcate prin câte un punct iar conexiunile critice prin linii îngroșate.Testul abcdefg =1010000 detectează defectele{,,,, ,, }.

fig.5

În circuitele cu fan-out recorvengent căutarea căilor critice se complică în trecerea prin stem-uri. Sunt necesare analize suplimentare pentru a decide dacă un stem este sau nu critic. Se preferă analize aproximative, bazate pe heuristici. În general, se obțin rezultate corecte cu efort mic de calcul chiar și în situațiile de automascare sau autoevidențiere prezentate mai jos:

a)automascare b)autoevidențiere

fig.6

Stemul b are o ramură d critică dar el nu este critic în testul aplicat. O eroare de pe b se propagă pe calea critică marcată dar și pe calea e, f, h deoarece e și f sunt intrări sensibile în porțile și respectiv. Pe conexiunile g și h erorile au forma 1/0 și respectiv 0/1, ceea ce determină z =1/1=1 adică va dispare eroarea. Stemul b din figură b) nu are ramuri critice și totuși este critic. Eroarea 1/0 de pe stem se propagă la intrările porții sub aceeași formă și apoi, la ieșirea z.

Această metodă este o metodă de simulare aproximativă (unele defecte detectate cu un anumit test pot fi marcate ca nedetectate de acel test). Impactul asupra rezultatelor simulării este încă neglijabil deoarece este foate probabil ca fiecare defect să fie detectat de mai multe teste din setul simulat.

3. Metode de generare a vectorilor de test

Sunt prezentate în continuare metode deterministe, aleatoare și pseudo-aleatoare de generare a vectorilor de test pentru circuite combinaționale. În principiu metodele prezentate pot fi aplicate, cu adaptarea cuvenită, și în cazul circuitelor secvențiale.

În general metodele prezentate asigură numai punerea în evidență a prezenței unui defect fară ca să și localizeze defectul respectiv.

3.1. Metoda diferenței booleene

Această metodă porneșle de la ideea că un defect poate fi detectat dacă râspunsul circuitului cu defect este diferit de răspunsul obținut în lipsa defectului.

Presupunem că avem un circuit cu n variabile de intrare:

x=(,,…., ….. )

El realizează la ieșire funcția booleană:

F(X)=F(,,…., ….. )

Daca variabila , este eronată datorită unui defect, adică ia valoarea , funcția realizată la ieșire va fi:

F(,,…., ….. )

Eroarea poate fi detectată dacă:

F(,,…., ….. ) F(,,…., ….. ) =1 rel.1

Această operație SAU EXLUSIV realizată pentru funcția F(X) în raport cu variabila de intrare se numește diferență booleană a funcției F în raport cu . Ea se noteaza cu: .

Dacă această diferență booleană este:

= 0

Înseamnă că circuitul are același răspuns și în prezența defectului ca și în lipsa lui și deci, acest defect nu poate fi pus în evidență. Diferența booleană are următoarele proprietăți:

= rel.2

= rel.3

= 0 dacă F(X) este independentă de rel.4

= 1 daca F(X) depinde numai de rel.5

= F(X) rel.6

= rel.7

După ce se calculează diferența booleană și se verifică faptul că aceasta este diferită de 0 se pot determina vectorii de test care pun in evidență defectele referitoare la variabila . Vectorul de test pentru defectul PP0 a variabilei este:

rel.8

Vectrul de test pentru defectul PP1 a variabilei este:

rel.9

Metoda diferenței booleene are câteva avantaje majore:

-Garantează găsirea vectorului de test pentru punerea în evidență a unui defect, dacă acest vector de test există.

-Metoda oferă toți vectorii de test care pun în evidență un anumit defect.

Metoda nu este practică pentru circuitele care au un număr foarte mare de porți, deoarece presupune efectuarea unui volum mare de calcule.

3.2. Metoda activării unei căi

Pentru exemplificarea metodei considerăm circuitul din figura următoare:

fig.1.Schema circuitului testat

Ne propunem să determinăm vectorii de test care pun în evidență defectele de tip PP0 și PP1 în nodul H. Metoda presupune parcurgerea a doi pași în determinarea vectorului de test:

Primul pas ar fi cel în care se determină valorile intrărilor primare din circuit care produc în nodul testat o valoare logică complementară celei corespunzătoare defecțiunii. În cazul nostru valoarea logică a nodului H este dependentpă de intrările primare C și D: H = CD

Pentru defectul PP0 în nodul H determinăm valorile intrărilor care stabilesc "1" în nod:

Pentru detectul PP1 în nodul H determinăm valorile intrărilor care stabilesc "0" în nod:

Cel de-al doilea pas ar fi: se caută o cale dc propagare a valorii logice din nodul vizat până la una din ieșirile primare ale circuitului. Se determină pentru fiecare nod parcurs condiționările logice pentru propagarea detectului și în funcție de acestea se determină valorile intrărilor primare. În exemplul ales încercam propagarea detectului spre ieșirea L. Pentru ca detectul (valoarea logică h) să se propage în nodul I obținem condiționarea:

Rezullii ca în nodul G trebuie să avem valoarea logică “1” ceea ce determină pentru intrările primare B=0. Pentru ca detectul (valoarea logica ) să se propage în nodul L obținem condiționarea:

Rezultă că în nodul A trebuie să avem valoarea logică “1” valoare obținută direct pentru o intrare primară. Rezultă acum vectorii de test pentru punerea în evidența a defectelor din nodul H:

-pentru PP0 în nodul H:

-pentru PP1 în nodul H:

Metodă expusă se caracterizează prin simplitatea implementării în programele de generare asistată de calculator a setului de vectori de test.

Metoda prezintă în schimb următoarea deficiență: nu permite obținerea vectorilor de test pentru circuitele combinaționale care au asa numitul fan-out reconvcrgent. Acestea sunt circuite care permit propagarea defectului spre o aceeași ieșire prin două sau mai multe căi. În fazele în care se determină valorile logice ale ieșirilor care permit propagarea defectelor prin diferitele noduri se poate ajunge la situații de conflict între valorile logice determinate pentru o intrare.

Deficiența amintită poate fi ilustrată și în cazul exemplului anterior. Dacă se alege propagarea defectului spre ieșirea M, se observă că ea se poate realiza prin două căi: H-J-M, respectiv H-K-M. Propagarea defectului spre nodnl J presupune E=1, iar propagarea spre M presupune K= 1.Această ultimă condiție se realizează numai dacă atât F=1 cât și H=1. Pentru ca ultima condiție obținută să se realizcze se observă că nu se mai permite existența oricărei valori logice în nodul testat H, tocmai cea care trebuie să se propage spre ieșire.

3.3. Metoda căii critice

Această metodă identifică o cale de propagare pornind de la ieșirile primare până la intrările primare. Pentru un vector de test aplicat la intrările primare se consideră că un nod are valoare critică c dacă vectorul respectiv permite detectarea defectului de punere pe în nodul respectiv. Deci, dacă considerăm că un anumit vector de test pune în evidentță defectul de tip PP0 în nodul vizat, atunci se consideră că nodul respectiv are valoarea critica (1 critic). Exemplificarea metodei se face pentru circuitul din figura urmatoare. Să analizăm o primă situație în care urmărim propagarea valorii critice de la ieșire spre intrări. Rezultă că nodurile F, G și H vor avea și ele valoarea . Valorile se trec în nodurile respective. Parcurgând în continuare schema spre ieșiri figurăm toate valorile critice din nodurile intcrmediare până la ieșiri. Obținem în final următorul vector de test ABCD=0xx0. Acest vector va permite detectarea defectelor de tip PP1 în nodurile A, E, D, F, H și Z.

fig.2.Circuit pentru exemplificarea metodei căii critice

Dacă îi atribuim acum ieșirii valoarea critică putem considera, de exemplu, condiționarea pentru nodul F. Continuând procedeul se ajunge la condiționările din figura următoare:

fig.3.Analiza propagării valorii

Astfel am obținut un vector de test ABCD= l l l x care va detecta defectele de tip PP0 din nodurile A, B, C, E, F și Z.

În tabelul de mai sus este prezentat un set de vectori de test determinat prin aplicarea metodei căii critice, set care acoperă toate defectele de tip "punere pe" din circuitul analizat. Reamintim că valoarea critică c dintr-un nod permite testarea defectului PP .

Urmărirea valorii critice are avantajul că printr-o cantitate de muncă mai redusă se poate obține setul de vectori de test ce pune în evidență toate defectele de tip PP0 și PP1 din circuit.

3.4. Generarea testelor aleatoare

Metodele de test prezentate anterior sunt deterministe, ele se bazează pe determinarea unor secvențe de test cunoscute. Metoda prezentată în continuare se bazează pe aplicarea unor secvențe de test aleatoare fiind importante proprietățile statistice ale acestor secvențe. La ieșirea circuitului testat este important de a se determina probabilitatea cu care poate să apară o anumită valoare logică, “0” sau “1”. Pentru o determinare corectă a aeestei probabilități este important ca dimensiunea secvenței de test să depașească o anumită lungime.

În prezentarea următoare, se noteaza cu probabilitatea ca în nodul de nivel k variabila logică să ia valoarea “1”, respectiv probabilitatea ca aceiași variabilă să ia valoarea “0”. Considerăm nivelul nodurile numerotate de la intrare spre ieșire. Dacă nodul de nivel k este la ieșirea unei porți SINU cu n intrări atunci cele două probabilități pot fi exprimate în funcție de probabilitățile din nodurile anterioare:

== rel.1

==1- rel.2

Pentru o poartă SAUNU în aceleași condiții se obține:

= = rel.3

= = 1-

Pentru o poartă SI cu n intrări se obține:

= = 1- rel.4

==1- rel.5

Pentru o poartă SAU cu n intrări se obține:

= = rel.6

= = 1- rel.7

Folosind relațiile anterioare se poate determina probabilitatea de a obține o valoare logică sau alta în nodul investigat.

Să consideram un exemplu pentru o mai bună înțelegere:

Considerăm circuitul de mai jos și presupunem cunoscute următoarele probabilități:

– = = 0,5 – probabilitățile de a obține “1” în nodurile A și B;

– = = 0,75 – probabilitățile de a obține “1” în nodurile C și D;

Probabilitățile de a obține “1” și “0” în nodul E sunt:

= = 0,25

= 1 – = 0,75

Probabilitățile de a obține “1” și “0” în nodul F sunt:

= = 0,5625

= 1 – = 0,4375

Probabilitățile de a obține “1” și “0” în nodul G sunt:

= = 0,328

= 1 – = 0,627

fig.4.Circuit pentru exemplu de calcul al probabilităților de apariție

a valorilor binare

fig.5.Probabilitățile de detectare corectă a valorii

binare “1” într-un lanț de porți SINU

Cunoscând aceste probabilități se poate determina din măsurători probabilitatea apariției valorilor binare atunci când se aplică la intrări secvențele aleatoare cu probabilitățile specificate iar apoi să fie comparate cu cele determinate prin calcul.

Evident, pentru că determinarea experimentală să fie cât mai relevantă trebuie aplicate la intrare o secvență de test cât mai lungă. Lungimea acestei secvențe crește odată cu creșterea lungimii L a căii prin care se propagă semnalele. Rezultă că se poate determina și o probabilitate de detectare a răspunsului corect în funcție de această lungime L și de numărul de vectori de test aplicați M. Diagramele de mai sus reprezintă curbe de probabilitate constantă: P =0,99, și P =0,9 și P =0,5 de detectare corectă a probabilității de apariție a valorii binare ”1” pentru un lan’ de circuite SINU cu M nivele.

3.5. Generarea secvențelor de test pseudoaleatoare folosind regiștri de deplasare liniari cu reacție

Sunt prezentate în continuare câteva din proprietățile regiștrilor de deplasare liniari cu reacție,în engleză Linear Feedback Shift Registers (LFSR). Aceste structuri sunt utilizate frecvent în testarea automată fie în generarea secvențelor binare pseudoaleatoare, fie în implementarea metodelor de compresie mai ales în tehnicile BIST.

Considerăm pentru început regiștrii cu reacție din figurile de mai jos. Structurile prezentate sunt autonome, adică funcționează fără semnale aplicate la intrare (semnalul de ceas care determină deplasarea datelor în regiștrii nu este considerat o intrare de date).

Fiecare celulă din structura regiștrilor este considerată un bistabil de tip D. Se poate observa că funcționarea regiștrilor este ciclică în sensul că dacă semnalul de ceas se aplică continuu, atunci secvențele de ieșiire se repetă după un număr de impulsuri de tact. Numărul maxim de stări prin care poate trece un registru este dacă el are n bistabili. De exemplu, un numărător binar cu n bistabili va numara de la 0 la -1.

Circuitul din figura a) trece prin maximum două stări. Dacă inițial bistabilii sunt inițializați la valoarea 00 sau 11, aceste valori nu se vor schimba niciodata la aplicarea impulsurilor de tact.

În schimb, dacă bistabilii sunt inițializați cu 0l atunci această stare se va repeta după două impulsuri de tact. De retinut că și prima funcționare a circuitului este tot o funcționare ciclică.

Circuitul din figura b) are același componament. Dacă este inițializat cu 111 secvența repetată la ieșire va fi de lungime 1 bit și va avea valoarea logica "1". În figura c) este prezentată evoluția circuitului dacă starea inițială a bistabililor este 011.

Se observă că de această dată lungimea secvenței care se repetă la ieșire este de 4 biți. aceștia fiind 1100.

În exemplul din figura d) este prezentat un circuit care are lungimea secvenței de ieșire egală cu -1. Se observă că se evit trecerea prin starea 0000, care ar duce la "blocarea" registrului în această stare.

Toate celelalte stări posibile ale registrului sunt parcurse succesiv în procesul generării secvenței de ieșire.

fig.6.Exemple pentru ilustrarea principiului funcționării LFS

În urma exemplificărilor anterioare rezultă că funcționarea unui LFSR se bazează pc întârzierea introdusă de bistabili, pe adunare și multiplicare binară. La baza adunării și scăderii binare stă următorul tabel de adevăr:

Rezultă deci următoarea propeirtate de bază:

x + x = – x – x = x – x = 0

Circuitele prezentate sunt liniare deoarece se respectă principiul superpoziției și anume, răspunsul circuitului la o combinație liniară de stimuli se obține ca și combinație liniară a răspunsurilor obținute la fiecare stimul individual.

4. Metode și tehnici de compresie a datelor

Metodele de compresie a datelor au ca scop obținerea unei imagini a răspunsului circuitelor testate, deci așa cum am mai arătat în cazul testelor deterministe sau pseudoaleatoare se obține o semnătura a circuitului testat. Principiul unei astfel de metode de test este ilustrat în figura următoare.

fig.1. Experiență de test bazată pe analiză de semnătură

Un defect din circuitul testat (CST) este detectat dacă semnătura răspunsului în prezența defectului, S(R), este diferită de semnătura răspunsului corect, S(). Aceste metode sunt frecvent utilizate în realizarea tehnicilor BIST, unitatea de compresie, comparatorul și semnatura corectă fiind implementate chiar în interiorul cipului.

În caracterizarea comparativă a diferitelor metode de compresie se iau în considerare diferite aspecte ce descriu performanța acestora:

– Este de dorit ca metoda să poată fi implementată practic prin tehnici (circuite) cât mai simple.

– Tehnica utilizată nu trebuie să introducă întârzieri suplimentare în funcționarea normală a circuitului sau să afecteze major timpul de test.

– Lungimea semnăturii trebuie să fie mult mai mică decât cea a răspunsului circuitului. În felul acesta comparația se face pentru o cantitate mult mai mică de informație. Această performanță a unei metode de compresie este caracterizată de gradul de compresie (GC) definit ca raportul dintre lungimea secvenței de test de la ieșire și lungimea semnăturii obținute.

– Metoda de compactare nu trebuie să piardă informația utilă din răspunsul circuitului, adică să nu mascheze manifestarea defectelor. Această performanță este caracterizată prin probabilitatea de mascare (P) a erorilor de funcționare.

Trecând în revistă aspectele anterioare se observă că ultimele două criterii pot fi cuantizate, valorile obținute pentru gradul de compactare și probabilitatea de mascare fiind criterii numerice în compararea a două metode de compresie. De asemenea, se poate deduce chiar și intuitiv că nu există metode de compactare care să răspundă perfect la ultimele două criterii. În general prin creșterca gradului de compactare se obține o probabilitate de mascare a erorilor mai mare.

În continuarea capitolului vor fi prezentate comparativ cinci metode de compresie: numărarea valorilor binare, numărarea tranzițiilor, verificarea parității, testarea sindromului și analiza de scmnătură, ultima fiind și obiectul acestui proiect. Prezentarea se concentrează pe modul de implementarc a modului denumit "Unitate de compresie a datelor" în figura anterioară.

4.1. Metoda de compresie bazată pe numărarea valorilor binare

Să considerăm pentru circuitul testat o singură ieșire pe care o investigăm. Răspunsul obținut la această ieșire constă într-o succesiunc de valori binare “0” sau “1”:

R = , , ……. Metoda constă în numărarea valorilor binare “1” sau ”0” din această secvență de ieșire. Dacă se numără valorile binare “1”, atunci semnătura este dată de:

rel.1

Lungimea semnăturii este variabilă, fiind determinată tocmai de numărul valorilor binare contorizate:

0 rel.2

Tehnic metoda se implementează prin utilizarea unui numărător rezultând în felul acesta un grad de compresie:

GC=(m+l) rel.3

Pentru a determina probabilitatea de mascare a erorilor considerăm că în secvența de ieșire de lungime m investigată exista r unități binare “1”. Numărul total de secvențe care au această proprietate, și deci vor avea aceiași semnătura, este . Dintre acestea reprezintă erori în detectarea semnăturii. Numărul total de secvențe diferite de lungime m este . Rezultă de aici că probabilitatea de mascare a erorii dintr-un șir de m biți cu r valori binare "1" este :

rel.4

Având în vedere variația cu r a funcției rezultă că probabilitatea de mascare este mai mică pentru r apropiat de 0 sau apropiat de m și ea are valoarea maximă la mijiocul intervalului (r = ). Dacă S(R)=0 sau S(R)= m, atunci P=0, deci nu apare nici o mascare de eroare.

Suplimentar se pot deduce imediat următoarele proprietăți pentru semnătura determinată prin numărarea valorilor binare:

– un defect care determină modificarea unui număr impar de biți din secvența comprimată va fi totdeauna detectat prin compararea cu semnătura corectă;

– un defect care determină modificarea valoriii logice pentru un număr par de biți din secvența comprimată este numai posibil de detectat.

Pentru exemplificare să considerăm că eroarea modifică doi biți din șirul comprimat. Dacă ambii biți au aceiași valoare logică în răspunsul corect atunci prin modificarea lor semnătura se modifică și ea incrementându-se sau decrementându-se cu 2. Dacă cei doi biți modificați de eroare au valori diferite, prin modificarea valorii lor semnătura rămane neschimbată.

– daca ieșirea circuitului analizat se inversează, fapt echivalent cu contorizarea valorilor binare "0", toate proprietățile anterioare nu se modifică;

– dacă circuitul testat este combinațional și la intrarea lui se aplică o secvență de test pseudoaleatoare, atunci probabilitatea de mascare a erorilor se apropie asimptotic de valoarea .

Pentru a demonstra această afirmație luăm în considerare că probabilitatea de a obține la ieșire o secvență cu r valori binare “1” dintr-un șir de m este:

rel.5

Probabilitatea globală de a apare o mascare de eroare este în acest caz:

rel.6

Considerând aproximarea lui Stirling:

rel.7

rezultă:

rel.8

Așa cum poate fi observat, în cazul testelor pseudoaleatoare probabilitatea de mascare scade odată cu creșterea lungimii secvenței aplicate. La limită, dacă m, P(M)0. Să luăm un exemplu:

fig.2.Răspunsul circuitului testat fără defect () și în prezența a două defecte:PP1 în nodul D (), respectiv PP0 în nodul E ()

Secvența de test T aplicată la intrarea circuitului din Fig.5.1 asigură ca nodurilc A, B, C, D și E ale circuitului fără defect să treacă prin toate stările logice posibile. Acest lucru poate fi observat din analiza șirului de biți din răspunsul corect al circuituluil . Pentru această secvență de ieșire semnătura obținută este S()= 1H. Pentru primul tip de defect luat în considerare, PP1 în nodul C, semnătura obținută este S()= 2H, iar pentru al doilea tip de defect, PP0 în nodul D, semnătura obținută este S()= 0H. Așa cum poate fi observat, cele două defecte luate în considerare sunt detectabile prin aplicarea metodei de compresie prezentate. Implementarea circuitului de compresie pentru testarea circuitului din figura anterioară este prezentă în Fig.3.

fig.3.Implementarea metodei de compresie prin numărarea valorilor binare în

cazul circuitului din exemplul prezentat

4.2. Metoda de compresie bazată pe numărarea tranzițiilor

Prin această metodă se numără, se contorizează, tranzițiile care apar dintr-o stare logică în alta, din “0” în ”1” și din “1” în “0”. Semnătura asociată răspunsului

R = , , …… este:

rel.1

Lungimea semnăturii obținute este și de această dată variabilă:

rel.2

Tehnic metoda se implementează prin utilizarea unui detector de tranziții urmat de un numărător care asigură gradul de compresie:

GC= rel.3

fig.4.Tehnica obținerii semnăturii bazate pe numărarea tranzițiilor

Ilustrarea acestei tehnici este prezentatăîn Fig.4. CST din figură este circuitul testat prezentat la exemplul anterior.

Considerăm că lungimea secvenței de test T este m și în răspunsul corect asociat acestei secvențe apar r tranziții, deci S()= r. Dacă luăm acum în considerare o secvență de ieșire arbitrară de aceiași lungime m, atunci există combinații posibile care au același număr de tranziții r. Luând în considerare toate combinațiile posibile pentru secvența de lungime m rezultă următoarea probabilitate de mascare a erorilor pentru o secvență de lungime m cu r tranziții:

rel.4

Sunt prezentate în continuare câteva proprietăți suplimentare ale metodei de compresie bazată pe numărarea tranzițiilor:

– Spre deosebire de metoda anterioară, de această dată este importantă ordinea în care apar unitățile binare în șirul secvenței de ieșire.

Așa cum poate să se constate din exemplul ilustrat în Fig.4 cazul în care se modifică un singur bit în secvența de ieșire nu mai este detectat totdeauna ca o situație de eroare. Pentru primul defect din circuitul testat, PP1 în nodul C, apare un bit modificat în secvența de iesire, dar semnătura obținută prin numărarea tranzițiilor rămâne nemodificată.

În situația în care defectul din circuitul testat modifică un singur bit în secvența de ieșire, atunci probabilitatea de mascare a erorii devine:

rel.5

Se observă că dacă m, adică secvența de ieșire este de lungime foarte mare, această probabilitate tinde la valoarea .

– În mod similar ca la metoda anterioară se poate demonstra că probabilitatea globală de mascare pentru o secvență pseudoaleatoare de lungime m este:

P(M) rel.6

4.3. Metoda de compresie bazată pe determinarea parității

Circuitul de compresie prin care se implementează metoda realizează o funcție dată de polinomul caracteristic:

rel.1

În polinomul anterior sumarea se realizează modulo 2. Așa cum poate fi urmărit în circuitul din Fig.5. pentru determinarea parității se introduce o reacție de la ieșire. Dacă starea inițiala a bistabilului (înainte de declanșarea operației de compresie) este Q=0, atunci semnătura este dată de paritatea răspunsului, adică S(R) = 0 pentru paritate pară și S(R) = 1 pentru paritate impară. Se remarcă faptul că prin această metodă lungimea semnăturii obținute este fixă, fiind de un singur bit.

Fig.5. Circuit pentru determinarea parității

Cele mai importante proprietaăți ale metodei sunt următoarele:

– Prin această metodă se detectează toatc erorile ce afectează un singur bit sau un număr impar de biți. În exemplul din Fig.1. se observă că pentru cele două defecte luate în considerare răspunsurile obținute au modificat un bit față de răspunsul fără defect. În consecință la ieșirea circuitului de compresie semnătura se modifică, devine pară din impară.

– Defectele ce afectează un număr par de biți nu sunt detectabile.

-Pornind de la cele două observații anterioare rezultă că pentru m probabilitatea de mascare a erorilor tinde la valoarea 0,5.

– Metoda poate fi ușor extinsă la circuite care au mai multe ieșiri. Ea poate fi implementată în mai multe moduri pentru această situație. O variantă este cea în care ieșirile investigate sunt aplicate la intrarea unui circuit de tip XOR și ieșirea acestuia este apoi introdusă în detectorul de paritate. Soluția nu este oportuna pentru situațiile în care defectul din circuit se manifestă prin modificarea unui bit la un număr par de ieșiri deoarece semnătura nu se va modifică. O altă variantă, care presupune utilizarea unui număr mare de circuite, implementează câte un detector de paritate pentru fiecare ieșire, semnătura fiind un cuvânt reprezentat pe un număr de biți egal cu numărul ieșirilor investigate.

4.4. Metoda de compresie bazată pe testarea sindromului

Această metodă de compresie se bazează pe o testare exhaustivă a unui circuit combinațional. Pentru aceasta se aplică la cele n intrări ale circuitului testat toate cele combinații posibile.

Numim sindrom al funcției F realizate de un anumit circuit raportul:

rel.1

unde N reprezintă numărul de mintermeni cu valoarea “1” din funcția F.

Să considerăm un circuit cu n intrări a cărui sindrom al funcției realizate este , iar pentru un circuit SAU cu n intrări sindromul corespunzător fiind . Putem spune că un defect dintr-un circuit se numește sindromul testabil dacă sindromul circuitului în prezența defectului este diferit de sindromul circuitului fără defect. Un circuit este testabil în raport cu un set de defecte și numai dacă orice defect din acel set este sindromul testabil.

Considerăm în continuare circuitul combinațional din Fig.6. care poate fi descompus în subcircuitele , care nu au intrări comune și poarta C de la ieșire. Dacă are la ieșire sindromul și are la ieșire sindromul , atunci se poate determina sindromul funcției de la ieșire ținând cont de funcția logică pe care o realizează poarta C de la ieșire.

fig.6. Descompunerea unui circuit pentru calculul sindromului

Formulele cu care se determină acest sindrom se regăsesc în tabelul următor:

Tabel 5.1

Dacă cele două subcircuite au intrări comune, adică fanout-ul circuitului este reconvergent, atunci formulele pentru calculul sindromului de la ieșire sunt cele din tabelul următor.

Tabel 5.2

Circuitul pentru calculul sindromului trebuie să realizeze în principiu funcția de numărare a valorilor binare “1” de la ieșirea investigată.

Să considerăm un exemplu pentru o mai bună înțelegere:

fig.7.Exemplu de circuit pentru calculul sindromului

Funcția realizată de acest circuit este:

rel.2

Valorile logice obținute la ieșirea circuitului pentru cele 16 combinații posibile la intrări sunt redate în tabelul 5.3. Numărul de valori binare “1” obținute la ieșire este 10. Deci, sindromul circuitului la funcționare corectă este:

rel.3

În tabelul 5.4 apar valorile logice de la ieșirea circuitului dacă apare un defect de tip PP0 la una din intrările xl sau x2 și valorile logice de la ieșire pentru defect de tip PP0 la una din intrările x3 sau x4.

Se observă că prima categorie de defecte (PP0 pentru x1 sau x2) sunt testabile prin determinarea sindromului. Se obține . În schimb a doua categoric nu face parte din setul de defecte testabile prin determinarea sindromului, în prezența lor sindromul este același ca și pentru circuitul fără defecte.

Tabel 5.3 Tabel 5.4

Partea a II-a Analiză practică

Metoda de compresie prin analiza de semnătură

Această metodă este frecvent utilizată cu denumirea de analiza de semnătură, deși și metodele prezentate anterior se încadrează în aceeași categorie. La baza metodei stă conceptul de verificare a redundanței ciclice (Cyclic Redundancy Checking, CRC, – în engleză). În esență circuitul de compresie constă de această dată într-un registru de deplasare liniar cu reacție, LFSR, având o singură intrare. Semnătura este reprezentată de conținutul acestui registru după momentul recepționării ultimului bit din șirul de biți ai secvenței analizate. În fig.1. și fig.2 sunt ilustrate utilizarea unor astfel de registre (cu a doua formă canonică) pentru obținerea semnăturii.

fig.1. Utilizarea unui LFSR de tip 1 ca analizor de semnătură

fig.3 Utilizarea unui LFSR de tip 2 ca analizor de semnătură

Fiecărui LFSR i se pot asocia două polinoame carcateristice, definite de coeficienții de reacție(adunarea fiind modulo 2) :

Deoarece , polinoamele și sunt reciproce.

Metoda se bazează pe conceptul divizării polinoamelor. Circuitul efectuează o operație de împărțire între polinomul G(x) ce caracterizează secvența de intrare și polinomul reciproc al polinomului caracteristic al registrului, P*(x). La ieșirea circuitului se obține polinomul cât, Q(x). Gradul cel mai mare al polinomului G(x) corespunde primului bit ce intră în registru iar gradul cel mai mare al polinomului Q(x) corespunde primului bit ce iese din registru după aplicurea a n impulsuri de ceas, unde n reprezintă numărul de celule din registru. Dacă în starea inițială a registrului toate celulele sunt 0, atunci în starea finală registrul va conține restul R(x) al împărțirii polinoamelor specificate. Deci, polinoamele respectă relația:

rel.1

Se utilizează polinomul reciproc deoarece coeficientul corespunde primului bit din șirul datelor de intrare.

În Fig.2. este prezentată o structură de analizor de semnatură cu 5 celule. Acestui registru LFSR îi corespunde urmatorul polinom caracteristic reciproc:

fig.3. Structura analizorului de semnătură

Presupunem că la intrarea registrului se aplică secvența: 11110101, acesteia corespunzându-i polinomul:

Fig.3. Evoluția în timp a conținutului analizatorului de semnătură

În fig.3. este redat procesul prin care se efectuează împărțirea polinoamelor. Se observă că starea inițială a registrului este 00000 și că la intrare secvența se aplică începând cu eel mai semnificativ bit, . Ieșirea registrului poate fi ignorată pentru primele 5 impulsuri de tact, deoarece ea rămâne în “0” indiferent de ce secvență este aplicată la intrare. În final după aplicarea a 8 impulsuri de tact la ieșire va fi obținută secvența 101 caracterizată de polinomul Q(x)= +l, iar continutul registrului va fi 10100 căruia îi corespunde polinomul R(x) = . Efectuând înmulțirea polinoamelor (x) și Q(x) se obține:

Q(x) = (x5 + x4 + x2 +1)( = x7 + x6 + x5 +1

Adunând acest rezultat cu polinomul R(x) se obține:

Q(x) + R(x)= x7 + x6 + x5+ + x2 +1 = G(x)

Am arătat în felul acesta că într-adevăr funcția realizată de LFSR este cea de a împărți polinomul G(x) la polinomul (x).

G(x)=Q(x)(x)+R(x)

G'(x)=G(x)+E(x)=Q'(x)P(x)+R(x) rel.2

În prezența unor defecte fluxul de date ce constituie răspunsul circuitului testat este modificat deci, acest flux de date va fi caracterizat de un polinom G'(x) în locul polinomului G(x). Diferența dintre cele două polinoame se numește polinom eroare, E(x). Dacă de exemplu, în locul secvenței corecte 10111, caracterizată de polinomul:

G(x) = x4 ++x+l,

la intrarea registrului se receptionează secvența 11101, caracterizată de polinomul:

G(x) = x4 ++ +l,

atunci vom avea un polinom eroare E(x) =G(x)-G'(x) = +x. În această situație secvența aplicată la intrarea registrului poate fi scrisă ca fiind G(x)+E(x). Secvența eronată de la intrarea registrului va fi detectată ca atare dacă în urma efectuării împărțirii celor două polinoame (x) și (x) restul obținut în registrul LFSR va fi diferit. În caz contrar se spune că eroarea este mascată. Din punct de vedere matematic acest lucru este echivalent cu faptul că pornind de la observația de mai sus putem formula o binecunoscută teorema din teoria codării:

Polinomul corespunzător secvenței corecte G(x) și polinomul corespunzător secvenței eronate G'(x)=G(x)+E(x) dau aceeași semnătură R(x) într-un analizor având polinomul caracteristic P(x) dacă și numai dacă polinomul E(x) este multiplu al polinomului P(x).

Având în vedere că pentru o secvență de intrare corectă de lungime m numărul secvențelor diferite ce pot apărea la intrarea unui LFSR în caz de detect este și că dintre aceste au polinomul eroare multiplu al polinomului caracteristic P(x) de grad n al LFSR, se poate spune că pentru un analizor de semnatură implementat printr-un LFSR cu polinom caracteristic de grad n probabilitatea de mascare a erorilor dintr-un flux de date de intrare de lungime m este:

rel.3

Se observă că dacă , atunci această probabilitate tinde spre valoarea . Deci pentru secvențe de intrare suficient de lungi probabilitatea de mascare este dependentă numai de gradul polinomului caracteristic al LFSR.

Dacă polinomul caracteristic al LFSR are doi sau mat mulți coeficienți nentili, atunci orice eroare care afectează un singur bit din fluxul de intrare este detectată.

Dacă în fluxul de date există un singur bit eronat rezultă că polinomul eroare va avea un singur termen, deci el nu va putea fi multiplul polinomului caracteristic care are doi sau mai mulți termeni. Ca un exemplu se poate menționa circuitul de calcul al parității . Acesta este în esență un analizor de semnatură bazat pe un LFSR descris de polinomul caracteristic P(x) = x+1.

În situația în care în fluxul de date de intrare se manifestă o eroare de tip salvă de lungime k, înseamnă că toți biții eronați sunt consecutivi. Un analizor de semnătură având polinomul caracteristic de grad n și coeficientul lui x0 de valoare “1” poate detecta toate defectele de tip salvă dc lungime k dacă nk.

Aplicații practice a tehnicii de compresie prin analiza semnăturii

Pentru comprimarea răspunsurilor prin metoda de numărare a tranzițiilor s-a folosit schema de principiu din figura 1. Pentru fiecare circuit s-au ales în mod aleator un număr de 10 defecte de interes pentru care s-au găsit vectori de teste care să le detecteze.

Tehnica de simulare a defectelor folosită în acest caz este simularea serie deoarece :

modelul circuitului fără defecte este pe rând modificat în așa fel încât să reprezinte un circuit cu un singur defect Cf;

– circuitul cu defectul Cf este simulat, procesul repetându-se pentru fiecare defect de interes;

– nu este nevoie de un simulator de defecte special, circuitul defect putând fi privit ca un nou circuit cu funcționare diferită față de circuitul inițial.

Simulatorul folosit în cadrul proiectului este “ModelSim” versiunea 5.6 din pachetul “FPGAdv 5.0” al firmei “Mentor Graphics”.

Pentru sinteză s-a folosit pachetul “Design Compiler” versiunea 2000.05 de la firma “Synopsys”.

Bibliotecile utilizate pentru mapare pe tehnologie și simulare postsinteză aparțin companiei “Taiwan Semiconductor Co. Ltd.”, iar procesul tehnologic poartă denumirea de TSMC 0.35. după cum spune și numele este un proces de fabricație în care lungimea minimă a unui tranzistor MOS este de 0,35 m. Trebuie precizat că tehnologia în cauză a fost dezvoltată pentru circuite care conțin numai tranzistoare MOS, eventual un singur tip de tranzistoare bipolare așa-numite “parazitice”, PNP ]n situația în care substratul este de tip P, respectiv NPN în situația în care acesta este de tip N ( mai rara întâlnită ).

Analiza de semnătură în cazul unui codor 3 din 8 :

Codorul este un circuit combinațional care are ca intrări 8 biți, și numai unul din cei 8 biți are nivel logic activ “1”, iar ceilalți au valori complementare. Ieșirea codorului are 3 biți care reprezintă codul binar al numărului bitului activ de pe intrare, și un bit care semnalizează o eroare prezentă pe intrări, pentru cazul în care apar mai mulți biți unitari. În tabelul de jos sunt prezentate defectele analizate, vectorii de test care le detectează și semnăturile rezultate la ieșirea circuitului de comprimare:

În cazul de față gradul de comprimare este mai mare, și anume ¼ iar gradul de mascare după cum se vede din tabel este 0, ceea ce se dorește la orice circuit de comprimare. Circuitul de compresie, LFSR, este alcătuit din 4 bistabili și 4 sumatoare modulo 2, având polinomul caracteristic .

Analiza de semnătură în cazul unui numărător Gray pe 4 biți :

Numărătorul Gray este un circuit secvențial a cărui funcționare este similară cu cea a unui numărător obișnuit însă numără în cod Gray binar. Codul Graz se folosește la minimizarea funcțiilor booleene prin metoda Veitch – Karnaugh și implică ordonarea vectorilor ( în czul acesta ieșirile numărătorului ) în așa fel incât oricare doi vectori alăturați să difere între ei printr-un singur bit. Un exemplu de numărare în cod Gray este următorul: 000, 001, 011, 010, 110…….etc.

Fișierele sursă, respectiv cel mapat pe tehnologie sunt prezente în anexa proiectului, precum și circuitul de compresie și cel pentru testare. Compresorul utilizat este un LFSR (linear feedback shift register) este unul cu 4 bistabili și 4 sumatoare modulo 2 cu polinomul caracteristic . Prin urmare gradul de comprimare este ¼.

Iesirea numaratorului este un vector de 4 biti, iar ca intrari : o intrare de ceas – CLK, o intrare pentru Output Enable – OE ( cind OE este activ iesirile numaratorului trec pe inalta impedanta ) , un bit care comanda incarcarea paralela a numaratorului – PL, un bit care da sensul de numarare UP_DN, un bit pentru resetarea numaratorului – RESET, si un vector de 4 biti pentru incarcarea datelor in mod paralel – DATA.

Compresorul utilizat este identic cu cel din cazul codorului 3 din 8 intrucit in ambele cazuri sint comprimati 4 biti intr-unul singur.

Aceeasi problema legata de intirzierea ceasului compresorului fata de cel al numaratorului este rezolvata tot prin negarea celui dintii. După cum se poate vedea din tabel se observă că gradul de mascare este de 20%,putin mai mare decât la celelate circuite.

Defectele si testele care le detecteaza sint urmatoarele:

Analiza de semnătură în cazul unui sumator pe 8 biți :

Sumatorul în cauză este de tipul Carry Riple Output (sau cu transport propagat) și este în esență un circuit combinațional. Fișierul sursă folosit la sintetizarea acestuia precum și circuitul mapat ( sintetizat ) pe tehnologie sunt prezente în anexa proiectului.

Circuitul sintetizat conține 36 de componente instanțiate și 44 de net-uri. De menționat că ramurile de FAN-OUT sunt notate identic de către softul de sinteză.

Sumatorul are două intrări și o ieșire de 8 biți, cei doi termeni ai sumei, respectiv rezultatul, o intrare de un bit, respectiv CARRY IN și o ieșire de un bit respectiv CARRY OUT. Semnătura rezultată în urma aplicării secvenței de teste va evidenția toate testele care detectează un anumit defect.

În tabelul de jos sunt prezentate defectele analizate, vectorii de test care le detectează și semnăturile rezultate la ieșirea circuitului de comprimare:

Circuitul de compresie folosit este un LFSR (linear feedback shift register) cu polinomul caracteristic egal cu având în componență 9 bistabili și 9 sumatoare modulo 2.Rata de compresie în cazul acestui circuit este de 1/9 deoarece în loc de a compara răspunsurile pe toate cele 9 ieșiri ale sumatorului, urmărim doar o singură ieșire, cea a circuitului de compresie la care rezultă semnătura dorită.

Gradul de mascare în cazul circuitului studiat este de 10%, ceea ce este destul de avantajos pentru numărul de defecte din circuit.

Analiza de semnătură în cazul automatului de lift

Circuitul modelează funcționarea unui automat de lift cu trei etaje și parter este un circuit secvențial și are în componență 43 de net-uri și 24 de componente instanțiate. Ieșirile sunt sub forma a doi biți care indică etajul curent, iar intrările sunt reprezentate de : 2 vectori de 4 biți ce reprezintă comenzile din exterior și din interior, un bit care semnalează dacă liftul este gol “0” sau plin “1”, doi biți care semnalează starea ușilor interioare și exterioare ( 1 – inchis , 0 – deschis), o intrare de ceas și fiindcă nu este un automat real de lift dar este un circuit secvențial, o intrare de RESET.

Fișierul sursă care a folosit la sintetizarea automatului, precum și fisierul automatului în sine sintetizat sunt prezentate în anexa proiectului.

În tabelul de jos sunt prezentate defectele analizate, vectorii de test care le detectează și semnăturile rezultate la ieșirea circuitului de comprimare:

După ce au fost inițializați bistabilii au fost aplicate testele de mai sus. Bistabilii memorează etajul curent, defectele propagându-se la ieșiri odată cu primul front pozitiv al ceasului automatului. Se observă că s-au folosit câte un ceas pentru automatul în sine cât și pentru circuitul de comprimare. Întrucât semnalele de la ieșire nu se propagă instantaneu, este necesar ca ceasul circuitului de compresie sa îl decalăm față de cel al automatului. Pentru o bună funcționare ceasul circuitului de compresie este inversat de cel al automatului, aceasta ducând la citirea unor valori la intrările circuitului de compresie valide și stabile.

Din cele 10 defecte studiate, 9 au fost detectabile la citirea semnăturii de la ieșirea LFSR-ului , un singur defect fiind nedetectat de semnătură dar este detectabil la citirea ieșirilor automatului de lift, deci putem afirma că gradul de mascare este de 10%, rata de compresie fiind în acest caz de ½ . Circuitul de compresie, este format din 3 bistabili și 3 sumatoare modulo 2 și are polinomul caracteristic .

Numărarea tranzițiilor în cazul unui comparator pe 4 biți

Comparatorul este un circuit combinațional care are ca intrări 2 vectori de 4 biți iar ieșirea comparatorului are 3 biți care au funcțiile următoare: bitul notat cu Z ia valoare activă când cei doi vectori de pe intrare au valori identice, bitul XM ia valoare activă când valoarea în binar a vectorului X este mai mare ca cea a vectorului Y, iar bitul YM semnalizează faptul că valoarea vectorului Y este mai mare ca a lui X.

Eșantionul de defecte de interes împreună cu testele aferente este prezentat în tabelul următor :

Se observă că rata de compresie este de 1 / 3 iar gradul de mascare fiind de 10%.

Deoarece automatul Moore are o singură ieșire, utilizarea unui circuit de compresie ar fi inutilă, semnătura de analizat obținându-se chiar la ieșirea circuitului

Observații generale

Din simulările studiate și din rezultatele obținute se poate observa următoarele:

Secvența eronată de la intrarea registrului va fi detectată ca atare dacă în urma efectuării împărțirii G(x) și G’(x) restul obținut în registrul LFSR va fi diferit ( unde G(x)-polinomul corect de la ieșirea CST ,G’(x)- polinomul cu eroare de la ieșirea CST când este activat un defect). În caz contrar se spune că eroarea este mascată.

Pentru un analizor de semnătură implementat printr-un LFSR cu polinomul caracteristic de grad n probabilitatea de mascare a erorilor dintr-un flux de date de intrare de lungime m este:

, de aici rezultă că pentru secvențe suficient de lungi gradul de mascare depinde numai de gradul polinomului caracteristic al LFSR.

Dacă polinomul caracteristic are doi sau mai mulți coeficienți nenuli, atunci orice eroare care afectează un singur bit din fluxul de intrare este detectată.

ANEXĂ I

1.Codor

a). sursa VHDL a circutului: –codor.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity CODOR is

port ( A : in std_logic_vector(7 downto 0);

Y : out std_logic_vector(3 downto 0));

end CODOR;

architecture RTL1 of CODOR is

begin

process (A)

begin

case A is

when "00000001" =>

Y <= "0000";

when "00000010" =>

Y <= "0001";

when "00000100" =>

Y <= "0010";

when "00001000" =>

Y <= "0011";

when "00010000" =>

Y <= "0100";

when "00100000" =>

Y <= "0101";

when "01000000" =>

Y <= "0110";

when "10000000" =>

Y <= "0111";

when others =>

Y <= "1000";

end case;

end process;

end RTL1;

––––––––––––––––––––––––––––––––––

b). testbanch pentru circuitul Codor.–Tbcodor.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity TBCODOR is

end TBCODOR;

architecture BEH of TBCODOR is

component CODOR

port (A : in std_logic_vector(15 downto 0);

Y : out std_logic_vector(3 downto 0));

end component;

signal A_test : std_logic_vector(15 downto 0);

signal Y_test : std_logic_vector(3 downto 0);

begin

DUT : CODOR port map ( A => A_test, Y => Y_test);

A_test <= "0000000000000001" after 20 ns,

"0000000000000010" after 40 ns,

"0000000000000100" after 60 ns,

"0000000000001000" after 80 ns,

"0000000000010000" after 100 ns,

"0000000000100000" after 120 ns,

"0000000001000000" after 140 ns,

"0000000010000000" after 160 ns,

"0000000100000000" after 180 ns,

"0000001000000000" after 200 ns,

"0000010000000000" after 220 ns,

"0000100000000000" after 240 ns,

"0001000000000000" after 260 ns,

"0010000000000000" after 280 ns,

"0100000000000000" after 300 ns,

"1000000000000000" after 320 ns,

"1000000111000000" after 340 ns,

"1000000000000100" after 360 ns,

"1000000011111111" after 380 ns;

end BEH;

––––––––––––––––––––––––––––––––––

c).sursa VHDL a circutului mappat după sinteză.–CODOR_mapped.vhd

library IEEE;

use IEEE.std_logic_1164.all;

package CONV_PACK_CODOR is

– define attributes

attribute ENUM_ENCODING : STRING;

end CONV_PACK_CODOR;

library IEEE;

use IEEE.std_logic_1164.all;

use work.CONV_PACK_CODOR.all;

entity CODOR is

port( A : in std_logic_vector (7 downto 0);

Y : out std_logic_vector (3 downto 0));

end CODOR;

architecture SYN_RTL1 of CODOR is

component NR4D1

port( A1, A2, A3, A4 : in std_logic; ZN : out std_logic);

end component;

component ND4D0

port( A1, A2, A3, A4 : in std_logic; ZN : out std_logic);

end component;

component ND2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component NR2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component INV0

port( I : in std_logic; ZN : out std_logic);

end component;

component IND3D0

port( A1, B1, B2 : in std_logic; ZN : out std_logic);

end component;

component XOR2D1

port( A1, A2 : in std_logic; Z : out std_logic);

end component;

component AOI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

component MAOI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

signal n7, n8, n9, n10, n11, n12, n13, n14, n15, n16, n17, n18, n19, n20,

n21, n22, n23, n24, n25, n26, n27, n28, n29,

n30, n31, n32, n33, n34, n35: std_logic;

–1 signal n8t : std_logic :='1';

–2 signal n10t : std_logic :='1';

–3 signal n12t : std_logic :='0';

–4 signal n14t : std_logic :='0';

–5 signal n16t : std_logic :='0';

–6 signal n20t : std_logic :='1';

–7 signal n23t : std_logic :='1';

–8 signal n26t : std_logic :='0';

–9 signal n29t : std_logic :='0';

–10 signal n33t : std_logic :='1';

begin

U6 : NR4D1 port map( A1 => A(0), A2 => A(5), A3 => A(6), A4 => A(7), ZN => n34);

U7 : ND4D0 port map( A1 => n7, A2 => n8, A3 => n9, A4 => n10, ZN => Y(2));

–2 U7 : ND4D0 port map( A1 => n7, A2 => n8, A3 => n9, A4 => n10t, ZN => Y(2));

–1 U7 : ND4D0 port map( A1 => n7, A2 => n8t, A3 => n9, A4 => n10, ZN => Y(2));

U8 : ND4D0 port map( A1 => n11, A2 => n12, A3 => n8, A4 => n9, ZN => Y(1));

U9 : ND4D0 port map( A1 => n13, A2 => n12, A3 => n8, A4 => n10, ZN => Y(0));

–3 U9 : ND4D0 port map( A1 => n13, A2 => n12t, A3 => n8, A4 => n10, ZN => Y(0));

–4 U10 : ND4D0 port map( A1 => n14t, A2 => n15, A3 => n16, A4 => n17, ZN => Y(3)

U10 : ND4D0 port map( A1 => n14, A2 => n15, A3 => n16, A4 => n17, ZN => Y(3));

–5 U10 : ND4D0 port map( A1 => n14, A2 => n15, A3 => n16t, A4 => n17, ZN => Y(3));

U11 : ND2D0 port map( A1 => n19, A2 => n20, ZN => n18);

–6 U11 : ND2D0 port map( A1 => n19, A2 => n20t, ZN => n18);

U12 : NR2D0 port map( A1 => A(5), A2 => n18, ZN => n21);

U13 : NR2D0 port map( A1 => A(0), A2 => A(1), ZN => n22);

U14 : ND2D0 port map( A1 => n22, A2 => n24, ZN => n23);

–8 U15 : ND2D0 port map( A1 => n26t, A2 => n27, ZN => n25);

U15 : ND2D0 port map( A1 => n26, A2 => n27, ZN => n25);

U16 : NR2D0 port map( A1 => n23, A2 => n25, ZN => n28);

–7 U16 : NR2D0 port map( A1 => n23t, A2 => n25, ZN => n28);

U17 : INV0 port map( I => A(2), ZN => n24);

U18 : INV0 port map( I => A(1), ZN => n29);

U19 : INV0 port map( I => A(7), ZN => n27);

U20 : INV0 port map( I => A(6), ZN => n26);

U21 : INV0 port map( I => A(4), ZN => n20);

U22 : INV0 port map( I => A(3), ZN => n19);

U23 : INV0 port map( I => A(5), ZN => n30);

U24 : NR2D0 port map( A1 => A(1), A2 => A(2), ZN => n31);

U25 : NR2D0 port map( A1 => A(3), A2 => A(4), ZN => n32);

U26 : IND3D0 port map( A1 => A(0), B1 => n31, B2 => n32, ZN => n33);

U27 : XOR2D1 port map( A1 => n21, A2 => n28, Z => n15);

U28 : AOI22D0 port map( A1 => n25, A2 => n23, B1 => A(6), B2 => A(7), ZN => n17);

U29 : MAOI22D0 port map( A1 => A(0), A2 => A(1), B1 => n24, B2 => n22, ZN =>n16);

U30 : AOI22D0 port map( A1 => A(5), A2 => n18, B1 => A(3), B2 => A(4), ZN => n14);

U31 : ND4D0 port map( A1 => n35, A2 => A(5), A3 => n26, A4 => n27, ZN => n10);

U32 : ND4D0 port map( A1 => n35, A2 => A(6), A3 => n30, A4 => n27, ZN => n9) ;

U33 : ND4D0 port map( A1 => n35, A2 => A(7), A3 => n30, A4 => n26, ZN => n8) ;

U34 : ND4D0 port map( A1 => n34, A2 => n31, A3 => A(3), A4 => n20, ZN => n12 );

U35 : ND4D0 port map( A1 => n34, A2 => n31, A3 => A(4), A4 => n19, ZN => n7) ;

U36 : ND4D0 port map( A1 => n34, A2 => n32, A3 => A(2), A4 => n29, ZN => n11);

–9 U36 : ND4D0 port map( A1 => n34, A2 => n32, A3 => A(2), A4 => n29t, ZN => n11);

U37 : ND4D0 port map( A1 => n34, A2 => n32, A3 => A(1), A4 => n24, ZN => n13 );

U38 : INV0 port map( I => n33, ZN => n35);

–10 U38 : INV0 port map( I => n33t, ZN => n35);

end SYN_RTL1;

––––––––––––––––––––––––––––––––––

d)sursa VHDL a circuitului de compresie în cazul Codor-ului.–cascodor.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity cascodor is

port(o : in std_logic_vector(3 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end cascodor;

architecture cascodorrtl1 of cascodor is

signal q0, q1, q2, q3, o32, o21, o10 : std_logic;

begin

process(clk, reset)

begin

if (reset='1') then

if (clk='1') then

q1<=q0;

q2<=q1;

q3<=q2;

semn<=q3;

end if;

else

q1<='0';

q2<='0';

q3<='0';

semn<='0';

end if;

end process;

o32<=semn xor q3 xor o(3);

o21<=o32 xor o(2);

o10<=q1 xor o21 xor o(1);

q0<=o10 xor o(0);

end cascodorrtl1;

––––––––––––––––––––––––––––––––––

e).testbanch-ul pentru intreg circuitul(codor+LFSR).–tbcodorcas.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity tbcodorcas is

end tbcodorcas;

architecture arhtbcodorcas of tbcodorcas is

component CODOR

port (A : in std_logic_vector(7 downto 0);

Y : out std_logic_vector(3 downto 0));

end component;

component cascodor

port(o : in std_logic_vector(3 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end component;

signal A_test : std_logic_vector(7 downto 0);

signal clk_test : std_logic :='1';

signal Y_test : std_logic_vector(3 downto 0);

signal semn_test, reset_test : std_logic;

begin

DUT : CODOR port map ( A => A_test, Y => Y_test);

DUT1 : cascodor port map (clk=> clk_test,reset=>reset_test,o=>Y_test,semn=>semn_test);

clk_test <= not clk_test after 10 nS;

reset_test <='0','1' after 15 ns;

A_test <="00000001",

"00000010" after 20 ns,

"00000100" after 40 ns,

"00001000" after 60 ns,

"00010000" after 80 ns,

"00100000" after 100 ns,

"01000000" after 120 ns,

"10000000" after 140 ns,

"11000000" after 160 ns,

"11001100" after 180 ns,

"11000000" after 200 ns,

"11001111" after 220 ns,

"11110000" after 240 ns,

"11111111" after 260 ns;

end arhtbcodorcas;

2.Numărător GRAY

a).sursa VHDL a circutului: –numarator.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity numgray is

port(clk,reset,load,oen,up_down : in std_logic;

data_load : in std_logic_vector(3 downto 0);

count_out : out std_logic_vector(3 downto 0));

end numgray;

architecture behav of numgray is

signal oen_tmp : std_logic;

signal count : std_logic_vector(3 downto 0);

signal count_tmp : std_logic_vector(3 downto 0);

begin

P1 : process(clk)

begin

if (rising_edge(clk)) then

if ( reset = '1') then

count <= "0000";

elsif ( load = '1' ) then

count <= data_load;

else if ( up_down = '1' ) then

count <= count – 1;

else count <= count + 1;

end if;

end if;

end if;

end process;

count_out <= count_tmp when ( oen_tmp = '0') else "ZZZZ";

CONTROL_TRI : process(clk,oen)

begin

if (rising_edge(clk)) then

oen_tmp <= oen;

end if;

end process;

CONVERSIE : process(count)

begin

case count is

when "0000" => count_tmp <= "0000";

when "0001" => count_tmp <= "0001";

when "0010" => count_tmp <= "0011";

when "0011" => count_tmp <= "0010";

when "0100" => count_tmp <= "0110";

when "0101" => count_tmp <= "0111";

when "0110" => count_tmp <= "0101";

when "0111" => count_tmp <= "0100";

when "1000" => count_tmp <= "1100";

when "1001" => count_tmp <= "1101";

when "1010" => count_tmp <= "1111";

when "1011" => count_tmp <= "1110";

when "1100" => count_tmp <= "1010";

when "1101" => count_tmp <= "1011";

when "1110" => count_tmp <= "1001";

when "1111" => count_tmp <= "1000";

when others => count_tmp <= "ZZZZ";

end case;

end process;

end behav;

b). testbanch pentru circuitul Codor.–tbnumg.vhd

library ieee;

use ieee.std_logic_1164.all;

entity tbnumgray is

end tbnumgray;

architecture arhtbn of tbnumgray is

component numgray

port(clk,reset,load,oen,up_down : in std_logic;

data_load : in std_logic_vector(3 downto 0);

count_out : out std_logic_vector(3 downto 0));

end component;

signal clk_test : std_logic :='0';

signal reset_test,load_test,oen_test,up_down_test : std_logic;

signal count_out_test, data_load_test : std_logic_vector(3 downto 0);

begin

DUT : numgray port map ( clk => clk_test, reset => reset_test, load => load_test,

oen => oen_test, up_down => up_down_test, data_load => data_load_test,

count_out => count_out_test);

data_load_test <= "1010";

clk_test <= not clk_test after 10 nS;

reset_test <='1','0' after 20 ns,'1' after 300 nS,'0' after 320 nS;

load_test <= '0', '1' after 400 nS, '0' after 420 nS;

up_down_test <= '0','1' after 100 nS;

oen_test <='0','1' after 160 nS,'0' after 180 nS;

end arhtbn;

––––––––––––––––––––––––––––––––––

c).sursa VHDL a circutului mappat după sinteză.–NUMGRAY_mapped.vhd

library IEEE;

use IEEE.std_logic_1164.all;

package CONV_PACK_numgray is

– define attributes

attribute ENUM_ENCODING : STRING;

end CONV_PACK_numgray;

library IEEE;

use IEEE.std_logic_1164.all;

use work.CONV_PACK_numgray.all;

entity numgray is

port( test : inout std_logic; clk, reset, load, oen, up_down : in std_logic;

data_load : in std_logic_vector (3 downto 0);

count_out : out std_logic_vector (3 downto 0));

end numgray;

architecture SYN_behav of numgray is

component NR2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component XNR2D1

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component BUFTN1

port( I, OEN : in std_logic; Z : out std_logic);

end component;

component INV0

port( I : in std_logic; ZN : out std_logic);

end component;

component XOR3D1

port( A1, A2, A3 : in std_logic; Z : out std_logic);

end component;

component ND2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component XOR2D1

port( A1, A2 : in std_logic; Z : out std_logic);

end component;

component INVTN1

port( I, OEN : in std_logic; ZN : out std_logic);

end component;

component DFF1Q

port( D, CP : in std_logic; Q : out std_logic);

end component;

component FA1D1

port( A, B, CI : in std_logic; S, CO : out std_logic);

end component;

component MOAI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

signal count_2_port, count_out_tri_enable_3_port, count_0_port,

count55_2_port, count39_3_port, count39_1_port, count55_0_port,

count55_1_port, count39_0_port, count_tmp_3_port, count39_2_port,

count55_3_port, count_1_port, n187, n188, n189, n190, n191,

r74_carry_2_port, r74_carry_0_port, r74_carry_3_port, r74_carry_1_port,

n192, n193, n194, n195, n197 ,n196 : std_logic;

– 1 signal n188t : std_logic :='1';

– 2 signal n189t : std_logic :='1';

– 3 signal n190t : std_logic :='0';

– 4 signal count_0_portt : std_logic :='0';

– 5 signal count39_3_portt : std_logic :='1';

– 6 signal n194t : std_logic :='0';

– 7 signal count55_0_portt : std_logic :='1';

– 8 signal count39_0_portt : std_logic :='0';

– 9 signal n196t : std_logic :='0';

–10 signal ud : std_logic :='1';

–11 signal r74_carry_0_portt : std_logic :='0';

begin

U34 : NR2D0 port map( A1 => load, A2 => reset, ZN => n187);

U35 : XNR2D1 port map( A1 => count_2_port, A2 => count_tmp_3_port, ZN => n191);

U36 : BUFTN1 port map( I => count_tmp_3_port, OEN => count_out_tri_enable_3_port, Z => count_out(3));

U37 : INV0 port map( I => data_load(3), ZN => n193);

r74_U1_3 : XOR3D1 port map( A1 => count_tmp_3_port, A2 => up_down, A3 => r74_carry_3_port, Z => count55_3_port);

U38 : INV0 port map( I => data_load(2), ZN => n194);

U39 : INV0 port map( I => data_load(1), ZN => n195);

U40 : ND2D0 port map( A1 => load, A2 => n197, ZN => n192);

U41 : INV0 port map( I => reset, ZN => n197);

U42 : INV0 port map( I => data_load(0), ZN => n196);

U43 : INV0 port map( I => up_down, ZN => r74_carry_0_port);

–10 U43 : INV0 port map( I => ud, ZN => r74_carry_0_port);

U44 : INV0 port map( I => count_1_port, ZN => n188);

U45 : XOR2D1 port map( A1 => n188, A2 => count_2_port, Z => n189);

–1 U46 : XOR2D1 port map( A1 => n188t, A2 => count_0_port, Z => n190);

U46 : XOR2D1 port map( A1 => n188, A2 => count_0_port, Z => n190);

count_out_tri_1_label : INVTN1 port map( I => n189, OEN => count_out_tri_enable_3_port, ZN => count_out(1));

–2 count_out_tri_1_label : INVTN1 port map( I => n189t, OEN => count_out_tri_enable_3_port, ZN => count_out(1));

–3 count_out_tri_0_label : INVTN1 port map( I => n190t, OEN => count_out_tri_enable_3_port, ZN => count_out(0));

count_out_tri_0_label : INVTN1 port map( I => n190, OEN => count_out_tri_enable_3_port, ZN => count_out(0));

count_out_tri_2_label : INVTN1 port map( I => n191, OEN => count_out_tri_enable_3_port, ZN => count_out(2));

count_reg_3_label : DFF1Q port map( D => count39_3_port, CP => clk, Q => count_tmp_3_port);

–5 count_reg_3_label : DFF1Q port map( D => count39_3_portt, CP => clk, Q => count_tmp_3_port);

count_reg_2_label : DFF1Q port map( D => count39_2_port, CP => clk, Q => count_2_port);

count_reg_1_label : DFF1Q port map( D => count39_1_port, CP => clk, Q => count_1_port);

count_reg_0_label : DFF1Q port map( D => count39_0_port, CP => clk, Q => count_0_port);

–8 count_reg_0_label : DFF1Q port map( D => count39_0_portt, CP => clk, Q => count_0_port);

oen_tmp_reg : DFF1Q port map( D => oen, CP => clk, Q => count_out_tri_enable_3_port);

r74_U1_2 : FA1D1 port map( A => count_2_port, B => up_down, CI => r74_carry_2_port, S => count55_2_port, CO => r74_carry_3_port);

–11 r74_U1_0 : FA1D1 port map( A => count_0_port, B => up_down, CI => r74_carry_0_portt, S => count55_0_port, CO => r74_carry_1_port);

r74_U1_0 : FA1D1 port map( A => count_0_port, B => up_down, CI => r74_carry_0_port, S => count55_0_port, CO => r74_carry_1_port);

–4 r74_U1_0 : FA1D1 port map( A => count_0_portt, B => up_down, CI => r74_carry_0_port, S => count55_0_port, CO => r74_carry_1_port);

r74_U1_1 : FA1D1 port map( A => count_1_port, B => up_down, CI => r74_carry_1_port, S => count55_1_port, CO => r74_carry_2_port);

U47 : MOAI22D0 port map( A1 => n192, A2 => n193, B1 => count55_3_port, B2 => n187, ZN => count39_3_port);

U48 : MOAI22D0 port map( A1 => n192, A2 => n194, B1 => count55_2_port, B2 => n187, ZN => count39_2_port);

–6 U48 : MOAI22D0 port map( A1 => n192, A2 => n194t, B1 => count55_2_port, B2 => n187, ZN => count39_2_port);

U49 : MOAI22D0 port map( A1 => n192, A2 => n195, B1 => count55_1_port, B2 => n187, ZN => count39_1_port);

U50 : MOAI22D0 port map( A1 => n192, A2 => n196, B1 => count55_0_port, B2 => n187, ZN => count39_0_port);

–9 U50 : MOAI22D0 port map( A1 => n192, A2 => n196t, B1 => count55_0_port, B2 => n187, ZN => count39_0_port);

–7 U50 : MOAI22D0 port map( A1 => n192, A2 => n196, B1 => count55_0_portt, B2 => n187, ZN => count39_0_port);

test <= n196;

end SYN_behav;

––––––––––––––––––––––––––––––––––

d)sursa VHDL a circuitului de compresie în cazul numaratoului-ului.

–casnum.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity casnum is

port(o : in std_logic_vector(3 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end casnum;

architecture casnumrtl1 of casnum is

signal q0, q1, q2, q3, o32, o21, o10 : std_logic;

begin

process(clk, reset)

begin

if (reset='1') then

if (clk='1') then

q1<=q0;

q2<=q1;

q3<=q2;

semn<=q3;

end if;

else

q1<='0';

q2<='0';

q3<='0';

semn<='0';

end if;

end process;

o32<=semn xor q3 xor o(3);

o21<=o32 xor o(2);

o10<=q1 xor o21 xor o(1);

q0<=o10 xor o(0);

end casnumrtl1;

––––––––––––––––––––––––––––––––––

e).testbanch-ul pentru intreg circuitul(num+LFSR).–tbnumcas.vhd

library ieee;

use ieee.std_logic_1164.all;

entity tbnumcas is

end tbnumcas;

architecture arhtbnumcas of tbnumcas is

component numgray

port(

clk,reset,load,oen,up_down : in std_logic;

data_load : in std_logic_vector(3 downto 0);

count_out : out std_logic_vector(3 downto 0));

end component;

component casnum

port( o : in std_logic_vector(3 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end component;

signal semn_test, clk1_test , reset1_test : std_logic;

signal clk_test : std_logic :='0';

signal reset_test,load_test,oen_test,up_down_test : std_logic;

signal count_out_test, data_load_test : std_logic_vector(3 downto 0);

signal ok : std_logic;

begin

DUT : numgray port map ( clk => clk_test, reset => reset_test, load => load_test,

oen => oen_test, up_down => up_down_test, data_load => data_load_test,

count_out => count_out_test);

DUT1 : casnum port map ( clk => clk1_test, reset => reset1_test,o => count_out_test,

semn => semn_test);

ok <= '0', '1' after 100 ns, '0' after 140 ns, '1' after 160 ns, '0' after 180 ns, '1' after 200 ns, '0' after 240 ns;

data_load_test <= "0000";

clk_test <= not clk_test after 10 nS;

clk1_test<=not clk_test;

reset_test <='1','0' after 20 ns,'1' after 280 nS,'0' after 300 nS;

reset1_test <='0','1' after 20 ns;

load_test <= '0', '1' after 260 nS, '0' after 280 nS;

up_down_test <= '0','1' after 140 nS;

oen_test <='0';

end arhtbnumcas;

3.LIFT

a). sursa VHDL a circutului: –liftb.vhd

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_unsigned.all;

entity liftb is

port(reset,clk,plin,usi_int,usi_ext : in std_logic;

co,ci : in std_logic_vector (3 downto 0);

etaj : buffer std_logic_vector( 1 downto 0 ));

end liftb;

architecture liftb_arh of liftb is

signal cio : std_logic_vector (3 downto 0);

signal cio1 :std_logic_vector (1 downto 0);

begin

process (co, ci)

begin

if (plin='0') then

cio<=co;

else

cio<=ci;

end if;

end process;

cio1(1)<=(not(cio(1)) and not(cio(0)));

cio1(0)<=(cio(3) or cio(1));

process(clk)

begin

if (reset='1') then

etaj<="00";

else

if (rising_edge(clk)) then

if ((cio1 > etaj) and ((not(plin)and usi_ext) or (usi_int and usi_ext))='1') then

etaj <= etaj + 1;

end if;

if ((cio1 < etaj) and ((not(plin)and usi_ext) or (usi_int and usi_ext))='1') then

etaj <= etaj – 1;

end if;

end if;

end if;

end process;

end liftb_arh;

–––––––––––––––––––––––––––––––––

b).sursa VHDL a circutului mappat după sinteză.–LIFTB_mapped.vhd

library IEEE;

use IEEE.std_logic_1164.all;

package CONV_PACK_liftb is

– define attributes

attribute ENUM_ENCODING : STRING;

end CONV_PACK_liftb;

library IEEE;

use IEEE.std_logic_1164.all;

use work.CONV_PACK_liftb.all;

entity liftb is

port( reset, clk, plin, usi_int, usi_ext : in std_logic; co, ci : in

std_logic_vector (3 downto 0); etaj : buffer std_logic_vector (1

downto 0));

end liftb;

architecture SYN_liftb_arh of liftb is

component MUX2D1

port( I0, I1, S : in std_logic; Z : out std_logic);

end component;

component INV0

port( I : in std_logic; ZN : out std_logic);

end component;

component NR2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component OAI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

component AN2D1

port( A1, A2 : in std_logic; Z : out std_logic);

end component;

component AOI31D0

port( A1, A2, A3, B : in std_logic; ZN : out std_logic);

end component;

component AN3D1

port( A1, A2, A3 : in std_logic; Z : out std_logic);

end component;

component ND2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component DFCNS1Q

port( S, D, CP, CDN : in std_logic; Q : out std_logic);

end component;

component MOAI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

component XOR2D1

port( A1, A2 : in std_logic; Z : out std_logic);

end component;

component IND2D1

port( A1, B1 : in std_logic; ZN : out std_logic);

end component;

signal ARG151_1_port, etaj_1_port, n54_0_port, X_return187, cio1_1_port,

etaj53_1_port, cio1_0_port, etaj53_0_port, X_return105, etaj_0_port,

ARG234_1_port, ARG151_0_port, n266, n267, n268, n269, n270, n271, n272, n273, n274, n275, n276, n277, n278, n279 : std_logic;

–1 signal etaj_1_portt : std_logic :='0';

–2 signal ARG151_0_portt : std_logic :='1';

–3 signal n266t :std_logic :='1';

–4 signal n267t :std_logic :='0';

–5 signal n269t :std_logic :='0';

–6 signal n272t :std_logic :='0';

–7 signal n273t :std_logic :='1';

–8 signal n276t :std_logic :='0';

–9 signal n279t :std_logic :='0';

–10 signal etaj53_0_portt :std_logic :='1';

begin

etaj <= ( etaj_1_port, etaj_0_port );

U43 : MUX2D1 port map( I0 => n268, I1 => n267, S => plin, Z => n266);

–4 U43 : MUX2D1 port map( I0 => n268, I1 => n267t, S => plin, Z => n266);

U44 : INV0 port map( I => n266, ZN => cio1_0_port);

–3 U44 : INV0 port map( I => n266t, ZN => cio1_0_port);

U45 : NR2D0 port map( A1 => ci(3), A2 => ci(1), ZN => n267);

U46 : NR2D0 port map( A1 => co(3), A2 => co(1), ZN => n268);

U47 : OAI22D0 port map( A1 => n275, A2 => n274, B1 => n276, B2 =>

cio1_1_port, ZN => X_return187);

U48 : AN2D1 port map( A1 => n276, A2 => cio1_1_port, Z => n275);

–8 U48 : AN2D1 port map( A1 => n276t, A2 => cio1_1_port, Z => n275);

U49 : AOI31D0 port map( A1 => X_return105, A2 => n279, A3 => usi_ext, B => n270, ZN => n269);

U50 : INV0 port map( I => n269, ZN => n54_0_port);

–5 U50 : INV0 port map( I => n269t, ZN => n54_0_port);

U51 : AN3D1 port map( A1 => usi_ext, A2 => n279, A3 => X_return187, Z =>

–9 U51 : AN3D1 port map( A1 => usi_ext, A2 => n279t, A3 => X_return187, Z => n270);

U52 : MUX2D1 port map( I0 => co(0), I1 => ci(0), S => plin, Z => n278);

U53 : MUX2D1 port map( I0 => co(1), I1 => ci(1), S => plin, Z => n277);

U54 : ND2D0 port map( A1 => cio1_0_port, A2 => ARG151_0_port, ZN => n272);

U55 : NR2D0 port map( A1 => cio1_1_port, A2 => n276, ZN => n273);

U56 : NR2D0 port map( A1 => n277, A2 => n278, ZN => cio1_1_port);

U57 : ND2D0 port map( A1 => etaj_0_port, A2 => n266, ZN => n274);

U58 : MUX2D1 port map( I0 => ARG151_1_port, I1 => ARG234_1_port, S => n270, Z => etaj53_1_port);

–2 U59 : MUX2D1 port map( I0 => ARG151_0_portt, I1 => ARG151_0_port, S => n270,

U59 : MUX2D1 port map( I0 => ARG151_0_port, I1 => ARG151_0_port, S => n270, Z => etaj53_0_port);

–1 U60 : INV0 port map( I => etaj_1_portt, ZN => n276);

U60 : INV0 port map( I => etaj_1_port, ZN => n276);

U61 : INV0 port map( I => etaj_0_port, ZN => ARG151_0_port);

etaj_reg_1_label : DFCNS1Q port map( S => n54_0_port, D => etaj53_1_port, CP=> clk, CDN => n271, Q => etaj_1_port);

etaj_reg_0_label : DFCNS1Q port map( S => n54_0_port, D => etaj53_0_port, CP

–10 etaj_reg_0_label : DFCNS1Q port map( S => n54_0_port, D => etaj53_0_portt, CP=> clk, CDN => n271, Q => etaj_0_port);

U62 : INV0 port map( I => reset, ZN => n271);

U63 : MOAI22D0 port map( A1 => n273, A2 => n272, B1 => cio1_1_port, B2 =>

–7 U63 : MOAI22D0 port map( A1 => n273t, A2 => n272, B1 => cio1_1_port, B2 =>

–6 U63 : MOAI22D0 port map( A1 => n273, A2 => n272t, B1 => cio1_1_port, B2 => n276, ZN => X_return105);

U64 : XOR2D1 port map( A1 => etaj_0_port, A2 => etaj_1_port, Z =>

ARG151_1_port);

U65 : XOR2D1 port map( A1 => n276, A2 => etaj_0_port, Z => ARG234_1_port);

U66 : IND2D1 port map( A1 => usi_int, B1 => plin, ZN => n279);

end SYN_liftb_arh;

–––––––––––––––––––––––––––––––––

c)sursa VHDL a circuitului de compresie în cazul lift-ului.–casliftb.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity casliftb is

port(o : in std_logic_vector(1 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end casliftb;

architecture casliftbrtl1 of casliftb is

signal q0, q1, o12 : std_logic;

begin

process(clk, reset)

begin

if (reset='1') then

if (clk='1') then

q1<=q0;

semn<=q1;

end if;

else

q1<='0';

semn<='0';

end if;

end process;

o12<=o(1) xor semn xor q1;

q0<=o(0) xor o12;

end casliftbrtl1;

–––––––––––––––––––––––––––––––––

d).testbanch-ul pentru intreg circuitul(lift+LFSR).–tbliftcas.vhd

library ieee;

use ieee.std_logic_1164.all;

entity tbliftbcas is

end tbliftbcas;

architecture rtl1 of tbliftbcas is

component liftb

port(reset,clk,plin,usi_int,usi_ext : std_logic;

co,ci:in std_logic_vector(3 downto 0);

etaj : buffer std_logic_vector( 1 downto 0 ));

end component;

component casliftb

port(o : in std_logic_vector(1 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end component;

signal clk_test : std_logic :='0';

signal semn_test,clk1_test,reset1_test,reset_test,plin_test,usi_int_test,usi_ext_test : std_logic;

signal ci_test,co_test : std_logic_vector(3 downto 0);

signal etaj_test : std_logic_vector (1 downto 0);

begin

DUT : liftb port map ( reset => reset_test, clk => clk_test, plin => plin_test, usi_int => usi_int_test,

usi_ext => usi_ext_test, co => co_test, ci => ci_test, etaj => etaj_test);

DUT1 : casliftb port map(o => etaj_test,clk => clk1_test,semn => semn_test,reset => reset1_test);

reset_test <= '1', '0' after 15 ns;

reset1_test <= '0', '1' after 3 ns;

plin_test <= '0','1' after 95 ns, '0' after 180 ns;

clk_test <= not clk_test after 10 nS;

clk1_test <= not clk_test;

co_test <= "0000","0010" after 5 ns, "1000" after 60 nS, "0100" after 185 ns;

ci_test <= "0000","0001" after 120 nS;

usi_int_test <='0','1' after 105 nS, '0' after 180 ns;

usi_ext_test <='1', '0' after 100 ns, '1' after 115 ns, '0' after 180 ns, '1' after 195 ns;

end rtl1;

4.SUMATOR

a). sursa VHDL a circutului: –adder.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity full_add is

port(A,B:in std_logic_vector(7 downto 0);

CI:in std_logic;

s:out std_logic_vector(7 downto 0);

CO:out std_logic);

end full_add;

architecture arh_full_ad of full_add is

procedure fa ( signal A,B,CI:in std_logic;

signal S,CO:out std_logic)is

begin

S<=A xor B xor CI;

CO<=(A and B) or (A and CI) or (B and CI);

end fa;

signal C:std_logic_vector(A'length-1 downto 1);

begin

gen:for j in A'range generate

genlsb:if j=0 generate

fa (A=>A(0), B=>B(0),CI=>CI,S=>S(0),CO=>C(1));

end generate;

genmid:if(j>0)and(j<A'length-1)generate

fa (A=>A(j),B=>B(j),CI=>C(j),S=>S(j),CO=>C(j+1));

end generate;

genmsb:if j=A'length-1 generate

fa (A=>A(j),B=>B(j),CI=>C(j),S=>S(j),CO=>CO);

end generate;

end generate;

end arh_full_add;

–––––––––––––––––––––––––––––––––

b).sursa VHDL a circutului mappat după sinteză.–ADDER_mapped.vhd

library IEEE;

use IEEE.std_logic_1164.all;

package CONV_PACK_full_add is

– define attributes

attribute ENUM_ENCODING : STRING;

end CONV_PACK_full_add;

library IEEE;

use IEEE.std_logic_1164.all;

use work.CONV_PACK_full_add.all;

entity full_add is

port( A, B : in std_logic_vector (7 downto 0); CI : in std_logic; S : out

std_logic_vector (7 downto 0); CO : out std_logic);

end full_add;

architecture SYN_arh_full_add of full_add is

component INV0

port( I : in std_logic; ZN : out std_logic);

end component;

component MAOI222D0

port( A, B, C : in std_logic; ZN : out std_logic);

end component;

component NR2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component ND2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component XOR3D1

port( A1, A2, A3 : in std_logic; Z : out std_logic);

end component;

component XNR3D1

port( A1, A2, A3 : in std_logic; ZN : out std_logic);

end component;

component MOAI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

signal n330, n331, n332, n333, n334, n335, n336, n337, n338, n339, n340,

n341, n342, n343, n344, n345, n346, n347 : std_logic;

–1 signal n330t : std_logic :='1';

–2 signal n333t : std_logic :='0';

–3 signal n338t : std_logic :='1';

–4 signal n340t : std_logic :='0';

–5 signal n343t :std_logic :='1';

–6 signal n347t :std_logic :='0';

–7 signal a7t :std_logic := '1';

–8 signal a3t :std_logic := '0';

–9 signal b0t :std_logic := '1';

–10 signal b4t :std_logic := '1';

begin

–1 U28 : INV0 port map( I => n330t, ZN => CO);

U28 : INV0 port map( I => n330, ZN => CO);

U29 : MAOI222D0 port map( A => CI, B => A(0), C => B(0), ZN => n331);

U30 : NR2D0 port map( A1 => B(1), A2 => n333, ZN => n332);

–2 U30 : NR2D0 port map( A1 => B(1), A2 => n333t, ZN => n332);

U31 : MAOI222D0 port map( A => n335, B => A(2), C => B(2), ZN => n334);

U32 : ND2D0 port map( A1 => n337, A2 => n334, ZN => n336);

U33 : NR2D0 port map( A1 => B(4), A2 => n339, ZN => n338);

U34 : MAOI222D0 port map( A => n341, B => A(5), C => B(5), ZN => n340);

U35 : NR2D0 port map( A1 => B(6), A2 => n343, ZN => n342);

U36 : MAOI222D0 port map( A => n344, B => B(7), C => A(7), ZN => n330);

U37 : XOR3D1 port map( A1 => A(7), A2 => B(7), A3 => n344, Z => S(7));

–7 U37 : XOR3D1 port map( A1 => a7t, A2 => B(7), A3 => n344, Z => S(7));

U38 : XNR3D1 port map( A1 => n345, A2 => B(6), A3 => n343, ZN => S(6));

U39 : XOR3D1 port map( A1 => A(5), A2 => B(5), A3 => n341, Z => S(5));

U40 : XNR3D1 port map( A1 => n346, A2 => B(4), A3 => n339, ZN => S(4));

–8 U41 : XNR3D1 port map( A1 => a3t, A2 => B(3), A3 => n334, ZN => S(3));

U41 : XNR3D1 port map( A1 => A(3), A2 => B(3), A3 => n334, ZN => S(3));

U42 : XOR3D1 port map( A1 => A(2), A2 => B(2), A3 => n335, Z => S(2));

U43 : XNR3D1 port map( A1 => n347, A2 => B(1), A3 => n333, ZN => S(1));

–6 U43 : XNR3D1 port map( A1 => n347t, A2 => B(1), A3 => n333, ZN => S(1));

U44 : INV0 port map( I => n331, ZN => n333);

U45 : INV0 port map( I => A(1), ZN => n347);

U46 : MOAI22D0 port map( A1 => n334, A2 => n337, B1 => n336, B2 => A(3), ZN => n339);

U47 : INV0 port map( I => A(4), ZN => n346);

U48 : INV0 port map( I => n340, ZN => n343);

–4 U48 : INV0 port map( I => n340t, ZN => n343);

U49 : INV0 port map( I => A(6), ZN => n345);

U50 : XOR3D1 port map( A1 => CI, A2 => A(0), A3 => B(0), Z => S(0));

–9 U50 : XOR3D1 port map( A1 => CI, A2 => A(0), A3 => b0t, Z => S(0));

U51 : MOAI22D0 port map( A1 => n332, A2 => n347, B1 => n333, B2 => B(1), ZN => n335);

–3 U52 : MOAI22D0 port map( A1 => n338t, A2 => n346, B1 => n339, B2 => B(4), ZN

–10 U52 : MOAI22D0 port map( A1 => n338, A2 => n346, B1 => n339, B2 => b4t, ZN

U52 : MOAI22D0 port map( A1 => n338, A2 => n346, B1 => n339, B2 => B(4), ZN => n341);

U53 : MOAI22D0 port map( A1 => n342, A2 => n345, B1 => n343, B2 => B(6), ZN

–5 U53 : MOAI22D0 port map( A1 => n342, A2 => n345, B1 => n343t, B2 => B(6), ZN => n344);

U54 : INV0 port map( I => B(3), ZN => n337);

end SYN_arh_full_add;

–––––––––––––––––––––––––––––––––

c)sursa VHDL a circuitului de compresie în cazul sumatorului-ului.

–casadder.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity casfull_add is

port(o : in std_logic_vector(8 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end casfull_add;

architecture casfull_adrtl1 of casfull_add is

signal q0, q1, q2, q3, q4, q5, q6, q7, q8, os8, o78, o67, o56, o45, o34, o23, o12: std_logic;

begin

process(clk, reset)

begin

if (reset='1') then

if (clk='1') then

q1<=q0;

q2<=q1;

q3<=q2;

q4<=q3;

q5<=q4;

q6<=q5;

q7<=q6;

q8<=q7;

semn<=q8;

end if;

else

q1<='0';

q2<='0';

q3<='0';

q4<='0';

q5<='0';

q6<='0';

q7<='0';

q8<='0';

semn<='0';

end if;

end process;

os8<= semn xor o(8) xor q8;

o78<= o(7) xor os8;

o67<= o(6) xor o78 xor q6;

o56<= o(5) xor o67 xor q5;

o45<= o56 xor o(4);

o34<= o(3) xor o45;

o23<= o(2) xor o34;

o12<= o(1) xor o23 xor q1;

q0<= o(0) xor o12;

end casfull_adrtl1;

d).testbanch-ul pentru intreg circuitul(sumator+LFSR).–tbaddercas.vhd

library IEEE;

use IEEE.std_logic_1164.all;

entity tbfull_adcas is

end tbfull_adcas;

architecture arhtbfull_adcas of tbfull_adcas is

component full_add

port (A,B:in std_logic_vector(7 downto 0);

CI:in std_logic;

s:out std_logic_vector(7 downto 0);

CO:out std_logic);

end component;

component casfull_add

port(o : in std_logic_vector(8 downto 0);

clk, reset : in std_logic;

semn : buffer std_logic);

end component;

signal reset_test : std_logic;

signal A_test : std_logic_vector(7 downto 0) :="00000000";

signal B_test : std_logic_vector(7 downto 0) :="00000000";

signal s_test : std_logic_vector(7 downto 0) :="00000000";

signal CI_test : std_logic :='0';

signal CO_test : std_logic;

signal semn_test,clk_test: std_logic :='1';

begin

DUT : full_add port map ( A => A_test, B => B_test,CI => CI_test,s => s_test,CO => CO_test);

DUT1 : casfull_add port map (clk=> clk_test,reset=>reset_test,

o(0)=>s_test(0),

o(1)=>s_test(1),

o(2)=>s_test(2),

o(3)=>s_test(3),

o(4)=>s_test(4),

o(5)=>s_test(5),

o(6)=>s_test(6),

o(7)=>s_test(7),

o(8)=>CO_test,

semn=>semn_test);

clk_test <= not clk_test after 10 nS;

reset_test <='0','1' after 15 ns;

A_test <= "00000000", "00000011" after 15 ns, "01010101" after 35 ns, "11001100" after 55 ns, "10000100" after 75 ns, "01001111" after 95 ns, "10000011" after 115 ns, "11100001" after 135 ns, "10111101" after 155 ns, "11111111" after 175 ns;

B_test <= "00000000", "00000011" after 15 ns, "10101010" after 35 ns, "11100011" after 55 ns, "11001111" after 75 ns, "10000111" after 95 ns, "11100000" after 115 ns, "10011001" after 135 ns, "00001100" after 155 ns, "01000001" after 175 ns, "11111111" after 195 ns;

CI_test <='1','0' after 15 ns,'1' after 35 nS,'0' after 55 nS, '1' after 135 ns;

end arhtbfull_adcas;

5.Automat MOORE

a) sursa VHDL a automatului MOORE

library IEEE;

use ieee.std_logic_1164.all;

entity MOORE8 is – Moore machine

port(X, CLOCK: in BIT;

Z: out BIT);

end;

architecture BEHAVIOR of MOORE8 is

type STATE_TYPE is (S0, S1, S2, S3,S4,S5,S6,S7);

signal CURRENT_STATE, NEXT_STATE: STATE_TYPE;

begin

– Process to hold combinational logic

COMBIN: process(CURRENT_STATE, X)

begin

case CURRENT_STATE is

when S0 =>

Z<='0';

if X='0' then

NEXT_STATE <= S0;

else

NEXT_STATE <= S1;

end if;

when S1 =>

Z<='1';

if X='0' then

NEXT_STATE <= S1;

else

NEXT_STATE <= S2;

end if;

when S2 =>

Z<='1';

if X='0' then

NEXT_STATE <= S2;

else

NEXT_STATE <= S3;

end if;

when S3 =>

Z<='0';

if X='0' then

NEXT_STATE <= S3;

else

NEXT_STATE <= S4;

end if;

when S4 =>

Z<='0';

if X='0' then

NEXT_STATE <= S4;

else

NEXT_STATE <= S5;

end if;

when S5 =>

Z<='1';

if X='0' then

NEXT_STATE <= S5;

else

NEXT_STATE <= S6;

end if;

when S6 =>

Z<='0';

if X='0' then

NEXT_STATE <= S6;

else

NEXT_STATE <= S7;

end if;

when S7 =>

Z<='1';

if X='0' then

NEXT_STATE <= S0;

else

NEXT_STATE <= S1;

end if;

end case;

end process;

– Process to hold synchronous elements (flip-flops)

SYNCH: process

begin

wait until CLOCK'event and CLOCK = '1';

CURRENT_STATE <= NEXT_STATE;

end process;

end BEHAVIOR;

––––––––––––––––––––––––––––––––-

b)Fișierul mapat pe tehnologie al automatului de tip Moore:

library IEEE;

use IEEE.std_logic_1164.all;

package CONV_PACK_MOORE8 is

– define attributes

attribute ENUM_ENCODING : STRING;

– Declarations for conversion functions.

function std_logic_to_BIT(arg : in std_logic) return BIT;

function BIT_to_std_logic(arg : in BIT) return std_logic;

end CONV_PACK_MOORE8;

package body CONV_PACK_MOORE8 is

– std_logic to enum type function

function std_logic_to_BIT(arg : in std_logic) return BIT is

– synopsys built_in SYN_FEED_THRU;

begin

case arg is

when '0' => return '0';

when '1' => return '1';

when others => assert FALSE – this should not happen.

report "un-convertible value"

severity warning;

return '0';

end case;

end;

– enum type to std_logic function

function BIT_to_std_logic(arg : in BIT) return std_logic is

– synopsys built_in SYN_FEED_THRU;

begin

case arg is

when '0' => return '0';

when '1' => return '1';

when others => assert FALSE – this should not happen.

report "un-convertible value"

severity warning;

return '0';

end case;

end;

end CONV_PACK_MOORE8;

library IEEE;

use IEEE.std_logic_1164.all;

use work.CONV_PACK_MOORE8.all;

entity MOORE8 is

port( X, CLOCK : in BIT; Z : out BIT);

end MOORE8;

architecture SYN_BEHAVIOR of MOORE8 is

component ND2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component IOA21D0B

port( A1, A2, B : in std_logic; ZN : out std_logic);

end component;

component OAI21D0

port( A1, A2, B : in std_logic; ZN : out std_logic);

end component;

component INV0

port( I : in std_logic; ZN : out std_logic);

end component;

component AOI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

component MOAI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

component DFF1Q

port( D, CP : in std_logic; Q : out std_logic);

end component;

signal CURRENT_STATE_2_port, CURRENT_STATE_1_port, NEXT_STATE_1_port,

CLOCK_port, Z_port, X_port, CURRENT_STATE_0_port, NEXT_STATE_2_port,

NEXT_STATE_0_port, n32, n33, n34, n35, n36, n37, n38, n39, n40, n41, n42,

n43 : std_logic;

begin

X_port <= BIT_to_std_logic(X);

CLOCK_port <= BIT_to_std_logic(CLOCK);

Z <= std_logic_to_BIT(Z_port);

U16 : ND2D0 port map( A1 => n32, A2 => n33, ZN => Z_port);

U17 : IOA21D0B port map( A1 => n34, A2 => n35, B => n36, ZN =>

NEXT_STATE_0_port);

U18 : IOA21D0B port map( A1 => CURRENT_STATE_0_port, A2 => n37, B => n38, ZN

=> NEXT_STATE_1_port);

U19 : OAI21D0 port map( A1 => n33, A2 => n39, B => n40, ZN =>

NEXT_STATE_2_port);

U20 : INV0 port map( I => CURRENT_STATE_0_port, ZN => n34);

U21 : INV0 port map( I => CURRENT_STATE_2_port, ZN => n41);

U22 : INV0 port map( I => CURRENT_STATE_1_port, ZN => n37);

U23 : ND2D0 port map( A1 => CURRENT_STATE_1_port, A2 => n41, ZN => n35);

U24 : ND2D0 port map( A1 => CURRENT_STATE_0_port, A2 => n37, ZN => n33);

U25 : INV0 port map( I => X_port, ZN => n39);

U26 : AOI22D0 port map( A1 => n41, A2 => n34, B1 => CURRENT_STATE_2_port, B2

=> CURRENT_STATE_0_port, ZN => n42);

U27 : OAI21D0 port map( A1 => n34, A2 => n37, B => CURRENT_STATE_2_port, ZN

=> n40);

U28 : MOAI22D0 port map( A1 => CURRENT_STATE_2_port, A2 => n34, B1 => n35,

B2 => n34, ZN => n32);

U29 : AOI22D0 port map( A1 => n35, A2 => n39, B1 => n42, B2 => X_port, ZN =>

n38);

U30 : OAI21D0 port map( A1 => CURRENT_STATE_1_port, A2 =>

CURRENT_STATE_2_port, B => n34, ZN => n43);

U31 : AOI22D0 port map( A1 => n33, A2 => n39, B1 => n43, B2 => X_port, ZN =>

n36);

CURRENT_STATE_reg_0_label : DFF1Q port map( D => NEXT_STATE_0_port, CP =>

CLOCK_port, Q => CURRENT_STATE_0_port);

CURRENT_STATE_reg_1_label : DFF1Q port map( D => NEXT_STATE_1_port, CP =>

CLOCK_port, Q => CURRENT_STATE_1_port);

CURRENT_STATE_reg_2_label : DFF1Q port map( D => NEXT_STATE_2_port, CP =>

CLOCK_port, Q => CURRENT_STATE_2_port);

end SYN_BEHAVIOR;

––––––––––––––––––––––––––––

6.Comparator pe 4 biți

a) Fișierul sursă al comparatorului pe 4 biți:

library IEEE;

use ieee.std_logic_1164.all;

entity compM is

port (X,Y : in std_logic_vector(3 downto 0);

Z,XM,YM : out boolean);

end;

architecture BEHAVIOR of compM is

begin

process(X,Y)

begin

Z<=false;

XM<=false;

YM<=false;

if (X=Y) then Z<=true;

elsif (X>Y) then XM<=true;

else YM<=true;

end if;

end process;

end BEHAVIOR;

–––––––––––––––––––––––––––––––

b)Fișierul mapat pe tehnologie al comparatorului pe 4 biți:

library IEEE;

use IEEE.std_logic_1164.all;

package CONV_PACK_compM is

– define attributes

attribute ENUM_ENCODING : STRING;

– Declarations for conversion functions.

function std_logic_to_BOOLEAN(arg : in std_logic) return BOOLEAN;

end CONV_PACK_compM;

package body CONV_PACK_compM is

– std_logic to enum type function

function std_logic_to_BOOLEAN(arg : in std_logic) return BOOLEAN is

– synopsys built_in SYN_FEED_THRU;

begin

case arg is

when '0' => return FALSE;

when '1' => return TRUE;

when others => assert FALSE – this should not happen.

report "un-convertible value"

severity warning;

return FALSE;

end case;

end;

end CONV_PACK_compM;

library IEEE;

use IEEE.std_logic_1164.all;

use work.CONV_PACK_compM.all;

entity compM is

port( X, Y : in std_logic_vector (3 downto 0); Z, XM, YM : out std_logic);

– port( X, Y : in std_logic_vector (3 downto 0); Z, XM, YM : out boolean);

end compM;

architecture SYN_BEHAVIOR of compM is

component MAOI222D0

port( A, B, C : in std_logic; ZN : out std_logic);

end component;

component NR2D0

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component MAOI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

component INV0

port( I : in std_logic; ZN : out std_logic);

end component;

component AN4D1

port( A1, A2, A3, A4 : in std_logic; Z : out std_logic);

end component;

component XNR2D1

port( A1, A2 : in std_logic; ZN : out std_logic);

end component;

component AOI222D0

port( A1, A2, B1, B2, C1, C2 : in std_logic; ZN : out std_logic);

end component;

component IOA21D0B

port( A1, A2, B : in std_logic; ZN : out std_logic);

end component;

component AOI21D0

port( A1, A2, B : in std_logic; ZN : out std_logic);

end component;

component AOI22D0

port( A1, A2, B1, B2 : in std_logic; ZN : out std_logic);

end component;

signal Z_port, XM_port, YM_port, n127, n128, n129, n130, n131, n132, n133,

n134, n135, n136, n137 : std_logic;

–1signal XM_portt : std_logic := '1';

–2signal n127t : std_logic := '1';

–3signal n129t : std_logic := '0';

–4signal n130t : std_logic := '1';

–5signal n132t : std_logic := '0';

–6signal n135t : std_logic := '0';

–7signal n136t : std_logic := '1';

–8signal n133t : std_logic := '1';

–9signal X1 : std_logic := '0';

–signal Y2 : std_logic := '0';

begin

– Z <= std_logic_to_BOOLEAN(Z_port);

– XM <= std_logic_to_BOOLEAN(XM_port);

– YM <= std_logic_to_BOOLEAN(YM_port);

Z <= Z_port;

XM <= XM_port;

YM <= YM_port;

U50 : NR2D0 port map( A1 => XM_port, A2 => Z_port, ZN => YM_port);

–1

U51 : AOI222D0 port map( A1 => X(1), A2 => n128, B1 => n129, B2 => X(0), C1

–3 –9

=> X(2), C2 => n130, ZN => n127);

U52 : IOA21D0B port map( A1 => n130, A2 => X(2), B => n127, ZN => n131);

–2

U53 : MAOI222D0 port map( A => Y(3), B => n131, C => n132, ZN => XM_port);

–5

U54 : INV0 port map( I => Y(1), ZN => n128);

U55 : INV0 port map( I => Y(2), ZN => n130);

–10

U56 : AOI21D0 port map( A1 => n133, A2 => Y(1), B => Y(0), ZN => n129);

–8

U57 : AN4D1 port map( A1 => n134, A2 => n135, A3 => n136, A4 => n137, Z =>

–6 –7

Z_port);

U58 : XNR2D1 port map( A1 => Y(0), A2 => X(0), ZN => n137);

U59 : AOI22D0 port map( A1 => n128, A2 => X(1), B1 => Y(1), B2 => n133, ZN

=> n136);

U60 : MAOI22D0 port map( A1 => n130, A2 => X(2), B1 => n130, B2 => X(2), ZN

–4

=> n135);

U61 : MAOI22D0 port map( A1 => n132, A2 => Y(3), B1 => n132, B2 => Y(3), ZN

=> n134);

U62 : INV0 port map( I => X(3), ZN => n132);

U63 : INV0 port map( I => X(1), ZN => n133);

end SYN_BEHAVIOR;

––––––––––––––––––––––––––––––

c)Fișierul test-bench al comparatorului pe 4 biți:

library ieee;

use ieee.std_logic_1164.all;

entity tbcompcnt is

end tbcompcnt;

architecture rtl1 of tbcompcnt is

component compM

port(x, Y : in std_logic_vector(3 downto 0);

Z, XM, YM : out std_logic );

end component;

component cntcompM

port(o,sel : in std_logic_vector(2 downto 0);

clk,reset : in std_logic;

semn : out std_logic);

end component;

signal X_test,Y_test : std_logic_vector(3 downto 0) :="0000";

signal Z_test, XM_test, YM_test : std_logic;

signal semn_test,clk_test,reset_test : std_logic :='0';

signal sel_test : std_logic_vector(2 downto 0);

begin

DUT : compM port map ( X => X_test, Y => Y_test, Z => Z_test,

XM => XM_test, YM => YM_test );

DUT1 : cntcompM port map(o(0) => Z_test,

o(1) => XM_test,o(2) => YM_test,

sel => sel_test,reset => reset_test,clk => clk_test,semn => semn_test);

reset_test<='1','0' after 3 ns;

sel_test<="001", "010" after 15 ns, "100" after 35 ns, "010" after 55 ns, "001" after 75 ns, "100" after 95 ns, "010" after 115 ns, "010" after 135 ns, "001" after 155 ns, "100" after 175 ns,"001" after 195 ns;

X_test <= "0000", "0011" after 15 ns, "0101" after 35 ns, "1110" after 55 ns, "1000" after 75 ns, "0100" after 95 ns, "1110" after 115 ns, "1111" after 135 ns, "0001" after 155 ns, "0100" after 175 ns, "1111" after 195 ns;

y_test <= "0000", "0010" after 15 ns, "1010" after 35 ns, "1101" after 55 ns, "1000" after 75 ns, "1001" after 95 ns, "1100" after 115 ns, "1011" after 135 ns, "0001" after 155 ns, "0101" after 175 ns, "1111" after 195 ns;

clk_test <= not(clk_test) after 10 ns;

end rtl1;

ANEXA 2

Numarator Gray pe 8 biti

Codor 3 din 8

Automat Moore

Comparator

Sumator pe 8 biti

Automat lift

Bibliografie

1. Damian Imbrea – “Testarea si testabilitatea sistemelor digitale” ed. “VIE” Iasi 2002

2. K. C. Chang – “Digital Systems Design with VHDL and Synthesis” IEEE 1999

*** “Chip Synthesis Workshop” – Synopsys 1998

D.Pitică, Mihaela Radu – Elemente de testare pentru sisteme electronice

5. Danut Burdia, Gabriel Stefan Popescu – “Proiectare asistata de calculator a circuitelor electronice” ed. MATRIX ROM Bucuresti 1999

6. Miron Abramovici, Melvin Breuer, Arthur D. Friedman – “Digital Systems Testing and Testable Design” Computer Science Press 1990

7. *** – Design Compiler User Guide, Synopsys 2000

*** – Design Compiler Tutorial, Synopsys 2000

9. *** – ModelSim Bookcase, Model Technology Incorporated 1999-2001

Similar Posts

  • Proiectarea Instalatiei Electrice de Tratare a Neutrului Pentru O Statie Electrica

    PROIECTAREA INSTALAȚIEI ELECTRICE DE TRATARE A NEUTRULUI PENTRU O STAȚIE ELECTRICĂ de 6 kV dintr-o Centrală termoelectrică CUPRINS Capitolul I: Prezentarea serviciilorinterneaferente centralelor termoelectrice 1.1.Generalități 1.2.Racordarea consumatorilor la sistemul electroenergetic 1.3.Dimensionarea stațiilor și posturilor de transformare 1.4.Alimentarea serviciilor interne într-o C.T.E Capitolul II: Prezentarea metodelor de tratare a neutrului în rețelele electrice 2.1.Potențialul punctului neutru…

  • Utilizarea Pompelor de Apa

    Utilizarea pompelor de apă 1.1 Scurt istoric America a fost cucerită cu pistolul dar și prin intermediul…apei. Apa este cea mai comună substanță de pe planetă. Suntem înconjurați de apă în orice moment al zilei, pretutindeni. “Nimic în lume nu este atât de moale și maleabil ca și apa. Cu toate acestea ea erodează ceea…

  • Probleme Actuale In Definirea Si Utilizarea Spatiului Extraatmosferic din Perspectiva Satelitilor de Telecomunicatii

    CAPITOLUL I INTRODUCERE ÎN TELECOMUNICAȚIILE SPAȚIALE 1.1. ACTIVITĂȚILE UMANE ÎN SPAȚIUL EXTRAATMOSFERIC ȘI SATELIȚII DE TELECOMUNICAȚII 1.1.1. Explorarea spațiului extraatmosferic De la bun început se impune a preciza că Uniunea Internațională a Telecomunicațiilor definește telecomunicațiile ca fiind “orice transmisie, emisie sau recepție de semne, semnale, scrieri, imagini, sunete sau informații de orice natura prin fir,…

  • . Induction Motor

    Table of contents Abstract……………………………………………………….…………………………………. .3 Rezumat………………………………………………………………………………………..….4 Chapter 1 Introduction………………………………………………………………………………………..5 Chapter 2 Voltage Source Inverter……………………………………………………………………………7 2.1 Three-Phase Voltage Source Inverter…………………………………………………………7 Chapter 3 Induction Motor………………………………………………………………………………….12 3.1 Physical Description…………………………………………………………………………15 3.2 Equivalent Circuit Diagrams…………………………………………………………………18 3.3 Inverse Gamma Model…………………………………………………. ……………………21 3.3.1 Stator Coordinates………………………………………………………………….21 3.3.2 Synchronous and Rotor Flux Coordinates…………………………………………22 3.3.3 Current Control…………………………………………………………………….24 3.4 Gamma Model……………………………………………………………………………….25 3.4.1 Stator Coordinates………………………………………………………………….25 3.4.2 Slip…

  • Recrutarea,selectia Si Integrarea Resurselor Umane

    Introducere Am considerat că această temă este una de foarte mare importanță, deoarece recrutarea, selecția și integrarea resurselor umane are rolul de a determina exact nivelul și felul muncii care îi revine fiecărei persoane în evoluția sa. Domeniul resurselor umane a devenit unul de mare interes pentru candidați, deoarece s-a dezvoltat foarte mult în ultimii…

  • Calculul Mecanismului Motor

    Capitolul 7 Calculul mecanismului motor 7.1 Dimensionarea și calculul pistonului 7.1.1 Alegerea materialului Se alege aliaj de aluminiu. Materialul are următoarele proprietăți: – coeficient de dilatare: α = 17,5∙10-6 K-1 – conductivitate termică: λ = 112 W/m∙K la 250 – densitatea: ρ = 2650 kg/m3 – modulul de elasticitate: E = 0,75∙105 MPa 7.1.2 Alegerea…