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