9.VHDL - notiuni avansate

a) Rezolutie de semnale si magistrate

In majoritatea sistemelor digitale magistralele conecteaza un numar de iesiri ale dispozitivelor pe aceeasi linie. VHDL de obicei permiteun singur dispozitiv pentru un semnal. Pentru a modela semnale pentru mai multe dispozitive VHDL foloseste notiunea de "resolved types"(tipuri rezolvate) pentru semnale. Un tip rezolvat include la definire o functie de rezolutie care is valori pentru toate dispozitivele legate la o linie, rezultind valoarea finala a semnalului. Un tip rezolvat pentru un semnal este declarat cu sintaxa pentru subtip:

subtip::=[ nume functie rezolutie ] tip [ constringere ]

Functia de rezolutie trebuie definita anterior. Functia are ca parametru un tablou cu valori de subtipul semnalului si terbuie sa intoarca ca rezultat acelasi subtip. De exemplu:

type logic_level is (L,Z,H);

type logic_array is array (integer range < >) of logic_level;

subtype resolved_level is resolve_logic logic_level;

In acest exemplu, tipul logic level reprezinta 3 posibile stari ale unui semnal digital : L(low), Z(highimpedance), H(high). Subtipul resolved-level este folosit pentru declararea semanalului rezolvat de acest tip. Functia de rezolutie poate fi implementata astfel:

function resolve_logic(drivers:in logic array) return logic_level;

begin

for index in drivers'range loop

if (drivers(index) = L then return L;

end if

end loop;

return H;

end resolve logic;

Aceasta functie 'bucleaza' pe un tablou de dispozitive, si daca unul dintre ele are valoarea L, functia intoarce valoarea L. Altfel functia intoarce H.

b) Tranzitii in 0

VHDL furnizeaza facilitatea de a modela iesiri care pot trece in inalta impedanta. Un semnal de acest gen poate specifica absenta unei valori specificate pentru semnal, aceasta insemnind ca driveul poate fi deconectat. In scopul realizarii acestui lucru se folosesc elemente cu forma de unda nula. Sintaxa pentru forma de unda a elementului este:

waveform_element ::= value expresion [ after time_expresion | null [ after time expresion ]

Un exemplu despre cum se face asignarea semnalului este:

d_out < = null after Toz;

Daca toate drivere-le semnalului sint deconectate, se naste intrebarea care este valoarea semnalului ? Apar doua posibilitati, depinzind de tipul declararii semnalului: ca semnal de tip *register* sau *bus*. Pentru semnale de tip *registru*, valoarea cea mai recent determinata ramine ca valoare a semnalului. Pentru semnalele de tip bus, functia de rezolutie trebuie sa determine valoarea semnalului cind nici un driver nu este activ pe magistrala. Este o modalitate prin care magistrale de tip open-colector sau tri-state pot sa fie modelate.

c) Instructiunea generate

VHDL are in plus instructiuni concurente care pot fi folosite in arhitecturi pentru a descrie structuri regulate, precum vectori de blocuri, instante ale unor componente sau procese. Sintaxa este:

instructiunea_generate ::=eticheta_generate

schema generare generate

{ instructiune_concurenta } end generate [eticheta-generate] ;

schena_generare ::=

for generarespecificamet_paramie_rparametru-generare | if conditie

Schemele de generare for sint folosite pentru a descrie structurii repetitive. Schemele de generare if sint de obicei folosite pentru a descrie cazuri de exceptie in cadrul structurilor cum ar fi cum ar fi conditiile care apar la limita. Aceste sint exemplificate in exemplul urmator. Sa presupunem ca descriu structura unui sumator construit cu celule full_adder cu exceptia celulei care are repartizat bitul cel mai putin semnificativ, celula care este de tip half_adder.

adder : for i in 0 to width-1 generate

is_bit : if i = 0 generate

is_cell half_addre port map (a(0), b(0), sum(0), c_in(1));

end generate is_bit;

middle bit: if = width -1 generate ms_cell : full adder port map (a(i), bn(i), sum(i), c in(i+1));

end_generate middle bit;

ms_bit : if = width -1 generate

ms_cell : full adder port map (a(i), bn(i), sum(i), carry);

end_generate ms_bit;

end generate adder;

Prima instructiune de generare iteraza dupa i de la 0 pina la width - 1. Pentru cel mai putin semnificativ bit (i = 0) se genereaza o instanta a unui "half adder". Bitii de intrare sint conectati la bitii cei mai putini semnificativi biti ai lui a si b, iar iesirea este conectata la cel mai putin semnificativ bit al sumei, carry find conectat carry-in al urmatorului nivel. Pentru bitii intermediari, se genereaza instante a "full adder-ului", cu intrarile si iesirile conectate in mod asemanator cu cele ale primului nivel. Pentru ultimul nivel se genereaza o noua instanta pen tru"full adder", dar carry este conectat la iesirea Carry a sumatorului.

d) Asertiuni concurente si apeluri de proceduri

Sint doua tipuri de instructiuni concurente care nu au fost discutate in capitolele anterioare: asertiuni concurente si apeluri de proceduri concurente. O asertiune concurenta este echivalenta cu un proces care contine o asertiune urmata de o instructiune wait.

Sintaxa este:

asertiune_concurenta :: = [ eticheta: ] asertiune

Asertiunea concurenta de semnal este:

L : assert conditie report eroare *severity* valoare si este echivalenta cu procesul:

L : process

begin

assert conditie report eroare severity valoare;

wait [clauza];

end process L;

Clauza instructiunii wait include toate semnalele care au fost referite in conditie. Daca nici un semnal nu este referit se poate spune despre proces ca a fost activat la initierea simularii, s-au verificat conditiitle si a fost suspendat.

Cealalta instructiune concurenta, apel de procedura concurenta, este echivalenta cu un proces care contine un apel de procedura urmat de o instructiune de asteptare (wait). Sintaxa este:

apel_procedura concurenta ::= [ eticheta: ] apel procedura

Procedura nu trebuie sa aiba parametrii formali din clasa variable intrucit nu este posibil ca o variabila sa fie vizibila in orice loc unde estefolosita o instructiune concurenta. Lista de clauze a instructiunii de asteptare (wait) include toate semnalelele care sint parametrii actuali de tip in sau inout in apelul de procedura. Apelurile concurente sint pentru definirea acelor comportamente care pot fl folosite in locuri diferite sau in module diferite. De exemplu sa presupunem ca in package-ul bit_vect arith se declara procedura:

procedure add(signal a,b : in bit vector; signal result : out bit vector);

Un exemplu al apelului procedurii concurente este:

adder : bit_vector_arith.add(sample, old accum, new accum);

Aceasta declaratie este echivalenta cu procesul:

begin

bit_vector_arith.add(sample, old accum, new accum);

wait on sample, old accum;

end process adder;

e) Instructiuni sub entitati

Sintaxa pentru declararea unei entitati este:

entitate ::= *entity* identificator is

antet_entitate

parte_declarativa_entitate

[ begin instructiuni_entitate ]

end [ nume_entitate ];

instructiuni entitate ::={ instructiune entitate }

instructiune_entitate ::= asertiune_concurenta | apel concurent_pasiv | proces-pasiv

Instructiunile concurenta care sint permise intr-o declaratie de entitate trebuie sa fie fie pasive, aceasta insemna ca nu vor contine nici o asignare de semnal. Un rezulat al acestei reguli este ca asemenea procese nu pot modifica starea entitatii sau a circuitului in care este folosita entitatea. Ele pot monitoriza starea si deci pot fi folosite pentru a raporta conditii de operare eronate ale entitatii.

Tutorial on ALLIANCE 1.1

ALLIANCE reprezinta un set de instrumente de proiectare VLSI.

Descrierea Chip-ului

Circuitul consta dintr-un sumator pe 4 biti, un registru pe 4 biti si un multiplexor 2x1 pe 4 biti. Intrarile sint in partea stinga a desenului, iesirile in partea dreapta. Cu sel si ck se "controleaza" comportamentul circuitului.

Metoda de proiectare

Metoda de proiectare consta din 5 pasi:

1) Descriere de comportament si simulare.

2) Generare si validare descriere.

3) Layout fizic.

4) Validare proiectare.

5) Conversie din simbolic in real.

Pasii 2) si 3) trebuie executati pentru fiecare nivel ierarhic. In cazul nostru avem numai 2 nivele : core si chip.

 

 

Setarea mediului de executie

 

Pentru ALLIANCE sint necesare urmatoarele setari:

> setenv MBK_CATA LIB .:..../alliance-2.0/cells/scr: ..../alliance-2.0/cells/ring/pad12

> setenv MBK WORK LIB .

Distingem 2 seturi de celule: standard-cell library si pad library. Directorul de lucru a directorul curent

Descriere de comportament si simulare:

Tiescrierea comportamentala a circuitului (model VHDL) se afla in fisierul addaccu.vbe

Compilare

Cu aceasta comanda se determina corectitudinea de sintaxa:

> asimut -b -c addaccu

-b descriere comportamentala

-c numai compilare

Simulare comportament si validare

Pentru simulare este nevoie de un fisier cu "date", addaccu.pat, care a un fisier text. Acest fisier contine atit valori pentru intrari cit si pentru iesiri, realizindu-se astfel VERIFICAREA comportamentului.

> asimut -b addaccu addaccu result 1

addaccu.vbe este descrierea comportamentala.

addaccu.pat este fisierul de date initial.

result1.pat este fisierul de date rezultat.

Generare descriere structurala(netlist)

1) Generare pentru core.

2) Generare pentru chip. Pentru core se vor genera celule standard care descriu functiile logice pentru "adder", "multiplexer" si "accumulator", si firele de legatura. Nu se foloseste un editor de scheme, ci unul text. (addaccu.c)

Compilarea programului C se face cu genlib.

> setenv MBK_IN_LO vst

> setenv MBK_OUT_LO al

vst VHDL

al format de iesire, suporta informatii specifice (capacitante)

Se seteaza layout-urile de intrare si de iesire.

> genlib addaccu

~isierul addaccu.vst contine descrierea rezultata.

> genlib chip

Creaza chip. vst.

Simularea cu fisierele rezultate

Putem simula acum intreg circuitul, cu fisierele de date anterioare

> asimut chip addaccu result2

chip chip.vst

addaccu addaccu.pat

resultl resultl.pat, fisierul rezultat

Generare layout core

Generarea layout-ului are 2 pasi: 1)placare celule (automata sau manuala) 2)rutare automata Sistemul ALLIANCE CAD poate executa acesti 2 pasi simultan. scr este un instrument de plasare si rutare care produce automat layout-ul din netlist.

> setenv MBK_IN_PH ap

> setenv MBK_OUT_PH ap

ap format de intrare si de iesire

> scr -p -r addaccu addaccu

addaccu(1) netlist addaccu.vst.

addaccu(2) addaccu.ap, layout-ul rezultat.

-p plasare automata

-r rutare automata

a fost generat layout-ul pentru core

Router core-pad

Acum se realizeaza legaturile dintre celule. ring este instrumentul care foloseste fisierul chip. rin.

> ring chip chip

chip(1) chip.vst

chip(2) chip. ap

Vizualizare layout chip

Vizualizarea se face cu ajutorul editorului de layouturi simbolice graal.

> grad chip

[H [2JExtraction of the chip netlist

Pentru verificare layout-ului folosim 2 instrumente: lynx si lvx.

Ivnx extrage din layout-ul fizic o reprezentare netlist a circuitului.( in cazul nostru: pentru core)

Ivx compara descrierea functionala generata cu cea iniutiala

> setenv MBK_OUT_LO al

> lynx -v -f chip chip

chip(1) chip.ap

chip(2) chip.al

-f fisierul rezultat va contine numai celule standard

-v "verbose"

Verificare core

> Ivx vst al chip chip -f

Ivx is very smart. Along with a comparison with the original netlist, lvx is able to produce a consistent netlist interface by re-ordering the interface terminals.

vst format chip.vst

al format chip. al

chip(1) chip.vst

chip(2) chip.al

-f celule standard

chip. al este un fisier corect pentru circuit.

Simulare cu asimut

chip. al contine informatii in plus fata de chip. vst(capacitante...)

Pentru simulare se va folosi tot addaccu.pat

> setenv MBK_IN_LO al

> asimut chip addaccu result2

chip chip.al

addaccu addaccu.pat

result2 result2.pat, fisierul generat

Extragere functionala

desb extrage di netlist o descriere VHDL care poate fi apoi simulata.

> desb -i -v chip

Se poate simula acum descrierea de comportament:

> asimut chip resultl result3 -b

result3.pat fisierul generat

Se poate face acum testarea formala. In chip vbe desb a "gasit" 4 elemente de memorare "reg_bit register".

Acestea trebuie sa corespunda celor 4 latch-uri din specificarea de comportament initiala. Corespondenta se realizeaza cu chip.inf.

-i caut chip.inf

> proof -d addaccu chip

-d se afiseaza functiile logice

Alte verificari

Trebuie acum executat un DRC (Design Rule Check)-verificare reguli de proiectare.

In ALLIANCE, DRC este druc.

> druc chip

Conversia la tehnologia reala

Scopul lui ALLIANCE este de a preveni folosirea unei singure tehnolog in realizarea circuitelor. Pentru portabilitate, se foloseste reprezentarea simbolica. Ultima etapa a proiectarii este conversia din unitati simbolice in unitati reale (instrumentul este s2r). rebuie specificata tehnologia. Tehnologia este prol12, proces 1.2.

> setenv RDS_TECHNO_NAME /top/etc/proi12.rds

pot fi 2 formate de iesire: gds(ii) si cif.

> setenv RDS_OUT gds

> setenv RDS_IN gds

> s2r -cv chip chip

chip(1) chip. ap, layout-ul simbolic al chip-ului

chip(2) chip.gds, fisierul generat

TUTORIAL : AMD 2901

Sistemul CAD ALLIANCE 2.0.

Scopul acestei lucrari este de a prezenta pasii (tipici) de proiectare a unui procesor simplu pe 4 biti (AMD2901) folosind "instrumente" ALLIANCE.

Instrumentele folosite sint

asimut : compilator si simulator VHDL.

genlib : interpretare lista de intrare.

scr : generare si testare celule standard.

ring : testare tinind cont de conditiile externe.

lynx : extragere de not configuratii.

Ivx : comparator configuratii generate cu lynx.

druc : verifica regulile de proiectare.

grad : editor grafic de layout-uri.

desb : generare not descried de comportament.

proof : testare formala de echivalenta a doua descrieri de comportament.

s2r : convertor de unitati simbolice in unitati reale.

In orice moment puteti afla informatii despre orice instrument ALLIANCE folosind comanda:

> man <tool name>

Nu exista o descriere a lui AMD2901; lucrarea prezinta doar o metodologie folosita de ALLIANCE pentru a crea circuitul.

Proiectarea circuitului se face in 5 pasi:

Pas 1 : descriere de comportament (model VHDL) si simulare.

Pas 2 : Generare si validare a descrierii structurale(gate net-list).

Pas 3 : Layout fizic.

Pas 4 : Extragere si verificare.

Pas 5 : Fnalizare chip.

lata fisierele sursa necesare:

amd.vbe : model comportamental VHDL.

pattern.pat : "date de intrare", cu care se face simularea.

chip.c : descrierea structurala a chip-ului.

chip.rin : plasamentul pad ?????????(pentru ring).

chip.inf : redenumirea registrilor ( pentru desb).

Cu instrumentele ALLIANCE vor fi validate aceste fisiere de intrare si va fi construit un layout de iesire, fizic. Accesta este in format CIF si este gata pentru constructie.

Setari inftiale:

> MBK WORK LIB=.

> MBK CATA LIB=.://cells/scr://cells/ring/pad12

> export MBK_WORK_LIB MBK_CATA_LIB

Specificare comportament

Model comportament

amd.vbe contine descrierea comportamentala a circuitului, folosind subsetul ALLIANCE VHDL (vezi man vhdl, man vbe). Trebuie rulat compilatorul de VHVL pentru validarea sintaxei.

> MBK WORK LIB=.

> MBK CATA_LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK_CATA_LIB MBK_WORK_LIB

> asimut -b -c amd

amd amd.vbe

-b fisierul este "pur" descriere comportamentala

-c numai compilare

Simulare

Fisierul pattern.pat contine datele necesare simularii(in si out). El va fi folosit pentru validarea fiecarui pas de proiectare, de la specificare la layout-ul fizic. Simulatorul este asimut.

>$ VH_MAXERR=10

>$ export VH_MAXERR

VH_MAXERR numarul maxim de erori acceptate pina la oprirea simularii.

>$ VH_PATSFX=pat

>$ export VH_PATSFX

>VH_MAXERR=10

>VH_PATSFX=pat

>MBK_WORK LIB=.

>MBK_CATA_LIB=.:/labo/cells/scr:Aabo/cells/ring/pad12

>export MBK_CATA_LIB VH_MAXERR MBK_WORK_LIB

> asimut -b amd pattern result beh

amd amd.vbe

pattern pattern.pat

result beh result beh.pat, fisier rezultat

-b amd.vbe a descriere comportamentala "pura"

Orice diferenta dintre iesirile prevazute in pattern.pat si cele rezultate in urma simularii vor fi raportate

Descriere structurala

Proiectarea structurii

Nu se foloseste un editor de scheme, ci un limbaj procedural genlib, care este un set de functii C

(man genlib ). Avem o descriere ierarhica.

1)Fecare bloc functional a descris ca o lista de porti.

Sint 5 blocuri: accu, alu, ram, muxe, muxout

2)Urmatorul nivel ierarhic este heart, care interconecteaza cele 5 blocuri.

3)Ultimul nivel ierarhic este chip-ul, care conecteaza heart cu pad-uri.

In chip.c sint descrise aceste 7 blocuri ierarhice.

ALLIANCE accepta urmatoarele formate de fisiere:

(EDIF, VHDL, SPICE, ALLIANCE, COMPASS).

.vst corespunde VHDL

>$ MBK_IN LO=vst

>$ MBK OUT LO=vst

>$ export MBK OUT LO MBK IN LO

> MBK_IN_LO=vst

> MBK_OUT_LO=vst

> MBK WORK LIB=.

> MBK CATA LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK CATA L1B MBK_IN_LO MBK_OUT_LO MBK WORK LIB

> genlib chip

S-au creat 7 fisiere: alu.vst accu.vst ram.vst muxe.vst muxout.vst heart.vst chip.vst

Simulare model structural

se foloseste acelasi fisier de date:pattern.pat

> MBK_IN_LO=vst

> VH_PATSFX=pat

> VH_MAXERR=10

> MBK_WORK LIB=.

> MBK_CATA_LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK_CATA LIB MBK_IN_LO VH_PATSFX VH MAXERR MBK_WORK_LIB

> asimut chip pattern result_str

chip fisierul de intrare chip.vst

pattern date de test pattern.pat

result_str fisier rezultat result str.pat

Erorile vor fi raportate.

Design fizic

Rutare heart

scr plaseaza si ruteaza celulele standard. Formate externe posibile pentru layout-ul simbolic: (COMPASS, ALLIANCE, MODGEN).

> MBK_IN_PH=ap

> MBK_OUT_PH=ap

> export MBK OUT_PH MBK_IN_PH

Net-list va fi netezita inainte de rutare.

> MBK_IN_PH=ap

> MBK_OUT_PH=ap

> MBK_IN_LO=vst

> MBK_WORK_LIB=.

> MBK_CATA_LIB=.:/labo/cells/scr:/labo/cells/ring/padl2

> export MBK_CATA_LIB MBK_IN_PH MBK_OUT_PH MBK_IN_LO MBK WORK_LIB

> scr -p -r -i 1000 heart

heart este lista de intrare(heart.vst). Fisierul de iesire va fi heart.ap

-p plasare automata.

-r cerere de rutare.

-i 1000 Numar de iteratii ( cresterea acestui numar va imbunatati plasamentul).

Fisierul de iesire simbolic heart. ap a fost creat.

Verificarea heart-ului:

DRC : Druc ver'rfica fisierul de iesire. (vezi man druc)

> MBK IN PH=ap

> MBK_WORK_LIB=.

> MBK_CATA_LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK_CATA_LIB MBK_IN_PH MBK_WORK_LIB

> druc heart

Daca este necesar, druc genereaza un fisier de eroare (core.err).

Extragere Net-list.

Lynx este un extractor ierarhic care furnizeaza o lista-configuratie noua.

Pentru a evita conflictele de,nume, vom folosi un alt format de fisier pentru lista generata ( formatul .al). Acest nou format este folosit pentru a se inregistra date suplimentare : capacitante parazite descoperite.

> MBK_OUT_LO=al

> export MBK_OUT_LO

Apoi vom rula lynx:

> MBK_OUT_LO=al

> MBK_IN_PH=ap

> MBK_WORK_LIB=.

> MBK_CATA_LIB=.:/labo/cells/scr:/labo/cells/ring/padl2

> export MBK_CATA_LIB MBK_OUT_LO MBK_IN_PH MBK_WORK_LIB

> lynx heart

Fsierul generat heart.al se creaza la acest nivel.

Comparatii de configuratii.

Urmatorul instrument este lvx care opereaza o comparatie intre lista de intrare heart.vst si lista rezultata heart. al, dupa filtrare.

> MBK_WORK_LIB=.

> MBK CATA LIB=.:/labo/cells/scr:Aabo/cells/ring/pad12

> export MBK CATA LIB MBK WORK_LIB

> Ivx vst al heart heart

Testarea chip-ului.

Fisierul chipsin defineste constringerile externe. (vezi man ring).

> MBK_IN_LO=vst

> MBK_IN_PH=ap

> MBK_OUT_PH=ap

> MBK_WORK_LIB=.

> MBK_CATA_LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK_CATA_LIB MBK_IN_LO MBK_IN_PH MBK_OUT_PH MBK_WORK_LIB

> ring chip chip

chip Fisierele de intrare chip.vst si chipsin (acelasi nume chip trebuie folosit pentru ambele fisiere).

chip Fisierul de iesire fizic chip.ap.

Fisierul simbolic chip.ap a fost creat. Acum puteti vizualiza chip-ul cu editorul de layout-uri graal. Puteti vedea chip-ul si instante folosind comenzi graal pentru a parcurge ierarhia de nivele.

> MBK WORK LIB=.

> MBK CATA LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK CATA LIB MBK WORK LIB

> graal

Validare fizica

Instrumentele de verificare ALLIANCE permit atit o abordare pe un singur nivel, cit si una ierarhica. Vom folosi o abordare ierahica.

Validare chip

De data aceasta se verifica intregul chip, nu numai heart.

> MBK_IN_PH=ap

> MBK WORK LIB=.

> MBK CATA LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK CATA LIB MBK WORK LIB MBK IN_PH

> druc chip

Eventual druc genereaza un fisier de eroare (chip.err).

> MBK_OUT_LO=al

> MBK IN_PH=ap

> MBK_WORK_LIB=.

> export MBK CATA LIB MBK OUT LO MBK_IN_PH

> lynx chip

Fsierul rezultat chip.al este creat la acest pas ( cu el se instantiaza chip-ul).

> MBK WORK LIB=.

> MBK CATA LIB=.:/labo/cells/scr:/labo/cells/ring/pad12 ]}\\

> export MBK CATA LIB MBK WORK LIB

>$ Ivx vst al chip chip

chip.vst si chip.al sint filtrate de Ivx inainte de comparatie. (vezi man catal).

Simulare chip

In sfirsit se poate vedfica lista rezultata aplicind intrarile initiale. Datorita implementarii multiformat, simulatorul asimut accepta formatul .al pentru descrierea intrarilor.

> MBK_IN_LO=al

> export MBK_IN_LO

Acum se poate rula asimut.

> MBK_IN LO=al

> VH_PATSFX=pat

> VH_MAXERR=10

> MBK WORK LIB=.

> MBK CATA LIB=.:/labo/cells/scr:/labo/cells/ring/pad12

> export MBK CATA LIB MBK_IN LO VH_PATSFX VH MAXERR MBK WORK LIB

> asimut chip pattern res_pattern

Pentru a termina validarea chip-ului nostru trebuie efectuata generarea functionala si testarea formala.

Generarea functionala si testare formala.

Generarea functionala se realizeaza cu instrumentul desb (vezi man desb). desb "simplifica" chipul (chip.al) pentru a se obtine o descriere la nivel de tranzistori, si genereaza apoi o descriere de comportament (chip.vbe). Pentru a mentine coerenta numelor de registri dintre descrierea comportamentala generata de desb (chip.vbe) si descrierea comportamentala initiala (amd.vbe), este necesar un fisier in care sa apara transformarile de nume. acest fisier este chip.inf.

> MBK_IN_LO=al

> MBK WORK LIB=.

> MBK CATA LIB=.:/labo/cells/scr:/labo/Cells/ring/pad12

> export MBK CATA LIB MBK_IN_LO MBK WORK_LIB

> desb chip -i -v

chip este layout-ul de intrare (chip.al).

-i se citeste fisierul chip.inf.

-v pentru a vectoriza interfata descrierii de comportament.

A fost deci generata o descriere VHDL DATA FLOW: chip.vbe

Acum exista deci doua descrieri comportamentale: cea generata (chip.vbe) si cea initiala (amd.vbe). Cu proof (vezi man proof), se poate verifica echivalenta formala dintre cele doua descried.

> MBK_WORK_LIB=.

> export MBK WORK_LIB

> proof -d amd chip

chip este fisierul generat (chip.vbe).

amd este descrierea initiala de comportament (amd.vbe).

-d afisare erori

Daca doriti sa vedeti o eroare, puteti modifica o linie in fisirul amd.vbe. De exemplu, linia 301:

scout <= NOT accu(3) AND test mode ;

si rulati din nou proof.

Finalizare chip.

Pina acum am folosit layout-uri simbolice (toate datele fiind in unitati lambda). Trebuie convertite acum in unitati reale, creind layout fizic (in doua formate posibile : CIFsi GDSII). Acest ultim pas aste efectuat de s2r.

Trebuie definite 3 not variabile:

> RDS_TECHNO_NAME=/labo/etc/proll2.rds

> export RDS_TECHNO_NAME

prol12.rds este fisierul de tehnologie, care contine parametri corespunzatori. (In cazul nostru procesul tinta este 1.2 micron.)

> RDS_OUT cif

> export RDS_OUT cif

S-a definit formatul de iesire.

> RDS_IN cif

> export RDS_IN

S-a definit formatul de intrare.

Veti introduce:

> MBK_IN_PH=ap

> MBK WORK LIB=.

> MBK CATA_LIB=.:/labo%ells/scr:/labo/cells/ring/pad12

> RDS TECHNO NAME=/labo/etc/proll2.rds

> RDS_IN=cif

> RD S_OUT=cif

> export RDS_OUT MBK_IN_PH MBK_WORK_LIB MBK CATA_LIB RDS TECHNO NAME RDS_IN

> s2r -c chip amd2901

-c se sterg conectorii la cel mai inalt nivel al ierarhiei

Fsierul final este amd2901.cif