Skip to content

Repositório para o trabalho final da disciplina de Circuitos e Técnicas Digitais do Prof. Héctor Pettenghi Roldán.

Notifications You must be signed in to change notification settings

yanocavalcante/CTD-Jogo

Repository files navigation

EEL5105 - Circuitos e Técnicas Digitais

Alunos: Marina Benvenuti Cardeal e Yano de Melo Cavalcante

Decifrador de Código

O projeto final da disciplina EEL5105 - Circuitos e Técnicas Digitais consiste na implementação de um circuito em uma FPGA DE2-115, fazendo uso das estruturas e conhecimentos obtidos durante o curso.
O circuito desenvolvido visou implementar um jogo interativo para a obtenção de um código secreto de 10 bits. O comportamento do jogo a, partir de uma sequência de possíveis estaods, está definido a seguir:

• O usuário começa no estado Init e dá início ao jogo pressionando o botão de pressão 'enter' (KEY1). Uma vez no estado Setup o usuário deve escolher uma das 16 sequências possíveis com os Switches 3 a 0, SW (3..0), as quais estão descritas numa memória ROM. Dita memória possui 16 linhas de informação de 10-bits (24 × 10). Cada um desses 16 vetores de 10 bits contém unicamente quatro ”1s” lógicos.
Os Switches 7 a 4, SW (7..4) servem para escolher o tempo de jogo por rodada, o aluno pode escolher entre 5 segundos, mínimo e 10 segundos, máximo. Neste estado, os displays HEX5 e HEX3 mostrarão a letra 't' de tempo e 'n' de nível e os displays HEX4 e HEX2 mostrarão o valor do tempo e a linha da memória escolhida.

Exemplo em que foram selecionados 15 ('F' em Hexadecimal) segundos para cada rodada e o quarto nível.

• Uma vez pressionado 'enter' novamente o jogo passa ao estado Play e se inicia o jogo. No estado Play o usuário tem o valor do tempo escolhido para selecionar uma sequência usando os Switches SW (9..0). Neste estado, os displays HEX5 e HEX4 mostrarão a letra 't' de tempo e uma contagem ascendente com frequência de 1Hz, respectivamente. É importante destacar que o jogador, unicamente, pode introduzir quatro ”1s” lógicos por rodada. Se o jogador não pressionar 'enter' antes do final da contagem um sinal de status chamado end_time é ativado e o jogo vai para o estado Result, pelo contrário, se o jogador seleciona uma sequência e pressiona enter antes do final da contagem o jogo vai para o estado Count_Round.
• No estado Count_Round é feito a contagem de rodada e o jogo vai para o estado Check. Vale mencionar que em cada partida, o jogador possui, no máximo, 10 rodadas para adivinhar a sequência.
• No estado Check são feitas as seguintes verificações:
  1. O jogador não introduziu quatro ”1” lógicos nos Switches. É ativado, então, um sinal de status chamado sw_erro.
  2. O jogador acabou o número de rodadas máximo. Caso o limite de 10 rodadas tenha sido atingido, um sinal de status chamado end_round será ativado.
  3. O jogador adivinhou as posições dos quatro ”1” lógicos da sequência. Nesse caso, o jogador venceu e um sinal de status chamado end_game será ativado. Caso um dos três sinais de status esteja ativo, o jogo vai para um estado Result, em caso contrário vai para um estado Wait.

• No estado Wait, os displays HEX3 e HEX2 mostrarão a letra 'r' de round e a contagem da rodada, respectivamente. Nesse estado será zerada a contagem de tempo. Os displays HEX1 e HEX0 mostrarão a letra 'A' de acertos e o número de acertos, quando o jogador pressiona 'enter' e passa de novo ao estado Play para a seguinte rodada.

No exemplo, o jogador tentou os 4 primeiros Switches e nenhum estava correto. Assim, os mostradores apresentam o número da rodada "2" e o número de acertos "0".

• No estado Result será mostrado nos LEDs vermelhos, LEDR(9..0), a sequência dos "1s" lógicos, correspondente ao nível que foi escolhido no início da partida. No estado Result é também mostrado o resultado do número de pontos em Hexadecimal nos displays HEX1 e HEX0. O resultado final seguirá a seguinte fórmula = 16 × end_game + Round'. Onde Round é o número de rodadas (a fórmula está expressada em formato vetor no Datapath). O usuário deverá pressionar 'enter' para passar ao estado Init e iniciar outra partida.

Após acertar os 4 Switches, o jogo apresenta nos mostradores a soma de pontos em Hexadecimal, nesse caso, 28 pontos ou "1C". Os LEDs vermelhos mostram a sequência correta da memória.

• Um usuário pode em, qualquer momento, parar o jogo usando o botão de pressão 'reset' (KEY0) zerando o sistema, retornando para o estado Init de novo e, essencialmente reiniciando a partida.

Apêndice

  • O diagrama de blocos do circuito utilizado para a montagem do jogo:

  • Diagrama de Blocos.


  • Guia Introdutório de uso da placa de desenvolvimento FPGA DE2-115, produzido pelo Departamento de Eletrônica e Computação da Universidade Federal do Amazonas: https://labsdtec.ufam.edu.br/frontend/web/manuais/Super%20Roteiros%20-%20FPGA%20DE2-115.pdf.
  • As imagens de teste do programa foram retiradas do Software de Emulação de placas FPGA genéricas, o FPGAemu, desenvolvido na Universidade Federal de Santa Catarina pelo professor Fabian L. Cabrera. O repositório do Software está disponível em https://github.com/fabian-l-c/fpgaemu. A versão online do emulador, disponível para alunos da UFSC, está disponível em https://fpgaemu.sites.ufsc.br.
  • About

    Repositório para o trabalho final da disciplina de Circuitos e Técnicas Digitais do Prof. Héctor Pettenghi Roldán.

    Topics

    Resources

    Stars

    Watchers

    Forks

    Languages