Universitatea Tehnică din Cluj-Napoca
Facultatea de Automatică şi Calculatoare
Catedra de Automatică
Str. G. Bariţiu 26-28, 400027 Cluj-Napoca, ROMÂNIA
Tel.: +40-264-594469
Fax/Tel.: +40-264-594469
CONTRACT TIP PN-II-IDEI, nr. 93/1.10.2007
Faza II, unică pe anul 2008
Valoare fază: 383.294 lei
Sinteza lucrării
Dezvoltarea unor capacităţi de auto-întreţinere pentru societăţi digitale
Faza 2008 – Analiza funcţională şi experimentarea unor module cu BIST şi autoîntreţinere.
Activităţi:
1. Analiza funcţională pentru dezvoltarea modulelor FPGA cu autoîntreţinere.
2. Analiza funcţională a mecanismelor multiagent pentru structuri cu autoîntreţinere.
3. Dezvoltare interfaţă de reconfigurare dispozitive (wrapper).
4. Experimentare funcţii de autotestare (BIST – Built In Self Test).
5. Implementare module cu autoîntreţinere bazate pe reconfigurare.
Limbajul VHDL
-
Ce este VHDL?
VHDL este un limbaj pentru descrierea sistemelor electronice digitale. El a fost dezvoltat în cadrul programului Circuite Integrate de Foarte Mare Viteză (Very High Speed Integrated Circuits – VHSIC) al Guvernului Statelor Unite, iniţiat în 1980. Pe parcursul acestui program a devenit clar că era nevoie de un limbaj standard pentru a descrie structura şi funcţionarea circuitelor integrate (integrated circuits, ICs). Astfel a fost conceput Limbajul de descriere de hardware pentru circuite integrate de foarte mare viteză (VHSIC Hardware Description Language – VHDL) care apoi a fost adoptat ca standard de către IEEE (Institute of Electrical and Electronic Engineers) din SUA.
VHDL este proiectat să satisfacă anumite cerinţe ale procesului de proiectare. În primul rând, permite descrierea structurii unui modul, adică felul în care el este descompus în sub-module şi cum sunt interconectate aceste sub-module. În al doilea rând, permite specificarea funcţionării modulelor folosind o manieră apropiată de cea din limbajele de programare familiare. În al treilea rând, ca rezultat, permite ca un modul să fie simulat înainte de a fi fabricat, aşadar proiectanţii pot să compare rapid alternativele şi să testeze corectitudinea fără întârzierea şi cheltuielile inerente unui prototip hardware.
Descrierea structurii
Un sistem electronic digital poate fi descris ca un modul cu intrări şi/sau ieşiri. Valorile electrice ale ieşirilor sunt funcţii ale valorilor de intrare. Figura 1-1(a) reprezintă un exemplu de sistem digital privit astfel. Modulul F are 2 intrări, A şi B, şi o ieşire Y. Folosind terminologia VHDL, numim modulul F entitatea proiectată, iar intrările şi ieşirile sunt numite porturi.
Un mod de descriere a funcţionării unui modul este prin a descrie cum este el compus din sub-module. Fiecare sub-modul este o instanţă a unei entităţi, şi porturile instanţelor sunt conectate folosind semnale. Figura 1-1(b) arată modul în care entitatea F poate fi compusă din instanţe ale entităţilor G, H şi I. Acest tip de descriere se numeşte descriere structurală. Observaţi că fiecare entitate G, H şi I poate avea la rândul ei o descriere structurală.
Descrierea comportamentului
În multe cazuri nu este adecvată descrierea structurală a unui modul. Unul dintre aceste cazuri ar fi când un modul se află la baza ierarhiei unor altor descrieri structurale. În asemenea cazuri, este necesară o descriere a funcţiei realizate de modul, fără referinţe la structura sa internă. O astfel de descriere se numeşte funcţională sau comportamentală.
Pentru a ilustra acest lucru, să presupunem că funcţia realizată de entitatea F din Figura 1-1(a) este un sau-exclusiv. Atunci o descriere funcţională a lui F poate fi funcţia booleană
Y = ¬A . B + A . ¬B
Comportamentele mai complexe nu pot fi descrise doar ca funcţii de intrări. În sistemele cu reacţie, ieşirile sunt de asemenea funcţie de timp. VHDL rezolvă această problemă permiţând descrierea comportamentului sub forma unui program executabil. Capitolele 2 şi 4 descriu facilităţile limbajului de programare.
Modelul de eveniment discret în timp
Odată ce structura şi comportamentul unui modul au fost specificate, este posibilă simularea modulului prin execuţia descrierii sale comportamentale. Aceasta se face simulând trecerea timpului în paşi discreţi. La un anumit moment, intrarea unui modul poate fi stimulată schimbând valoarea unui port de intrare. Modulul reacţionează executând codul descrierii sale comportamentale şi programând noi valori, spre a fi asignate semnalelor conectate la porturile de ieşire, la un moment de timp ulterior. Această operaţie se numeşte programarea unei tranzacţii pe acel semnal. Dacă noua valoare a semnalului este diferită de cea veche, apare un eveniment, şi pot fi activate alte module ce au porturile de intrare conectate la acest semnal.
Simularea începe cu o fază de iniţializare şi apoi continuă prin repetarea unui ciclu de simulare cu două faze. În faza de iniţializare toate semnalele primesc valori iniţiale, timpul simulat este setat la zero şi programele comportamentale ale fiecărui modul sunt executate. Aceasta duce de obicei la programarea unor tranzacţii pe semnalele de ieşire pentru un moment ulterior.
În prima fază a ciclului de simulare, timpul simulat este avansat la primul moment în care a fost programat o tranzacţie. Toate tranzacţiile programate pentru acel moment se execută şi aceasta poate duce la apariţia unor evenimente pe anumite semnale.
În faza a doua, tuturor modulelor care reacţionează la evenimentele apărute în prima fază li se execută programul comportamental. Aceste programe vor genera de obicei alte tranzacţii pe semnalele lor de ieşire. Când toate programele comportamentale îşi vor termina execuţia, ciclul de simulare se repetă. Dacă nu mai sunt tranzacţii programate simularea este completă.
Scopul simulării este de a aduna informaţii despre schimbările în timp ale stării sistemului. Acesta se poate face rulând simularea sub controlul unui program de monitorizare a simulării. Monitorul permite vizualizarea semnalelor şi a altor informaţii despre stare, şi stocarea lor într-un fişier pentru o eventuală analiză ulterioară. El permite de asemenea urmărirea interactivă pas cu pas a procesului de simulare, asemănător cu un program interactiv de depanare.
3.5 De ce VHDL?
VHDL – Avantaje:
-
Descrieri logice – usor de scris
-
Limbaj – usor de înteles atat de catre om, cat si de catre masina
-
Permite ierarhizarea usoara a proiectelor – astfel, e usor de aplicat în munca de echipă
-
Permite refolosirea proiectelor – Design Reuse
-
Este independent de platforma
-
Permite diferite nivele de abstractizare
Abstractizare: ascunderea detaliilor unui proiect – detaliile nesemnificative la un anumit nivel.
3.5.1 VHDL – Descriere Generala
-
Istoric: Standardizat prima data de catre IEEE în 1987 – IEEE std 1076-1987, apoi în 1993 – IEEE std 1076-1993. In 1999 – standardizarea extensiei VHDL – AMS (Analog and Mixed Signal), IEEE std 1076-1999
-
Alte limbaje de descriere folosite: ABEL (limbaj mai vechi), VERILOG (foarte utilizat în industrie)
-
Scopul limbajului este de a descrie sisteme digitale
-
Nu este un limbaj de programare. Instructiunile pot fi:
-
Concurente (executate simultan)
-
Secventiale (executate în interiorul unui proces)
-
Sunt descrise sisteme digitale actuale complexe (de ex. microprocesoare) cu ajutorul limbajelor HDL
-
Dispozitivul tinta pentru care a fost creat, este ASIC si nu in special FPGA/CPLD
3.6 Exemplu de descriere functionala:
O<=I1+I2*I3 functiile logice sunt modelate cu ecuatii.
Exemplu de descriere RTL1:
Proces secvential - Clocked Process
Secvential: PROCESS (INB, CLK, RESET)
BEGIN
IF RESET=‘1’ THEN -- reset este asincron
Q<=“000…”;
ELSIF CLK’EVENT AND CLK=‘1’ THEN
Q<= Logica Stare (INB, Q);
END IF;
End PROCESS Secvential;
Proces Combinational – Combinational Process Process
Combinational: PROCESS (INA, Q)
BEGIN
Out<=Logica Iesire (Q, Out);
END PROCESS Combinational;
Comportamentul functional – modelate cu procese
Doua tipuri de procese:
-
Secventiale
-
sintetizatorul va genera porti logice + bistabile
-
Sincrone cu un semnal de ceas
-
Set, Reset – asincroane sau sincroane, pot lipsi
-
Combinationale
-
Sintetizatorul va genera porti logice, nu si registri
-
Nu sunt sincrone cu un semnal de ceas
-
Concluzii:
-
Sintetizatorul decide felul componentelor
-
Pe langa descrierea functionala, codul VHDL RTL contine o anumita informatie structurala
-
Este independent de modul de realizare si de tehnologia componentelor
Problemele legate de momentul modificarii semnalelor pot fi rezolvate prin iesiri inregistrate (Registerred Outputs)
Exemplu de descriere GATE-LEVEL:
XLXI_1 : AND2
port map (I0=>I2, I1=>I1, O=>XLXN_6);
XLXI_2 : OR2
port map (I0=>I3, I1=>XLXN_6, O=>O);
-
Corespunde cu o descriere de tip Netlist
-
Fiecare element al circuitului este instantiata ca si componenta si conectata la semnalele corespunzatoare (aici: poarta AND2 cu intrarile I0, I1, iesirea O)
-
Toate portile logice fac parte din biblioteca componentei (tehnologiei), unde sunt stocate informatii aditionale cum ar fi arie, timpi de propagare etc
3.6.1 SINTAXA GENERALA VHDL
-
Case Insensitive, atat la cuvinte cheie cat si la identificatori, ex. then si tHeN reprezinta acelasi cuvant cheie
-
Comentariu: ‘—’ pana la sfarsitul liniei
-
Instructiunile se termina cu ‘;’ (instructiunuile se pot intinde pe mai multe linii)
-
Exceptie: inceputurile de instructiune: dupa: begin, then, else, process, respectiv ultimul port dintr-o declaratie de componenta – nu se termina cu ;
-
Delimitare de insiruire (lista): ‘,’
-
Atribuire de semnale: ‘<=‘
-
Atribuire de variabile: ‘:=‘
-
Nivel logic pentru un semnal: ‘1’, ‘0’, ‘Z’ etc
-
Valoare logica pentru o magistrala: “011011..”, “00000”, B”0000”, X”AF”, etc
-
Identificatori de utilizator:
-
Pot contine litere, cifre, underscore ‘_’
-
Trebuie sa inceapa cu litere
-
ELEMENTE STRUCTURALE
Entity
-
Reprezinta interfata care se conecteaza (circuitul privit din exterior):
-
Nu contine descrieri functionale
-
Se conecteaza cu alte entitati (componente) prin semnalele definite ca porturi
-
Porturile care se conecteaza: sa aiba
-
acelasi tip de date
-
acelasi latime de date (width)
directie de semnale corespunzator (ex. out->in sau out->inout sau in->in; out->out nu este permis.
Architecture
-
Reprezinta functia descrisa a entitatii (structura interna behavioral, RTL etc)
-
O Entitate poate avea mai multe arhitecturi posibile
Configuration
-
Selecteaza perechile de entitate/arhitectura
Folosit in general la simulare
Process
-
Constructie care permite executia secventiala a instructiunilor din interior
-
In afara proceselor instructiunile se executa concurent
-
Procesul insusi este o constructie concurenta (se executa concomitent cu alte procese si instructiuni concurente)
Controlat de evenimente (ex. schimbari de semnale), poate sa chiar nu se execute, daca nu se schimba semnalele.
Package
-
Pentru proiectare modulara. Contine constante predefinite, solutii standard, tipuri de date etc
-
Similar cu bibliotecile OrCad sau cu bibliotecile #include… din C
Library
-
Colectie de obiecte VHDL compilate (cod obiect), folosibil de catre simulator sau sintetizator
3.6.3 Exemple de Entitati
Exemplul cel mai popular: adunare pe un bit: Fuladder, bazat pe doua Halfadder + o poarta SAU:
entity Halfadder is
port(A, B, : in bit;
Sum, Carry : out bit);
end Halfadder;
--VHDL '93 permite: end entity Halfadder;
Entity FULLADDER is
port(A, B : in std_logic_vector(3 downto 0);
Sum: out std_logic_vector(3 downto 0);
Carry : out bit);
end FULLADDER;
-
PORT: inchis intre ‘();’
-
Fiecare element din port: identificator ‘:’ directie tip ‘;’
-
‘;’ este pentru a se separa elementii, deci ultimul element nu trebuie urmat de ‘;’
-
Porturile de acelasi tip pot fi insiruite prin ‘,’
3.6.4 Tipuri de porturi
IN
-
Valorile semnalelor pot fi doar citite (Read-Only)
Out
-
Valorile semnalelor pot fi doar scrise, nu si citite din interiorul arhitecturii (Write-Only)
-
Permit drivere multiple (pot fi actualizate din mai multe locuri, cu conditia evitarii conflictelor)
-
Pentru a se putea citi din interior:
-
Se poate folosi agregatul semnal’DRIVING_VALUE - nu e suportat de XST
-
Se poate defini un semnal intern (recomandat); se actualizeaza semnal extern, apoi out<=semnal_intern; -- se poate atribui si concurent
Se poate folosi port de iesire de tip buffer
IN
Out
Buffer
-
Este port de iesire, ca si out, dar:
-
Poate fi citit din interior
-
Nu permite mai multe drivere ca si Out
INOUT
-
Este port bidirectional
-
Nu se recomanda folosirea lui decat in cazul transferurilor bidirectionale, unde este necesar
-
Se recomanda folosirea, pe cat posibil, a doua cai (una de citire, una de scriere) in loc de inout (considerente de viteza)
La conectarea porturilor in ierarhie, modurile porturilor trebuie sa fie identice (OUT-OUT, IN-IN,
INOUT-INOUT, BUFFER-BUFFER etc)
3.7 Exemplu de descriere (arhitectura) ierarhica – FULLADDER
entity FULLADDER is
Port ( A : in bit;
B : in bit;
Carry_IN : in bit;
SUM : out bit;
Carry : out bit);
end FULLADDER;
---------------------------------------------------------------------------
architecture STRUCTURA of FULLADDER is
signal W_SUM: bit;
signal W_CARRY1, W_CARRY2: bit;
component HALFADDER
port(A, B : in bit;
SUM, CARRY : out bit);
end component;
component ORGATE
port(A, B : in bit;
RES : out bit);
end component;
begin
PRIMUL_MODUL: HALFADDER -- Instantiere de componente. O componenta declarata
port map (A, B, W_SUM, W_CARRY1); -- poate fi instantiata de oricate ori
AL_DOILEA_MODUL: HALFADDER -- Eticheta TREBUIE SA FIE UNICA pentru
port map (W_SUM, Carry_IN, -- FIECARE INSTANTA A ORICAREI COMPONENTE
SUM, W_CARRY2); -- Port map este POZITIONALA, adica
-- Primul semnal din port map e conectat la primul
AL_TREILEA_MODUL: ORGATE -- port al componentei, al doilea la al doilea etc.
port map (W_CARRY2, W_CARRY1, CARRY);
end STRUCTURA;
3.8 . MODELUL DE COMUNICATIE VHDL. PROCESE
PROCES (executate concurent, in interior: executia e secventiala)
SEMNAL
PROCESE
-
Contine instructiuni executate secvential (in ordinea aparitiei in proces, ca si in cazul limbajelor de programare)
-
Exista doar in interiorul arhitecturilor
-
Procesele ruleaza concurent
-
Executia proceselor este controlat de:
-
LISTA DE SENZITIVITATE (contine semnalele care declanseaza procesele)
-
Instructiuni wait
Procesele pot fi etichetate optional
-
Procesele pot fi etichetate optional
-
Doua forme, prima:
eticheta_1: process
-- declaratii de variabile
begin
-- optional instructiuni
…
wait on lista de senzitivitate,
-- exemplu A=‘1’, CLK’event AND CLK=‘1’, sau A, B, C – semnale
-- sau: wait until time=10 ns
-- optional instructiuni
wait on lista de senzitivitate, -- optional
-- optional instructiuni, alte instructiuni wait
…
end process eticheta_1;
-
Procesul controlat de instructiunea wait: ruleaza in bucla infinita
-
La intalnirea instructiunii wait, procesul se suspenda pana la aparitia conditiei pentru a se continua executia
eticheta_1: process
-- declaratii de variabile
begin
-- optional instructiuni
…
wait on lista de senzitivitate,
-- exemplu A=‘1’, CLK’event AND CLK=‘1’, sau A, B, C – semnale
-- sau: wait untill time=10 ns
-- optional instructiuni
wait on lista de senzitivitate,
-- optional instructiuni, alte instructiuni wait
…
end process eticheta_1;
-
Procesul controlat de instructiunea wait: ruleaza in bucla infinita
-
La intalnirea instructiunii wait, procesul se suspenda pana la aparitia conditiei pentru a se continua executia
-
Cuvantul cheie process trebuie repetat si la sfarsit!
-
Daca a fost specificat eticheta, atunci trebuie repetata si acesta la sfarsitul procesului
A doua forma:
eticheta_1: process (Lista de senzitivitate) -- semnale care declanseaza -- procesul
-- declaratii de variabile
begin
-- instructiuni
…
end process eticheta_1;
-
Procesul controlat de instructiunea wait: SE DECLANSEAZA LA SCHIMBAREA ORCARUI SEMNAL DIN LISTA DE SENZITIVITATE
-
Cuvantul cheie process trebuie repetat si la sfarsit!
-
Daca a fost specificat eticheta, atunci trebuie repetata si acesta la sfarsitul procesului
-
Lista de senzitivitate: Simulatorul tine cont, sintetizatorul in general NU (XST NU tine cont, exista sintetizatoare care tin cont)
-
Exemplu: Dorim sa citim valoarea unui semnal DOAR cand se schimba un alt semnal: (Valoarea lui B sa se citeasca doar cand A se schimba)
process (A, C) – Procesul nu se declanseaza cand B se schimba
begin
Q<=(NOT C) OR (A AND B);
end process;
Rezultatul Simularii Behavioral:
B=0, si totusi Q=1
Exemplu: Dorim sa citim valoarea unui semnal DOAR cand se schimba un alt semnal: (Valoarea lui B sa se citeasca doar cand A se schimba)
process (A, C) – Procesul nu se declanseaza cand B se schimba
begin
Q<=(NOT C) OR (A AND B);
end process;
Rezultatul Sintezei:
Rezultatul Simularii Post-Translate
In timpul sintezei:
-
WARNING:Xst:819 - c:/temp/test1/combinational.vhd line 21: The following signals are missing in the process sensitivity list:
TOATE SEMNALELE CARE SUNT CITITE IN PROCES, SA FIE INTRODUSE IN LISTA DE SENZITIVITATE,
-
conditie NECESARA ca simularea Behavioral sa corespunda cu simularea Post-Translate
-
Forma de proces cu instructiune wait:
process
begin
Q<=(NOT C) OR (A AND B);
wait on A, C;
end process;
-
Simulatorul: permite instructiune wait cu mai multe semnale
-
Rezultatul simularii: La fel ca si in cazul process (A, C)
-
Sintetizatorul: NU PERMITE MAI MULT DE UN SINGUR SEMNAL IN INSTRUCTIUNEA WAIT!
-
NU PERMITE NICI DOUA SAU MAI MULTE INSTRUCTIUNI WAIT
-
ERROR:Xst:841 - c:/temp/test1/combinational.vhd line 21: Bad condition in wait statement, or only one clock per process.
Forma de proces cu instructiune wait:
process
begin
Q<=(NOT C) OR (A AND B);
wait on A;
end process;
-
Sintetizatorul: Genereaza eroare:
-
ERROR:Xst:841 - c:/temp/test1/combinational.vhd line 21: Bad condition in wait statement, or only one clock per process.
-
Semnalul de la instructiunea wait: considerat SEMNAL DE CEAS
-
DOAR UN SINGUR SEMNAL DE CEAS E PERMIS INTR-UN PROCES
La instructiunea wait: SINTETIZATORUL PRESUPUNE CA SEMNALUL DUPA INSTRUCTIUNEA WAIT ESTE UN SEMNAL DE CEAS
-
Forma de proces cu instructiune wait:
process
begin
Q<=(NOT C) OR (A AND B);
wait until A’EVENT;
end process;
-
Sintetizatorul: Genereaza eroare:
-
ERROR:Xst:841 - c:/temp/test1/combinational.vhd line 21: Bad condition in wait statement, or only one clock per process.
A trebuie sa fie pe un front specificat (pozitiv sau negativ)
Specificarea frontului pentru A:
process
begin
Q<=(NOT C) OR (A AND B);
wait until A’EVENT AND A=‘1’;
end process;
Rezultatul Sintezei:
La fel si la instructiunea wait until A=‘1’; - acelasi rezultat de sinteza
-
Procese cu instructiuni wait: doar semnale de control sincrone
-
Procese cu liste de senzitivitate: semnale de control atat sincrone, cat si asincrone
4. Comparatii FPGA vs All Others
4.1 Piaţa circuitelor logice programabile:
Avantaj Proiectare FPGA vs ASIC: Time-To Market
Comparaţie între proiectări cu diferite sisteme:
Comparaţie între microcontrolleri şi FPGA
Facilităţi
|
μC
|
Soluţii μC
|
FPGA
|
Soluţii FPGA
|
Viteză de lucru
|
mică
|
CLK>
|
mare
|
CLK>, paralelism
|
Periferice predefinite
|
da
|
Interfeţe I/O standard: SPI, SCI, USB etc
|
nu
|
Componente CORE
|
Reprogramabilitate
|
da
|
FLASH
|
da
|
FLASH, RAM
|
Interfeţe Analogice
|
da
|
Convertoare D/A, A/D
|
nu
|
Circuite externe
|
Versatilitate
|
mică
|
Pini partajaţi
|
mare
|
Reconfigurabil la nivel de pin I/O
|
Algoritmi complecşi
|
uşor
|
Programare C, Asm
|
greu
|
Componente CORE
|
Preţ de cost
|
mică
|
Familii Low-Cost
|
medie
|
Preţ de cost/poartă logică <<
|
-
Concluzii:
-
Microcontrollere: recomandate în aplicaţii industriale de viteză redusă – PLC - uri (Programmable Logic Controller)
-
FPGA: recomandate la aplicaţii de mare viteză, ex. prelucrări de semnale, datorită paralelismului, comunicaţii etc
5. Procedura de proiectare cu Circuite Logice Programabile (Design Flow)
-
Simularea HDL RTL: uneori denumit simulare comportamentală (behavioaral)
-
Sinteză (Synthesis): Operaţiunea prin care codul HDL este transformat în schemă RTL de către software (Synthesis Tool)
-
Exemple de sintetizatoare:
-
XST (Xilinx Synthesis Tools)
-
Synopsys Simplify Pro, FPGA Express
-
Leonardo Spectrum
-
RTL: Register Transfer Level - descriere HDL sau schemă conţinând doar componente generale – porţi logice, bistabile D, fără date specifice unei componente – descriere sau schemă universală (portabilă)
-
Implementarea: Transformarea schemei RTL în schemă gate-level pe componenta ţintă (target device)
-
Translate: proiectul ierarhic este trecut într-un singur fişier, se verifică constrângerile şi corectitudinea lor
-
Map: Schema este transformată în schemă implementabilă pe componentă: se crează funcţiile logice în LUT-uri, regiştrii în bistabile D, se extrag memoriile bloc etc
-
PAR (Place And Route) – Similar cu Layout – asezarea şi rutarea ei pe componentă
-
Observaţie: Pentru CPLD, procedura de implementare este: Translate, Fit (nu este Place and Route, structura unei CPLD este fixată)
-
Sinteza şi Implementarea: procese automatizate de către software. Ele pot fi influenţate:
-
Sinteza: prin opţiuni de sinteză
-
Implementarea: prin
-
Constrângeri (plasament, alocare de pini, constrângeri de timp de propagare)
-
Floorplan – crearea unui plan de amplasare (cu ajutorul utilitarului Floorplanner)
-
Opţiuni de implementare
-
3 tipuri de simulare (Webpack combinat cu Modelsim permite 4 tipuri de simulare):
-
Simularea Comportamentală (Behavioral):
-
Simulatorul “execută” comenzile (similar cu un debugger)
-
Timpii de propagare prin porţi logice sunt modelate prin executarea instrucţiunilor cu o întârziere “delta” (de ordinul ps)
-
Sunt permise în simulare mai multe tipuri de variabile şi comenzi decât pot fi sintetizate!
-
Simularea funcţională (Post-Synthesis sau Post Translate)
-
Se simulează schema extrasă din sinteză
-
Timpii de propagare modelate prin “delta”
-
Simularea Timing (Post-Map, Post-Place-and-Route)
-
Se simulează schema implementată pe componentă
-
Timpii de propagare sunt cei extraşi din schema plasată şi rutată
-
Post-Place-and-Route Simulation reprezintă simularea cea mai apropiată de realitate
-
-
Circuite reconfigurabile
-
de tip FLASH (în general, CPLD, păstrează configuratia nonvolatil)
-
de tip RAM (în general FPGA, pierde configuratia la întreruperea alimentării)
-
În principiu: Circuite ale căror schemă internă se poate configura în funcţie de cerinţele proiectului
-
Principali producători: Xilinx, Altera, Cypress, Lattice, etc
-
Complexitate - XILINX:
-
de la XC2C32 – (Coolrunner CPLD) 32 celule (32 bistabili, 750 porti logice, 33 User IO)
-
până la XC2VP100 – (Virtex II Pro) 99216 celule (milioane porţi logice, 7992 kbiţi memorie, 444 multiplicatoare 18X18, 12 blocuri DCM, 2 procesoare PowerPC, 1164 User I/O, 20 transceivere RocketIO 3.125GBPs, sau 20 transceivere RocketIO 10.3125GBPS)
-
Frecvenţa de lucru: depinde de proiect (contează timpii de propagare) – de la zeci MHZ (Coolrunner) până la GHZ (Virtex)
6. Procesul de Proiectare in XILINX
Pasul 1: Proiectare
-
Doua metode de specificare/editare a proiectului: HDL(Verilog sau VHDL) sau desen de schema (schematic entry)
Pasul 2: Sinteza in scopul creerii circuitului (Netlist)
-
Translatarea fisierelor V, VHD, SCH intr-un fisier format EDIF (Electronic Design Interchange Format, standard industrial, Xilinx: XNF)
Pasul 3: Implementarea proiectului (fisierului EDIF)
-
Translate, Map, Place & Route
Pasul 4: Configurarea FPGA
-
Descarca fisierul BIT in FPGA
6.1 Fisierul Log (Log file) Xilinx
Poate fi impartit in trei parti principale:
Tabelul optiunilor de sinteza
6.2 Sinteza XST in Project Navigator
-
Modulul/entitatea selectata in fereastra “Sources” va fi tratat ca si “top-level!”
-
In fereastra “Procese”:
-
Synthesize
-
View Synthesis Report
-
Analyze Hierarchy
-
Check Syntax
-
Proprietatile specifice XST (right-click pe “Syntesize” si se alege “Properties”:
-
Synthesis Options
-
HDL Options
-
Xilinx Specific Options
In Xilinx - Project Navigator avem urmatoarele ferestre de dialog:
Fereastra Source
Fereastra Processes
Se pot ajusta algoritmii specifici optimizarii si sintezei low-level
Detalii despre optiunile de sinteza: Help din Project Navigator, respectiv “XST User guide”
-
Add I/O Buffers
-
Equivalent Register Removal
-
Maximum Fanout
-
Incremental Synthesis
-
Register Duplication/Balancing
-
Move First/Last Flip-Flop Stage
-
Slice Packing
-
Pack I/O Registers into IOBs
6.3 Circuite FPGA – Istorie
FPGA XILINX
Familii mai vechi: 3000, 5000, 4000
Familia 4000: baza de pornire pentru celelalte familii
-
Spartan – simplificare a structurii 4000
-
Virtex – circuite de mare densitate
-
Spartan II, IIE – bazate pe arhitectura Virtex
-
Familii mai noi: Virtex Pro, Virtex II Pro
-
Actualmente: Spartan III (bazat pe Virtex II Pro), Virtex 4
6.4 XILINX – Familia Spartan III
A aparut in data de Martie 2003
-
Bazat pe tehnologia Virtex II
-
Trei domenii de tensiuni: 1,2V (VCORE), 1.2V-3.3V (I/O), si 2.5V (scopuri auxiliare)
-
rata de transfer : pana la 622MB/S pe I/O
-
18 standarde I/O single-ended, 6 standarde I/O diferentiale
-
I/O: impedantele de terminale controlate digital
-
Suport DDR (Double Data Rate) – echivalent cu DualEdge
-
Multiplicatoare interne dedicate pe 18X18 biti
-
DLL – inlocuit cu DCM – Digital Clock Manager, permite
-
Eliminarea intarzierilor de ceas
-
Sinteza de frecventa (multiplicare de la 2 la 32, divizare de la 1 la 32)
-
Defazaj controlat de inalta rezolutie (pe 9 biti – complement pe 2)
Privire in ansamblu:
Figura 6.4.1 FPGA Xilinx Spartan 3
Cuprinde:
-
200K porti logice Xilinx Spartan-3 FPGA cu twelve 18-bit multipliers,
-
216Kbits of block RAM, and up to 500MHz internal clock speeds
• On-board 2Mbit Platform Flash
(XCF02S)
• 8 butoane de schimare a semnalului, 4 pushbuttons, 8
LEDs, and 4-digit seven-segment
display
• Port serial, VGA port, si PS/2
Port pentru mouse/tastatura
• Three 40-pin expansion connectors
• Three high-current voltage regulators
(3.3V, 2.5V, and 1.2V)
Figura 6.4.2 FPGA Xilinx Spartan 3 (vazut din fata)
Figura 6.4.3 FPGA Xilinx Spartan 3 (vazut din spate)
Diagrama bloc a FPGA este prezentata in figura de mai jos:
6.4.4 Diagrama bloc Xilinx Spartan3
• Placa lucreaza cu cabluri JTAG3
6.4.5 Diagrama in ansamblu Spartan3
6.4.6 Ledurile programabile FPGA XC3S200
- se compun din 7 biti care sunt programati cu ajutorul softului.
Dostları ilə paylaş: |