Pasul trei

Pornind de la aceaşi idee de control al LED-urilor vreau să contruiesc o aplicaţie ceva mai complexă dar care să fie la fel de uşor de realizat, utilizând doar editare de schematic, fără cod HDL. În postul anterior am vorbit despre folosirea modulelor standard din librăria Altium Designer dar nu am explicat exact ce sunt acestea. Modulele standard sunt chiar IP core-urile despre care vorbeam în postul doi.

IP (Intellectual Property) cores sunt blocuri de design, care au o funcţie bine stabilită şi care pot fi integrate într-un proiect mai mare. Corelând explicaţia de mai sus cu modulele standard folosite în proiectul anterior putem înţelege mai bine: modulul LED_CTRL este un astfel de core care ne permite să interacţionăm cu LED-urile de pe placă (setându-le culoarea, strălucirea, etc.) fără a fi nevoiţi să ştim detaliile despre cum a fost construit modulul şi cum anume realizează el aceste funcţii. Folosirea IP core-urilor devine logică în cadrul unor proiecte mai mari unde pentru „funcţii standard” sunt folosite astfel de core-uri permiţând concentrarea atenţiei asupra realizării, implementării şi optimizării funcţiilor specifice proiectului. IP core-urilor pot fi cumpărate (de la producătorii de FPGA sau de la firme specializate în IP core development) sau pot fi luate sub licenţă GPL sau BSD de pe site-uri de genul www.opencores.org. Atunci când sunt cumpărate sunt livrate într-o formă care să nu permită accesul la codul HDL (în general RTL-register transfer level- criptat).

IP core-urile pot avea diverse funcţii, de la cele simple (LED_CTRL din exemplul nostru) la cele complicate de genul microprocesoarelor. Da, adică vreau să spun că există core-uri care sunt chiar microprocesoare şi care pot fi integrate în FPGA. Şi asta nu e tot, într-un design FPGA pot fi folosite mai multe microprocesoarea, limitat fiind doar de resursele FGPA-ului (numărul de CLB-uri, cantitatea de memorie). Ce microprocesoare? Păi Xilinx are MicroBlaze, Altera are Nios chiar şi openCores are unul, OpenRisc; majoritatea RISC-uri pe 32 biţi. În Altium Designer pe lângă procesoare specifice producătorilor avem şi TSK3000A. Ok, şi aminteşte-mi de ce aş vrea să folosesc un microprocesor într-un design FPGA? Un FPGA oferă viteză prin faptul că operaţiile sunt făcute la un nivel hardware (un sumator spre exemplu este implementat hardware printr-o combinaţie de porţi logice), dar viteza câştigată se plăteşte prin resurse utilizate. Aşa că pentru anumite funcţii, care nu necesită o viteză foarte mare (interacţiunea cu un controller VGA, interacţiunea cu tastatura sau mouse-ul, etc) se poate folosi un core de microprocesor, mai simplu de implementat şi uşor de programat fie în C fie în assembler.

Vreau să construiesc un proiect care să realizeze acest efect cu LED-urile de pe NB3000.  Din nou, etapele ce trebuie parcurse pas cu pas se găsesc aici, eu voi da doar explicaţiile necesare.

Folosesc uP-ul pe 32 biţi din Altium Designer TSK3000A, despre care puteţi afla mai multe detalii aici cu care vreau să controlez LED-urile. Avem deci 3 core-uri (microprocesorul, memoria ataşată şi led controller-ul) ce trebuie interconectate. Interfaţa între ele se realiează folosind standardul Wishbone. Wishbone este  un bus open-source care permite conectarea mai multor core-uri la un nivel logic, în specificaţia sa neprecizându-se informaţii despre conexiunile electrice sau o topologie anume, tocmai pentru că a fost gândit astfel încât să poată conecta core-uri diferite. În Altium conexiunile la nivel de bus Wishbone se fac într-un document special care simplifică interconectarea rezultând o schemă ca cea de mai jos (se observă asemănarea cu o diagramă bloc):

După configurarea blocurilor (se pot seta tipul de memorie, adresele folosite de uP pentru accesarea memoriei şi a LED-urilor, etc.) din acest document se realizează un simbol de schematic ce va fi folosit în schematicul propiu-zis:Schema conţine, pe lângă clock şi LED-uri (de data această conectate doar pe roşu) un circuit de delay care menţine uP-ul în reset timp de 255 de perioade de ceas pentru iniţializarea corectă şi modulele propiu-zise de SRAM care fac interfaţa cu RAM-ul de pe NanoBoard.

Acum că am făcut partea hardware a proiectului trebuie să scriem codul pentru microprocesorul embedded. Codul va fi scris în C şi este similar cu un cod pentru un micro-controller. Se invocă funcţii ale driverul de LED controller pentru setareaa intensităţii şi funcţii de time management al procesorului pentru efectul de delay, rezultatul obţinut fiind acesta:

După ce designul a fost programat în FPGA codul C poate fi modificat nefiind necesară rescrierea FPGA-ului ci doar recompilarea şi rularea codului.

Postul aceasta poate părea mai complicat decât celelalte dar adevărul este că am reuşit să învăţ o serie de lucuri specifice în lucrul cu FPGA păstrând totuşi un nivel de abastractizare ridicat, neintrând in detalii dar înţelegând încet-încet cum sunt realizate proiectele complexe.

Un gând despre „Pasul trei

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