Design Contest

Design Contest EMicro-DF 2014: Batalha Naval


O Design Contest da EMicro-DF 2014 é uma competição de descrição de circuitos em VHDL. Estudantes de todas as áreas relacionadas são convidados a participar do desafio. Nesta edição, os participantes deverão descrever a lógica do jogo Batalha Naval em VHDL ou Verilog e implementar em FPGAOs participantes deverão sintetizar a descrição do circuito para o dispositivo FPGA Spartan 6 XC6LX16-CS324 e apresentar os resultados de síntese lógica quando requerido.

A competição acontecerá no dia 03/11 a partir das 17:30 horas. A competição será realizada no estilo de campeonato de forma que as equipes vencedoras vão ascendendo no torneio. Todas as equipes receberão certificado de participação. O(s) integrante(s) da equipe vencedora no jogo final receberão um kit de desenvolvimento Xilinx Nexys 3.

Regras do jogo
Uma descrição da dinâmica do jogo Batalha Naval encontra-se disponível em

O tabuleiro é de 10 x 10 posições. Cada equipe conta com 5 barcos de diferentes tamanhos, assim:
- Um barco de 5 casas
- Um barco de 4 casas
- Dois barcos de 3 casas
- Um barco de 2 casas

As posições dos barcos são introduzidas usando arquivos texto, como descrito na seção "Teste das implementações" desta página. Os barcos podem ser orientados em posição vertical ou horizontal. Não se peritem barcos em posição diagonal. 

No total são 17 casas ocupadas. Quando uma equipe acerta em uma casa ocupada tem o direito de repetir o tiro. A equipe que primeiro derrubar as 17 casas ocupadas pelos barcos do oponente vence o jogo.

Os participantes da competição poderão formar duplas ou competir individualmente. A competição consiste no enfrentamento entre duas FPGAs, uma para cada equipe. Será feito um sorteio para determinar a equipe que inicia o jogo.


Sobre os enfrentamentos
A comunicação serial RS232 será usada para comunicar as duas FPGAs com um PC Desktop, onde poderá ser visualizada a partida (vide figura 1).


Figura 1. Enfrentamento entre as duas FPGAs


A posição do tabuleiro é codificada como mostrado na figura 2. Linhas e colunas codificadas com números de 0 a 9.


Figura 2. Código para a posição do tabuleiro


Cada FPGA deverá mostrar a posição da jogada usando os displays de sete segmentos. Para calcular uma nova posição deve-se pressionar o push-button south da placa. Para enviar a posição da jogada será usado o push-buttton north a fim de enviar o comando respectivo pela da porta serial. O comando a ser enviado é um caracter ASCII (palavra de 8 bits) em que os 4 bits mais significativos representam a linha e os 4 bits menos significativos representam a coluna. Observe-se que tanto a linha quanto a coluna são codificadas com números de 0 a 9.

Quando o PC recebe um comando enviado desde um FPGA, verifica-se se o tiro acertou em um barco do adversário e então o PC retorna o comando 'O' se o tiro falhou ou 'X' se o tiro acertou. O circuito no FPGA deve estar preparado para receber os comandos 'O' ou 'X'.


Se uma equipe acerta em um alvo tem o direito de repetir o tiro. Se uma equipe não acerta ou se joga em uma casa que já tinha sido acertada então será a vez da outra equipe tentar o tiro.

Arquitetura para comunicar a lógica com a comunicação serial
Na figura a seguir é apresentada uma possível arquitetura para conectar a lógica do jogo batalha naval com o bloco de comunicação serial. A figura é apenas ilustrativa e objetiva explicar a funcionalidade das entradas e saídas do bloco de comunicação serial.


Figura 3. Conexão da lógica do jogo de Batalha Naval com o bloco de comunicação serial.

A descrição VHDL da comunicação serial RS232 pode ser visualizada no seguinte link:
serialcom.vhd

Arquivo bitstream da comunicação serial RS232 para o kit de desenvolvimento Nexys3 da Xilinx:
serialcom_nexys3.bit

Teste das implementações
Sugere-se que os participantes desenvolvam os códigos com antecedência. Serão disponibilizados kits Nexys2 e Nexys3 para realizar testes e ajustes das implementações na segunda 03/11 e terça feira 04/11 das 18:30 às 20:00 horas.

O seguinte arquivo executável poderá ser usado para realizar os testes das implementações. Neste arquivo o FPGA poderá jogar a Batalha Naval contra um usuário em um PC usando a porta serial COM7. Este arquivo recebe pela porta RS232 a posição do tiro selecionada pelo FPGA e retorna o comando 'X' ou 'O' caso o tiro acerte ou não, respectivamente, em um barco do adversário. O andamento do jogo é apresentado na tela do PC.

Arquivo executável para teste FPGA vs PC:
batalha_naval_fpga_vs_pc.exe

O seguinte arquivo executável será usado no dia da competição de forma a realizar o enfrentamento entre dois FPGAs. Para usar este arquivo os FPGAs devem ser conectados na porta RS232 usando as COM6 e COM7.

Arquivo executável para teste FPGA vs FPGA:
batalha_naval_fpga_vs_fpga.exe

Arquivos fontes em C (compilar usando o gcc). As posições dos barcos de cada adversário são introduzidas usando os arquivos texto barcos1.txt para a equipe 1 e barcos2.txt para a equipe 2.
batalha_naval_fpga_vs_pc.cpp
batalha_naval_fpga_vs_fpga.cpp
rs232.c
PCrs232.h
barcos1.txt
barcos2.txt

Sobre o kit de desenvolvimento
Durante a competição serão usados dois kits Nexys 3 (Spartan 6:  XC6LX16-CS324). Maiores informações sobre o kit de desenvolvimento podem ser encontrados em http://www.digilentinc.com/