|
Softwarele CAD (Computer Aided Design) de proiectare cu circuite logice programabile (FPGA) permit in prima etapa alegerea unei metode de descriere a proiectului: captura schematica, descriere VHDL sau diagrame de stare, in urmatoarea etapa se poate face o simulare functionala in urma operatiei de sinteza si de timp in urma operatiei de translatare. In cele din urma, daca specificatiile de baza sunt intrunite se poate face implementarea si testarea proiectului in hardware, vezi diagramele de mai jos.
 |
Diagrama 1 |
 |
Diagrama 2 |
ISE - Integrated Software Environment - este un mediu integrat care permite descrierea si implementarea unei multitudini de blocuri logice. Implementarea se face cu FPGA Spartan sau Virtex sau cu CPLD-uri din seria 9500. Circuitele integrate de tip FPGA sau CPLD sunt, de asemenea fabricate de compania Xilinx. La nivel didactic, pentru testarea corectitudinii blocurilor logice proiectate, dispunem de o placa de test D2SB, figura 1, produsa de firma Digilent, bazata pe modulul FPGA de tip Spartan II cu codul XC2S200E.
Pentru a putea exploata mai eficient resursele placii D2SB la aceasta se conecteaza placa cu circuite periferice DIO4. Placa DIO4 este produsa de firma Digilent si contine majoritatea dispozitivelor de intrare/iesire date prezente in orice sistem digital. Placa de dezvoltare este dotata cu comutatoare, taste, LED-uri si afisoare 7 segmente cu LED-uri.
 |
Figura 1 |
 |
Figura 2 |
Scopul tutorialului consta in implementarea unui sumator elementar descrisin VHDL, pentru familiarizarea studentilor cu proiectele de tip HDL.
Pasul 1:
Crearea proiectului.
Se lanseaza in executie ISE.
Se creeaza un nou proiect, cu urmatoarele specificatii:
 |
Figura 3 |
ISE creeaza cate un folder pentru fiecare proiect. Folderul va avea acelasi nume ca si proiectul. Din acest motiv, mai intai se specifica folderul lab1, iar apoi numele proiectului, sum. Dupa ce ati particularizat si completat toate informatiile conform figurii 3, apasati butonul Next. Va apare urmatoarea fereastra:
 |
Figura 4 |
Modulul in jurul caruia este construita placa de dezvoltare D2SB apartine familiei Spartan2, are codul XC2S200E (200 insemna ca modulul contine echivalentul a 200000 de porti logice) si impachetarea este de tip PQ208.
Ca si in cazul proiectelor software, un proiect este compus din mai multe fisiere. Functionalitatea proiectelor hardware se poate specifica fie prin intermediul schemelor logice fie prin intermediul unui limbaj de descriere hardware, cum ar fi VHDL sau Verilog. Asa cum in cazul unui proiect scris in C exista o functie care se executa prima, si anume main, in cazul proiectelor hardware rolul lui "main" este jucat de modulul din varful ierarhiei, si anume Top Level Module. Descrierea modulul din varful ierarhiei poate fi de tip schematic sau HDL (HDL=Hardware Description Language = Limbaj de descriere hardware). Pe parcursul acestui tutorial se va folosi numai descrierea de tip HDL.
In cazul sumatorului de un bit, descrierea functionalitatii se face prin intermediul unui singur fisier HDL si automat aceasta va fi in varful ierarhiei. Din acest motiv alegem Top Level Module Type de tip HDL.
Celelalte doua campuri se seteaza la valorile din figura 4 (vor fi detaliate in urmatoarele tutoriale), iar apoi se apasa butonul Next.
Actiunile aferente urmatoarelor doua ferestre, Create a New Source si Add Existing Sources, sunt optionale, si din acest motiv se apasa Next pentru fiecare in parte, fara sa se completeze nimic. In final, apare o fereastra de informare, pentru care se apas! Finish. Dupa executarea tuturor actiunilor descrise mai sus trebuie sa se obtina urmatorul ecran:
 |
Figura 5 |
Pasul 2:
Crearea fisierului VHDL care va contine descrierea sumatorului de un bit.
Se face clic dreapta pe numele circuitului (xc2s200e), si din meniul contextual aparut se selecteaza New Source. In fereastra New Source, se selecteaza tipul VHDL Module iar apoi se completeaza numele fisierului (figura 6). In continuare se apasa Next, apare o fereastra care permite definirea semnalelor prin care modulul descris se conecteaza cu exteriorul (figura 7).
 |
Figura 6 |
 |
Figura 7 |
Intrarile sumatorului sunt semnalele A, B, si Cin iar iesirile S si Cout. Se completeaza fereastra din figura 7 cu aceste informatii, apoi se apasa Next. Ca urmarea, apare o fereastra de informare care sumarizeaza informatiile introduse si permite revenirea in caz ca exista o greseala. Daca totul este corect, se apasa butonul Finish.
Ca efect al apasarii lui Finish, sum.vhd este construit si adaugat la proiect. Dupa cum se remarca ISE a creat automat entitatea din descrierea furnizata prin intermediul figurii 7.
|
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
-- Uncomment the following lines to use the declarations that are
-- provided for instantiating Xilinx primitive components.
-- library UNISIM;
-- use UNISIM.VComponents.all;
entity Sum_s4 is
Port ( Cin : in std_logic;
A : in std_logic;
B : in std_logic;
S : out std_logic;
Cout : out std_logic);
end Sum_s4;
......
|
In corpul arhitecturii intre begin si end Behavioral scrieti expresiile logice S si Cout.
|
S <= A xor B xor Cin;
Cout <= (A and B) or (B and Cin) or (A and Cin);
|
Pasul 3:
Crearea fissierului de constrangeri si specificarea acestora.
Pentru a verifica functionarea sumatorului intrarilor A, B si Cin li se asigneaza pini FPGA care in exterior sunt conectati la comutatoare iar iesirilor S si Cout li se asigneaza pini FPGA conectate la LEDuri. Aceasta asignare se numeste constrangere. Exista mai multe tipuri de constrangeri, aceasta fiind una dintre ele.
Din documentatiile placilor D2SB si DIO4 rezulta urmatorul tabel:
|
RESURSE D2SB SI DIO 4
|
PINI FPGA
|
|
"MCLK"
|
"P182";
|
|
"D2SB_BTN"
|
"P187";
|
|
"D2SB_LED"
|
"P154";
|
|
"DIO4_LEDG"
|
"P45";
|
|
"DIO4_LED<0>"
|
"P111";
|
|
"DIO4_LED<1>"
|
"P109";
|
|
"DIO4_LED<2>"
|
"P102";
|
|
"DIO4_LED<3>"
|
"P100";
|
|
"DIO4_LED<4>"
|
"P98";
|
|
"DIO4_LED<5>"
|
"P96";
|
|
"DIO4_LED<6>"
|
"P94";
|
|
"DIO4_LED<7>"
|
"P89";
|
|
"DIO4_BTN<0>"
|
"P3";
|
|
"DIO4_BTN<1>"
|
"P206";
|
|
"DIO4_BTN<2>"
|
"P44";
|
|
"DIO4_BTN<3>"
|
"P43";
|
|
"DIO4_BTN<4>"
|
"P42";
|
|
"DIO4_SW<0>"
|
"P23";
|
|
"DIO4_SW<1>"
|
"P21";
|
|
"DIO4_SW<2>"
|
"P18";
|
|
"DIO4_SW<3>"
|
"P16";
|
|
"DIO4_SW<4>"
|
"P11";
|
|
"DIO4_SW<5>"
|
"P9";
|
|
"DIO4_SW<6>"
|
"P7";
|
|
"DIO4_SW<7>"
|
"P5";
|
|
"DIO4_AN<0>"
|
"P41";
|
|
"DIO4_AN<1>"
|
"P40";
|
|
"DIO4_AN<2>"
|
"P36";
|
|
"DIO4_AN<3>"
|
"P35";
|
|
"DIO4_SSG<0>"
|
"P22";
|
|
"DIO4_SSG<1>"
|
"P20";
|
|
"DIO4_SSG<2>"
|
"P17";
|
|
"DIO4_SSG<3>"
|
"P15";
|
|
"DIO4_SSG<4>"
|
"P10";
|
|
"DIO4_SSG<5>"
|
"P8";
|
|
"DIO4_SSG<6>"
|
"P6";
|
|
"DIO4_SSGDP"
|
"P4";
|
Astfel se vor atribui urmatorii pini FPGA pentru A,B,Cin, S si Cout: Cin P23 (SW1), A P21 (SW2), B P18 (SW3), conform tabelului anterior. Lui S i se asigneaza P111 (LD1), iar lui Cout P109 (LD2).
Mai intai se creeaza fisierul de constrangeri. Se face clic dreapta pe numele circuitului (xc2s200e) sau pe numele fisierului VHDL sum1.vhd si din meniul contextual aparut se selecteaza New Source. In fereastra New Source, se selecteaza tipul Implementation Constraints File iar apoi se completeaza numele fisierului. Fie numele acestui fisier sum1cf. Se apasa Next, in urmatoarea fereastra Next, iar apoi in fereastra de informare se apasa Finish. Daca totul a decurs conform celor explicate anterior se va obtine situatia din figura 8.
Se observa ca procesele posibile pentru un anumit fisier sunt diferite in functie de fisierul selectat in fereastra Sources in Project. Daca in fereastra Sources in Project se selecteaza sum1cf.ucf, in fereastra Processes for ... apar procesele din figura 8.
 |
Figura 8 |
Inainte de a crea fisierul de constrangeri selectati Edit -> Preferences -> Editor si apasati radio butonul Constraints Editor. Pentru crearea/editarea constrangerilor, pornind de la configuratia din figura 8, se face dublu clic pe procesul Edt Constraints (Text), pentru a lansa in executie editorul de constrangeri si se introduc liniile de configurare din figura 8, dupa care se salveaza.
Pasul 4:
Crearea fisierului de configurare si verificarea functionalitatii.
Plecand de la configuratia din figura 8, se face click pe numele proiectului Sum1-Behavioral.. dupa care in fereastra Processes se face dublu clic pe procesul Generate Programming File, vezi figura 9.
 |
Figura 9 |
Pasul 5: Configurarea FPGA Spartan 3 de pe placa de dezvoltare
Odata generat fisierul bit sub procesul Generate Programming File faceti dublu clic pe optiunea Configure Device (iMPACT) aflata sub procesul Generate Programming File. Se va obtine fereastra din figura 10, se face clic pe Finish.
 |
Figura 10 |
Dupa care se obtine fereastra din figura 11, dupa ce se face in care se selecteaza fisiereul de configurare de tip bit, in cazul nostru sum1.bit
 |
Figura 11 |
Se face clic dreapta pe dispozitivul Xilinx si se alege optiunea Program... in fereastra care apare se face clic pe OK. Apare o ferestra Progree Dialog dupa care ar trebui sa se obtina mesajul.
|