- Visão Geral do Projeto
- Requisitos
- Arquitetura do Kit de Desenvolvimento DE1-SoC
- Desenvolvimento em C
- Testes
- Tecnologias e Ferramentas utilizadas
- Configurações de Ambiente e Execução
- Desenvolvedoras
- Referências
O nosso jogo se chama Candi Block e sua lógica foi elaborado em uma mistura de Tetris e Candy crush. O agrupamento do jogo é por cores, então as peças caem cada uma de uma cor e o agrupamento ocorre em blocos de 4 cores iguais.
O projeto consiste no desenvolvimento de um jogo inspirado no pioneiro Tetris utilizando o Kit de Desenvolvimento DE1-SoC, no qual o movimento do jogador é captado pelo acelerômetro
presente no Kit, a interação com o jogo inclui as ações de iniciar, pausar, continuar e encerrar
controladas por chaves (switches)
disponíveis na placa e a exibição do jogo em um monitor realizada através da interface VGA
.
Sendo necessário atender aos seguintes requisitos:
- O código deve ser escrito em linguagem C;
- O sistema só poderá utilizar os componentes disponíveis na placa;
- Não é permitido o uso de bibliotecas para o acelerômetro;
- O usuário não muda a orientação das peças;
- O jogo deve pontuar e eliminar agrupamentos.
Abrangendo a compreensão e aplicação do conjunto de instruções da arquitetura, técnicas de programação, desenvolvimento de sistemas embarcados, bem como acesso direto à memória e integração do acelerômetro para captar os movimentos do jogador e controlar as peças.
O Kit de Desenvolvimento DE1-SoC ostenta uma plataforma de design de hardware robusta com base no FPGA System-on-Chip (SoC) da Altera, que combina núcleos embarcados dual-core Cortex-A9 com lógica programável, oferecendo máxima flexibilidade de design. Dispondo do poder da reconfigurabilidade aliado a um sistema de processador de alto desempenho e baixo consumo de energia.
O System-on-Chip (SoC) da Altera integra um sistema de processador (HPS) baseado em ARM, composto por processador, periféricos e interfaces de memória conectados de forma integrada à estrutura FPGA, utilizando interconexão de alta largura de banda. Incluindo hardwares como memória DDR3 de alta velocidade, recursos de áudio e vídeo, rede Ethernet, entre outros.
Para que os usuários desfrutem de máxima flexibilidade, todas as conexões são realizadas através do dispositivo Cyclone V SoC FPGA, proporcionando liberdade ao configurar o FPGA para implementar os mais diversos projetos de sistema.
A placa DE1-SoC está equipada com um módulo sensor de acelerômetro digital, o ADXL345, também conhecido como G-sensor. Trata-se de um acelerômetro de 3 eixos, pequeno, fino, com ultra baixo consumo de energia e medição de alta resolução. Dispondo de faixas de medição selecionáveis de ±2 g, ±4 g, ±8 g ou ±16 g, proporcionando uma capacidade de detecção da aceleração crescente à medida que a faixa de medição aumenta. Os dados de saída são digitalizados em um formato de 16 bits em complemento de dois e podem ser acessados por meio de interfaces digitais SPI ou I2C.
O ADXL345 é capaz de medir tanto a aceleração estática da gravidade em aplicações de detecção de inclinação, quanto a aceleração dinâmica resultante de movimento ou choque. Sua alta resolução de 3,9 mg/LSB permite a medição de mudanças de inclinação menores que 1,0°, o que o torna ideal para aplicações em dispositivos móveis.
Além disso, possui modos de baixo consumo que permitem um gerenciamento inteligente de energia baseado em movimento, com detecção de limiar e medição de aceleração ativa com dissipação de energia extremamente baixa, tornando-o altamente eficiente.
Processo de comunicação com o acelerômetro ADXL345 na placa DE1-SoC, desde as configurações iniciais até a leitura e interpretação dos dados de aceleração, implementada em linguagem C para interagir diretamente com o hardware.
Para o desenvolvimento do código em C, tivemos que analisar uma lógica de exibição no VGA. Dessa forma, escolhemos pegar um retângulo no VGA com 180 de altura e 100 de comprimento (esses valores foram decisão de projeto, mas poderia ser com quaisquer valores) e pensar nesse retângulo como a nossa matriz que iriamos manipular no código.
Assim, preenchemos esse retangulo com blocos de tamanho 5x5 (também decisão de projeto) e verificamos que cabiam um total de 720 blocos. Se temos um retângulo com 180 de altura e cada bloco tem tamanho 5, logo cabem 36 blocos na altura, ou seja, 36 linhas na nossa matriz de manipulação. O mesmo para as colunas, se temos uma largura de 100 com blocos de tamanho 5 então cabem 20 blocos nas colunas desse retangulo, logo temos 20 colunas na nossa matriz de manipulação.
Então os 720 blocos que cabem ao total na nossa mtriz se referem exatamente aos 720 elementos da nossa matriz de tamanho 36 linhas e 20 colunas.
Com essa lógica podemos pensar em cada elemento da matriz sendo um bloco, tendo uma matriz de 720 elementos, e quando fazemos uma alteração dentro de um elemento dessa matriz, alteramos a sua vizualização no VGA.
Nós realizamos cinco testes para a verificação efetiva do funcionamento do jogo, bem como para garantir que todos os requisitos estavam sendo previamente atendidos.
-
Caso de Teste 1: Jogo inicia, peça faz agrupamento e pontua. Este caso de teste visou verificar o início do jogo utilizando as chaves da placa (SW0), bem como a efetiva funcionalidade do código feito para obter as informações do eixo X do acelerômetro presente na placa. Além disso, buscou também verificar a contagem de pontos e o agrupamento funcionando corretamente no VGA, onde, quando um agrupamento era realizado, ele desaparecia.
-
Caso de Teste 2: Jogo é pausado e em seguida retomado. Este caso visou verificar a funcionalidade de pausa presente no jogo, usando as chaves da placa (SW01).
-
Caso de Teste 3: Acontece uma quebra do agrupamento e as peças descem. Este caso visou verificar o correto funcionamento da quebra de linha. Quando ocorre um agrupamento de quatro quadrados de cores iguais, o agrupamento desaparecia, e as peças que estavam em cima desciam (caso houvesse peças acima).
-
Caso de Teste 4: Peças são empilhadas e atingem o topo. Este caso verificou se, quando as peças atingiam o topo, o jogo era efetivamente finalizado e o jogador perdia, mantendo sua pontuação até o momento.
-
Caso de Teste 5: Jogo é encerrado com a chave. Este caso verificou se, utilizando a chave SW0, o jogo era efetivamente finalizado.
Dessa forma, esses cinco casos de teste tiveram o objetivo de cobrir os requisitos solicitados e verificar o cumprimento deles, bem como a lógica e o funcionamento do jogo. Assim, analisando os resultados alcançados, podemos concluir que o jogo passou por esses cinco casos de teste sem pendências e cumpre todos os requisitos que foram solicitados.
- Hardwares:
- Kit de Desenvolvimento DE1-SoC
- Monitor
- Linguagem de Programação: C
- Ambiente de Desenvolvimento: Visual Studio Code
- Compilador: GCC
- Controle de Versão: Git
- Ferramenta de Sistema: Terminal Linux
Para ter acesso ao projeto, clone o repositório disponível na plataforma GitHub utilizando o seguinte comando no terminal Linux:
git clone https://github.com/naylane/candi-block.git
Após clonar o repositório, conecte-se à placa via SSH utilizando o seu respectivo IP. Por exemplo, se o IP for 10.0.0.120
, use o seguinte comando:
ssh aluno@10.0.0.120
Em seguida, transfira a pasta clonada do seu computador para o sistema de arquivos da placa:
mv candi-block/[caminho do destino]
Para compilar e executar o projeto desenvolvido, navegue até o diretório onde está o repositório e execute o comando:
make
O comando make
gerará o arquivo de compilação e o executará. Se a operação for bem-sucedida, a tela inicial do Candi Block deverá aparecer no monitor ao qual a placa está conectada.
aluno
.
Brenda Araújo 👨💻 |
Naylane Ribeiro 👨💻 |
Sara Souza 👨💻 |
- [1] FPGAcademy. (2024) https://fpgacademy.org/