Pasul patru

În postul trecut, am folosit un microprocesor, care controla LED-urile de pe placă. Singurele conexiuni ale microprocesorului erau aşadar cele către memorie şi LED-uri, dar un microprocesor poate fi interconectat cu mai multe periferice. Asta se întâmplă în exemplul din acest post, exemplu în care este introdus şi touchscreen-ul, cu ajutorul căruia controlăm LED-urile. În ce constă proiectul mai exact: pe touchscreen va fi afişată imaginea următoare:Atingând cu pen-ul unul dintre numerele de la 1 la 8 selectez LED-ul respectiv, a cărui culoare vreau să o setez, după care, tot cu pen-ul, selectez culoarea dorită. Astfel pot să setez individual culoarea fiecărui LED doar cu ajutorul touchscreen-ului, fără altă interfaţă. Etapele care trebuie parcurse pas cu pas se găsesc aici, eu am făcut o serie de modificări pe care le voi prezenta mai în detaliu.

Proiectul are în centru procesorul TSK3000A, cel folosit şi în exemplul anterior, de data asta cu mai multe conexiuni,  cum am spus, conexiuni care se realizează simplu, aşa cum am văzut,  într-un document OpenBus (documentul ăla care seamnănă cu o diagramă bloc), rezultând următoarea „schemă”:Acest document „ascunde” de noi detaliile interconectării prezentându-ne doar nişte conexiuni logice, fără a vedea ce semnale circulă între blocurile conectate. Pentru a înţelege mai bine cum funcţionează procesorul şi cum este el conectat la periferice ar fi interesant să vedem ce se întâmplă în spatele acestei interfeţe de conectare. Pentru asta putem alege să construim totul în schematic fără a apela la documentul OpenBus. Să vedem cum arată simbolul de schematic al procesorului, pentru început. În figura de mai jos el este în partea stângă, în timp ce în partea dreaptă avem simbolul folosit în documentul OpenBus:

Procesorul are ca semnale de intrare un semnal de reset şi unul de clock pe care mai apoi le propagă către dispozitivele I/O şi către memorie. Acestea din urmă se conectează la procesor prin intermediul bus-ului Wishbone (pe care l-am introdus în postul anterior), bus ce conţine semnale definite de acest standard, denumirea lor este sugestivă, deci nu o să insist asupra lor. Mai multe despre cum se realizează comunicarea între dispozitive prin intermediul standardului Wishbone puteţi citi aici. Din simbolul microprocesorului vedem ca acesta are interfaţă cu doar un dispozitiv I/O deci ca să putem accesa mai multe dispozitive avem nevoie de un element de interconectare care să îndeplinească şi rolul de multiplexor. Alt lucru ce se observă este că microprocesorul foloseşte adrese de 24 biţi pentru a accesa dispozitivele I/O şi datele interschimbate  cu acestea sunt pe 32 biţi, iar pentru memorie atât adresa cât şi datele sunt pe 32 biţi. Trebuie să adăugăm controler-ul LED-urilor, driverul pentru touchscreen, şi încă două controllere pentru pen-ul touchscreen-ului. Aceste componente (disponibile toate în biblioteca Altium) au implementată o interfaţă Wishbone pentru a se putea conecta la microprocesor şi o interfaţă către componentele fizice aflate pe placă. Să vedem cum arată controler-ul de LED-uri spre exemplu:În partea stângă avem semnalele Wishbone (aceleaşi ca la microprocesor) iar în partea dreaptă semnalele care merg către LED-uri (există 8 LED-uri, fiecare LED are defapt 3 chip-uri: roşu, verde, albastru, deci 3 bus-uri a câte 8 semnale). Controller-ul de LED tocmai descris este un IP core care este compatibil Wishbone, adică producătorul (în acest caz Altium) a inclus în el şi o interfaţă care să facă posibilă comunicarea cu alte core-uri (compatibile Wishbone la rândul lor). Observăm că adresa în cazul controler-ului de LED este pe 5 biţi iar datele pe 8 biţi, deci elementul de interconectare va trebui să facă şi o decodare/conversie pentru a lega core-urile.

Dupa adăugarea tuturor IP core-urilor şi interconectarea lor prin componente specifice (care realizează funcţiile descrise mai sus) rezultă schema următoare, echivalenta scheme OpenBus de la începutul articolului : 

Acum că am înţeles care sunt avantajele Wishbone-ului (standardizarea interconectării, configurabilitate mare ce permite conectarea core-urilor aparent diferite) şi cum anume realizează el conexiunile între core-uri putem trece mai departe să creăm proiectul embedded pentru microprocesor şi să scriem codul C. Pentru că am modificat o parte din codul C prezentat pe site-ul Altium o să includ mai jos modificările. Bucla infinită devine:

Unde funcţia set_one_led este următoarea:

După scrierea FPGA-ului şi programarea microprocesorului output-ul ar trebui să fie următoru’, din păcate camera cu care am filmat nu este dintre cele mai bune:

Un gând despre „Pasul patru

  1. Pingback: Blogul meu in 2010, conform wordpress.com | FPGA în limba română

Lasă un răspuns

Completează mai jos detaliile despre tine sau dă clic pe un icon pentru autentificare:

Logo WordPress.com

Comentezi folosind contul tău WordPress.com. Dezautentificare / Schimbă )

Poză Twitter

Comentezi folosind contul tău Twitter. Dezautentificare / Schimbă )

Fotografie Facebook

Comentezi folosind contul tău Facebook. Dezautentificare / Schimbă )

Fotografie Google+

Comentezi folosind contul tău Google+. Dezautentificare / Schimbă )

Conectare la %s