Implementare Interfata Vga PE Sistem Reconfigurabil Xilinx Spartan 3
CUPRINS
=== l ===
Capitolul 1
Generalitati despre circuite logice programabile
Introducere
Domeniul de programare al campurilor de porti (FPGAs) a devenit o parte importanta a oricarei structuri de sistem. Multi vanzatori ofera multe si variate arhitecturi si procese.
Prima parte a lucrarii se ocupa de arhitectura interna si caracteristicile acestor dispozitive. Dispozitivele logistice programabile sunt descrise intr-un rezumat, ducand la o descriere detaliata a domeniul de programare campuri de porti. Variatele arhitecturi ale acestor dispozitive sunt examinate in detaliu impreuna cu alternativele lor, care ne permit sa decidem care aparat este cel mai bun pentru sistemul nostru.
Urmatoarea parte a acestei lucrari vorbeste despre fluxul design-ului care trebuie planificat. Acest lucru permite unui arhitect sau manager de proiect sa alocheze resurse si sa creeze un program.
Partea finala a acestei lucrari trateaza in detaliu, arhitectura, simularea si testarea problemelor care apar in timpul desenarii unui FPGA. Intelegerea acestor probleme ne permite sa proiectam un chip care functioneaza corect in sistemul nostru si va functiona corect in toata perioada de viatza a produsului.
Campuri de porti aplicatie circuit integrat specific ASIC
O aplicatie circuit integrat specific, sau altfel spus ASIC, este un cip care poate fi creat de catre un inginer fara a avea nici o cunostiinta anume despre semiconductorii din fizica sau procesele cu semiconductoare. Vanzatorul produsului ASIC a creat o biblioteca de celule si functii pe care arhitectul le poate folosi fara a avea nevoie sa cunoasca cu precizie cum aceste functii sunt implementate cu silicon. Producatorul de ASIC suporta de asemenea uneletele de soft pe care in mod automat acest proces le cere.Producatorul de ASIC poate chiar sa puna la dispozitie o aplicatie pentru ingineri care sa-i asiste la creearea desenului pentru ASIC. Ca urmare, producatorul pune la dispozitie cipul, creaza mastile, si produce ASIC-urile.
Campul de porti este de fapt un ASIC cu o structura particulara care consta in randuri sau coloane de transistori normali. Fiecare celula de baza, sau poarta, este facuta din acelasi numar mic de transistori care sunt conectati. De fapt, nici unul dintre transistori din campuri de porti nu sunt conectati de la inceput. Aceasta se intampla din cauza ca conexiunea este determinata in intregime de structura pe care o implementam. O data ce avem structura gata, softul pus la dispozitie realizeaza care transistori trebuie conectati. In primul rand, nivelul jos de functii sunt conectate impreuna. De exemplu, sase tranzistori pot fi conectati pentru a creea un flip-flop D. Dupa ce functiile de nivel jos au fost directionate, aceste vor fi conectate intre ele. Softul va continua aces proces pana cand intreaga structura va fi vompleta. Aceasta structura de tip rand si coloana este ilustrata in figura 1.
Furnizorul de ASIC produce multe zaruri nedirectionate care contin campuri de porti si care pot fi folosite pentru orice client campuri de porti. Un circuit integrat consista in mai multe straturi de materiale care contin material semiconductor (exmeplu silicon), materiale izolatoare ( de exmplu oxizi), si materiale conductoare ( de exemplu metale). Un zar nedirectionat este produs cu toate straturile, cu exceptia ultimelor straturi de metal care conecteaza portile intre ele. O data ce structura este completa, producatorul nu are nevoie decat sa adauge ultimul strat de metal zarului pentru a creea cipul, folosind msti foto pentru fiecare strat de metal. Din aceasta cauza, referirea se face sub numele de Campuri de porti Mascat, tocmai pentru a fi diferentiat de campul de programare Campuri de porti.
Figura 1.1 Structura Câmpuri de porți Mascate
Evoluția dispozitivelor programabile
Dispozitivele programabile au trecut printr-o lunga evoluție pana la complexitatea pe care o au in acest moment. In continuare voi arata o discuție , cu aproximare cronologica a acestor dispozitive, de la cel mai simplu la cel mai complex.
Memoriile programabile de tip Read Only, denumite si PROM, sunt memorii simple care pot fi programate fara prea mulți bani de către utilizator sa contina un anumit tipar. Acest tipar poate fi folosit pentru reprezentarea unui program cu microprocesor, un algoritm simplu, sau tipul mașinii. Unele PROM pot fi doar programate. Alte PROM, ca de exemplu EPROPM sau EEPROM pot fi șterse si programate de mai multe ori.
PROM sunt excelente pentru implementarea oricărui tip de logica combinatoriala cu un număr limitat de admisii si producții. Pentru logica secvențiala, dispozitive externe cu ceas, cum ar fi flip-flops sau microprocesoare trebuiesc adăugate. De asemenea, PROM tind sa fie extrem de lente, deci nu sunt folositoare pentru aplicații unde viteza este o problema.
Câmpuri programabile logice (PLA) au reprezentat o soluție pentru viteza si pentru limitarea energiei consumate a PROM. PLA este format dintr-un număr mare de limitatoare de energie conectate la un plan SI, unde diferite combinații de semnale pot fi conectate logic intre ele, in funcție de cum este programata structura respectiva. Ieșirile planului SI intra intr-un plan SAU, unde termenii sunt conectați prin SAU in diferite combinații si ieșirile finale sunt realizate. La intrări si ieșiri exista invertoare tipice astfel încât NEGATIILE logice pot fi obținute. Aceste dispozitive pot implementa un număr mare de funcții combinatorice deși nu toate combinațiile sunt posibile, ca la PROM. Oricum, in general au mai multe ieșiri si sunt mult mai rapide.
Figura 1.2 Structura câmpuri programabile logice PLA
Câmp logic programabil (PAL) reprezintă o variație a PLA. Ca si PLA, au un plan extins de programare, SI pentru a realiza intrări de tip SI. Pe de alta parte, planul SAU este fixat, limitând numărul de termeni care pot fi conectați intre ei prin SAU . alte dispozitive de logica de baza, cum ar fi multiplexor, SAU exclusiv si inchizatoare sunt adăugate la intrări si ieșiri. Cel mai important, elementele cu ceas, de tip flip-flops, sunt incluse. Aceste dispozitive sunt acum capabile sa implementeze un număr mare de funcții logice, inclusiv o secvența logica cu ceas necesara pentru declararea mașinii. Aceasta a fost o dezvoltare importanta care a permis PAL-ului sa înlocuiască o mare parte din logica standard in multe structuri. PAL sunt de asemenea extrem de rapide.
Figura 1.3 Structura câmp logic programabil (PAL )
Producatorul de hardware a vrut, in mod ideal, ceva care sa-i ofere flexibilitatea si complexitatea unui ASIC dar cu un timp mai scurt de intoarcere a dispozitivelor programabile. Solutia a venit in forma a unor noi dispozitive – dispozitiv logic complex programabil (CPLD) si matrici de campuri de porti programabile (FPGA). Cum se poate observa in Figura 4, CPLD si FPGA formeaza o legatura intre PAL si campuri de porti. CPLD sunt la fel de rapide ca si PAL dar mai complexe. FGPA abordeaza complexitatea de campuri de porti dar sunt inca programabile.
Figura 1.4 Comparație intre CPLD si FPGA
Dispozitive Logice Complexe Programabile (CPLD)
CPLD sunt exact ceea ce pretind ca sunt. Au fost creeate pentru a parea ca un numar mare de PAL intr-un singur cip, conectate intre ele printr-un comutator in cruce. Folosesc aceleasi unelte de dezvoltare si programatori, si se bazeaza pe aceeasi tehnologie, dar ei pot folosi o logica mai mare si mult mai complexa.
Diagrama din figura 5 ne arata structura interna a unui CPLD. Desi fiecare producator are o variatie diferita, in general sunt toate similare si anume sunt formate din blocuri de functii, blocuri de iesiri/intrari, si o matrice de interconectare. Dispozitivele sunt programate folosind elemente de programare, care, in functie de tehnologia producatorului pot fi celule EPROM, celule EEPROM sau celule Flash EPROM.
Figura 1.5 Structura interna a CPLD
Un bloc de functii este aratat in Figura 6. Planul SI inca exista, asa cum arata firele incrucisate. Planul SI poate accepta intrari de la blocurile I/O, alte blocuri de functii sau conexiune inversa de la acelasi bloc de functii. Termenii si apoi SAU se iau impreuna, folosind un numar fix de porti SAU, si termenii sunt selectati printr-un multiplexor mare. Iesirile mux-ului pot fi trimise direct in afara blocului, sau printr-un flip-flop cu ceas. Aces bloc particular include logici aditionale, cum ar fi un exclusiv SAU selectiv si un semnal de master reset, pe langa faptul ca este capabil sa programeze polaritatea la diferite etape.
In mod normal, blocul de functii este proiectat in mod similar cu structurile de PAL, cum ar fi 22V10, pentru ca inginerul sa foloseasca unelte familiare sau structuri mai vechi, fara a le schimba.
Figura 1.6 Bloc de funcții CPLD
Figura 7 ne arata un bloc intrare/ieșire I/O al CPLD. Blocul I/O este folosit pentru a conduce semnalele către acele din CPLD la un nivel de voltaj adecvat cu curent. In mod normal, un flip-flop este inclus, așa cum este arătat in figura. Acest lucru se face la ieșiri in așa fel încât semnalele ceas pot fi puse automat direct la ace fara a suferi întârzieri semnificative. Acest lucru se realizează la intrări pentru a nu avea întârzieri înainte ca semnalul sa ajungă la flip-flop, care ar mari timpul de așteptare cerut. De asemenea, o mica parte de logica este inclusa in blocul I/O doar pentru adaugă mai multe resurse la aparat.
Figura 1.7 Bloc Intrare/Ieșire al CPLD
Interconectarea CPLD este o matrice comutatoare programabila foarte mare care permite semnalelor din toate sa meargă dintr-o parte in alta a aparatului. Deși nici un comutator nu poate permite conectarea interna a tuturor blocurilor de funcții la celelalte blocuri de funcții, exista destula flexibilitate pentru a permite combinații de conexiuni.
Diverși producători folosesc tehnologii diferite pentru implementarea elementelor programabile din CPLD. Tehnologiile cele mai des folosite sunt de Memorie Electric Programabila Read Only (EPROM), Ștergere Electrica PROM (EEPROM) sau de Flash EPROM. Aceste tehnologii sunt similare cu cele folosite pentru cele mai simple dispozitive programabile, PROM.
Când ne gândim sa folosim un CPLD intr-o structura, următoare puncte ar trebui luate in calcul:
Tehnologia de programare
EPROM, EEPROM sau Flash EPROM? Acest lucru va determina echipamentul necesar pentru programarea dispozitivelor si daca ele pot fi programate o singura data sau de mai multe ori.
Capacitatea blocului de funcții
Cate blocuri de funcții sunt in aparat?
Cați produși si cați termeni pot fi folosiți?
Care sunt întârzierile minime si maxime prin partea logica?
Ce resurse de logica adiționale exista, cum ar fi XNOR, ALU
Ce tip de registrii de control sunt disponibili (exemplu reset, preset, controlul polaritatii)? Cați parametrii de intrare are funcția si cați dintre ei sunt globali?
Ce tip de drivere exista in dispozitiv si care este cel mai rău caz in care exista deviație de frecventa in cip. Acest lucru va ajuta la determinarea maximului de frecventa la care dispozitivul poate funcționa.
Capacitatea I/O
Cate I/O sunt independente, folosite pentru orice funcție, si cate sunt folosite pentru intrări de tip „ceas”, master reset.
Care este capacitatea driverului de ieșire in termeni de nivel de voltaj si curent?
Ce tip de logica este inclus intr-un bloc I/O care sa poată mari funcționalitatea structurii.
Câteva familii de CPLD de la diferiți producători sunt listate mai jos:
Allera AAAX 7000 si AAAX 9000
Atmel ATF si ATV
Lattice ispLSl
Lattice (Vantis) AAACH
Xilinx XC9500
Matrici de câmpuri de porți programabile (FPGA)
FPGA este denumit astfel pentru ca, in loc de o structura similara cu PAL sau alt tip de dispozitiv programabil, este structurat mai mult ca un câmp ASIC. Acest lucru face ca FPGA sa fie ușor utilizabil in producerea de prototipuri ASIC sau in locuri unde ASIC va fi eventual folosit. De exemplu, un FPGA poate fi folosit intr-o structura care trebuie sa ajungă rapid pe piața indiferent de costuri. Mai târziu un ASIC poate fi folosit in loc de FPGA când volumul producției creste, pentru a reduce costurile.
Figura 1.8 Structura FPGA
Fiecare producător de FPGA are structura proprie pentru FPGA, dar in general toate sunt o variațiune a celei arătate in Figura 8. Structura consta in blocuri de logica configurabile, blocuri I/O configurabile, si interconectare programabila. De asemenea, vor exista circuite de tip „ceas” pentru direcționarea semnalelor la fiecare bloc de logica, si resurse de logica adiționale ca ALU, memorie, si decodoare. Cele doua tipuri de baza de elemente programabile pentru FPGA sunt RAM Static si anti – siguranțe.
Blocurile de logica configurabile conțin partea logica din FPGA. Intr-o structura mare de tip bob de grâu, aceste CLB vor conține destule elemente de logica pentru a crea o mica categorie de mașini. Intr-o asemenea structura, care seamănă mai degrabă cu un ASIC câmp, CLB va conține numai elemente de logica de baza. Diagrama din Figura 9 este considerata a fi un astfel de sistem. Conține RAM pentru crearea de funcții arbitrare combinatoriale de logica. Conține de asemenea flip-flop pentru stocarea elementelor de tip „ceas” si multiplexoare pentru a direcționa logica in bloc si pentru a forma resurse externe. Mux-erele permit de asemenea selectarea polaritatii si resetarea si ștergerea selectării ieșirilor.
Figura 1.9 Bloc logic configurabil FPGA
Un bloc intrare/ieșire I/O configurabil, așa cum este arătat in figura 10, este folosit pentru a aduce semnalele la cip si sa fie trimise înapoi. Consta intr-un modificării de intrare si unul de ieșire cu trei categorii si un colector ce controlează ieșirile. In mod normal, exista tranzistori de ridicare pe ieșiri si uneori rezistori de coborâre. Polaritatea ieșirii poate fi programata in general pentru ieșire activa înalta sau joasa si deseori rata de cădere poate fi programata pentru cădere rapida sau lenta. In plus, deseori exista un flip-flop pe ieșiri, astfel încât semnalele de tip ceas pot fi trimise direct la ace (pini) fara a suferi întârzieri semnificative. Acest lucru se face pentru intrări pentru ca sa nu existe prea multe întârzieri la un semnal înainte de a ajunge la flip-flop care ar creste timpul de așteptare cerut al dispozitivului.
Interconectarea Programabila
Interconectarea unui FPGA este foarte diferita decât cea a unui CPLD, dar este mai degrabă similara cu cea a unui câmpuri de porți AISC. In Figura 11, o ierarhie a resurselor de interconectare poate fi văzuta. Sunt linii lungi care pot fi folosite pentru conectarea CLB care sunt fizic departe unul de celalalt in cip fara a produce multe întârzieri. Pot fi folosiți de asemenea ca mijloc de transport in interiorul cipului. Sunt de asemenea si linii scurte care sunt folosite pentru conectarea individuala a CLB care sunt localizate fizic aproape unul de celalalt. Existe de asemenea câteva matrici comutatoare, ca cea dintr-un CPLD, folosite pentru conectarea liniilor scurte si lungi in anumite moduri. Comutatoarele programabile in interiorul unui cip permit conectarea mai multor CLB-uri pentru interconectarea liniilor intre ele si switch. Cele trei stări ale tampoanelor de memorie sunt folosite sa conecteze mai multe CLB-uri de-a lungul unei linii creând un bus. Liniile lungi speciale, denumite linii globale de sincronizare, sunt special proiectate pentru impedanța mica si timp de propagare rapid. Acestea sunt conectate in mod sincronizat la zona de tampon si la fiecare element sincronizat din fiecare CLB. Astfel se realizează sincronizarea prin FPGA.
Figura 1.10 Interconectarea Programabila a FPGA-ului
Blocurile speciale de I/O cu zone tampon speciale, cunoscute si ca drivere de sincronizare, sunt distribuite in jurul cipului. Aceste zone tampon sunt conectate la circuite de intrare sincronizate si sa conducă semnalele sincronizate prin liniile globale sincronizate descrise mai sus. Aceste linii sunt proiectate pentru propagări rapide. Așa cum vom discuta mai târziu, proiectarea sincronizata este necesara pentru un FPGA deoarece deviația de frecventa si întârzierea nu pot fi garantate. doar când se folosesc semnale sincronizate provenind de la zone tampon sincronizate putem obține întârzieri relative si devieri de frecventa garantate.
Etape in proiectare folosind circuitul FPGA
Interfata de proiectare pentru FPGA a companiei Altium aduna uneltele si sistemele de comunicare necesare. Acestea se combina cu o platforma de implementare FPGA si astfel obtinem un mediu complet de FPGA.
O privire generala asupra procesului de formare
Mediul de proiectare al FPGA, Altium, ne permite sa cream , sa implementam si sa dam „debug” microprocesoarelor bazate pe sistem digital din FPGA. Proiectul este captat ca unul schematic, sau folosind un amestec de schematic si VHDL. Software-ul este scris intr-un editor codat, pregatit pentru compilare si de descarcat in procesorul din proiectul nostru.
Figura 1.11 Diagrama sistemului, arătând etapele proiectului hardware,
software, si proiectare PVB.
O data ce proiectul hardware este complet, este sintetizat, printr-un proces care îl transforma din forma de captare intr-o forma de nivel jos, de tip poarta.
După ce proiectul isi sintetizează un loc si rutarea este îndeplinita, un proces in care aparatul cu software implementează schema in FPGA.
Figura 1.12 Diagrama procesului de proiectare (design)
Baza oricarui design creat in DXP este un proiect tip fisier.
Mai multe tipuri de proiecte de design sunt suportate, cum ar fi:
Proiecte PCB (*PrjPCB)
Proiecte FPGA (*PrjFpg)
Proiecte „Embedded” (*PRJEmb)
Proiecte „Core” (*PrjCor)
Biblioteci integrate (MntLib)
Proiecte „script” (*PrjScr)
Majoritatea proiectelor au ca obiect o singura implementare – de exemplu un proiect PCB devine un PCB, si un proiect FPGA este implementat intr-un singur FPGA. Documentul insusi al proiectului este un fisier ASCII care stocheaza informatiile proiectului, cum ar fi documentele care apartin de proiect, setarile de iesire, setarile de compilare, setarile pentru verificarea erorilor, si asa mai departe.
Schema hardware intr-un FPGA este capturata ca un set de liste schematice, cod VHDL sau un amestec din amandoua. Partea schematica este captata in editorul schematic, cu fiecare lista schematica stocat ca un fisier separat. VHDL este captat in sintaza editorului VHDL. Pentru o informare mai detaliata despre modul de creeare a unui proiect FPGA, se adauga liste schematice, se plaseaza si se unesc componentele si se implementeaza schema in FPGA.
In timp ce proiectul fisier face legatura intre documentele sursa intr-un singur proiect, relatiile document-document si cele de conectare directa sunt definite de informatiile din chiar aceste documente.
Figura 1.13 Un proiect FPGA compilat aratand ierarhia relatiilor dintre
documentele proiectului
Schema este impartita in blocuri logice, fiecare bloc fiind reprezentat in varful listei schematice cu un simbol de „lista.”.
Exista un numar de comenzi disponibile pentru a spori viteza procesului de construire a ierarhiei intr-un design multi-sheet. Acestea sunt:
Crearea listei din simbol – folosind comenzile din editorul schematic pentru a creea o lista inferioara celei nominale.
Crearea fisierului VHDL din simbol – folosind comenzile din editorul schematic pentru a creea un fisier VHDL, cu o entitate declarata care definitii de tip port care sa se potriveasca cu sheet-urile in simbolul nominalizat.
Crearea unuei componente dintr-o lista – folosind acest editor schematic se creeaza o componenta schematica simbol din aceasta lista, ale carei pin-uri sa se potriveasca cu lista schematica.
Crearea unei parti schematice dintr-un fisier – se creeaza un component schematic simbol din fisierul VHDL, ale carui pin-uri se potrivesc cu definitiile port delarate in entitate.
Unul dintre avantajele incorporarii unui FPGA intr-un design este abilitatea de implementare a unui numar mare de circuite repetate. Mediul contine aplicatii specifice pentru a sprijini proiecte cu circuite repetate – ca de altfel si cele de tip „one sheet symbol”.
Acesta este cunocut sub numele de proiectare multi-canal. Exista doua abordari la acest tip de design, fie prin referirea aceluiasi sub-sheet din mai multe liste simbol, fie folosind un singur simbol lista cu folosirea cuvantul cheie „Repeat”. Cand design-ul este complet, orice sectiune repetata (sau canal) sunt in mod automat repetate in numarul necesar de ori. Avantajul unui astfel de design este acela ca permite pastrarea unei singure copii a sursei canalului, chiar si dupa ce design-ul a mutat implementarea in FPGA sau PCB.
Figura 1.14 Ierarhia fisierelor este creata amplasand simboluri lista pentru a
reprezenta fisierele
La sub-documentele VHDL se face referinta la fel ca si la sub-liste, specificand sub-documentul si numele acestuia in simbolul sheet-ului care il reprezinta. Conectivitatea se face de la lista simbol la declaratia entitatii din fisierul VHDL.
Conexiunea intre pin-urile componentelor este realizata fie printr-o conexiune fizica, sau logica. Conexiuea fizica este realizata prin amplasarea de cabluri pentru conectarea pin-urilor componentelor intre ele. Conexiunea logica este realizata prin amplasarea de identitati , ca „labels”, porti de curent, iesiri si intrari de sheet. Cand proiectul este compilat se stabileste conexiunea.
Conectivitatea ierarhica sau de tip bus intre documente urmeaza proiectul standard de ierarhizare, unde port-urile si sub-documentele se conecteaza la intrarile sheet ale aceluiasi nume din sheet simbol care reprezinta acel document, cum este aratat in Figura 6.
Figura 1.15 Conexiunea ierarhica
Figura 1.16 Exemple de folosire pentru bus joiner
1.7. Folosirea bus-urilor
In mod normal exista un numar mare de retele intr-un sistem digital. Bus-urile pot juca un rol important in folosirea acestor retele si ajuta la prezentarea design-ului intr-o forma mai usor de citit.
Acestea pot fi reorganizate, redenumite, impartite. Pentru a folosi harta reteli de bus-uri, exista o clasa speciala de componente, denumita „bus joiner”. Acestea pot fi amplasate intr-un FPGA, integrat in librarie. Figura 1.16 arata exemple de folosire a acestora.
Figura 1.17 Bus spliter de tip JB
Regula de baza este ca acestea separa/unesc bitii de la cel mai putin important bit pana la cel mai important bit.
De exmplu, in Figura 1.17 U17 imparte cele 8 bit-uri care intra in pinul I[7..O] in doua 4-bituri bus., OA[3..0] and OB[3..0].
Figura 1.18 Bus joiner de tip JB
Acest tip de bus joiner permite potrivirea intre retele in bus-uri de lungimi diferite. Acest lucru estea realizat prin 2 componente parametrice, IndexA si IndexB care formeaza o harta de la un bus la celalalt. Acesti indici trebuiesc definiti cand se foloseste un JB joiner.
Se citeste curgerea de retele printr-un bus-joiner de tip JB prin potrivirea retelelor in bus-ul atasat, pana la primul index din bus-joiner., apoi la al doilea index, si pana la retele definite in al doilea bus din retea.
Testarea si depanarea schemei
FPGA tradiționale sunt proiectate folosindu-se un limbaj de descriere hardware si sunt verificate folosind un simulator HDL pe o placa de testare HDL. De aici schema e implementata intr-un FPGA, fie pe o placa de dezvoltare fie pe o placa prototip, si se folosesc tehnici de depanare de schema hardware tradiționale pentru a verifica daca componenta se comporta la fel ca si in simulare.
Fara un mediu de dezvoltare care sa suporte testarea in circuit a schemei intr-un FPGA este dificil sa se depaneze o schema de FPGA in alt fel. La aceasta se adaugă si lipsa de medii de proiectare care asigura accesul uneltelor software de dezvoltare incorporate la un procesor care rulează in interiorul FPGA si rezultatul este ca pana azi, FPGA au fost limitate de la implementarea de componente specializate din sisteme digitale mari, si testarea lor depinde in mare parte de simulare si verificare.
La fel ca si lipsa de unelte care sa suporte depanarea procesorului incorporat, modelul tradițional de verificare, simularea HDL nu se ocupa cu testarea si depanarea unei scheme care include un procesor.
Un sistem digital care include un procesor, periferice si logici discrete asamblate ca si componente sau pe un PCB sunt testate si depanate de obicei de:
rularea softului de test pe procesor, prin intermediul unui circuit interior emulator sau echivalentul unui depanator soft
atașarea unui analizor logic pentru a monitoriza stare bus-urilor din schema
folosirea unui osciloscop pentru a monitoriza nodurile specifice in circuit si verificarea semnalelor cu schema originala
Decât sa se încerce scrierea sursei HDL astfel încât sa fie gata atât simularea cat si sintetizarea, si apoi sa se simuleze întregul sistem digital, mediul de proiectare DXP bazat pe FPGA suporta același test si metodologie de depanare folosite in dezvoltarea tradiționala a PCB.
El conține:
unelte de depanare soft incorporate
instrumente, incluzând analizoare logice
monitorizare a marginilor care afiseaza starea pinilor de pe FPGA
Nanoboard- o platforma de implementare care permite schemei sa fie testate înainte de mutarea ei la ultimul PCB, si apoi suporta testarea integrata a schemei pe ultimul PCB.
Iterații rapide de proiectare
Folosind aceasta metoda, schema poate fi implementata in dispozitivul dorit si testata exclusiv, înainte de mutarea ei finala in ultimul PCB. Iterațiile de proiectare pot fi făcute in câteva minute, si opțiuni de proiectare, cum ar fi partitionarea Hardware/software poate fi explorata, toate înainte de trimiterea schemei la PCB.
Alt avantaj al implementării schemei intr-un FPGA este ca pinii dispozitivului la care sunt conectați semnalele interne sunt de obicei definibil de către utilizator. Acest lucru poate însemna o vizibila imbunatatire a abilitații de rutare a PCB, reducând potențial costul si complexitatea. Acest lucru bineinteles ca trebuie sacrificat pentru plasarea si rutarea corecta a schemei in FPGA, astfel încât pot exista un număr de iterații care sa fie create pentru a asigura cerințele schemei proiectului atât la PCB cat la FPGA.
Pentru a conecta un proiect FPGA la dispozitivul de pe PCB care este implementat in el, se folosește Structure Editor in panoul Projects pentru a crea sub-proiectul pentru conectarea proiectului.
Sistemul este capabil sa compileze ambele scheme atât cea PCB cat si cea FPGA si sa stabilească prin intermediul numelor rețelelor conexiunea dintre ele.
Figura 1.19 Folosirea harții Workspace pentru proiectarea conexiunii intre FPGA si PCB
Capitolul 2
Familia de matrici de câmpuri de porți programabile (FPGA)cu cip Spartan 3
2.1. Introducere
Familia Spartan 3 de matrici câmpuri de porți programabile este proiectata special pentru a face fata nevoii clienților de aplicații electronice nu foarte scumpe, de volum mare. Familia cu 8 cipuri oferă densitati variind de la 50.000 la 5 milioane porți pe sistem, după cum se vede in tabelul 1.
Familia Spartan 3 construita pe succesul familiei anterioare Spartan 2 ce conține mai multe resurse logice, capacitatea memoriei interne RAM, numărul total de circuite I/O, si in general nivelul de performanta cat si o imbunatatire funcțiilor care controlează frecventa de ceas. Numeroase imbunatatiri deriva din tehnologia de ultima generație Virtex II. Aceste imbunatatiri ale Spartan 3 , combinate cu procese tehnologice avansate, oferă o mai mare funcționalitate si lărgime de banda pe dolar decât era mai înainte posibil, creând noi standarde in industria programării logice.
Datorita costului excepțional de scăzut, fpga-urile Spartan 3 sunt ideale pentru o gama larga de aplicații electronice, incluzând transmisii pe banda larga, rețele, afișare/proiectare si echipament tv digital.
Familia Spartan 3 este alternativa superioara pentru asic-urile programabile mascat. Fpga –urile nu sunt scumpe, au ciclii de dezvoltare mai scurți, si deci nu sunt inflexibile cum sunt asic-urile. De asemenea, FPGA-urile permit upgrade-uri de proiectare in folosire fara a înlocui componentele electronice, o imposibilitate in cazul ASIC-urilor.
Caracteristici
cost scăzut, soluții de înalta performanta pentru aplicații de volum mare orientate spre consumator.
Densitati de 74,880 de celule logice.
Trei cai de putere: pentru procesor (1.2v), i/o (1.2v pana la 3.3v), si scopuri auxiliare(2.5v);
selecția semnalelor i/o
* pana la 784 de pini i/o
622 Mb/s rata de transfer de date pe i/o 18 semnale standard cu un capăt.
* 6 standarde i/o diferențiale incluzând LVDS,RSDS
* terminale cu impedanța controlata digital
* domeniul de semnale intre 1.14v pana la 3.45v
* suport double data rate(ddr)
resurse logice
– celule logice capabile sa-si modifice registrii
– multiplexori mari
– logica de transport rapida look-ahead
– multiplicatori dedicați 18×18
– logica JTA compatibila cu IEEE 1149.1/1532
– memorie ierarhica SelectRAM
– pana la 1,872 KB\biti din memoria bloc ram
– pana la 520 Kbiti din totala distribuita ram
– manager de ceas digital( pana la 4 DCM)
* Filtrare a distorsionărilor de ceas
* Sintetizare de frecvente
* Schimbare de faza de rezoluție mare
opt linii globale de ceas si rute variate
suportat complet de sistemul de dezvoltare Xilinx
* Sintetizare, mapare, plasare si rutare
procesor MicroBlaze, pci, si alte procesoare
Tabel 1 Atributele Spartan 3
Arhitectura familiei Spartan 3 consta in cinci elemente funcționale programabile:
blocuri logice configurabile(CLB) conțin tabele Look-Up bazate pe RAM pentru implementarea elementelor logice si de stocare care pot fi folosite ca flip-flop sau latch-uri. CLBs pot fi programate pentru a executa o mare varietate de funcții logice cat si pentru a stoca date.
Blocuri Intrare/ieșire I/O (IOB) controlează scurgerea datelor intre pinii I/O si logica interna a dispozitivului. Fiecare IOB suporta flux de date bidirecțional. Fiecare IOB suporta flux de date bidirecțional plus operare in 3 stări. 24 de standarde diferite de semnale, incluzând 7 standarde de nivel înalt de performanta, sunt disponibile după cum se vede in tabelul 2. registrii double data – rate (DDR) sunt incluși. Caracteristica de impedanța controlata digital(DCI) asigura terminații automate pe cip, usurand proiectarea plăcilor.
Blocul RAM asigura stocarea datelor sub forma de blocuri dual-port pe 18 Kbiti.
Blocul multiplicator accepta doua numere binare pe 18 biți ca intrare si calculează produsul.
Blocurile de control digital al ceasului(DCM) asigura autocalibrarea, soluții complet digitale pentru distribuirea, multiplicarea, întârzierea, divizarea si schimbarea de faza a semnalelor de ceas.
Aceste elemente sunt organizate conform figurii 2.1. Un inel de IOB înconjoară o raza obișnuita de CLB. XC3s50 are o singura coloana de blocuri RAM integrate in raza. Aceste dispozitive in gama de la XC3S200 la XC3S2000 au doua coloane de blocuri RAM. XC3S4000 si XC3S5000 au patru coloane RAM. Fiecare coloana este alcătuita din blocuri RAM de 18Kbiti ; fiecare bloc este asociat unui multiplicator dedicat. DCM-urile sunt poziționate la capetele coloanelor blocurilor RAM.
Familia Spartan 3 asigura o rețea bogata de trasee si întrerupătoare care interconectează toate elementele funcționale , transmitand semnale intre ele. Fiecare element funcțional are o matrice de trecere asociata care permite multiple conexiuni la rute.
Figura 2.1 Arhitectura familie Spartan 3
Nota: Cele doua coloane de blocuri RAM adiționale ale XC3S4000 si XC3s5000 sunt trasate cu linii punctate.
XC3S50 are doar coloana de bloc RAM din stânga.
2.3. Blocul de intrare ieșire
Blocul de intrare/ieșire I/O (IOB) asigura o interfața programabila, bidirecționala intre un pin de I/O si logica interna a FPGA.
O diagrama simplificata a structurii interne a IOB se vede in figura 2.1. Sunt trei magistrale principale in IOB: magistrala de ieșire, magistrala de intrare, si magistrala pentru three state. Fiecare magistrala are propria pereche de elemente de stocare care pot acționa fie ca registrii fie ca latch-uri. Cele trei magistrale principale sunt:
1) magistrala de intrare care transfera date de la tastatura, care este atașata la un pin de conectare, printr-un element de intirziere programabil opțional direct la linia I. după elementul de intirziere, pot fi rute alternate printr-o pereche de elemente de stocare către liniile IQ1 si IQ2. ieșirea IOB I, IQ1, si IQ2 toate conduc spre logica interna a FPGA. Elementul de intirziere poate fi activat pentru a asigura un timp de reținere de 0.
2) magistrala de ieșire, începând cu liniile O1 si O2, transporta datele de la logica interna a FPGA printr-un multiplexor si apoi printr-un purtător de three state către tastatura IOB. Pe lângă aceasta cale directa, multiplexorul asigura opțiunea de inserare a unei perechi de elemente de stocare.
3) calea de three-state determina când purtătorul de ieșire are impedanța mare. Liniile T1 si T2 transporta datele de la logica interna a FPGA printr-un multiplexor la portul de ieșire. In plus la aceasta cale directa, multiplexorul asigura opțiunea de a introduce o pereche de elemente de stocare.
Toate semnalele care intra in IOB inclusiv cele asociate elementelor de stocare, au un loc de inversor. Orice inversor așezat pe aceste magistrale este automat absorbit de IOB.
Funcțiile elementelor de stocare
Sunt trei perechi de elemente de stocare in fiecare IOB, o pereche pentru fiecare din cele trei magistrale. Este posibil sa se configureze fiecare din aceste elemente de stocare ca un flip-flop tip D cu declanșare pe margine sau ca un latch sensibil pe nivel.
Perechea de elemente de stocare pe oricare din magistralele de intrare sau pe magistrala de three state pot fi folosite împreuna cu un multiplexor special pentru a produce transmisii DDR double data rate. Acest lucru se realizează prin primirea de date sincronizate cu creasta crescătoare a semnalului de ceas si convertirea lor in biți sincronizați pe ambele creste atât cea care urca cat si cea care coboară. Combinația a doi registrii si a unui multiplexor se numește flip-flop (FDDR) double-data rate d-type flip-flop.
Magistralele de semnal asociate cu elementele de stocare sunt descrise in tabelul 2.
Tabel 2 Descrierea semnalelor elementelor de stocare
Figura 2.2 Diagrama bloc intrare/ieșire simplificata
Nota: Toate semnalele care comunica cu logica interna a FPGA au opțiunea de a inversa
polaritatea.
Linia de ceas OTCLK1 conectează intrarea CK a registrilor inferiori la magistrala de three state. Similar, OTCLK2 conectează intrările CK pentru registrii inferiori la ieșire si la magistralele de three state. Registrii superiori si inferiori de pe cale de intrare au linii de ceas independente:ICLK1 si ICLK2.
Linia de declanșare OCE face legătura dintre intrările CE ale registrilor superiori si inferiori pe calea de ieșire. Similar, TCE conectează intrările CE pentru perechea de registrii pe calea de three state si ICE face același lucru pentru perechea de registrii de pe calea de intrare.
Linia de SET/RESET (SR) care intra in IOB este comuna tuturor celor 6 registrii, precum si linia de Întoarcere (REV).
Fiecare element de stocare suporta numeroase opțiuni in plus fata de controlul polaritatii semnalelor descris in secțiunea de prezentare IOB.
1) – Întrerupătorul de opțiuni – FF/Latch
– Funcție – Alege intre un flip-flop sensibil la margine si un latch sensibil la nivel
– Specificitate – Independent pentru fiecare element de stocare.
2) – Întrerupătorul de opțiuni – SYNC/ASYNC
– Funcție – Determina daca SR este sincron sau asincron
– Specificitate – Independent pentru fiecare element de stocare.
3) – Întrerupătorul de opțiuni – SRHIGH/SRLOW
– Funcție – Determina daca SR actioneaza ca un Set , care obliga elementele de
stocare la logica “1” sau ca RESET, care forteaza o logica “0” (SRLOW).
– Specificitate – Independent pentru fiecare element de stocare cu excepția folosirii
FDDR. In cazurile următoare selecția pentru elementele superioare (OFF1 sau TFF2) se va aplica ambelor elemente.
4) – Întrerupătorul de opțiuni – INIT1/INIT0
– Funcție – In cazul unui Set/Reset global , după configurare sau la activarea rețelei
GTS, acest întrerupător decide fie sa seteze fie sa reseteze elementul de stocare. Standard, alegerea SRLOW selectează INIT0; alegerea SRHIGH selectează INIT1.
– Specificitate – Independent pentru fiecare element de stocare cu excepția cazului
când folosim FDDR. In cazurile următoare , selectarea INITA0 pentru un element se aplica ambelor elemente(chiar daca pentru celalalt este selectat INIT1).
Transmisia de date cu rata dubla (DDR) descrie tehnica de sincronizare a semnalelor cu ambele creste ale semnalului de ceas. Spartan 3 folosește perechi de registrii pe toate trei caile pentru a efectua operații DDR.
Perechea de elemente de stocare pe calea de ieșire a IOB (OFF1 si OFF2), folosita ca registru, combinata cu un multiplexor special pentru a forma FDDR. Aceasta primitiva permite transmisiei DDR unde biți de date de ieșire sunt sincronizați atât cu marginea superioara cat si cu marginea inferioara a ceasului. Este posibil sa accesezi aceasta funcție prin plasarea fie a unui FDDRRSE sau a unui FDDRCPE in schema. Operațiile DDR necesita doua semnale de ceas(ciclu de sarcina 50%), una fiind inversa celeilalte. Aceste semnale declanseaza cei doi registrii in mod alternativ, după cum se vede in fig 2.3. In mod normal, DCM generează cele doua semnale de ceas prin reflectarea semnalului primit, si care îl defazează cu 180 de grade. Aceasta metoda asigura distorsiune minima intre cele doua semnale.
Perechea de elemente de stocare pe calea de Three State (TFF1 si TFF2) pot fi de asemenea combinate cu un multiplexor local pentru a forma primitiva FDDR. Acest lucru permite sincronizarea ieșirii declanșare cu ambele capete ale semnalului de ceas. Aceasta operație DDR este realizata in același fel si pentru calea de ieșire.
Perechea de elemente de stocare din calea de intrare(IFF1 si IFF2) permit unui I/O sa primească un semnal DDR. Un semnal de ceas pe intrare declanseaza un registru si semnale de ceas inversate declanseaza celalalt registru. In acest fel registrii capturează pe rând biții semnalului DDR care sosește.
Pe lângă transferuri de date pe banda larga, DDR se poate folosi de asemenea pentru a reproduce, sau reflecta , un semnal de ceas de ieșire. Acest mod de lucru este folosit pentru transmisia semnalelor de ceas si de date împreuna. O apropiere identica se folosește pentru a reproduce semnale de ceas cu ieșiri multiple. Avantajul pentru ambele moduri este ca distorsiunea pe ieșiri va fi minima.
Figura 2.3 Generarea semnalului de ceas in registrii DDR
Toate IOB suporta testarea scanării marginilor compatibila cu standardele IEEE 1149.1.
Impedanța controlata digital(DCI)
Când traseul unui semnal de ieșire este întârziat, de la intrare la ieșire si înapoi- depaseste timpii de redresare si coborâre, se obisnuieste sa se adauge rezistente finale liniei care transporta semnalul. Aceste rezistente egalează impedanța unei I/O a dispozitivului cu caracteristica impedanței liniei de transmisie, astfel prevenind reflecția care afectează integritatea semnalului. Cu toate acestea, cu numărătoarele înalte I/O suportate de dispozitivele moderne, adăugarea rezistentelor necesita mult mai multe componente si cablaj. Si mai important, pentru unele accesorii nu se poate întotdeauna așeza rezistenta aproape de pini. DCI răspunde acestor probleme prin asigurarea a doua tipuri de terminale de chip: terminații paralele folosesc o rețea de rezistente integrata. Terminațiile in serie rezulta din controlul impedanței driverelor de ieșire. DCI ajustează activ atât terminațiile in paralel cat si cele in serie pentru a fi identice cu caracteristica impedanței liniei de transmisie. Aceste modificai compensează diferentele de impedanța I/O care [pot rezulta din variații normale ale temperaturii ambiente, a tensiunii de alimentare si a procesului de fabricație. Când driverul de ieșire se închide, terminațiile in serie, prin definiție, ating o impedanța mare; in opoziție, rezistentele terminațiilor paralele raman la valorile normale.
DCI este disponibil pentru anumite standarde I/O. DCI este selectat prin aplicarea extensiilor standardului I/O dorit simbolurilor sau componentelor. Sunt cinci metode de baza de configurare a terminațiilor. Standardele I/O cu DCI determina care din aceste terminații se folosește.
a) Driver ieșire controlat de impedanța b) Driver ieșire controlat cu jumătate de impedanța
c) Rezistenta singulara d) Rezistente Split
e) Rezistente Split cu impedanța driver ieșire fixata la 25 Ohmi
Figura 2.4 Metode de configurare a terminațiilor
Nota:1. Valoarea lui R este egala cu impedanța caracteristica liniei conectate la I/O. Este de asemenea egala cu
jumătate din valoarea Rref pentru standardele DV2 si cu Rref pentru celalalte standarde DCI.
Pentru DCI folosind Clase I si III HSTL terminațiile au efect doar la intrări (nu la ieșiri).
Pentru DCI folosind Clasa I SSTL, terminațiile split au efect doar la intrări (nu la ieșiri).
Caracteristica DCI operează independent pentru fiecare din cele opt nivele ale dispozitivului. Fiecare nivel are un pin de referința “N” (VRN) si un pin de referința “P” (VRP), pentru a calibra driverul si rezistenta terminațiilor. Doar când folosim standarde cu DCI pe un nivel dat acești doi pini se comporta ca VRN si VRP. Când nu se folosește un standard DCI, cei doi pini functioneaza ca I/O normal. După cum se vede in figura 3, se adaugă o rezistenta de referința externa pentru a redresa pinul VRN la tensiunea Vcco si o lata rezistenta de referința pentru a cobora pinul VRP la masa GND. Ambele rezistente au aceeași valoare – de obicei 50 Ohmi – cu o toleranta de 1%, care este de obicei fie impedanța caracteristica liniei sau de doua ori aceasta, depinzând de standardul DCI folosit. Standardele care au un nume simbol care conține literele DV2 folosesc o rezistenta de referința care are valoarea dubla a impedanței liniei. DCI ajustează impedanța driverului de ieșire pentru a fi egal cu valoarea rezistentei de referința sau cu jumătatea acesteia, in funcție de standard. DCI ajustează întotdeauna rezistentele terminațiilor de pe chip pentru a fi egale cu valoarea rezistentelor de referința.
Figura 2.5 Conectarea rezistentelor de referința (Rref)
Regulile care hotărăsc folosirea standardelor DCI pe nivele sunt:
nu este permis mai mult de un standard DCI I/O cu o terminație pe nivel.
nu este permis mai mult de un standard DCI I/O cu terminație impartita pe nivel
terminația simpla, terminația impartita, driver de impedanța controlat, si driver de impedanța controlat cu led cu impedanța la jumătate pot coexista in același nivel.
2.4. Organizarea blocurilor de intrare ieșire
IOB sunt alocate in 8 nivele, astfel încât fiecare margine a dispozitivului are 2 nivele, după cum se vede in Figura 4. pentru toate accesoriile, fiecare nivel are linii independente de referința. De exemplu liniile referința ale nivelului 3 sunt separate de liniile de referința care se duc la celalalte nivele. Fiecare nivel are linii Vcco dedicate. De exemplu, liniile Vcco ale nivelului 7 sunt separate de liniile Vcco care merg la celalalte nivele. Cu toate acestea, dispozitivele cu Spartan 3 din aceste accesorii suporta 8 alimentari Vcco independente.
Figura 2.6 Sloturi intrare/ieșire I/O Spartan 3 (vedere de deasupra)
Toate dispozitivele din familia Spartan3 au pini compatibili pentru accesorii. Când cerința de resurse logice depaseste capacitatea dispozitivului curent Spartan 3, un dispozitiv mai mare din același set îl poate înlocui direct. Dispozitivele mai mari pot adaugă linii de Referința si Vcco care sa suporte un număr mai mare de I/O. in dispozitivul mai mare, mai mulți pini se pot converti de la I/O la linii Referința. De asemenea, linii adiționale Vcco sunt duse către pini care nu sunt conectați in dispozitivul mai mic. Cu toate acestea, este important sa te gandesti la viitoarele imbunatatiri in momentul când proiectezi placa si trasezi cablajul si conectările pentru pini extra.
Familia Spartan 3 nu este compatibila pe pini cu nici o familie anterioara Fpga Xilinx.
Când se desemnează I/O nivelelor, este important sa se urmeze următoarele reguli Vcco:
sa nu ramana nici un pin Vcco neconectat la FPGA.
se setează toate liniile Vcco asociate cu nivelul la același nivel de tensiune.
Nivelele de Vcco folosite de standardele desemnate I/O nivelului interconectat trebuie sa fie la fel. Software de dezvoltare Xilinx verifica acest lucru. In tabelele 4,5,6 sunt descrise modalitatile in care diferite standarde folosesc alimentarea Vcco.
daca nici unul din standardele desemnate I/O nivelului interconectat nu folosește Vcco, se leagă toate liniile Vcco atașate la 2.5v.
in general, se leagă la 2.5v nivelul 4 Vcco de la începutul pana la sfarsitul configurării. Se aplica aceeași tensiune la nivelul 5 Vcco in timpul configurării sau in timpul operației de Read Back.
Daca nici un standard desemnat nivelului de intrare nu folosește referința, atunci sa fiți atenți la următoarele reguli adiționale:
nu lasati nici un pin referința neconectat la nici un nivel.
setați toate liniile referința asociate cu nivelul la aceeași tensiune.
nivelele referința folosite de toate standardele desemnate intrărilor trebuie sa fie la fel. Softul de dezvoltare Xilinx verifica acest lucru. Tabelele 4 si 6 descriu cum folosesc diferite standarde alimentarea referința.
Daca nici unul din standardele desemnate intrării in nivel nu folosește referința pentru trecerea peste pragurile de intrare comutare, toți pinii asociați referinței functioneaza ca simpli I/O.
Trei tensiuni diferite de alimentare pentru IOB:
Alimentările Vcco, una pentru fiecare nivel I/O al FPGA, alimentează driverul de ieșire, cu excepția cazului când se folosesc standarde de semnale GTL si GTLP. Tensiunea de pe pinii Vcco determina gama de variație a semnalului de ieșire.
VCCint este principala sursa de alimentare pentru logica interna a FPGA.
VCCaux este o sursa auxiliara de tensiune, in primul rând pentru a optimiza performanta diverselor funcții ale FPGA cum ar fi comutarea I/O.
Daca nu se aplica tensiune FPGA-ului, toate I/O sunt in stare de impedanța mare. Alimentările Vccint(1.2v), Vccaux(2.5V) si Vcco pot fi aplicate in orice ordine. Înainte sa se termine pornirea, Vccint, Vcco din nivelul 4, si Vccaux trebuie sa atingă nivelul minim recomandat pentru operare. In acest timp, toate driverele I/O vor fi de asemenea in stare de impedanța mare. Vcco nivel 4, VCCINT si Vccaux sunt folosite ca intrări pentru circuitul intern de pornire resetare(POR).
Un nivel scăzut aplicat la intrarea HSWAP_EN activează rezistentele de redresare pe I/O de la pornire si pe parcursul configurării. Un nivel înalt pe HSWAP_EN dezactivează rezistentele de redresare permitand I/O sa varieze. Imediat ce se aplica tensiune, FPGA începe sa-si inițializeze memoria de configurare. In același timp, FPGA isi setează intern Global Set-Reset(GSR), care reseteaza asincron toate elementele de stocare ale IOB la un nivel jos.
După terminarea initializarii, INIT_B trece in stadiul înalt, lăsând intrările M0,M1,M2 sa determine modul de configurare. La acest punct, datele configurării sunt încărcate in FPGA. Driverele de I/O raman in stare de impedanța ridicata ( cu sau fara rezistentele de redresare, determinat de intrarea HSWAP_EN) pe perioada configurării.
Rețeaua Global Three State (GTS) este activata in timpul pornirii, marcând sfarsitul configurării si începutul operației de design in modul utilizator. In acest moment, acele I/O la care au desemnate semnalele devin active in vreme ce I/O ramase nefolosite raman I n starea de impedanța ridicata. Activarea rețelei GSR, de Asemenea parte din pornire, lasă registrii IOB intr-o stare joasa standard, decât daca schema încărcata inversează polaritatile intrărilor RS respective se întâmpla altfel.
In mod utilizator, toate rezistentele interne de redresare pe I/O sunt dezactivate si HSWAP_EN devine o intrare “fara importanta”. Daca estre de dorit sa existe rezistente de redresare sau coborâre pe I/O care transporta semnale, simbolul asociat – PULLUP,PULLDOWN – trebuie așezat in locul lor in schema. Opțiunea generatorului de șiruri de biți (BitGen) UnusedPin apelabila in softul de dezvoltare Xilinx determina daca I/O nefolosite au rezistente de redresare, rezistente de coborâre, sau nu au in modul utilizator.
Blocurile logice configurabile(CLB) constituie principala resursa logica pentru implementarea sincronizata cat si pentru circuitele de combinatorica. Fiecare CLB conține patru parți interconectate, după cum se vede in figura 2.6. aceste parți sunt grupate in perechi. Fiecare pereche este organizata ca o coloana cu un lanț de transport independent.
Nomenclatura pe care editorul FPGA – parte din softul Xilinx de dezvoltare – o folosește pentru a desemna partile este: litera “X” urmata de un număr identifica coloane de parți. “x” număr număra in secvența de la partea stânga la dreapta. Litera “Y” urmata de un număr identifica poziția fiecărei parți intr-o pereche precum si indica rândul CLB. Numărul lui “Y” număra partile începând de jos in sus conform secvenței: 0,1,0,1 ( primul rând CLB); 2,3,2,3 ( al doilea rând CLB); figura 2.6 arata CLB localizat in coltul din stânga al parții. Partile X0Y0 si X0Y1 formează perechea coloana din stânga unde partile X1Y0 si X1Y1 formează perechea coloana din dreapta. Pentru fiecare CLB, termenul “ stânga” ( sau SLICEM) este folosit pentru a indica perechea de parți etichetate cu un număr “X” par, cum ar fi X0, si termenul “dreapta” (sau SLICEL) desemnează perechea de parți cu “X” impar, ex.X1.
Figura 2.6 Aranjarea parților in blocurile logice configurabile (CLB)
Toate patru partile au următoarele elemente comune: doua generatoare de funcții logice, doua elemente de stocare, multiplexori de funcții largi, logica de transport, si porți aritmetice, după cum se vede in figura 2.7. Ambele perechi de parți atât stânga cat si dreapta folosesc aceste elemente pentru a crea funcții logice, aritmetice si ROM. In afara de acestea, perechea din stânga suporta doua funcții adiționale: stocare de date si folosirea RAM distribuit si comutarea datelor cu registrii pe 16 biți. Figura 6 este o diagrama o parții stângi; de aceea, ea reprezintă o generalizare a elementelor si conexiunilor care se pot găsi in toate partile.
Generatorul de funcții bazat pe RAM- cunoscut de asemenea ca Look-Up Table sau LUT – este principala resursa pentru implementarea funcțiilor logice. Mai mult, LUT din fiecare pereche parte stânga poate fi configurata ca un registru de RAM distribuit de comutație pe 16 biți .generatoarele de funcții localizate in partile superioare si inferioare ale parților se numesc “G” si “F”.
Elementele de stocare, care sunt programabile fie ca flip-flop de tip D fie ca Latch sensibil la nivel, asigura un mod de sincronizare a datelor cu semnalul de ceas, printre alte utilizări. Elementele de stocare in partile superioare si inferioare ale parților se numesc FFY respectiv FFX.
Multiplexori de funcții largi se combina efectiv cu LUT pentru a putea permite operații logice mai complexe. Fiecare parte are doi astfel de multiplexori cu F5MUX in partea inferioara a parții si FXMUX in partea superioara. In funcție de parte, FXMUX poate sa se numească si F6MUX, F7MUX, sau F8MUX.
Lanțul de transport, împreuna cu diverse porți aritmetice dedicate, suporta implementări rapide si eficiente ale operațiilor matematice. Lanțul de transport pătrunde in parte ca si CIN si iese COUT. Cinci multiplexori controlează lanțul: CYINIT,CY0F, si CYMUXF in porțiunea inferioara ca si CY0G si CYMUXG in partea superioara. Logica aritmetica dedicata include porțile exclusive OR XORF si XORG ( pe partile inferioare si superioare ale parții) cat si porțile AND GAND si FAN.
Figura 2.7 Diagrama simplificata bloc de intrare ieșire
Nota: 1. Opțiuni de inversare a polaritatii semnalului ca si alte opțiuni care activează linii pentru diverse funcții nu sunt
prezentate.
2. Indexul i poate fi 6, 7, sau 8 depinzând de parte. In aceasta poziție, partea din partea superioara dreapta are un
F8MUX, iar partea din partea superioara stânga are un F7MUX. Partile din partea inferioare dreapta si stânga au
amândouă F6MUX.
In centrul operării fiecărei parți se afla doua cai de date aproape identice, care se deosebesc prin folosirea termenilor vârf si baza. Descrierea care urmează folosește denumiri asociate cu calea de la baza. Calea de baza pornește dintr-o matrice de comutare interconectare din afara CLB. Patru linii, F1 pana la F4 (sau G1 pana la G4 in calea superioara), intra in parte si se conectează direct la LUT. O data intrate in parte, calea inferioara pe 4 biți trece prin generatorul de funcții “F” (sau “G”) care efectuează operațiile logice. Ieșirea de date a generatorului de funcții, “D”, oferă cinci cai posibile:
ieșirea din parte prin linia “X” ( sau “Y”) si întoarcerea la interconectare.
in interiorul parții, “X” (sau “Y”) sunt folosite ca o intrare la DXMUX(DYMUX) care asigura datele de intrare, “D”, a elementului de stocare FFY(FFX). Ieșirea ”Q” a elementului de stocare conduce linia XQ (sau YQ) care paraseste partea.
controlul multiplexorilor CYMUXF ( sau CYMUXG) de pe lanțul de transport.
cu lanțul de transport folosit ca intrare la XORF (sau XORG) poarta exclusiva OR care efectuează operațiile aritmetice, rezultând un rezultat pe “X”(sau “Y”).
conducerea multiplexorului F5MUX pentru a implementa funcțiile logice mai mult de cat pe 4 biți. Ieșirea “D” a ambelor F-LUT si G-LUT sunt folosite ca intrări de date pentru acest multiplexor.
In plus fata de calea logica principala descrisa mai sus, mai sunt doua cai care intra in parte ca BX si BY. Odată in interiorul FPGA, BX in partea inferioara a parții ( sau By in partea superioara) pot porni pe următoarele ramuri:
sa treacă pe lângă ambele LUT si elementele de stocare, apoi sa iasă din parte ca BXOUT ( sau BYOUT) si sa se întoarcă ca sa se interconecteze.
sa treacă pe lângă LUT, apoi sa treacă prin elementele de stocare prin intrarea D înainte de ieșirea ca XQ ( sau YQ).
controlul multiplexorului de funcții largi F5MUX (sau F6MUX).
prin multiplexori, servind ca o intrare pentru lanțul de transport.
conduce intrarea DI a LUT.
BY poate controla intrările REV ale ambelor elemente de stocare FFY si FFX.
in final, multiplexorul DIG_MUX poate comuta BY in linia DIG, care iese din parte.
Alte semnale din parți prezentate in figura 6, sunt discutate in secțiunea care urmează.
Generatorul de funcții
Fiecare din cele doua LUT (F si G) dintr-o parte are patru intrări logice (A1-A4) si o singura ieșire (D). acest lucru permite ca orice operație logica cu patru variabile boolean sa fie programata in ele. Mai mult, multiplexorii de funcții largi pot fi folosiți pentru a combina efectiv LUT din același CLB sau din CLB diferiți, creând funcții logice cu si mai multe variabile de intrare.
LUT in ambele perechi de parți atât stânga cat si dreapta nu numai ca suporta funcțiile logice descrise mai sus dar de asemenea pot funcționa ca ROM care este inițializat cu date la momentul configurării.
LUT in perechea de parți stânga ( coloane cu numere pare cum ar fi X0 in figura 5) a fiecărui CLB suporta doua funcții adiționale pe care perechea de parți din dreapta( coloane de numere impare cum ar fi X1) nu o suporta.
La început, este posibil sa programam LUT din partea stânga ca si RAM distribuit. Acest tip de memorie permite buffering-ul a cantitati de date medii oriunde pe o cale de date. Un LUT din partea stânga stochează 16 biți. Mai multe LUT din partea stânga pot fi combinate in moduri diferite pentru a stoca cantitati mai mari de date. O opțiune de port dual combina doua LUT astfel încât accesul la memorie e posibil pe doua linii de date independente. Opțiunea de ROM distribuit permite pre-incarcarea memoriei cu date in timpul configurării FPGA.
In al doilea rând, este posibil sa se programeze fiecare LUT din partea stânga ca un registru comutator pe 16 biți. Folosit in acest fel, fiecare LUT poate întârzia datele seriale oriunde de la unu la 16 cicli. Cele patru LUT din partea stânga ale unui singur CLB pot fi combinate pentru a produce întârzieri de pana la 64 de cicli. Liniile SHIFTIN si SHIFTOUT configurează LUT in registrii de comutație mai mari. Este posibil de asemenea sa se combine registrii de comutație din mai mulți CLB. Întârzierile programabile rezultate pot fi folosite pentru a echilibra sincronizarea magistralelor de date.
2.5. Blocul RAM. Prezentare
Toate dispozitivele Spartan 3 suporta blocuri RAM, care sunt organizate ca si blocuri pe 18 Kbiti sincronizate configurabile. Blocul RAM stochează relativ mai eficient cantitati mari de date decât RAM distribuit descris mai devreme.( ultimul este mai bine echipat pentru buffering-ul unor cantitati mici de date oriunde de-a lungul caii de semnal).
Dimensiunile fiecărui bloc RAM sunt configurabile. Mai mult, se pot aglomera mai multe blocuri pentru a crea memorii si mai mari.
O alegere intre primitive determina daca blocul RAM functioneaza ca o memorie dual sau singur port. Un nume al formei RAM16_S[wA]_S[wB] caută primitiva pentru port dual, unde integralele Wa si Wb specifica lărgimea caii de date la porturile Wa si Wb. Cu toate acestea o RAM16_S9_S18 este un RAM dual port cu un port A pe 9 bit si un port B pe 18 biți. Numele A al formei de RAM_16_S[w] identifica primitiva de singur port, unde integrala W specifica lărgimea caii de date a portului singular. Un RAM16_S18 este un singur port RAM cu un port pe 18 biți. Alte funcții de memorie – FIFO, cai de date cu conversie, ROM, etc. – sunt disponibile folosind sistemul CORE generator, parte a softului de dezvoltare Xilinx.
XC3S50 are o coloana de bloc RAM. dispozitivele cu Spartan 3 de la XC3S200 la XC3S2000 au doua coloane de bloc RAM. XC3S4000 si XC3S5000 au patru coloane. Pentru un dispozitiv dat, totalul de blocuri RAM disponibile sunt distribuite in mod egal intre coloane. Tabelul 8 arata numărul de blocuri RAM , capacitatea de stocare a datelor, si numărul de coloane pentru fiecare dispozitiv.
Tabel 3 Număr de blocuri RAM pe dispozitiv
Figura 2.8 Caile de date ale blocului RAM
Blocul RAM si multiplicatorii au interconexiuni intre ei care permit operații simultane; cu toate acestea, din moment ce multiplicatorii au aceeași intrare cu biții de date superiori din blocul RAM, latimea maxima a caii de date a blocului RAM este 18 biți in acest caz.
Blocul RAM are o structura port dual. Cele doua porturi de date identice numite A si B permit acces independent la blocul RAM obișnuit, care are o capacitate maxima de 18,432 biți – sau 16,384 biți când nu sunt folosite liniile cu paritate. Fiecare port are propriul set de linii de control de date si ceas pentru operații de citire si scriere sincronizate. Sunt patru cai de date de baza, după cum se vede in figura 2.8: (1) scriere la si citire de la port A;, (2) scriere la si citire de la port B, (3) transfer de date de la port A la port B si (4) transfer de la port B la port A.
Definirea semnalelor pe portul blocului RAM
Reprezentarea primitivelor porturilor duale RAM16_S[Wa]_S[Wb] si primitiva portului singular RAM16_S[w] cu semnalele asociate lor este prezentata in figura 2.9a si figura 2.9b.
a) Port dual
b) Port singular
Figura 2.9 Primitivele blocului RAM
Nota: 1. WA si WB sunt integrale reprezentând latimea totala a caii de date ( biți de date plus biți de
paritate) la porturile A si B.
2. pA si pB sunt integrale care indica numărul de linii a caii de date care servesc drept biți de
paritate.
3. rA si rB sunt integrale reprezentând latimea bus-ului de adrese la porturile A si B.
4. Semnalele de control CLK, WE, EN, si SSR pe ambele porturi au opțiunea de a inverse
polaritatea.
Wa si Wb sunt integralele reprezentând latimea totala a caii de date ( biți de date plus biți de paritate) la porturile A si B. pa si pb sunt integrale care indica numărul de linii ale caii de date care servesc drept biți de paritate. Ra si rb sunt integrale reprezentând latimea busului de adrese al porturilor A si B. semnalele de control CLK,WE,EN si SSR pe ambele porturi au opțiunea de polaritate inversa.
Semnale port bloc RAM:
1) – Descrierea semnalului : Adrese Bus
– Port A nume semnal : ADDRA
– Port B nume semnal : ADDRB
– Direcție : intrare
– Funcționare : Bus-ul de adrese selectează o locație din memorie pentru operații de
scriere sau citire. Latimea (w) caii de date asociate portului
determina numărul de linii de adresa disponibile.
2) – Descrierea semnalului : Bus intrare date
– Port A nume semnal : DIA
– Port B nume semnal : DIB
– Direcție : intrare
– Funcționare : Datele la DI a busului de intrare sunt scrise la locația de memorie
adresata adresata de o margine activata activa a CLK. Este posibil
sa configuram latimea totala a caii de date a portului sa fie:
1, 2, 4, 9, 18, sau 36 de biți. Aceasta selecție se aplica atât cailor DI si DO ale unui port dat. fiecare port este independent pentru un port
cu o latime de banda w, numărul de locații adresabile va fi 16,384
(w-p) unde „p” este numărul de biți de paritate. Fiecare locație de
memorie va avea o latime de „w” ( incluzând biții de paritate).
3) – Descrierea semnalului : Intrări paritate date
– Port A nume semnal : DIPA
– Port B nume semnal : DIPB
– Direcție : intrare
– Funcționare : Intrările de paritate reprezintă biți adiționali incluși in calea de date
de intrare pentru a folosi la detectarea erorilor. Numărul de biți de
paritate „p” incluși in DI ( același ca si pentru bus DO) depinde de
latimea totala a cai de date a unui port. Vezi tabelul 10.
4) – Descrierea semnalului : Bus date ieșire
– Port A nume semnal : DOA
– Port B nume semnal : DOB
– Direcție : ieșire
– Funcționare : Accesul primar la date are loc oricând WE este inactiv. Ieșirea DO
reflecta datele stocate in locația de memorie adresata.
Accesul la date cu WE activat este de asemenea posibil daca unul
din următoarele doua atribute este ales: WRITE_FIRST accesează
datele înainte de scriere. READ_FIRST accesează datele după ce
are loc scrierea.
Un al treilea atribut, NO_CHANGE, transforma in latch ieșirea DO
când se activează WE.
5) – Descrierea semnalului : Ieșiri paritate date
– Port A nume semnal : DOPA
– Port B nume semnal : DOPB
– Direcție : ieșire
– Funcționare : Intrările de paritate reprezintă biți adiționali incluși in calea de
date pentru a suporta detectările de erori. Numărul de biți de
paritate „p” incluși in DI ( la fel ca si pentru bus DO) depinde de
latimea totala a caii de date a portului(w). Vezi tabelul 10.
6) – Descrierea semnalului : Activare scris
– Port A nume semnal : WEA
– Port B nume semnal : WEB
– Direcție : intrare
– Funcționare : Când sunt introduși împreuna cu EN, aceasta intrare permite
scrierea de date la RAM. In acest caz, atributele accesului la date
WRITE_FIRST, READ_FIRST sau NO_CHANGE determina
daca si cum se face update-ul datelor pe ieșirea DO.
Când WE este inactiv cu EN pornit, operațiile de citire sunt posibile in continuare. In acest caz, un latch transparent trece
datele din locația de memorie adresata la ieșirea DO.
7) – Descrierea semnalului : Activare ceas
– Port A nume semnal : ENA
– Port B nume semnal : ENB
– Direcție : intrare
– Funcționare : Când este activat, acest semnal activează semnalul CLK pentru a sincroniza funcțiile blocului RAM după cum urmează: scrierea de date la intrările DI ( când este pornit si WE), updatarea datelor la ieșirile DO precum si setarea/resetarea latch-urilor de ieșire a DO.
Când este dezactivat, funcțiile de mai sus sunt dezactivate.
8) – Descrierea semnalului : Set/Reset
– Port A nume semnal : SSRA
– Port B nume semnal : SSRB
– Direcție : intrare
– Funcționare : Când este activat, acest pin forteaza latch-ul de ieșire DO la
valoarea la care atributul SRVAL este setat 0. O operație de setare/resetare pe un port nu are efect supra funcționarii celorlalte porturi, nici nu deranjează conținutul de date al memoriei. Este sincronizat cu semnalul de ceas.
9) – Descrierea semnalului : Ceas
– Port A nume semnal : CLKA
– Port B nume semnal : CLKB
– Direcție : intrare
– Funcționare : Aceasta intrare accepta semnalul de ceas cu care sunt sincronizate operațiile de scris si de citit. Toate intrările asociate porturilor sunt necesare pentru a face fata setării timpilor care sa respecte marginea activa a semnalului de ceas. Bus de ieșire al datelor răspunde după o referința ceas la intirziere la marginea activa a semnalului de ceas.
Ratele de raport ale porturilor
Pe un port dat, este posibil sa selectezi un număr diferit de lărgimi (w-p) pentru bus-urile DI/DO după cum se vede din tabelul 10. aceste bus-uri au mereu aceeași lărgime. Aceasta selectare a lărgimii busului de date se face independent pentru fiecare port. Daca lărgimea busului de date a portului A diferă de cea a portului B, blocul RAM operează automat o funcție de egalizare a busului. Când datele sunt scrise pe un port cu un bus îngust, apoi citite de la un port cu bus larg, portul din urma va combina cuvinte “înguste” pentru a forma cuvinte “largi”. Similar, când datele sunt scrise intr-un port cu bus larg si apoi citite de la un port cu bus îngust, portul din urma va imparti cuvintele ”largi” pentru a forma cuvinte “înguste”. Când lărgimea busului de date este de 8 biți sau mai mult, devin disponibili biți de extra paritate. Lărgimea totala a caii de date(w) este suma lărgimii busului DI/DO si a oricăror biți de paritate(p).
Selecția de lărgime făcuta pentru bus-ul DI/DO determina numărul de linii adresate conform relațiilor de mai jos:
R=14-[log(w-p)/log(2)]
In schimb, numărul de linii de adrese delimitează numărul total de locații adresabile sau adâncime conform ecuației următoare:
Producția de w si n înseamnă capacitatea totala a blocului RAM. Ecuațiile 1 si 2 arata cape măsura ce latimea bus-ul de date creste , numărul de linii de adrese o data cu numărul de locații de memorie adresabile scade. Folosind latimile de bus permisibile ale DI/DO ca si intrări ale acestor ecuații se asigura latimea de bus si capacitatea de memorie prezentata in tabelul 4.
Tabel 4 Aspectul rapoartelor de port pentru porturile A si B
Operații cu date ale blocului RAM
Scrierea datelor către si accesarea datelor din blocul RAM sunt operații sincrone care au loc independent pe fiecare din cele doua porturi.
Formele de unda pentru operația de scriere sunt prezentate in partea superioara a figurii 9, figurii 10, si figurii 11. când semnalele WE si EN activează marginea activa a CLK, sunt scrisele datele de la intrarea DI in locația blocului RAM adresat de liniile ADDR.
Sunt o serie de condiții diferite sub care datele pot fi accesate la ieșirea DO. Accesul de baza la date are loc întotdeauna când WE este inactiv. Cu aceste condiții, datele stocate in locația de memorie adresata de liniile ADDR trec prin latch transparent de ieșire către ieșirea DO. Sincronizarea pentru accesul de baza la date este prezentat in porțiunile din figurile 2.10, 2.11 si 2.12 când WE e scăzut.
Datele pot fi de asemenea accesate la ieșirea DO când se activează intrarea WE. Acest lucru este realizat folosindu-se doua atribute diferite:
alegând atributul WRITE_FIRST, datele sunt scrise la locația de memorie adresata pe o margine activa de CLK si este trecuta ieșirilor DO. sincronizarea WRITE_FIRST este prezentata in partea din figura 10 in care WE este ridicat.
Figura 2.10 Forme de unda ale operațiilor cu date a blocului RAM Data cu WRITE_FIRST selectat
alegând atributul READ_FIRST, datele deja stocate la locația adresata trece către ieșirile DO înainte ca locația sa fie rescrisa cu date noi de la intrările DI pe o margine activa a CLK. Sincronizarea READ_FIRST este prezentata in porțiunea din figura 10 in care WE este ridicat.
Figura 2.11 Forme de unda ale operațiilor cu date a blocului RAM cu READ_FIRST selectat
alegerea atributului al treilea numit NO_CHANGE pune ieșirile DO intr-un stadiu de latch când se activează WE. In aceste condiții, ieșirile DO vor retine datele conduse chiar înainte de activarea WE. Sincronizarea NO_CHANGE este prezentata in partea din figura 11 in care WE este ridicat.
Figura 2.12 Forme de unda ale operațiilor cu date a blocului RAM cu NO_CHANGE selectat
2.6. Multiplicatori dedicați
Toate dispozitivele cu Spartan 3 asigura multiplicatori care accepta cuvinte pe 18 biți la intrare pentru a produce un produs pe 36 de biți. Aceasta secțiune asigura o introducere la multiplicatori.
Bus – urile de intrare la mutiplicatori accepta datele in forma complement de doi ( fie 18 biți cu semnătura sau 17 biți fara semnătura). Un astfel de multiplicator intra in alcătuirea fiecărui bloc Ram pe placa. Apropierea fizica dintre cele doua asigura un lucru cu date eficient. Multiplicatori cascada permit multiplicări mai mult de trei ca număr si mai mari de 18 biți. Multiplicatorul este așezat in schema folosind una din doua primitive: o versiune asincrona numita MULT18X18 si o versiune cu un registru la ieșire numit MULT18X18S, după cum se vede in figura 2.13a si 2.13b.
(a) Multiplexor 18-biti asincron (b) Multiplexor 18-biti cu registru la ieșire
Figura 2.13 Primitivele multiplicatorilor integrați
Descrierea primitivelor multiplicatorilor incorporați:
1) – Nume semnal : A[17:0]
– Direcție : intrare
– Funcție : se aplica un mutiplicator de 18 biți la aceste intrări. Primitiva
MULT18X18S necesita un timp de setare înainte de marginea activata a CLK.
2) – Nume semnal : B[17:0]
– Direcție : intrare
– Funcție : se aplica celalalt mutiplicator de 18 biți la aceste intrări. Primitiva
MULT18X18S necesita un timp de setare înainte de marginea activata a
CLK
3) – Nume semnal : P[35:0]
– Direcție : ieșire
– Funcție : Ieșirea de pe bus-ul P este un produs de 36 de biți al multiplicatorilor A si
B. In cazul primitivei MULT18X18S , o margine ridicata activa a CLK
updateaza bus-ul P.
4) – Nume semnal : CLK
– Direcție : intrare
– Funcție : CLK este doar o intrare in primitiva MULT18X18S. Semnalul de ceas
aplicat acestei intrări când este activat de CE, updateaza registrii de ieșire
care conduc bus-ul P.
5) – Nume semnal : CE
– Direcție : intrare
– Funcție : CE este doar o intrare in primitiva MULT18X18S. Activează semnalul
CLK. Activarea acestei intrări activează semnalul CLK pentru update la
bus P.
6) – Nume semnal : RST
– Direcție : intrare
– Funcție : RST este doar o intrare in primitiva MULT18X18S. Activarea acestei
intrări reseteaza registrul de ieșire la activare, la marginea ridicata a
CLK, fortand bus-ul P la zerouri.
Sistemul CORE generator produce multiplicări bazate pe aceste primitive care pot fi configurate pentru a se adapta unei game largi de cerințe.
2.7. Managerul de ceas digital (DCM)
Dispozitivele cu Spartan 3 asigura control flexibil si complet asupra frecventei de ceas, schimbării de faza si distorsiuni prin folosirea opțiunii DCM. Pentru a realiza acest lucru, DCM folosește un DLL Delay Lock Loop, un sistem de control complet digital care folosește feedback-ul pentru a menține caracteristica semnalului de ceas cu un mare grad de precizie in ciuda variațiilor normale in temperatura de operare si tensiune. Aceasta secțiune prezintă acest dispozitiv.
Fiecare membru al familiei Spartan 3 are 4 DCM, cu excepția celui mai mic, XC3S50, care are doua DCM. DCM sunt localizate la marginea celei mai din margine coloane de blocuri RAM. Managerul de ceas digital este așezat in schema ca primitiva “DCM”.
DCM suporta trei funcții majore:
eliminarea distorsiunilor de ceas: distorsiunile de ceas descriu extensia la care semnalele de ceas pot devia in circumstanțe normale de la alinierea de faza zero. Se întâmpla când mici diferente in întârzierile de cale cauzează ca semnalul sa ajungă la diferite puncte de pe placa la timpuri diferite. Aceasta distorsiune de ceas poate sa se mărească setarea si cerințele timpului de reținere precum si a timpului ceasului la ieșire., care este un lucru de nedorit in aplicațiile care operează la frecvente mari, când sincronizarea este critica. DCM elimina distorsiunile de ceas prin alinierea semnalului de ceas de ieșire pe care îl generează cu alta versiune de semnal de ceas care este retransmis. Ca rezultat, cele doua semnale de ceas stabilesc o relație de faza zero. Acest lucru efectiv anulează distribuirea întârzierilor care pot sa existe in calea de semnal care conduce de la ieșirea ceasului DCM la intrarea sa de feedback.
Sintetizarea frecventei: asigurata cu un semnal de ceas de intrare, DCM poate genera o gama larga de frecvente de ceas de ieșire. Acest lucru este realizat fie prin multiplicarea si/sau divizarea frecventei semnalelor de ceas de intrare printr-o serie de diverși actori.
Schimbarea de faza: DCM asigura abilitatea de schimbare de faza a tuturor semnalelor de ceas de ieșire tinand cont de semnalul lui de ceas de intrare.
Figura 2.14 Blocuri funcționale DCM si semnale asociate
DCM are patru componente funcționale: DLL bucla de întârziere pentru eliminarea distorsiunilor ceasului , sintetizatorul de frecvente digital (DFS), schimbătorul de faza (PS) si logica de status.
Bucla de întârziere pentru eliminarea distorsiunilor ceasului DLL
Cea mai de baza funcție a componentei DLL este eliminarea distorsiunilor ceasului. Calea principala de semnal a DLL consista intr-un etaj de intrare, urmat de o serie de elemente discrete de întârziere, care pe rând conduc la un etaj de ieșire. Aceasta cale împreuna cu logica pentru detectarea si controlul fazei formează un sistem complet cu feedback după cum se vede in figura 2.15.
Figura 2.15 Diagrama funcționala simplificata a DLL
Componenta DLL are doua intrări de ceas, CLKIN si CLKFB, precum si șapte ieșiri de ceas, CLK0,CLK90, CLK180,CLK270,CLK2X,CLK 2X180, si CLKDV după cum este descris in tabelul 5. ceasurile de ieșire conduc simultan; cu toate acestea, modul de înalta frecventa suporta doar un sub-set de ieșiri care exista in modul de frecventa joasa.
Tabel 5 Semnale DLL
Semnalul de ceas care ajunge la intrarea CLKIN servește la o forma de unda de referința, cu care DLL caută sa alinieze semnalul de feed back de la intrarea CLKFB. După eliminarea distorsiunilor ceasului, următorii pași in folosirea DLL sunt: semnalul CLK0 este trecut prin rețeaua de distribuție a semnalului de ceas la toți registrii care ii sincronizează. Acești registrii sunt fie interni sau externi FPGA. După trecerea prin rețeaua de distribuție a ceasului, semnalul de ceas se întoarce la DLL prin linia de feedback numita CLKFB. Blocul de control din DLL măsoară eroarea de faza intre CLKFB si CLKIN. Aceasta eroare de faza este o măsura a distorsiunii de ceas pe care rețeaua de distribuție a ceasului o introduce. Blocul de control activează numărul necesar de întârzieri pentru a elimina distorsiunea ceasului. O data ce DLL a adus in faza semnalul CLK0 cu semnalul CLKIN, el introduce ieșirea LOCKED, indicând o blocare a semnalului CLKIN.
Un număr de diferite opțiuni funcționale pot fi setate pentru componenta DLL prin folosirea atributelor descrise in tabelul 6. Fiecare atribut este descris in detaliu in secțiunile care urmează:
Tabel 6 Atribute DLL
Conectări ale ceasului buclei de întârziere pentru eliminarea distorsiunilor ceasului DLL
Un semnal de ceas extern intra in FPGA folosind Global Clock Input Buffer(IBUFG), care accesează direct rețeaua globala a semnalelor de ceas sau un Input Buffer(IBUF). Semnalele de ceas din FPGA conduc o rețea de semnale de ceas folosind Global Clock Multiplexer Buffer (BUFGMUX). Rețeaua globala de semnale de ceas se conectează direct la intrarea CLKIN. Conectările interne si externe sunt prezentate in figura 2.16a si 2.16c. un ceas diferențial (LVDS) se poate folosi si ca CLKIN.
Cel puțin patru din cele noua ieșiri de ceas ale DCM pot conduce simultan cele patru buffere BUFGMUX pe aceeași margine a plăcii (sus sau jos). Toate ieșirile de ceas ale DCM pot conduce simultan resurse generale de rutare, incluzând interconectarea care conduce la bufferi OBUF.
Lupa de feedback este esențiala pentru operarea DLL si este stabilita prin aplicarea pe intrarea CLKFB fie a semnalelor CLK0sau CLK2X astfel încât orice întârziere de distribuție nedorita a ceasului sa fie inclusa in lupa. Este posibil sa se folosească oricare dintre aceste doua semnale pentru sincronizarea oricăror din cele șapte ieșiri ale DLL: CLK0, CLK90, CLK180,CLK270,CLKDV,CLK2X sau CLK2X180. valoarea desemnata pentru atributul CLK_FEEDBACK trebuie sa in concordanta cu conexiunea fizica de feedback: o valoare de 1X pentru cazul CLK0, 2X pentru cazul CLK2X. daca DCM este folosit intr-o aplicație care nu necesita DLL – se folosește doar DFS – atunci nu exista o lupa de feedback deci CLK_FEEDBACK este setat la NONE.
Sunt doua cazuri de baza care determina cum se conectează ieșirile de ceas ale DLL si conexiunile de feedback: sincronizarea pe chip sau in afara chipului, care sunt prezentate in figura 2.16a pana la figura 2.16d.
a) Pe cip cu feedback pe CLK0 b) Pe cip cu feedback pe CLK2X
c) in afara cipului cu feedback pe CLK0 d) in afara cipului cu feedback pe CLK2X
Figura 2.16 Semnale de ceas de intrare, ieșire si conexiuni Feedback pentru bucla de întârziere pentru eliminarea distorsiunilor ceasului DLL
Nota: In modul de frecventa scăzuta, toate cele 7 ieșiri ale DLL sun disponibile. In modul de frecventa înalta, doar ieșirile CLK0,
CLK180, si CLKDV sunt disponibile.
In cazul de sincronizare pe circuit (figura 2.16a si figura 2.16b) este posibil sa se conecteze oricare din cele șapte semnale de ieșire de ceas DLL prin resurse generale de rutare la registrii interni ai FPGA. Un Buffer Global de Ceas (BUFG) sau BUFGMUX permite accesul la rețeaua ceas globala. Așa cum este arătat in figura 2.16a, bucla de întoarcere este creata prin rutarea CLK0 (sau CLK2X, in figura 2.16b) către un ceas global net care in schimb comanda intrarea CLKFB.
In cazul sincronizări pe circuit închis (figura 2.16c si figura 2.16b), CLK0 (sau CLK2X) plus oricare din ieșirile semnalelor de ceas DLL vor trece la ieșirea din FPGA prin bufferi de ieșire (OBUF) pentru a conduce o rețea de ceasuri externa si in plus registrii de pe placa. Așa cum este arătat in figura 2.16c, bucla de întoarcere este formata prin alimentarea CLK0 (sau CLK 2X, in figura 2.16d) si înapoi la FPGA folosind un IBUFG, care accesează in mod direct ceasul global al rețelei sau un IBUF. Apoi, ceasul global al rețelei este conectat direct la intrarea CLKFB.
DLL suporta doua moduri de operare distincte, de frecventa înalta si de frecventa joasa, fiecare fiind specific unui domeniu de frecventa de ceas. Atributul DLL_FREQUENCY_MODE face alegerea intre cele doua moduri. Atunci când atributul este fixat la LOW, modul de frecventa joasa permite celor șapte ieșiri de ceas DLL sa opereze intr-un domeniu de frecventa joasa pana la moderat. Când atributul este fixat la HIGH, modul de frecventa înalta permite ieșirilor CLK0, CLK180 si CLKDV sa lucreze la cea mai mare frecventa posibila. Celelalte ieșiri DLL ramase nu sunt disponibile sa lucreze in modul de frecventa înalta.
Daca frecventa semnalului CLKIN este mare așa încât sa depaseasca maximul permis, atunci este divizata la o valoare acceptabila folosind atributul CLKIN_DIVIDE_BY_2. Când acest atribut este selectat TRUE, frecventa CLKIN este divizata cu doi așa cum intra in DCM.
Suplimentar fata de CLK0, pentru alinierea de faza in raport cu semnalul CLKIN, DLL de asemenea furnizează pe ieșirile CLK90, CLK180 si CLK270 semnale cu faza marita de 90, 180 si 270 de grade. Aceste semnale sunt descrise in tabelul 12.
Timpul relativ in Modul de frecventa joasa este prezentat in figura 16. Ieșirile CLK90, CLK180, si CLK270 nu sunt disponibile când se operează in Modul de frecventa înalta. Acest lucru se poate observa din descrierea atributului DLL_FREQUENCY_MODE in tabelul 5. Pentru control in creșterii mai fine de 90 grade se poate studia Modificarea de faza cu Phase Shifter (PS).
Ieșirile de baza pentru sinteza de frecventa a componentei DLL
Componenta DLL furnizează opțiuni de baza pentru multiplicarea si divizarea in frecventa, suplimentar la cea mai flexibila capacitate de sinteza a componentei DFS descrisa intr-unul din paragrafele următoare. Rezultatul acestor operații este un semnal ceas cu frecvente care reprezintă ori o fracțiune din (pentru impartire) sau un multiplu (pentru inmultire) al frecventei ceas de intrare. Ieșirea CLK2X produce un semnal in faza care este dublul frecventei CLKIN. Ieșirea CLK2X180 de asemenea dublează frecventa, insa este cu 180 de grade defazata fata de CLKIN. Ieșirea CLKDIV generează o frecventa de ceas care este o fracțiune predeterminata a frecventei CLKIN. Atributul CLKDV_DIVIDE determina factorul folosit pentru a diviza frecventa CLKIN. Atributul acesta poate avea diferite valori ce sunt arătate in tabelul 6. Ieșirile de baza ale sintezei de frecventa sunt descrise in tabelul 5. Durata lor relativa in modul de frecventa joasa este arătata in figura 2.17.
Ieșirile CLK2X si CLK2X180 nu sunt disponibile când se operează in Modul de Frecventa Înalta. (Se poate observa descrierea atributului DLL_FREQUENCY_MODE din tabelul 6.)
Regimul ciclului de corectare a ieșirilor ceas DLL
Semnalele de ieșire CLK2X(1), CLK2X180 si CLKDV(2) depasesc de obicei 50% din regimul unui ciclu chiar daca semnalul de intrare CLKIN are un regim de ciclu diferit. 50% regim de ciclu înseamnă ca timpii High si Low ai fiecărui ciclu de ceas sunt egali. Atributul DUTY_CYCLE_CORRECTION determina daca regimul de corecție al ciclului este aplicat pentru ieșirile CLK0, CKL90, CLK180, si CLK270. Daca DUTY_CYCLE_CORRECTION este fixat TRUE, atunci regimul de ciclu al acestor patru ieșiri este corectat la 50%. Daca DUTY_CYCLE_CORRECTION este fixat FALSE, atunci aceste ieșiri vor avea același regim de ciclu ca si semnalul CLKIN. Figura 2.17 face o comparație intre caracteristicile semnalelor de ieșire DLL si cele ale semnalul CLKIN.
Figura 2.17 Caracteristicile ieșirilor de ceas
Nota:
Atributul DLL CLKDV_DIVIDE este fixat la 2.
Ieșirea CLK2X generează un regim de ciclu ceas de 25% la aceeași frecventa cu a semnalului CLKIN pana când DLL intra in blocare.
Regimul de ciclu al ieșirilor CLKDV poate diferi cam de la 50% (atunci semnalul va fi High pentru mai puțin de 50% din perioada) când atributul CLK_DIVIDE este fixat la o valoare neîntreaga iar DLL operează in modul de frecventa înalta.
2.8. Sintetizorul digital de frecventa (DFS)
Componenta DFS generează semnale de ceas a căror frecventa este un rezultat al frecventei ceas de la intrarea CLKIN si o fracție a doua numere întregi definite de utilizator. Din cauza domeniului mare al posibilelor frecvente de ieșire permis de fracție, caracteristicile DFS oferă totuși flexibilitate mai mult decât opțiunile de baza ale sintezei DLL care au fost descrise anterior.
Semnalul la ieșirea CLKFX180 este in mod esențial o inversare a semnalului CLKFX. Aceste doua ieșiri întotdeauna au un regim de ciclu de 50%. Lucru care e valabil chiar si atunci când semnalul CLKIN nu exista. Ieșirile de ceas DFS sunt conduse in același timp ca si cele șapte ieșiri de ceas ale DLL.
Numărătorul fracției este valoarea intreaga conferita atributului CLKFX_MULTIPLY iar numitorul este valoarea întreaga conferita atributului CLKFX_DIVIDE.
Frecventa de ieșire (fCLKFX) poate fi exprimata ca o funcția a frecventei ceas de intrare (fCLKIN) astfel:
fCLKFX = fCLKIN*(CLKFX_MULTIPLY/CLKFX_DIVIDE) (3)
Privind la cele doua atribute este posibil sa folosim orice combinație de valori întregi asigurându-ne ca aceste doua condiții sunt îndeplinite:
Cele doua valori se potrivesc domeniului lor de corespondenta.
Frecventa fCLKFX calculata din expresia de mai sus se face in raport cu specificațiile frecventei de operare DCM
De exemplu, daca CLKFX_MULTIPLY = 5 si CLKFX_DIVIDE = 3, atunci frecventa de ieșire a semnalului de ceas va fi 5/3 din semnalul de ceas de intrare.
DFS-ul poate lucra in doua moduri, de Frecventa înalta si de Frecventa joasa, fiecare fiind specific pentru un domeniu diferit al frecventei de ceas. Atributul DFS_FREQUENCY_MODE face alegerea intre cele doua moduri. Când atributul este fixat LOW, modul de frecventa joasa permite celor doua ieșiri DFS sa opereze pe un domeniu de frecventa jos pana la moderat. Când atributul este fixat la HIGH, modul de frecventa înalta permite la ambele ieșiri sa opereze la frecventa cea mai mare posibila.
Componenta DFS poate fi folosita cu sau fara componenta DLL.
Fara DLL, componenta DFS multiplica sau divide frecventa semnalului CLKIN in funcție de valorile CLKFX_MULTIPLY si CLKFX_DIVIDE, generând o frecventa de ceas cu o valoare noua pe ieșirile CLKFX si CLKFX180. Deși clasificata ca apartinand componentei DLL, intrarea CLKIN este impartita cu componenta DFS. Acest caz nu folosește bucla de întoarcere, de aceea nu poate corecta întârzierea de distribuție.
Cu DLL, DFS-ul operează așa cum a fost descris in cazul precedent, iar in plus are numai beneficiul eliminării întârzierii de distribuție a ceasului, In acest caz trebuie sa avem o bucla de întoarcere de la ieșirea CLK0 la intrarea CLKFB.
Componentele DLL si DFS lucrează împreuna pentru a obține aceasta corecție de faza după cum urmează: Dând valori atributelor CLKFX_MULTIPLY si CLKFX_DIVIDE DLL -ul selectează elementul de întârziere pentru care marginea semnalului ceas de ieșire coincide cu marginea semnalului ceas de intrare ori de cate ori este posibil matematic. De exemplu când CLKFX_DIVIDE = 3, marginea semnalului de intrare si ieșire va coincide la fiecare 3 perioade de intrare, ceea ce este echivalent in timp cu 5 perioade de ieșire.
Valori mai mici ale CLKFX_MULTIPLY si CLKFX_DIVIDE obțin timpi de blocare mai rapizi. Atunci când cele doua atribute nu au nici un factor comun, alinierea apare odata la fiecare ciclu egal cu valoarea CLKFX_DIVIDE. De aceea este recomandat ca utilizatorul sa reducă aceste valori prin divizare oriunde este posibil. De exemplu, dând următoarele valori CLKFX_MULTIPLY = 9 si CLKFX_DIVIDE = 6 si făcând o divizare cu trei obținem CLKFX_MULTIPLY = 3 si CLKFX_DIVIDE = 2. In timp ce ambele perechi de valori vor rezulta in multiplicarea frecventei de ceas cu 3/2, valorile următoare vor face ca DLL-ul sa se blocheze mult mai repede.
Exista doua cazuri de baza care determina cum sa conectam ieșirile de ceas DFS: on-chip si off-chip si sunt ilustrate in figura 2.16a si figura 2.16c. Acestea sunt similare cu ceea ce deja a fost prezentat pentru componenta DLL care se pot vedea in paragraful Conectarea ieșirii de ceas DLL si a buclei de întoarcere.
In cazul on-chip este posibila conectarea oricăruia din cele doua semnale ceas de ieșire DFS la registrii interni ai FPGA prin resurse generale de rutare. Un Global Clock Buffer – Buffer global de ceas (BUFG) sau un BUFGMUX permit accesul la ceasul global al rețelei. Bucla opționala de întoarcere se formează in felul acesta, rutand CLKD la un ceas global de rețea, care in schimb comanda intrarea CLKFB.
In cazul off-chip, cele doua semnale ceas de ieșire ale DFS împreuna cu CLK0, pentru o bucla opționala de întoarcere, pot ieși din FPGA folosind bufferi de ieșire (OBUF) pentru a conduce un ceas de rețea si registrii de pe placa. Bucla de întoarcere este formata prin aducerea semnalului CLK0 înapoi in FPGA prin intermediul unui IBUF care accesează in mod direct ceasul global al rețelei sau un IBUF. Apoi, ceasul global al rețelei este conectat direct la intrarea CLKFB.
2.9. Modificarea de faza prin intermediul Phase Shifter (PS)
DCM furnizează doua cai pentru a controla faza unui semnal ceas de ieșire DCM in raport cu semnalul CLKIN: In primul rând exista noua ieșiri de ceas care fac ca DLL sa obtina o relație de faza dorita: CLK0, CLK90, CLK180, CLK270, CLK2X, CLK2X180, CLKDV, CLKFX si CLKFX180. Aceste ieșiri permit controlul „brut” de faza.
A doua cale folosește componenta PS descrisa in acest capitol pentru a realiza un grad stabil, mai fin de control. Componenta PS realizează acest lucru prin introducerea unui „modificări fine de faza” (TPS) intre semnalele CLKFB si CLKIN din interiorul componentei DLL. Utilizatorul poate controla aceasta modificare fina de faza pana la o rezoluție de 1/256 dintr-un ciclu CLKIN sau printr-o întârziere de legătura (DCM_TAP), care este mai mare. Când este folosita, componenta PS modifica faza celor noua semnale de ieșire. Daca componenta PS este folosita împreuna cu o ieșire de ceas DCM, cum ar fi CLK90, CLK280, CLK270, CLK2X180, si CLKFX180, atunci modificarea fina de faza a primului se aduna la modificarea bruta de faza a ultimului.
Atributul CLKOUT_PHASE_SHIFT activează componenta PS pentru a fi folosita in si pentru a face selecția intre doua moduri de operare. Acest atribut are trei valori posibile: NONE, FIXED si VARIABLE. Atunci când CLKOUT_PHASE_SHIFT este fixata la NONE, componenta PS este dezactivata împreuna cu intrările sale, PSEN, PSCLK si PSINCDEC trebuiesc conectate la masa. Setul de forme de unda din figura 17a arata cazul dezactivat, când DLL menține o aliniere de faza a semnalelor CLKFB si CLKIN asupra cărora componenta PS nu are nici un efect. Componenta PS este activata prin setarea atributului la una din valorile FIXED sau VARIABLE, care selectează Modul de faza fix si Modul de faza variabil. Aceste doua moduri sunt descrise in paragrafele următoare.
Determinarea modificării fine de faza
Utilizatorul controlează modificarea de faza a CLKFB si a CLKIN prin selectarea si/sau ajustarea valori atributului PHASE_SHIFT. Aceasta valoare trebuie sa fie un număr întreg intre -255 si +255. Componenta PS folosește aceasta valoare pentru a calcula modificarea de faza dorita (TPS) ca fracțiune din perioada CLKIN (TCLKIN). Dând valori lui PHASE-SHIFT si TCLKIN se poate calcula TPS in felul următor:
TPS = (PHASE_SHIFT/256)*TCLKIN (4)
Atât modul de operare cu faza fixa cat si cel cu faza variabila presupun acest calcul. Daca valoarea PHASE_SHIFT este zero, atunci CLKFB si CLKIN vor fi in faza, la fel ca in cazul când componenta PS ar fi dezactivata. Atunci când valoarea PHASE_SHIFT este pozitiva, semnalul CLKFB va fi modificat mult mai târziu considerabil fata de CLKIN.
Modul de faza fixa
Acest mod stabilește modificarea fina de faza dorita la o fracțiune din TCLKIN, așa cum este determinata de ecuația 4 si valoarea sa selectata de utilizator P. Setul de forme de unda din figura 2.18b ilustrează relația dintre CLKFB si CLKIN in modul de faza fixa. In modul de faza fixa, intrările PSEN, PSCLK si PSINCDEC nu sunt folosite si trebuiesc conectate la masa (GND).
Tabel 7 Atributele PS
Nota: Domeniul practic de valori va fi mai mic când TClkin este mai mare decât
domeniul de amplificare fina in Modul de faza fixa, de asemenea atunci când
TClkin =(domeniul de amplificare fina)/2 in modul de faza variabila.
Modificarea fina de faza reprezintă suma tuturor întârzierilor de derivație.
CLKOUT_ PHASE_SHIFT =NICI UNUL
CLKOUT_ PHASE_SHIFT=FIXAT
Nota: P reprezintă valoare întreaga intre -255 si +255 care este data atributului PHASE_SHIFT
CLKOUT_ PHASE_SHIFT=VARIABIL
Figura 2.18 Formele de unda ale modificării de faza
Nota:
P reprezintă valoare întreaga intre -255 si +255 care este data atributului PHASE_SHIFT
N este o valoare întreaga intre -255 si +255 care reprezintă efectul net de amplificare a fazei dintr-o serie de operații de incrementare si/sau decrementare.
N={Numărul total de incrementări}-{Numărul total de decrementări}
O valoare pozitiva pentru N arata o incrementare neta, o valoare negativa indica o decrementare neta.
Tabel 8 Semnale pentru Modul de faza variabila
Nota: Este posibil sa programam aceasta intrare pentru o polaritate adevărata sau inversata.
Modul de „Faza Variabila” ajustează in mod dinamic modificarea fina de faza de-a lungul timpului folosind trei intrări către componenta PS care sunt numite PSEN, PSCLK si PSINCDEC așa cum sunt definite in tabelul 8.
Pentru a realiza configurarea dispozitivului, componenta PS determina inițial valoarea TPS evaluând ecuația (4) pentru valoarea data atributului PHASE_SHIFT. Apoi pentru a ajusta dinamic acea amplificare de faza, folosește trei intrări PS cu scopul de a creste sau descrește modificarea fina de faza.
PSINCDEC este sincronizat la semnalul de ceas PSCLK, care este activat prin impunerea lui PSEN. In acest caz este posibila dirijarea intrării PSCLK cu semnalul CLKIN sau cu oricare alt semnal de ceas. O cerința pentru ajustarea de faza este prelucrata astfel: Pentru fiecare ciclu in care PSINCDEC este HIGH, componenta PS adaugă lui TPS 1/256 dintr-un ciclu CLKIN. In mod similar pentru fiecare ciclu activat PSCLK in care PSINCDEC este LOW, componenta PS scade 1/256 dintr-un ciclu CLKIN din TPS . Ajustarea de faza poate cere 100 cicli CLKIN plus trei cicli PSCLK pentru a avea efect, moment in care ieșirea PSDONE trece in High pentru un ciclu PSCLK. Acest impuls indica terminarea ajustării actuale de către componenta PS care este acum gata pentru următoarea cerere. Activarea intrării reset (RST) întoarce pe TPS la timpul inițial de amplificare așa cum este determinat de valoarea atributului PHASE_SHIFT. Setul de forme de unda din figura 2.18c arata relația dintre CLKFB si CLKIN in modul de faza variabila.
2.10. Componenta logica de stare
Componenta logica de stare nu se raportează numai la starea DCM ci si oferă un mijloc de resetare a DCM la o stare cunoscuta inițial. Semnalele asociate cu componentele stării logice sunt descrise in tabelul 9.
Ca regula, intrarea reset (RST) este activata numai după configurarea circuitului sau schimbarea frecventei CLKIN. Un reset DCM nu afectează valorile atribut (de exemplu: CLKFX_MULTIPLY si CLKFX_DIVIDE). Daca nu este folosit, RST trebuie conectat la masa.
Cei opt biți de stare sunt definiți in tabelul 10.
Tabelul 9 Semnalele logice de stare
Tabelul 10 Transportorul DCM STATUS
Nota:
Modificarea de faza DLL cu toate circuitele de întârziere active este specificata ca parametru FINE_SHIFT_RANGE
Daca sunt folosite doar ieșirile de ceas DFS fara nici una din ieșirile de ceas DLL, atunci acest bit nu va trece in starea High când semnalul CLKIN dispare.
Tabelul 11 Atribute de stare
2.11. Managementul semnalelor de ceas
Este posibil sa se întârzie completarea configurării circuitului pana când DLL primește o condiție de blocare cu ajutorul atributului STARTUP_WAIT descris in tabelul 11. Aceasta opțiune ne asigura ca FPGA-ul nu intra in modul utilizatorului – care începe operațiuni de funcționare – pana când toate ceasurile sistemului generate de DCM sunt stabile. Pentru a prelua întârzierea este necesar sa se stabilească atributul ca TRUE precum si opțiunea BitGen CLK_cycle la unul din cei sase ciclii care compun faza de pornire la configurare. Ciclul selectat definește punctul la care configurarea se va opri pana când ieșirea blocata va trece in High.
Ceasul global al rețelei
Circuitul Spartan 3 are opt intrări de ceas global al rețelei numite GCLK0 – GCLK7. Aceste intrări dau acces la o rețea de capacitate mica si puțin înclinata care este cea mai potrivita pentru a transporta semnale de frecventa înalta. Intrările GCLK0 pana la GCLK3 sunt plasate in centrul partii inferioare a montajului. Intrările GCLK4 pana la GCLK7 sunt plasate in centrul partii superioare a montajului. Este posibil sa rutam oricare din cele opt intrări globale de ceas la oricare CLB din montaj.
Opt multiplexoare de ceas global (numite si elemente BUFGMUX) sunt facute sa accepte semnale de la intrările globale de ceas si sa le transporte către rețeaua ceas interna la fel ca DCM-urile. Patru elemente BUFGMUX sunt plasate in centrul partii inferioare a montajului, chiar deasupra intrărilor GCLK0 – GCLK4. Cele patru elemente rămasa BUFGMUX sunt plasate in centrul partii superioare a montajului, chiar sub intrările GCLK4 – GCLK7.
Fiecare element BUFGMUX este un multiplexor care poate primi semnale de la oricare din următoarele patru surse:
Una din cele patru intrări de pe aceeași parte a montajului – de la vârf sau de la baza – ca element BUFGMUX folosit.
Oricare din cele patru linii duble orizontale apropiate.
Oricare din cele patru ieșiri din DCM din cadranul din partea dreapta care este pe aceeași parte a plăcii cu elementul BUFGMUX folosit.
Oricare din cele patru ieșirii ale DCM din cadranul din partea stânga care este pe aceeași parte a montajului cu elementul BUFGMUX folosit.
Fiecare BUFGMUX poate trimite semnalul ceas de intrare către doua destinații posibile:
Coloana verticala ce aparține aceleiași parti a montajului – superioara sau inferioara – cu elementul BUFGMUX folosit. Cele doua coloane – superioara si inferioara – fiecare cuprinde cate patru linii de ceas verticale, fiecare plecând de la cate un element BUFGMUX de pe aceasi parte către centrul montajului. In centrul plăcii, semnalele de ceas ajung la coloana orizontala de opt linii, care deschide latura montajului. In schimb, ramurile coloanei orizontale merg la o conexiune ceas intermediara ce accesează CLB-ul.
Intrarea de ceas a oricărui DCM de pe aceeași parte a montajului – superioara sau inferioara – ca a elementului BUFGMUX folosit.
O intrare de ceas globala este plasata in proiect folosind ori un element BUFGMUX ori elementul BUFG (Global Clock Buffer). Pentru a minimiza puterea dinamica disipata a rețelei de ceas, programul Xilinx dezactivează in mod automat toate segmentele liniilor de ceas pe care un anumit proiect nu le folosește.
Figura 2.19 Rețeaua ceas Spartan-3 (vedere de sus)
2.12. Interconectare
Interconectarea (sau transportarea) trimite semnale la diverse elemente funcționale ale circuitului Spartan 3. Exista patru tipuri de linii de interconectare: Linii lungi, Linii hex, Linii duble si Linii directe.
Liniile lungi se conectează la un oarecare circuit CLB (figura 2.20a). Din cauza capacitatii mici, aceste linii sunt foarte bune pentru transportul semnalelor de înalta frecventa cu efect minim de încărcare. Daca toate cele opt intrări de ceas global sunt deja ocupate si mai raman semnale de ceas ce trebuiesc trimise, liniile lungi vor servi ca o alternativa potrivita.
Figura 2.20 a) Linii lungi
Liniile hex conectează unul din trei circuite CB (figura 2.20b). Aceste linii cad intre liniile lungi si liniile duble exprimat in posibilitate: Liniile hex au caracteristici de frecventa înalta apropiate de ale liniilor lungi si in același timp oferind o mai mare conectivitate.
Figura 2.20 b) Linii HEX
Liniile duble se conectează la oricare alt circuit CLB (figura 2.20c). In comparație cu liniile despre care am vorbit pana acum, liniile duble prezintă un grad mai mare de flexibilitate in momentul in care se fac conexiuni.
Figura 2.20 c) Linii duble
Liniile directe permit orice acces CLB direct spre CLB-ul vecin. (figura 2.20d). Aceste linii sunt cel mai des folosite sa transmite un semnal de la o „sursa” CLB la o linie dubla, hex sau lunga si apoi de la conexiunea mai lunga înapoi spre linia directa ce accesează un CLB „destinație”.
Figura 2.20 d) Linii directe
Spartan 3 suporta următoarele cinci moduri de configurare:
Modul serial Slave
Modul serial Master
Modul paralel Slave
Modul paralel Master
Modul Boundary-Scan (JTAG) IEEE 1532/IEEE 1149.1
In modul serial Slave, FPGA primește datele de configurare sub forma seriala de la o memorie PROM sau o alta sursa seriala de date de configurare. FPGA-ul din dreapta din figura 2.21 este setat pentru modul de lucru serial slave. In acest mod pinul CCLK al FPGA reprezintă o intrare. Șirul de biți seriali trebuie fixat la pinul de intrare DIN un timp scurt înainte de fiecare margine a semnalului CCLK extern generat.
Multiple circuite FPGA pot fi blocate pentru configurare de către o singura sursa. După ce un FPGA particular a fost configurat, datele pentru următorul circuit sunt transmise intern prin pinul DOUT. Datele de pe pinul DOUT se schimba la schimbarea semnalului CCLK.
Modul serial slave este selectat prin aplicarea <111> la pinii de mod (M0, M1 si M2). O creștere pe pinii de mod face ca modul de baza sa fie serial slave daca sunt ramași neconectati.
Figura 2.21 Schema de conectare pentru configurarea seriala Master si Slave
Nota:
Exista doua moduri pentru a utiliza liniile DONE. Unul din ele poate selecta opțiune BitGen DriveDone la „Yes” numai pentru ca ultimul FPGA sa fie configurat in lanțul arătat mai sus. Acest lucru face ca pinul DONE sa treacă in High. Astfel nu mai este necesar nici un rezistor extern. DriveDone este ales „No” pentru circuitele FPGA ramase in lanț. In al doilea rând DriveDone poate fi ales „No” pentru toate circuitele FPGA. Atunci toate liniile DONE vor fi deschise si cer sa se monteze rezistori marcați in gri. In cele mai multe cazuri este suficienta o valoare intre 3.3K si 4.7K Oricum atunci când este utilizat DONE sincronizat cu un lanț lung de circuite FPGA, capacitatea cumulativa poate necesita valori mici ale rezistorilor (adică mai mici de 330 ohmi) pentru a asigura un timp de creștere de-a lungul unui ciclu de ceas.
Mai multe informații despre cum se poate programa circuitul FPGA folosind semnale si tensiune de 3.3V au fost prezentate in paragraful Interfața de configurare pentru tolerare la 3.3V
In modul serial Master, pinul CCLK este un pin de iesire. Circuitul FPGA care este imediat in dreapta memoriei PROM in figura 2.21 este setat in modul serial master. Acesta este circuitul FPGA care comanda ceasul de configurare pe pinul CCLK către o memorie Xilinx Seriala PROM, care in schimb, transmite date bit seriale la intrarea DIN. Circuitul FPGA accepta aceste date la fiecare panta CCLK. După ce FPGA-ul a fost încărcat, datele pentru următorul circuit, transmise in lanț, sunt prezente pe pinul DOUT după căderea pantei CCLK.
Interfața este identica cu cea seriala slave cu diferența ca un oscilator intern este folosit sa genereze ceasul de configurare (CCLK). Un domeniu mare de frecvente poate fi selectat pentru semnalul CCLK care întotdeauna începe cu o frecventa de pornire de 6 MHz. Biții de configurare comuta CCLK la o frecventa mai mare pentru a reaminti configurația.
Modul paralel suporta cea mai rapida configurare. Date cu latime mare de biți sunt scrise in FPGA cu un indicator ocupat ce controlează transferul de date. O sursa externa furnizează date de 8 biți latime, CCLK – un circuit selector activ de semnal mic (CS_B) si un semnal mic de scriere (RDWR_B). Daca BUSY este declarat de mare de către FPGA, datele trebuiesc păstrate pana când BUSY devine mic. Datele mai pot fi citite folosind modul paralel slave. Daca RDWR_B este declarat atunci datele de configurare sunt citite din FPGA ca parte din operațiunea readback.
După configurare este posibil sa folosim oricare din pinii cu scop multiplu (DIN/D0-D7, DOUT, BUSY, INITB, CS_B, si RDWR_B) ca si pini I/O ai utilizatorului. Pentru a face asta trebuie setata opțiunea BitGen Persist ca No si trebuie trimise semnalele dorite la pinii pentru configurații cu scop multiplu folosind programul Xilinx. Alternativ este posibil sa continuam folosirea portului de configurare (toți pinii de configurare împreuna) atunci când operam in modul de lucru al utilizatorului. Acest lucru se întâmpla când setam obtiunea Persist ca Yes.
Mai multe FPGA-uri pot fi configurate folosind modul paralel slave si pot fi facute sa pornească simultan. Figura 2.22 arata conectarea circuitului. Pentru a configura circuite multiple in felul acesta, se conectează individual pinii CCLK, iar pinii de date RDWR_B si BUSY ai tuturor circuitelor se vor conecta in paralel. Circuitele individuale sunt încărcate separat prin pinii CS_B ai fiecărui circuit si conectând cel mai apropiat data.
Figura 2.22 Diagrama de corecție pentru configurarea paralela Slave
Nota:
Exista doua moduri pentru a utiliza liniile DONE. Unul din ele poate selecta opțiune BitGen DriveDone la „Yes” numai pentru ca ultimul FPGA sa fie configurat in lanțul arătat mai sus. Acest lucru face ca pinul DONE sa treacă in High. Astfel nu mai este necesar nici un rezistor extern. DriveDone este ales „No” pentru circuitele FPGA ramase in lanț. In al doilea rând DriveDone poate fi ales „No” pentru toate circuitele FPGA. Atunci toate liniile DONE vor fi deschise si cer sa se monteze rezistori marcați in gri. In cele mai multe cazuri este suficienta o valoare intre 3.3K si 4.7K Oricum atunci când este utilizat DONE sincronizat cu un lanț lung de circuite FPGA, capacitatea cumulativa poate necesita valori mici ale rezistorilor (adică mai mici de 330 ohmi) pentru a asigura un timp de creștere de-a lungul unui ciclu de ceas.
Daca circuitele FPGA folosesc fișiere de configurare diferite, atunci trebuiesc configurate in secvențe mai întâi prin impunerea CS B a unui FPGA, iar apoi impunerea CS B a celuilalt FPGA
Mai multe informații despre cum se poate programa circuitul FPGA folosind semnale si tensiune de 3.3V au fost prezentate in paragraful Interfața de configurare pentru tolerare la 3.3V
Figura 2.23 Diagrama de corecție pentru configurarea paralela Master
Nota:
Exista doua moduri pentru a utiliza liniile DONE. Unul din ele poate selecta opțiune BitGen DriveDone la „Yes” numai pentru ca ultimul FPGA sa fie configurat in lanțul arătat mai sus. Acest lucru face ca pinul DONE sa treacă in High. Astfel nu mai este necesar nici un rezistor extern. DriveDone este ales „No” pentru circuitele FPGA ramase in lanț. In al doilea rând DriveDone poate fi ales „No” pentru toate circuitele FPGA. Atunci toate liniile DONE vor fi deschise si cer sa se monteze rezistori marcați in gri. In cele mai multe cazuri este suficienta o valoare intre 3.3K si 4.7K Oricum atunci când este utilizat DONE sincronizat cu un lanț lung de circuite FPGA, capacitatea cumulativa poate necesita valori mici ale rezistorilor (adică mai mici de 330 ohmi) pentru a asigura un timp de creștere de-a lungul unui ciclu de ceas.
Modul paralel master
In acest mod, circuitul este configurat pe latimea bitului cu un semnal CCLK furnizat de FPGA. Timpii sunt similari cu cei ai modului paralel slave cu excepția ca semnalul CCLK este furnizat de FPGA. Conectarea circuitului este arătata in figura 2.23.
In modul de scanare a limitelor (JTAG), pinii dedicați sunt folosiți pentru a configura circuitul FPGA. Configurarea este făcuta total prin portul test de acces IEEE 1149.1 (TAP). Configurarea circuitului FPGA folosind Modul de scanare a limitelor este compatibila cu standardul IEEE 1149.1-1993 iar noul standard IEEE 1532 este pentru circuite configurabile in sistem (ISC).
Configurarea prin portul de scanare a limitelor este întotdeauna disponibila, independent de selecția modului. Alegând modul de scanare a limitelor pur si simplu va opri celelalte moduri.
Configurarea circuitului Spartan-3 este un proces in 3 nivele care apare după resetul de pornire sau după ce intervine PROG_B POR după VCCINT, VCCAUX, si VCCO când cele 4 alimentari au ajuns la nivelul lor maxim de intrare (tabelul 6 in modulul 3: Caracteristici de cc si comutație). După POR începe procesul pe trei nivele.
Mai întâi este ștearsa memoria de configurare, apoi, datele de configurare sunt încărcate in memorie si la sfarsit, logica este activata printr-un proces de pornire.
Configurarea este inițiata in mod automat după alimentarea cu tensiune daca nu este întârziata de utilizator. INIT_B este o linie deschisa pe care FPGA-ul o păstrează LOW in timp ce se face ștergerea memoriei de configurare. Creșterea timpului de păstrare a pinului in LOW face ca secvența de configurare sa aștepte. Astfel configurarea este întârziata pentru a preveni intrarea in faza atunci când datele sunt încărcate.
Procesul de configurare poate fi inițiat prin activarea pinului PROG_B. Sfarsitul fazei de ștergere a memoriei este semnalata de pinul INIT_B care trece in HIGH. In acest moment datele de configurare sunt scrise in circuitul FPGA. FPGA-ul păstrează semnalele Global Set/Reset (GSR) active in timpul configurării, tinand toate variațiile intr-o stare de reset. Terminarea procesului este semnalata de pinul DONE care trece in High.
Secvența de baza de pornire este ca un ciclu CCLK; după ce DONE trece in High, semnalul GTS este trimis. Acest lucru permite ieșirilor circuitului a căror semnal a fost asignat sa devină activa. Un ciclu CCLK mai târziu, semnalul GWE este transmis. Acesta permite ca elementele interne de stocare sa treacă in starea de încărcare ca răspuns la logica proiectata si ceasul utilizatorului.
Timpul relativ de configurare a evenimentelor poate fi schimbat prin opțiunea BitGen din programul de dezvoltare Xilinx. In plus, evenimentele GTS si GWE pot fi facute dependente de pinii DONE a mai multor circuite care merg in High provocând circuitul sa pornească sincron. Secvența poate fi de asemenea oprita la orice nivel, pana când apare blocarea la orice DCM.
Folosind modul paralel Slave, datele de configurare din FPGA pot fi citite înapoi. Readback este posibila numai in modul Paralel Slave si Boundary Scann.
Împreuna cu datele de configurare, este posibil sa se citească înapoi conținutul tuturor registrilor, sa se distribuie memoria SelectRAM si sa blocheze resursele RAM. Aceasta posibilitate este folosita pentru depanarea in timp real.
Capitolul 3
Sistemul de dezvoltare Altium Live Design
3.1. Introducere
Acest capitol schiteaza caracteristicile cheie si capacitatile sistemului de dezvoltare Live Design.
Sistemul de dezvoltare Live Design împreuna cu o licența de evaluare a programului Altium DXP 2004 oferă posibilitatea evaluării si testării complete a avantajelor Live Design, permitand implementarea rapida si interactive precum si depanarea proiectelor FPGA.
Figura 3.1 Calculatorul conectat la Sistemul de dezvoltare Live Design
Sistemul de dezvoltare Live Design are următoarele caracteristici:
Dispozitiv FPGA incorporate
Memorie RAM 256Kx16 BIT FPGA dubla, statica, configurabila, de mare viteza
Sistem audio Delta Sigma stereo DAC cu frecventa de ceas ajustabila la utilizator
Sistem de difuzoare in miniatura, dublu (stereo), cu control al volumului
Ieșire audio Line Out si Headphone pe jack-uri de 2.5 mm cu control al volumului
Afișaj pe 6 digiți cu 7 segmente tip LED
Ceas cu frecventa fixa de 50 MHz
Port serial RS232
Port VGA
Port PS2 Mini DIN pentru mouse
Port PS2 Mini DIN pentru tastatura
8 switch-uri DIP
sistem de 8 leduri
doi conectori cu 20 pini I/O si alimentare pentru extensie
Buton TEST/RESET definit de utilizator
Figura 3.2 Schema bloc a sistemului de dezvoltare Live Design
Figura 3.3 de mai jos reprezintă schema sistemului de dezvoltare Live Design, caracteristicile sale variate si perifericele.
3.2. Sistemul de dezvoltare Live Design. Prezentare
Sursa de alimentare
Sistemul de dezvoltare Live Design este alimentat de un alimentator de 5 volți stabilizat (inclus). Curentul tipic cerut de Sistemul de dezvoltare Live Design, fara curent furnizat către alte dispozitive de extensie este intre 100 si 500 mA. Daca puterea totala absorbita de un Sistem de dezvoltare Live Design cu extensii conectate este mai mare decât cea a sursei standard de 5 volți, atunci se cere o sursa de alimentare de capacitate mai mare. O astfel de sursa de alimentare trebuie sa furnizeze o tensiune de 5 volți cc stabilizata.
Sistemul de dezvoltare Live Design are incorporat stabilizatoare care furnizează diferite tensiuni de alimentare in funcție de ținta FPGA. De exemplu: +3.3 volți, 1.2 volți si 2.5 volți pentru Spartan-3, iar 3.3 volți si 1.5 volți pentru Cyclone. Cele doua surse de 3.3 si 5 volți pot fi selectate sa alimenteze diverse circuite de extensie care pot fi conectate la Sistemul de dezvoltare Live Design.
Figura 3.4 a)
Figura 3.4 b)
Figura 3.4 c)
Perifericele
Sistemul de dezvoltare Live Design are o mulțime de resurse conectate individual la pini IO ai FPGA. Aceasta permite executarea unei varietati mari de exemple pe Sistemul de dezvoltare Live Design, in plus permite o baza pentru dezvoltarea de noi aplicații. Schema librăriei componentelor este furnizata pentru a permite resurselor sa fie ușor incorporate in proiecte. Acestea sunt disponibile in librăria port-integrata in Sistemul de dezvoltare Live Design FPGA.
Componentele librăriei stabilesc in mod automat conexiunea intre resurse si pini IO ai FPGA, permitand aceluiași proiect sa fie realizat pentru diferite circuite FPGA facute de diferiți fabricanți. Managerul de configurare face posibil ca un singur proiect sa fie ținta pentru diferite circuite FPGA.
Ceasul Sistemului
Sistemul de dezvoltare Live Design are un generator de impulsuri de ceas care furnizează impulsuri cu frecventa de 50 MHz. Semnalul de ceas este disponibil in circuitul FPGA care este conectat la un pin FPGA GCLK (ceas global).
Figura 3.5 Ceasul fix de 50 MHz
Figura 3.6
Memoria statica RAM
Sistemul de dezvoltare Live Design are doua memorii statice de 256k x 16 (SRAM0-U5 si SRAM1-U6), conectate direct la pinii I/O ai FPGA. Memoriile SRAM sunt conectate individual la pinii I/O ai FPGA, așa ca SRAM-ul poate fi configurat in multe feluri de către FPGA IP.
Memoria ca resursa poate fi configurata de aplicație ca un singur spațiu de 256 x 32, doua spatii de 256 x 16, sau un singur spațiu de 512k x 8. Memoria SRAM 256k x 16 are un timp de acces de 10 nS.
Figura 3.7 Memoriile SRAM U5 si U6
Figura 3.8
Conectorii intrare/ieșire I/O pentru utilizator
Un total de 36 de semnale I/O FPGA se termina pe 20 de pini Terminalul A (HDR1) si Terminalul B (HDR2), 18 semnale pe fiecare terminal. Aceste terminale au punct de masa si tensiuni de 3.3 volți sau 5 volți, care pot fi selectate prin cei 4 pini disponibili pentru acest lucru JP1 si JP2.
Terminalul A si Terminalul B sunt create pentru a permite conectarea la FPGA a altor interfete predefinite de utilizator. Pini I/O ai Terminalelor pot fi configurați ca intrare sau ieșire.
O varietate de circuite cu interfețe compatibile cu Terminalele de 20 pini IDC sunt disponibile la o mulțime de proiectanți si furnizori.
Figura 3.9 Conectorii intrare/ieșire I/O pentru utilizator
Portul VGA
J5 (DB15) este un port VGA compatibil monitoarelor video RGB. Portul este configurat cu 3 biți pe culoare cu un total de 9 biți pe pixel sau 512 culori. Portul este conectat direct la 9 pini I/O ai FPGA. Doi pini adiționali I/O asigura semnalele de sincronizare verticala si orizontala pentru conectorul VGA.
Figura 3.10 Portul VGA (J5)
Figura 3.11
Modulul LED cu 7 segmenti
Sistemul de dezvoltare Live Design vine cu un display format din 6 digiți a cate 7 segmente. Fiecare segment si punct decimal este comandat de un pin de ieșite individual al FPGA.
Figura 3.12 Afișajul cu 6 digiți 7 segmente
Figura 3.13
Matricea de taste
Folosind matricea de taste se poate introduce informație de la utilizator. Aceasta este formata din 6 taste miniatura (SW 2 la SW6) aranjate in matrice de 1 x 6. Fiecare buton este conectat la o intrare FPGA. Matricea de butoane are o regiune alba deasupra, in dreptul fiecărui buton, care ne permite sa scriem funcția fiecărui buton intr-o anumita aplicație.
Figura 3.14 Cele 6 butoane de intrare ale utilizatorului
Figura 3.15
Switch-ul DIP al utilizatorului
Sistemul de dezvoltare Live Design are un set de 8 switch-uri conectate fiecare la cate un semnal I/O FPGA. Aceste butoane sunt legate ca un circuit parțial activ care atunci când fiecare buton este ON, semnalul produs este mic.
Figura 3.16 Switch-urile DIP
Figura 3.17
Ieșirile de semnal pentru LED-uri
Sistemul de dezvoltare Live Design are 8 LED-uri roșii (LD0… LD7), fiecare din ele fiind comandate de un semnal FPGA separat. Semnalele LED-urilor sunt active la semnal mare deoarece LED-ul se va aprinde la un semnal mare.
Figura 3.18 Șirul de LED-uri
Figura 3.19
Sistemul de dezvoltare Live Design mai are si un LED notat cu LOADED deasupra butonului de TEST/RESET care se aprinde ori de cate ori ținta FPGA a fost configurata cu succes. (LED2).
Figura 3.20
Butonul definit de utilizator TEST/RESET
Sistemul de dezvoltare Live Design are un buton (SW7) etichetat TEST/RESET si care este conectat la un semnal I/O FPGA. Funcția butonului este determinata in întregime de aplicați utilizatorului, asta înseamnă ca nu are nici o funcție intrinseca pana in momentul in care este definita de aplicația utilizatorului.
Figura 3.21 Buton TEST/RESET
Figura 3.22
Capitolul 4. Prezentarea aplicației
Aplicația urmărește realizarea unui circuit de generare a unei mire color pe portul VGA cu specificarea că se pot genera și alte tipuri de semnale video.
4.1. Descrierea circuitului de generare a unei mire color pe portul VGA
În figura 4.1 este prezentată schema bloc a circuitului de generare a mirei color. Practic circuitul se compune din două părți distincte: modulul pentru generarea semnalelor de sincronizare pe verticală și pe orizontală și modulul pentru generarea semnalelor de culoare incluzând partea de stingere.
în figura 4.2 sunt prezentate formele de undă ale semnalelor pentru sincronizarea corectă.
schema trebuie să asigure: o frecvență de baleiere pe orizontală de 31kHz și un de baleiere pe verticală de 59Hz astfel încât să fie eliminat efectul de pâlpâire la afișarea imaginii. pentru aceasta este necesară realizarea unor module care divizează frecvența oscilatorului de 50MHz provenită de la cuarțul sistemului de dezvoltare. implementarea divizoarelor de frecvență este făcută integral în FPGA.
de asemenea circuitul trebuie să furnizeze pe pinii de ieșire de la portul VGA semnalele de sincronizare pe orizontală și pe verticală (hsinc și vsinc). pentru aceasta s-au utilizat circuite care primesc drept intrări semnalele de la divizoarele de frecvență.
pentru partea de generare a semnalului de culoare s-a folosit circuitul de memorie SRAM de pe sistemul de dezvoltare și s-a implementat întreg sistemul pentru comanda acestuia și pentru selecția semnalului de stingere. circuitele selectoare SR, SV și SA primesc ca intrări semnale de la ieșirea din memorie și semnale de stingere. selecția între acestea este decisă de blocul de stingere. informația de culoare este stocată și apoi transmisă pe trei
biți.
4.2. Proiectarea circuitului de generare a unei mire color pe portul VGA
4.2.1. Mediul ISE 7.1.
Pentru dezvoltarea aplicației s-a folosit mediul ISE.7.1. Acesta are integrat un editor VHDL, editor scheme și diagrame de tranziții, modul de sinteză circuite, editor de constrângeri pentru cip și programul pentru descărcare sinteză în integrat (programul pentru reconfigurare).
În figura de mai jos este prezentată interfața programului în timpul editării proiectului. în fereastra principală din centru se află editorul de cod VHDL iar în fereastra din stânga este permisă navigarea prin elementele proiectului. Practic un proiect conține următoarele elemente:
cod sursă vhdl;
scheme editate;
fișiere pentru implementarea constrângerilor legate de circuit, de exemplu atribuirea fizică a pinilor;
fișiere pentru prezentarea rezultatelor în urma sintezei: capacitatea consumată, numărul de tabele alocate, numărul de blocuri de intrare ieșire consumate, timpul procesării;
fișier de implementare care va fi descărcat în integrat (acesta reprezintă produsul final sau fișierul de „ieșire” al proiectului.
In continuare se vor prezenta etapele parcurse la construirea proiectului.
În primul rând, la crearea proiectului se alege dintr-o fereastră tipul circuitului și al limbajului de descriere folosit.
fig 1
Circuitul va fi din familia Spartan 3 cu seria xc3s400. Limbajul de descriere ales este VHDL. se vor parcurge pașii până la sfârșitul Wizard-ului de creare a proiectului.
în interiorul proiectului se va crea un fișier sursă vhd.
fig 2
in interiorul următoarei ferestre se vor specifica pinii de intrare ieșire pentru circuit, astfel încât ei vor fi generați automat în sursă.
fig 3
după terminarea pașilor parcurși de instrumentul de creare fișiere sursă automat a fost creat un fișier pe care se află un „schelet” de sursă VHDL, mai precis partea de declarare a librăriilor și partea de declarare a pinilor de intrare ieșire în entitate. în arhitectură vor urma să fie adăugate procesele pentru fiecare modul în parte.
4.2.2. editarea circuitului folosind modelul comportamental în VHDL
Pentru fiecare modul prezentat în schema bloc s-a construit câte un proces. În continuare vor fi prezentate numai procesele principale urmând ca întreaga descriere să fie atașată la proiect ca anexă.
Declararea semnalelor de intrare ieșire în entitate
A fost generată în mod automat de către instrumentul de creare proiect. ea conține descrierea fiecărui pin de intrare – ieșire din circuit.
entity video1 is
Port ( clk : in std_logic;
vsinc : out std_logic;
hsinc : buffer std_logic;
reset : in std_logic;
– vdebug : out std_logic;
– hdebug : out std_logic;
red : out std_logic_vector(2 downto 0);
green : out std_logic_vector(2 downto 0);
blue : out std_logic_vector(2 downto 0));
end video1;
declarația pinilor conține numele fiecărui pin, direcția acestuia (intrare sau ieșire) și tipul acestuia în conformitate cu standardele VHDL. Practic aici sunt prezenți toți pinii de comandă pentru interfața VGA care există și pe conector (red, green, blue, vsinc și hsinc) pinul de reset (asociat ulterior cu un buton pe sistemul de dezvoltare) și cel de ceas (clk) ce provine de la oscilatorul cu cuarț.
Procesul de generare a frecvenței pe orizontală
hc:process (clk,reset)
begin
if reset ='0' then
hcnt <= "00000000000";
elsif clk'event and clk = '1' then
if hcnt < 1589 then
hcnt <= hcnt + 1;
else
hcnt <= "00000000000";
end if;
end if;
end process;
acesta constă de fapt într-un numărător sincron pe 11 biți cu resetare la atingerea valorii de 1589. practic, descris comportamental, numărătorul incrementează un contor (hcnt) declarat ca semnal intern la începutul arhitecturii. evenimentele care declanșează acest proces provin de la ceasul sistemului și de la reset. dacă reset-ul este în 0 atunci numărătorul este resetat. dacă a survenit un eveniment pe intrarea de ceas și acesta este de tipul tranziție din 0 în 1 are loc incrementarea contorului hcnt sau resetarea acestuia în cazul în care a atins valoarea maximă.
procesul de generare a frecvenței pe verticală
vc:process (hsinc,reset)
begin
if reset ='0' then
vcnt <= "0000000000";
elsif hsinc'event and hsinc = '1' then
if vcnt < 527 then
vcnt <= vcnt + 1;
else
vcnt <= "0000000000";
end if;
end if;
end process;
este oarecum similar cu cel al generării pe orizontală cu diferența că semnalele care declanșează acest proces sunt hsinc și reset-ul. funcția este asemănătoare cu cea a circuitului de generare pe orizontală.
procesul care asigură generarea semnalului de sincronizare pe orizontală
syh: process (clk,reset)
begin
if reset = '0' then
hsinc <= '1';
elsif clk'event and clk = '1' then
if hcnt>1305 and hcnt<1494 then
hsinc <= '0';
else
hsinc <= '1';
end if;
end if;
end process;
este declanșat de semnalele clk și reset. la recepționarea unui eveniment de tipul tranziție crescătoare pe pinul clk are loc testarea semnalului provenit de la ieșirea numărătorului de puncte pe orizontală. dacă acest ase încadrează în domeniul 1305 – 1494 atunci ieșirea hsinc devine 0 (conform figurii 4.2.)
procesul care asigură generarea semnalului de sincronizare pe verticală
syv: process (hsinc,reset)
begin
if reset = '0' then
vsinc <= '1';
elsif hsinc'event and hsinc = '1' then
if vcnt>494 and vcnt<496 then
vsinc <= '0';
else
vsinc <= '1';
end if;
end if;
end process;
este declanșat de semnalele clk și reset. la recepționarea unui eveniment de tipul tranziție crescătoare pe pinul clk are loc testarea semnalului provenit de la ieșirea numărătorului de puncte pe orizontală. dacă acest ase încadrează în domeniul 494 – 496 atunci ieșirea vsinc devine 0 (conform figurii 4.2.)
4.2.3. Generarea constrângerilor și sinteza circuitului
După ce a fost editat programul în întregime se va începe cu etapa de generare a constrângerilor.
pentru aceasta se va rula utilitarul Xilinx PACE. în figura de mai jos este prezentată o captură din fereastra principală a utilitarului.
fig. 4
acesta permite asocierea semnalelor logice de intrare ieșire specificate în entitate cu valori fizice de pini. asocierea s-a făcut urmărind schemele hardware ale sistemului de dezvoltare astfel:
În urma sintezei este generată o schemă logică așa cum se prezintă în figura de mai jos.
ANEXE
Figura 1 Diagrama de configurare Flow pentru Modul Serial si Paralel
Figura 2 Diagrama de configurare Flow Boundary-Scan
Figura 3 Secvența de pornire de baza
Nota:
Opțiunea BitGen StartupClk in programul Xilinx selectează intrările CCLK, TCK sau intrare de ceas globala proiectata de utilizator (pinii GCLK0 – GCLK7) pentru a primi semnalele de ceas ce sincronizează pornirea.
Figura 4 Sistem de dezvoltare Live Design, 1= conector pentru portul paralel 2 = conector pentru tensiunea de alimentare
–––––––––––––––––––––––––––
– Company: UPIT
– Engineer: Pop Gheorghe Daniel
–
– Create Date: 18:50:01 05/29/05
– Design Name:
– Module Name: video1 – Behavioral
– Project Name:
– Target Device:
– Tool versions:
– Description:
–
– Dependencies:
–
– Revision:
– Revision 0.01 – File Created
– Additional Comments:
–
–––––––––––––––––––––––––––
–lucreaza cu live design partea de semnal video . genereaza mira de culori
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
–- Uncomment the following library declaration if instantiating
–- any Xilinx primitives in this code.
–library UNISIM;
–use UNISIM.VComponents.all;
entity video1 is
Port ( clk : in std_logic;
vsinc : out std_logic;
hsinc : buffer std_logic;
reset : in std_logic;
– vdebug : out std_logic;
– hdebug : out std_logic;
red : out std_logic_vector(2 downto 0);
green : out std_logic_vector(2 downto 0);
blue : out std_logic_vector(2 downto 0));
end video1;
architecture Behavioral of video1 is
–signal comandamonov,comandamonoh : std_logic;
signal hcnt : std_logic_vector(10 downto 0);
signal vcnt : std_logic_vector(9 downto 0);
begin
– red <= "000";
– green <= "111";
– blue <= "000";
– vertical: process (clk)
– variable tempvsinc : integer;
– begin
– if clk'event and clk = '1' then
– tempvsinc := tempvsinc + 1;
– if tempvsinc >= 666667 then
– tempvsinc := 0;
– comandamonov <= '1';
– else
– comandamonov <= '0';
– end if;
– end if;
– end process;
–
– orizontal: process (clk)
– variable temphsinc : integer;
– begin
– if clk'event and clk = '1' then
– temphsinc := temphsinc + 1;
– if temphsinc >= 835 then
– temphsinc := 0;
– comandamonoh <= '1';
– else
– comandamonoh <= '0';
– end if;
– end if;
– end process;
– vsinc <= comandamonov;
– hsinc <= comandamonoh;
– tmp: process (clk,comandamonov)
– variable temp : integer;
– begin
– if clk'event and clk = '1' and comandamonov = '1' then
– temp := temp + 1;
– if temp >= 10 then
– temp := 0;
– comandamonov <= '0';
– end if;
– end if;
– end process;
– tmp2: process (clk,comandamonov)
– variable temp : integer;
– begin
– if clk'event and clk = '1' and comandamonoh = '1' then
– temp := temp + 1;
– if temp >= 10 then
– temp := 0;
– comandamonoh <= '0';
– end if;
– end if;
– end process;
–numara punctele pe orizontala pentru frecventa 31kHz a unei linii
–50MHz / 1589 = 31kHz
hc:process (clk,reset)
begin
if reset ='0' then
hcnt <= "00000000000";
elsif clk'event and clk = '1' then
if hcnt < 1589 then
hcnt <= hcnt + 1;
else
hcnt <= "00000000000";
end if;
end if;
end process;
–numara liniile pe verticala pentru frecventa de 59Hz
vc:process (hsinc,reset)
begin
if reset ='0' then
vcnt <= "0000000000";
elsif hsinc'event and hsinc = '1' then
if vcnt < 527 then
vcnt <= vcnt + 1;
else
vcnt <= "0000000000";
end if;
end if;
end process;
–asigura semnalul de sincronizare pe orizontala 1-off 0-on(sinc)
syh: process (clk,reset)
begin
if reset = '0' then
hsinc <= '1';
elsif clk'event and clk = '1' then
if hcnt>1305 and hcnt<1494 then
hsinc <= '0';
else
hsinc <= '1';
end if;
end if;
end process;
–asigura semnalul de sincronizare pe verticala 1-off 0-on
syv: process (hsinc,reset)
begin
if reset = '0' then
vsinc <= '1';
elsif hsinc'event and hsinc = '1' then
if vcnt>494 and vcnt<496 then
vsinc <= '0';
else
vsinc <= '1';
end if;
end if;
end process;
–genereaza mira asigurand si stingerea la sfarsitul unui cadru
red <= "000" when (hcnt > 628 or vcnt > 480 ) else "111";
green <= "000" when ((hcnt > 314 and hcnt < 628) or hcnt > 942 or vcnt > 480 ) else "111";
blue <= "000" when ((hcnt > 157 and hcnt < 314)or(hcnt >471 and hcnt <628)or(hcnt>785 and hcnt<942)or hcnt>1099 or vcnt>480) else "111";
end Behavioral;
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: Implementare Interfata Vga PE Sistem Reconfigurabil Xilinx Spartan 3 (ID: 161041)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
