/jogo-da-velha

Trabalho Final da cadeira de Circuitos Digitais

Primary LanguageHTML

Trabalho Final Circuitos Digitais

Neste trabalho foi desenvolvido o Jogo da Velha pelo programa Quartus II da Altera.

Implementação

A implementação do jogo da velha fez uso de displays de sete segmentos para exibir as marcações de cada jogador. Para implementação no display de sete segmentos, as marcações do jogo da velha foram adaptadas. Sendo as novas marcações:

Circulo: representado pelo 0
Xis: representado pelo 5
Vazio: representado pelo 8

Para a seleção de cada jogador foi utilizado o Interruptor Dip Rotativo (em inglês Rotary Dip Switch) A6R-101RS.

Rotary Dip Switch A6R-101RS (datasheet)

O Rotary possui saídas de 0 a 9, sendo sua saída usada para marcação na matriz do jogo da velha.

A implementação do jogo foi feita separando em componentes cada processo.

Componentes

I. Auxiliares

Foi desenvolvido um conjunto de componentes auxiliares, componentes que foram usados diversas vezes dentro do circuito.

I.1. Multiplexador 2x1

Desenvolvido no laborátorio 01 ([lab01](https://www.inf.ufrgs.br/~mckrenn/lab01.pdf)), este mux foi usado muitas vezes dentro deste circuito.

I.2. Memória 1 bit

Esta 1bit de memória foi desenvolvido para memorização de algumas saídas após cargas de entrada.

I.3. Seletor

Este seletor foi usado para transformar a saída do controle em qual bit da memória está se referindo, sendo a tendo 9 saídas e somente uma delas saindo em 1, que é a correspondente a selecionada.

I.4. Multiplexador 18x9

Desenvolvido para uso com a memória de 9 bits de cada jogador

II. Controle

Dentro do jogo o controle recebe em ATIVO uma AND que recebe VEZ_DO_JOGADOR e PARTIDA_ATIVA, sendo VEZ_DO_JOGADOR negado para o jogador 1.
Por dentro do circuito do controle
Por dentro podemos ver que foi feito uma memorização da saída do controle do jogador, mudando somente quando o jogador estiver ativo e apertar novamente o botão.

III. Marcação do jogador

A marcação feita pelo jogador passa por um MUX que de acordo com de quem é a vez de jogador, retorna na sua saída a seleção do jogador.
Por dentro da marcação do jogador

Podemos ver que também é feita uma memorização da seleção do último jogador, sendo enviado o sinal de carga quando uma carga de entrada é recebida.

IV. Verificação da Seleção

Verificação recebe a memória (será vista no próximo item) dos jogadores 1 e 2 junto da seleção feita pelo jogador, se na memória de ambos o bit de numero dado pela seleção não estiver marcado então a cargaS é ativa.

Por dentro de verificação da marcação
Esta parte foi feita com um circuito sequencial que usa NANDs, pegando a seleção escolhida e se a seleção do mesmo bit da memória estiver em zero para ambos os jogadores, então é ativo a cargaS.

V. Memória dos jogadores

Este componente foi duplicado, sendo cada uma para cada jogador. A memória só receberá o sinal de carga de entrada quando uma seleção válida for enviada
Por dentro da memória (pedaço)
Por dentro da memória (pedaço final)
Esta parte é a que envia o sinal de carga para a saída da memória, ela é ligada a uma OR que recebe o sinal de carga de entrada(cargaE) e a entrada de RESET.

VI. Seleciona Memória

Esta parte recebe a memória de ambos jogadores, o sinal de carga saído da memória e a seleção do MUX é dada pelo VEZ_DO_JOGADOR
Por dentro do Seleciona Memória
A seleção dada pelo MUX fica acima na imagem, abaixo dela podemos ver que é feita a verificação de CAMPO_DISPONIVEL, retornando 1 se sim. Só mudando quando há uma entrada de carga.

VII. Verificando se termina ou continua

Esta parte recebe a saída do MUX, a saída de há campo disponivel e a carga dada pelo MUX18x9

Por dentro do circuito Verifica se Venceu
Podemos ver que a verificação é feita por um circuito sequencial que verifica se houve a marcação usando AND3 e enviando para uma OR8.

VIII. Visores

Por dentro do componente Visores
Visores é um conjunto de outros visores, sendo repetido o processo para cada bit de cada jogador

VIII.2. Visor

Podemos ver que há uso de portas lógicas para se chegar a resposta se o visor deve estar 8, 5 ou 0.

Para ver por dentro do decodificador de 7 segmentos (lab03)

Simulações

Simulação com teste apertando botão antes da partida iniciar e com jogador 2 ganhando
Simulação com uma simples partida e com jogador 2 ganhando novamente