This repository was archived by the owner on Jan 11, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathrelatorio2.tex
executable file
·357 lines (236 loc) · 36.2 KB
/
relatorio2.tex
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
\documentclass[12pt]{article}
%\usepackage[utf8]{inputenc}
\usepackage{sbc-template}
\usepackage{graphicx,url}
\usepackage{rotating}
\usepackage{dcolumn}
\usepackage{float}
%\usepackage[brazil]{babel}
\usepackage[latin1]{inputenc}
%RENAMES
\renewcommand{\figurename}{Figura}
\renewcommand{\tablename}{Tabela}
\renewcommand{\refname}{Referências}
\sloppy
\title{Problema 4: "Batalha Naval"}
\author{Turma P04}
\address{MI - Projetos de Circuitos Digitais, Período 2015.1\\ Tutor: Marcos Paz\\
Curso de Engenharia de Computação \\ Universidade Estadual de Feira de Santana (UEFS)
}
\begin{document}
\maketitle
\begin{resumo}
O presente relatório descreve o processo de resolução do terceiro problema do MI - Circuitos Digitais, da supracitada turma,no período de 2015.1, na Universidade Estadual de Feira de Santana. O problema propôs, dado o sucesso dos projetos pretéritos, que os estudantes desenvolvessem um protótipo do jogo Batalha Naval em \textit{FPGA}, tomando como base o protótipo do controlador para matriz de \textit{LED}, sendo que a comunicação com este novo circuito deveria acontecer através de um computador pessoal utilizando o conceito de comunicação serial, tornando o projeto a ser desenvolvido, mais confiável em relação a transmissão de dados.
\end{resumo}
\section{Introdução} \label{sec:firstpage}
Hoje em dia cresce, substancialmente, a ampla utilização de jogos no segmento lúdico de simulação 2D. Estes são utilizados em diversas áreas conhecidas, tendo uma mais elevada utilização na educação. Além do papel que os mesmos podem fornecer à educação, podem servir , também, única e exclusivamente como forma de entretenimento entre os mais jovens, bem como para o público mais adulto. Um exemplo destes jogos, é famigerado Batalha Naval. Sendo no Brasil no ano de 1988, o jogo batalha naval é um dos jogos de maiores sucessos entre o público mundial. Em sua forma mais rústica, dois adversários desenhavam em folhas de papel, navios posicionados em um mar imaginário quadriculado, formando uma grade. Todavia, no contexto atual, além de encontrar versões deste jogo de maneira similar aos seus primórdios, encontra-se, também, aplicativos para diversas arquiteturas que executam o mesmo processo, facilitando assim a sua disseminação entre as pessoas.
Além da existência, como visto, deste tipo de jogo na forma de aplicativos móveis, existe a possibilidade, também, de desenvolvê-lo utilizando circuitos digitais, visando a criação de um jogo lúdico de simulação 2D. É de se notar, que para desenvolvê-lo, faz-se necessário utilizar um conceito muito importante na eletrônica digital, a saber, memória RAM. A criação deste tipo de jogo, traz diversas vantagens para o empreendedor que o desenvolve, justamente pelo fato do mercado de jogos está sempre em constante expansão. lembrando que hoje em dia, aplicações envolvendo a tecnologia digital tem ampla aceitação no mercado, o ser humano necessita de recursos tecnológicos, com forma também de pertença, e inclusão no mundo global tecnológico.
Desta forma, observando a mudança atual do mercado, principalmente no que diz respeito a alta receptividade em relação a jogos eletrônicos, o grupo Inova Digital Bahia S.A resolveu adaptar o projeto desenvolvido anteriormente, para que o mesmo funcionasse como uma espécie de jogo Batalha Naval, seguindo um modelo de simulação $2D$. Sendo que este novo protótipo deveria ser controlado remotamente, a partir de um computador pessoal, enviando os dados por meio de canal de comunicação serial. Neste jogo, dois modos estarão disponíveis, o modo de gravação e o modo de jogo propriamente dito, cada modo contendo suas especificações e características próprias, as quais serão descritas nas seções posteriores.
É importante lembrar, que para desenvolver este projeto, foram utilizados além dos recursos já conhecidos, fez-se uso também de Máquinas de estados, registrador de descolocamento, porta serial, protocolo de comunicação RS-232, conversores de níveis elétricos e, por último, mas não menos importante, Software para comunicação com Hardware.
\section{Fundamentação Teórica}
Na seção que segue, serão descritos os conceitos utilizados para resolução do problema proposto, frisando os conceitos que foram de fundamental importância para solucionar o mesmo, tendo contribuição de maneira direta ou indireta.
\subsection{Máquinas de Estados}
Em se tratando de Circuitos Digitais, diversos dispositivos têm uma ampla importância, dentre estes dispositivos temos os conhecidos contadores, os quais segundo\cite{tocci1997digital} são Máquinas de estados específicas. Floyd, por sua vez, vai mais adiante, e fala que Máquinas de estados ou circuito sequencial é um circuito que consiste de uma seção de lógica combinacional e uma seção de memória (flip-flops)\cite{floyd2011digital}. Na figura~\ref{fig:diagrama} podemos observar o circuito típico para uma máquina de estados. Vale acrescentar que a quantidade de estados que uma máquina pode interpretar é diretamente ligada a quantidade de Flip-Flop, a quantidade de estados pode ser obtido fazendo $2^{n}$, sendo n o número de Flip-flops.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.4\textwidth]{img/p4/diagrama-estados.png}
\caption{Diagrama de estados de um contador de 3 bits\cite{floyd2011digital}}
\label{fig:diagrama}
\end{figure}
Existem basicamente, dois modelos de máquinas de estados, a saber, máquina Moore e máquina Mealy. Na máquina Moore, a saída depende única e exclusivamente dos seus estados atuais, enquanto na máquina Mealy além de depender dos seus estados atuais, a saída depende, também, das variáveis de entrada naquele instante. Na figura~\ref{fig:diagrama-mealy} podemos observar o digrama de transição de estados para uma máquina Moore, já na figura~\ref{fig:diagrama-moore} temos o diagrama para uma máquina Mealy. É importante notarmos, através dos diagramas, a diferença referente a saída de cada máquina.
%Figura 2 e 3
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/fig2MaquinaMealy.png}
\caption{Exemplo de diagrama de estados usando uma máquina Mealy}
\label{fig:diagrama-mealy}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/fig3MaquinaMoore.png}
\caption{Exemplo de diagrama de estados usando uma máquina Moore}
\label{fig:diagrama-moore}
\end{figure}
\subsection{Flip-Flop T}
Além dos Flip-Flops até o momento estudados, temos na literatura, outro Flip-flop que é amplamente utilizado, qual seja, o Flip-flop T. Na figura~\ref{fig:fft} podemos analisar o bloco lógico e a tabela verdade para este Flip-Flop. Quando a entrada T estiver em estado alto, o flip-flop T, onde T significa \textit{toggle}, comutará quando o \textit{clock} for aplicado. Se a entrada T for baixa, o flip-flop mantém o valor do seu estado. Vale lembrar, que o Flip-flop T pode ser obtido utilizando um Flip-flop J-K, basta conectar as entradas J e K em nível lógico alto de maneira intermitente.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/fig4Flip-Flopt.png}
\caption{Tabela Verdade do Flip Flop T}
\label{fig:fft}
\end{figure}
\subsection{Registrador de Deslocamento}
No universo dos circuitos digitais, principalmente no que diz respeito aos Flip-Flops, encontramos diversas aplicações. Uma, das várias aplicações é na forma de registrador de deslocamento, os quais são amplamente utilizados hoje em dia no desenvolvimento de circuitos robustos. Segundo \cite{floyd2011digital} os registradores de deslocamento consistem de arranjos de Flip-Flops e são importantes em aplicações que envolvem o armazenamento e a transferência de dados em sistemas digitais. É importante esclarecer, que o funcionamente do registrador de deslocamento é diferente de um contador comum, ou seja, ele não tem uma sequência específica de estados, apesar de em alguns casos poder ser utilizado como tal. Na figura~\ref{fig:rdeslocamento} podemos ver um circuito típico para um registrador de deslocamento de quatro bits com entrada e saída serial de dados.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.7\textwidth]{img/p4/Fig5RegistradorDeslocamento.png}
\caption{Representação de um registrador de deslocamento de 4 bits \cite{floyd2011digital}}
\label{fig:rdeslocamento}
\end{figure}
\subsection{Flip-Flop T}
São diversos, os tipos de registradores de deslocamento, na figura~\ref{fig:registradores} pode-se observar os diversos tipos de registradores de deslocamento existentes, sendo ilustrados de forma abstrata. Dentre eles, um dos mais importantes está o registrador com entrada serial e saída paralela, o qual será abordado com mais detalhe na próxima sub-subseção.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.8\textwidth]{img/p4/Fig6tipodeRegistrador.png}
\caption{Diferentes tipos de registradores, segundo \cite{floyd2011digital}}
\label{fig:registradores}
\end{figure}
\subsubsection{Registrador de deslocamento com entrada serial e saída paralela}
Como o próprio nome já designa, neste tipo de registrador a entrada de dados se dá de forma serial, contudo, a saída não será serial e sim paralela. Desta forma, segundo \cite{floyd2011digital} uma vez armazenados os dados, cada bit aparece em sua linha de saída respectiva e todos os bits são disponibilizados simultaneamente, em vez de um bit de cada vez como no registrador com saída serial. Na figura~\ref{fig:registradorsp} podemos ver uma exemplificação para este circuito. Notem que neste tipo de registrador a saída de cada estágio está disponível.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/Fig7RegistradorSerialParalelo.png}
\caption{Registrador Serial-Paralelo}
\label{fig:registradorsp}
\end{figure}
\subsection{Comunicação Serial}
No contexto computacional, temos duas formas de comunicação principais, são elas: comunicação serial e comunicação paralela. cada uma com suas vantagens e desvantagens. Na comunicação paralela os bits são transferidos de maneira simultânea, conferindo para este tipo de comunicação a vantagem de rapidez e simplicidade de interface, contudo essa mesma vantagem acaba gerando algumas desvantagens, pois há um maior número de conexões, o que pode gerar ruído, perda de sincronismo além de um custo maior. Já na comunicação serial os dados são transferidos bit a bit, conferindo a vantagem de se ter menos fios, ou seja, baixo custo, além de ser capaz de transmitir dados em distâncias maiores. Contudo, nesta forma de comunicação, justamente por haver apenas um fio que transmite os dados, ela acaba sendo mais lenta, e com um grau de complexidade maior. Todavia, apesar das desvantagens da comunicação serial, a mesma se mostra mais robusta e mais viável, a ser aplicada em sistemas onde a confiabilidade dos dados são importantes. Assim, esta subseção tratará especificamente deste tipo de comunicação.
\subsubsection{Transmissão de Dados}
Antes de falarmos acerca de como ocorrer a transmissão de dados de forma serial, é importante lembrar que existe diversas interfaces que empregam este tipo de comunicação, entre as interfaces mais antigas estão as portas $DB9$ e $DB25$, as quais podem ser encontradas nos computadores mais antigos. Na figura~\ref{fig:db9db25} temos um exemplo para estas duas portas. Cada pino nestas portas tem uma determinada função, podendo variar de acordo com o seu tipo. Na figura~\ref{fig:pinosdb9} podemos ver a função de cada pino na porta $DB9$.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/fig8DB9DB25.png}
\caption{Portas DB9 e DB25, interfaces seriais encontradas em computadores antigos.}
\label{fig:db9db25}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/Fig9serial_pinos.png}
\caption{Funcionalidades dos pinos presentes na porta DB9}
\label{fig:pinosdb9}
\end{figure}
Na maioria das aplicações, a comunicação serial acontece de forma assíncrona, onde geralmente se tem 11 bits sendo transferidos. Um desses bits é o \textit{start bit}, o qual notifica um receptor que um novo dado serial esta disponível, seguido pelos bits de dados, um bit opcional de paridade \textit{parity} e um ou mais bits de parada \textit{stop bits}\cite{porta-serial}. Percebam que o número de bits de paridade, de parada podem variar, dependendo apenas do padrão de transmissão escolhido pelo projetista. Na figura~\ref{fig:cserial} pode-se analisar esta forma de comunicação de maneira mais concreta. Vale acrescentar, que enquanto o bit de parada se manter em nível alto, os dados não estarão sendo transmitidos, e sim, apenas, quando ocorrer a mudança de estado do nível lógico alto para baixo, caracterizando assim, o bit de início, ou \textit{start bit}.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/Fig10rs232.jpg}
\caption{Características de uma transferência de dados serial.}
\label{fig:cserial}
\end{figure}
Cada dispositivo que emprega a comunicação serial, tem uma determinada taxa de velocidade, sendo que para se referir a velocidade de transferência devemos usar o termo bps \textit{bits-per-second}, ou seja, bits por segundo. Em alguns equipamentos, costuma-se chamar esta taxa como \textit{baud}. Desta forma, a expressão 9600 bps é equivalente a 9600 bauds.
\subsubsection{Padrão RS-232}
Segundo (http://www.c2o.pro.br/automacao/x834.html) RS-232 é um padrão definido pela \textit{EIA-Eletronic Industries Association} para os dispositivos usados para comunicação serial. Este padrão está disponível em três versões, quais sejam, (A, B e C). Cada um especifica uma faixa de voltagens para os níveis ligado e desligado. Por exemplo, na versão RS-232 para representar nível lógico alto utiliza-se as tensões de $-3V$ a $-12V$, enquanto para representar nível lógico baixo é utilizado tensão na faixa de $+3V$ e $+12V$. É importante notar que a representação de nível lógico alto e nível baixo nesse padrão não utiliza o modelo convencional de tensão. Vale lembrar que este padrão é utilizado marjoritariamente nas portas $DB9$ e $DB25$.
\subsubsection{Conversor de nível MAX-232}
Os dispositivos eletrônicos utilizam níveis de tensão diferentes para identificar nível lógico baixo e nível lógico alto, dependendo apenas da tecnologia que está sendo empregada. Desta forma, quando se vai utilizar a porta serial do computador pessoal para se comunicar com algum dispositivo controlador, tem-se que analisar o padrão que o mesmo utiliza,pois a depender das especificações, será necessário fazer a conversão do nível. Por exemplo, vamos supor que queremos fazer uma comunicação entre o computador pessoal através da porta serial, com uma \textit{FPGA}. No entanto, a \textit{FPGA} utiliza a tecnologia \textit{TTL}, ou seja, 0V a 0,8V representa nível lógico baixo e $2V$ a $5V$ representa nível lógico alto. Percebe-se, assim, uma incompatibilidade entre o padrão RS-232 e o \textit{TTL}, desta forma é necessário fazer a conversão. Todavia, existe alguns dispositivos que tem a capacidade de fazer essa conversão, um deles é o MAX-232, o qual faz a conversão entre os níveis utilizados pelo padrão RS-232 para TTL, e vice-versa. Na figura~\ref{fig:232} podemos ver uma configuração comum utilizando um conversor MAX-232.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.5\textwidth]{img/p4/Fig11-microcontroller_uart_max232_circuit.jpg}
\caption{MAX-232: Conversor de RS-232 para TTL.}
\label{fig:232}
\end{figure}
\subsubsection{Software de comunicação}
Para poder coletar os dados diretamente do usuário e enviá-los para o circuito, os mesmos precisam passar por um tratamento. Entre o caminho percorrido está abrir a porta de comunicação, converter os dados coletados por o usuário em binário e, finalmente, enviá-los através do $DB-9$.
Para ajudar as realizar as tarefas correspondentes ao manuseio de permissões e envio de dados, foi utilizada a biblioteca $RS232$, construída em linguagem C e disponível e documentada em $http://www.teuniz.net/RS-232/$.
\section{Metodologia}
Utilizando-se, mais uma vez, da base teórica fornecida pela metodologia $PBL$, os alunos componentes da turma T04 iniciaram as sessões destinadas a solução do problema com a leitura do mesmo em duas etapas, uma individual e outra coletiva. Tendo como objetivo a detecção inicial de dúvidas, fatos importantes relacionados ao problema e ideias de soluções, o $brainstorm$ inicial ajudou e identificar as principais características do problema, bem assim como ter uma ideia de como iniciar o desenvolvimento do mesmo.
Os membros da sessão, solucionando as questões um dos outros quando possível durante o processo, buscaram tomar decisões de projeto para formalização das obrigações, analisando fatores positivos e negativos das soluções propostas, optando pela solução que fosse mais simples e que estivesse de acordo com o problema, de acordo com a visão dos alunos. Com esse método deu-se início a construção da solução do problema 4 do MI - Circuitos Digitais, começando pela formalização e definição de padrões de projeto e de um diagrama que as mostrasse aplicadas ao circuito.
\subsection{Decisões de Projeto}
Antes de iniciar a implementação do projeto em si, é necessário traçar o caminho a percorrer durante todo o processo de solução do problema. Essa metodologia foi adotada pelos membros da sessão após algumas decisões de projeto que não deram o resultado esperado nos problemas anteriores, causando incongruências entre os módulos projetados entre diferentes membros da turma.
Dado o sucesso da abordagem no problema anterior, foi de comum acordo que a turma deveria modularizar o problema e dividir tais módulos entre pequenos subgrupos, sendo que cada subgrupo deveria enviar um pequeno relatório contendo todas as informações necessárias para a elaboração do mesmo, para conscientizar os outros alunos do processo de construção, além da descrição do bloco na ferramenta EDA \textit{Quartus II 9.0}. Para garantir que, quando fossem unidos, todos os blocos funcionassem, a turma elaborou um diagrama completo do problema, estabelecendo padrões para cada segmento.
\subsection{Elaboração do Diagrama}
Iniciado na primeira sessão do problema 4 e finalizado na terceira sessão do mesmo problema, o diagrama teve como objetivo fazer com que todos os alunos tivessem consciência plena do funcionamento do circuito, da entrada à saída. Descrevendo as relações entre os blocos e a função, a quantidade de entrada e a quantidade de saídas de cada um deles e, também, padrões de nomenclatura, o diagrama descreve o que cada subgrupo deve fazer para que, quando combinadas, as frações do problema resultem em um circuito funcional e dentro da perspectiva do problema.
O resultado desse processo de descrição em alto nível do projeto pode ser conferido na figura~\ref{fig:diagrama}, que destaca também as tarefas de cada subgrupo. Por exemplo, o subgrupo vermelho é responsável pela elaboração dos módulos correspondentes ao \textit{comparador} e \textit{Bloco do Mux-Coordenada}.
\begin{figure}[!htbp]
\centering
\includegraphics[width=1\textwidth]{img/p4/diagrama.png}
\caption{Diagrama de blocos do Problema 4: [COLOCAR NOME DO PROBLEMA]}
\label{fig:diagrama}
\end{figure}
\subsection{Memórias RAM}
Como explicitado nas regras determinadas pela turma, o jogo será composto de 15 jogadas de preenchimento do tabuleiro mais 20 jogadas na qual o jogador tentará acertar o barco do oponente. A partir desse dado, é perceptível que precisam ser armazenados 15 posições diferentes, sendo cada uma correspondente a um pixel de um barco que foi inserido no tabuleiro. Utilizando a codificação de 8 $bits$ por coordenada, sendo 4 bits correspondentes a linha e outros 4 correspondentes ao pixel escolhido. A partir dessas informações, chega-se a conclusão que a célula da memória RAM deve ter 1 byte, e que a memória deve conter 15 dessas células.
Tendo em vista o mercado e a praticidade para uso em grandes escalas, a equipe resolveu construir uma memória com 16 células de 1 byte. Tal decisão foi tomada partindo dos princípios que o método de endereçamento da mesma não seria alterado, mas a 16ª célula ficaria ociosa. Porém, por ser uma potência de $2$, tal memória pode ser ligada em cascata de modo que um conjunto das mesmas possa, com facilidade, originar uma memória das capacidades comuns e requisitadas do mercado, como 512$mb$, 1$gb$, 4$gb$ e entre outras.
Diferentemente do problema anterior, no Problema 4, o endereçador de memória foi integrado na mesma, objetivando uma maior congruência de projeto e uma visão mais limpa e ampla da totalidade do mesmo. Além dessa característica, como pode ser visto na figura~\ref{fig:ram15} a memória elaborada conta com 8 bits de entrada, um bit de clock, um bit de $clear$, um bit seletor $R/\overline{W}$ e 4 bits de endereçamento. Essa última característica segue o padrão crescente de 0 a 15, ou seja, o endereço 0 corresponde a primeira célula de memória, o 2 a segunda e assim por diante.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.3\textwidth]{img/p4/ram15bytes.png}
\caption{Bloco lógico da Memória Ram na EDA}
\label{fig:ram15}
\end{figure}
\subsubsection{Célula de Memória}
Para elaborar o item anterior, fez-se necessária a elaboração de uma unidade menor de memória, sendo esta a unidade básica utilizada no projeto, 1 byte. Em suma, cada célula de memória do tipo demonstrado na figura ~\ref{fig:celulamemoria} funciona como uma miniatura da memória anteriormente citada, porém só possui um bit de endereçamento, uma vez que só existem duas possibilidades: estar ou não estar selecionada.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.3\textwidth]{img/p4/celulamemoria.png}
\caption{Bloco lógico da Memória Ram na EDA}
\label{fig:celulamemoria}
\end{figure}
Buscando melhorar o desempenho da memória, em suas células foram implementados diferentes mecanismos, um deles permite que a mesma seja ligada, ou desligada completamente, já o outro faz com que a memória só seja gravada uma única vez, evitando possíveis dados duplicados e alteração indevida dos mesmos. O segundo mecanismo pode ser visto na figura~\ref{fig:ff1}. Esse mecanismo é uma máquina de estados de Moore que está representada na figura~\ref{fig:fsm}. O outro mecanismo corresponde a equação de excitação de um registrador do tipo T para as variáveis dadas. T deve mudar de estado quando sua saída $Q$ e sua entrada $I$ forem diferentes, e, além disso, a $Z$ do mecanismo anterior deve estar em nível lógico 1, ou seja: T= Z(Q$\oplus$I).
\begin{figure}[!htbp]
\centering
\includegraphics[width=.8\textwidth]{img/p4/ff1.png}
\caption{Máquina de estados para máquina de uma única ação.}
\label{fig:ff1}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=.3\textwidth]{img/p4/fsm.png}
\caption{Diagrama de estados para máquina de uma única ação.}
\label{fig:fsm}
\end{figure}
\subsubsection{Comunicação Serial}
Um, dos vários requisitos propostos pelo problema quatro, diz respeito a comunicação serial que deveria acontecer entre o computador pessoal e o Circuito Digital desenvolvido, onde esta, haveria de ser configurada no modo $start-stop$ assíncrono, sendo que o frame de dados que seria utilizado nesse modo seria composto por 11 $bits$. Assim, é de se notar que a transferência de dados ocorreria utilizando alguma das portas seriais existentes em um computador pessoal. Desta forma, foi definido entre os membros do grupo que seria utilizada a porta serial $DB9$ para fazer essa comunicação no projeto que estava sendo desenvolvido, ou seja, seria utilizado o padrão $RS-232$ de comunicação de dados.
Depois de definir que seria utilizado a porta $DB9$, era necessário criar um circuito que fosse capaz de identificar quando essa transferência estivesse acontecendo, ou seja, um circuito que fosse capaz de reconhecer quando o computador estava enviando um $frame$ de dados para $FPGA$. Este circuito deveria ser capaz, ainda, de transformar os dados que estavam sendo transferidos de forma serial, para o formato paralelo, tornando assim possível a leitura correta dos dados, possibilitando o seu uso em outra parte do circuito. A FIGURA AQUI mostra os blocos lógicos para este circuito. Nesta FIGURA podemos observar três blocos de grande importância, a saber, o bloco AtivaRecepcao, outro bloco chamado Contador, e mais chamado RegistraDados.O AtivaRecepcao é responsável, como o próprio nome dele já deixa explicito, por ativar a recepção do $frame$ de dados advindos da porta serial do computador pessoal. Quando o $start-bit$ é detectado, a entrada $Enable$ deste bloco muda para nível lógico, alto ativando assim o bloco RegistraDados, o qual inicia de fato a leitura do $frame$ de dados enviados. Percebam que neste mesmo bloco temos uma entrada chamada DadosLidos, esta entrada é responsável por levar o $Enable$ novamente para nível baixo, tornando possível uma nova leitura. Sendo que a entrada é correspondente ao $stop-bit$, ou seja, o último bit do $frame$ de dados, indicando que aqueles determinados dados foram lidos com sucesso. Pelo fato da simplicidade do circuito interno, o mesmo não será exibido.
\begin{figure}[!htbp]
\centering
\includegraphics[width=.3\textwidth]{img/p4/aa1.png}
\caption{Circuito RegistraDados}
\label{fig:fsm}
\end{figure}
\begin{figure}[!htbp]
\centering
\includegraphics[width=.3\textwidth]{img/p4/aa2.png}
\caption{Circuito AtivaRecepção.}
\label{fig:fsm}
\end{figure}
Já o bloco Contador, tem uma função por demasiada simples, ele é ativado quando se inicia a leitura de um $frame$ de dados. Ele é um contador de módulo 10, ou seja, é capaz de gerar dez estados distintos. Ele é utilizado para ativar a saída dos dados lidos de forma serial, ou seja, depois que os $bits$ vindos do canal de comunicação serial forem lidos e convertidos para o formato paralelo, o contador estará no seu nono estado, qual seja, 1001, esse mesmo valor é decodificado, ativando assim a saída de dados do registrador paralelo, pois esse valor decodificado gerará um nível lógico alto, onde esse valor alto é a entrada do $Clock$ do registrador paralelo. Essa ideia tornar-se-á mais clara depois que o circuito interno do bloco RegistraDados for observado. É importante salientar, também, que o circuito interno do contador não será mostrado, devido, é claro, a sua simplicidade de implementação.
O bloco RegistraDados, dentre, os blocos descritos, é o mais importante, pois ele é o responsável, por, de fato, armazenar e transformar os $bits$ do formato serial para paralelo. O circuito interno para este bloco pode ser observado no ANEXO 1. O funcionamento deste bloco é bem simples. Depois de ativado, inicia-se a leitura e conversão dos dados para o formato paraleloa cada pulso do $clock$, sendo que o registrador de entrada de dados, está conectado, também a outro registrador de saída de dados, onde cada $Flip-Flop$ de acordo com seu valor posicional estão conectados entre si. Observem que os dados que estão no registrador de saída de dados, só estarão disponíveis, realmente, quando o valor do contador estiver em 9, evidenciando assim, que todos os $bits$ foram lidos de forma correta, podendo desta forma, serem disponibilizados para outra aplicação fazer uso. É importante salientar, que depois que este conjunto de dados forem lidos, tanto o bloco AtivaRecepcao, quanto o bloco Contador, serão resetados, podendo, então, serem utilizados na recepção de outro conjunto de $bits$.
Vale asseverar, que os bits advindos da porta serial estão sendo transferidos a uma taxa de 9600 $bits$ por segundo, ou 9,6$kbs$. Isto foi definido no $software$ que fora desenvolvido tendo como objetivo justamente fazer esta interface entre o usuário e o circuito projetado.
Quando se fala em comunicação serial, o sincronismo utilizado para recepção dos dados, deve ser observado de forma minuciosa, visando a leitura correta dos dados que estão no $frame$. Desta forma, tentando resolver o problema do sincronismo no projeto desenvolvido foi utilizado o seguinte pensamento: como a frequência do $clock$ da $FPGA$ é de 32,768 $MHz$ e a taxa de $bits$ por segundo utilizada na programação é de 9600 $bps$, fazendo 32768000/x = 9600, teremos X valendo aproximadamente 3413, ou seja, usando um contador de módulo 17 para alternar um $Flip-Flop T$ e obter uma frequência 34 vezes menor, sendo que em seguida foi necessário inserir um contador de módulo 100 para dividir a frequência por 200.Tendo assim, um pulso de clock a cada bit enviado.
\subsection{Unificação dos blocos em um projeto}
Diferentemente do problema anterior, no problema 4 a tarefa dada como prioridade a um subgrupo, assim como a tarefa de refatoração do circuito e montagem do cabo de transmissão foram dados como prioridades a outros grupos. Apesar de estarem responsáveis, o respectivo grupo não tirava de ninguém a responsabilidade de montar por si só o circuito novamente, em busca de aprender por inteiro o funcionamento do mesmo.
Ao receber os blocos, não foi difícil montá-los em um único projeto, uma vez que, semelhante ao problema anterior, teve-se ao lado um diagrama com todas as conexões e padrões de cada unidade lógica ali presente, e, além disso, todas já estavam devidamente testadas, eliminando chances de haverem problemas relacionados ao mal funcionamento de alguma das unidades. Feita a montagem, a mesma foi disponibilizada para o grupo para análise e verificação de erros. Nenhum erro foi apontado.
\subsection{Refatoração do circuito na protoboard}
Para poder comportar a transmissão serial, o circuito físico precisava ser modificado, adicionando suporte a um conversor de tensão, alguns capacitores e um cabo de transmissão serial. Além disso, muitos dos componentes do problema anterior puderam ser retirados, muitos deles relacionados a entrada de dados, tais como o DIP Switch e resistores de $pull-down$. Um dos itens adicionados a protoboard foi o MAX-232, um circuito que converte a tensão vinda da porta $DB9$ do computador para a tensão na faixa TTL. Para funcionar corretamente, o mesmo foi adicionado ao circuito seguindo as instruções da figura~\ref{fig:max232}
\begin{figure}[!htbp]
\centering
\includegraphics[width=.8\textwidth]{img/p4/232.jpg}
\caption{Circuito do MAX-232.}
\label{fig:max232}
\end{figure}
Para o cabo de comunicação, foi utilizado um cabo antigo e uma porta $DB9$ fêmea. No $DB9$ foram soldados fios nas entradas $TX$, $RX$ e $GND$, mesmo sabendo que apenas a porta $TX$ seria usada, uma vez que os dados seguiriam uma via única do computador para o circuito.
\section{Discussões e resultados}
Nesta sessão serão abordados os principais resultados obtidos, os testes realizados e, além disso, serão abordados alguns detalhes que dizem respeito ao circuito lógico.
\subsection{Testes lógicos no ambiente Quartus II}
Passados como tarefas para os subgrupos, os testes lógicos foram realizados bloco-a-bloco, tentando diminuir ao máximo a chance de qualquer erro de implementação de lógica. Para os testes da memória RAM de 15 bytes e do conversor serial-paralelo, dado o fato que esses são os únicos itens que o grupo não trabalhou ou conhece na escala exigida pelo problema.
\subsubsection{Testes da Memória RAM}
Inicialmente, foi feito um conjunto de testes básicos para verificar se a memória estava sendo capaz de distinguir os momentos de gravação/leitura e gravando apenas um dado por célula. Para isso, foi fixado uma célula(no caso da figura~\ref{fig:ramtest}, a do endereço $EB0=0, EB1=0, EB2=0, EB3=0$). Avaliando os resultados, percebe-se uma constante nas saídas $0,1,2,3,4,5,6,7$ que equivalem aos primeiros valores enviados no modo de gravação, apontando o sucesso do teste.
\begin{figure}[!htbp]
\centering
\includegraphics[width=1\textwidth]{img/p4/testram1.png}
\caption{Teste de persistência e modo de operação}
\label{fig:ramtest}
\end{figure}
Prosseguindo os testes, o teste anterior foi repetido em uma escala de variação maior e utilizando-se todos os endereços disponíveis da memória RAM. O esperado é que a saída equivalesse ao primeiro valor de entrada em cada uma das células, e para cada período de clock entre 1 e 15, as entradas deveriam equivaler as saídas quando a memória estivesse em modo leitura. Ou seja, se em loop de entradas constantes, quando for colocada em modo de leitura, a memória vai "imitar" as 16 primeiras sequências de entrada, como demonstrado com sucesso no teste descrito na figura~\ref{fig:ramtest2}.
\begin{figure}[!htbp]
\centering
\includegraphics[width=1\textwidth]{img/p4/testram2.png}
\caption{Teste de persistência e modo de operação}
\label{fig:ramtest2}
\end{figure}
\subsection{Funcionamento do Circuito}
Segundo os requisitos do Problema 4, o usuário deve entrar com coordenadas em um software que se encarregará de direcionar os dados para o circuito, no qual o tratamento de dados será feito. A partir desses dados, existem dois momentos:
\begin{itemize}
\item Modo Planejamento: O usuário insere 15 coordenadas nas quais deseja que fiquem seus barcos, inicialmente todos os pixels da matriz estão apagados.
\item Modo Jogo: O usuário tenta acertar os pixels que representam barcos, caso acerte, o pixel acende. O número máximo de tentativas é de 20, e caso não consiga encontrar todos os barcos, o jogo é encerrado.
\end{itemize}
\subsection{Testes práticos}
Antes de realizar os testes do circuito na Protoboard, fazia-se necessário fazer a demarcação dos pinos adicionais na ferramenta Quartus II e gravar o circuito lógico do mesmo na FPGA disponível no laboratório. Dada significante queda de uso dos pinos do problema 3 para o problema 4, não foi necessária a demarcação de pinos e os menos foram reaproveitados. Ligados os novos componentes, o circuito foi ligado e a gravação foi feita.
Dispondo-se de todas as ferramentas necessárias, o teste foi realizado introduzindo-se todas as coordenadas possíveis via software... %TODO
\section{Conclusão}
Observando os requisitos para o desenvolvimento deste circuito digital, é notável que nem todas as funcionalidades foram alcançadas. A configuração $start-stop$ assíncrona não foi obtida com sucesso, mesmo depois de realizados diversos testes no circuito projetado para realizar esta função, não se obteve êxito, tornando, a partir disso, inviável a utilização do modo jogo a partir da comunicação serial. Não se sabe ao certo o que motivou esta falha, uma suposição se refere ao fato de que possivelmente foi utilizado uma frequência errônea para se ler os dados oriundos da porta serial.
Afora este problema relatado acima, todas as outras funcionalidades estão funcionando conforme o solicitado, ou seja, a lógica de resolução do problema está correta. Isto se torna mais concreto devido ao sucesso fatídico alcançado através dos testes realizados. Tendo sido revisado e simplificado várias vezes utilizando métodos específicos para a tarefa até chegar ao sistema mais simples, funcional e profícuo. De maneira semelhante aos problemas anteriores, o circuito final deste problema manteve uma boa ergonomia, inclusive foi adicionando um botão na $protoboard$, tendo como objetivo limpar a memória $Ram$, tornando possível a inicialização de outra partida do jogo batalha naval.
Vale acrescentar, que os conteúdos estudados para resolução do problema, os quais de uma certa maneira gerou conhecimento, tanto em grupo quanto individualmente, são de fundamental importância na área da eletrônica, principalmente em relação a comunicação serial de dados, a qual é amplamente utilizada hoje em dia. Não se pode esquecer, é claro, das máquinas de estados, as quais são utilizadas em grandes aplicações. Sendo assim, estes conteúdos, e outros mais, irão contribuir de forma significativa para o bom desenvolvimento profissional de cada integrante do grupo e também facilitarão o entendimento de conteúdo futuros dentro do curso, haja vista que eles têm uma conexão muito forte com outros conteúdos do mundo da eletrônica,e que ainda serão estudados.
\section{Referências}
Nessa seção constam os trabalhos utilizados como base teórica que foram necessários para chegar a solução descrita nesse relatório.
\bibliographystyle{sbc}
\bibliography{sbc-template}
\end{document}