Proiectul presupune realizarea unui joc demonstrativ de pong folosind placuta cu microcontroler realizata in etapa anterioara si un FPGA Spartan 3E ce dispune de un port VGA (pentru monitor) de iesire si un port PS2 de intrare (pentru tastatura). Comunicarea intre FPGA si placuta se va realiza prin intermediul protocolului SPI. Placuta cu microcontroler va actiona ca master in protocolul SPI in timp ce FPGA-ul va fi pe post de slave. Microcontrolerul va interoga periodic FPGA-ul pentru input primit de la tastatura si, in functie de acest input va trimite comenzi FPGA-ului pentru a misca paleta din joc si a lovi mingea. Marea majoritate a componentelor au fost implementate pe FPGA sub forma unor module Verilog. Astfel, pe FPGA se disting urmatoarele module:
Implementarea pe ATMega16 nu am mai realizat-o din cauza problemelor aparute la comunicatia SPI intre uC si FPGA. In codul pentru ATMega16 de mai jos se gaseste doar un test pentru SPI.
Pe FPGA am implementat practic tot jocul sub forma unor module Verilog. Modul din varful ierarhiei se numeste game si are intrarile:
si iesirile:
Acesta initializeaza si interconecteaza modulele:
Modulul pong_top initializeaza si interconecteaza modulele:
Schema cu ierarhia modulelor se gaseste mai jos:
Pe langa aceste module, in proiectul de FPGA se mai gaseste modulul pentru driver-ul de SPI ( SPI_Slave) precum si alte module folosite in testare.
Codul pentru FPGA-ul Spartan 3E se poate descarca de la adresa: VGAPongwithKB.rar Acesta e scris in verilog si se gaseste sub forma unui proiect Xilinx ISE 10.1 .
Codul pentru uC se poate descarca de la adresa: VGAPongUC.rar
Din nefericirea partea de comunicatie SPI intre uC si FPGA nu a mers si am fost nevoit sa implementez si controlul jocului si pe FPGA dar proiectul merge, se poate juca. Pe viitor o sa incerc sa rezolv si partea de comunicare intre uC si FPGA astfel incat sa pot folosi FPGA-ul ca un fel de placa video pentru uC.