Neste trabalho foi desenvolvido o Jogo da Velha pelo programa Quartus II da Altera.
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.
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.
Foi desenvolvido um conjunto de componentes auxiliares, componentes que foram usados diversas vezes dentro do circuito.
Desenvolvido no laborátorio 01 ([lab01](https://www.inf.ufrgs.br/~mckrenn/lab01.pdf)), este mux foi usado muitas vezes dentro deste circuito. Esta 1bit de memória foi desenvolvido para memorização de algumas saídas após cargas de entrada. 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. Desenvolvido para uso com a memória de 9 bits de cada jogador 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 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. 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.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.
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.
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. 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 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. 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 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.Esta parte recebe a saída do MUX, a saída de há campo disponivel e a carga dada pelo MUX18x9
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. Visores é um conjunto de outros visores, sendo repetido o processo para cada bit de cada jogador 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)