Buscar

Projetos de sistemas digitais usando HDL - RESUMO ESCRITO

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 19 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

UFPI - CCN - CIÊNCIA DA COMPUTAÇÃO
Circuitos Digitais - Professor Dr. Ivan Saraiva
Alunos: Rodrigo do Nascimento Borges
Vicente Cleyton Gonçalves de Sousa Carvalho
Projetos de sistema digital usando HDL
INTRODUÇÃO
Uma maneira para a criação de um projeto visando desenvolver um circuito
digital em um sistema é utilizar a técnica de projeto de dispositivos lógicos
programáveis (PLDs), dispositivos estes que não apresentam uma função lógica
definida até que sejam configurados pelo desenvolvedor. Com o auxílio da linguagem
de descrição de hardware (HDL) isso é possível. Alguns exemplos de linguagem são o
VHDL(Very High Speed Integrated Circuits) e o AHDL(Altera Hardware Description
Language).
SUMÁRIO
Slide 02 - Gerenciamento de projetos
Slide 03 - Projeto de acionador de motor de passo: Funcionamento e definição geral
Slide 04 - Planejamento estratégico: interface para um motor de passo universal
Slide 05 - Síntese e testes: módulo 8 em VHDL e simulação
Slide 06 - Decodificador de sequência de passo completo em VHDL e simulação
Slide 07 - Síntese e testes: Acionador de motor de passo em VHDL
Slide 08 - Síntese e testes: Teste de simulação de um acionador de motor de passo
Slide 09 - Projeto de codificador de teclado numérico: Diagrama de bloco
Slide 10 - Funcionamento do codificador e diagrama de estado do contador em anel
Slide 11 - Decomposição do problema: Codificador para varredura em VHDL
Slide 12 - Decomposição do problema: Simulação do codificador para varredura
Slide 13 - Projeto de relógio digital
Slide 14 - Hierarquia
Slide 15 - Síntese - Construção dos módulos
Slide 16 - Construção dos módulos: MOD12
Slide 17 - Integração do sistema
Slide 18 - Integração do sistema - FINAL
Slide 02
- Gerenciamento de projetos
Quando se trata de compreender e organizar projetos de pequeno porte, também são
aplicáveis os passos seguidos em um grandes projetos modulares. Esses passos são:
Definição, Planejamento, Síntese e Integração. Sendo o primeiro deles, em qualquer
projeto, a definição geral. Nessa etapa é necessário definir:
- Quantos bits de dados são necessários;
- Quantos dispositivos são controlados pelas saídas;
- Quais são os nomes de cada entrada e saída;
- Se as entradas e saídas estão em nível ativo ALTO ou ativo BAIXO;
- Quais são os requisitos de velocidade;
- Como esse dispositivo deve funcionar;
- O que determinará a finalização bem-sucedida desse projeto.
Logo em seguida, temos o segundo passo, planejamento estratégico/decomposição do
problema, que tem a função de dividir o projeto em partes mais simples, atendendo os
seguintes requisitos:
- Desenvolver um modo de testar cada parte;
- Cada parte precisa se encaixar bem no sistema todo;
- Conhecer a natureza de todos os sinais que conectam as partes;
- O funcionamento exato de cada bloco precisa ser definido e entendido;
- É necessário ter uma visão clara de como fazer cada bloco funcionar.
Após isso, temos o terceiro passo, síntese e teste de cada parte, que é onde cada
subsistema deve ser construído a partir de seu nível mais simples. No caso de um sistema
digital projetado usando HDL, significa escrever trechos de código e desenvolver um plano
para testar esse código e garantir que ele preencha todos os critérios.
Por fim, temos a integração do sistema e teste, que consiste em colocar os blocos
juntos e testá-los como unidade. Os blocos são acrescentados e testados em cada etapa até
que todo o projeto funcione.
Slide 03
- Projeto de acionador de motor de passo
Trazendo as informações sobre gerenciamento de projetos, vamos começar o
projeto. Para darmos início é preciso entender o funcionamento deste dispositivo:
- Funcionamento
Um motor de passo é formado por 4 enrolamentos e seu comportamento pode
ser bastante semelhante ao de uma sequência de passo completo (full-step)
dependendo da forma como os enrolamentos são energizados em cada estado. No
passo completo temos 2 enrolamentos ativados durante todos os estados para
garantir a rotação (15º por passo), no entanto também é possível ter uma sequência
que gera somente metade da rotação de uma full-step. Essa sequência é conhecida
como sequência de meio passo e é usada quando se deseja obter passos menores,
pois diferente do full-step, o meio passo usa apenas um enrolamento energizado
entre passos completos.
Para aplicar esses princípios no motor de passo é necessário definir um estado
intermediário que energiza apenas um enrolamento por vez. A wave-drive
proporciona um funcionamento mais suave quando combinada com as sequências de
meio passo e passo completo, e esses estados e sequências (tabela 1.1), que
consistem em ativar um enrolamento e desativar outro, representam o acionamento
do motor.
- Definição do problema
Para realizar o acionamento do motor, o microcontrolador precisará de uma
interface que interprete os sinais gerados e ative as bobinas corretamente. Essa
interface será controlada por dois pinos de entrada M1 e M0, que definirão o modo
como o motor irá funcionar, ou seja, qual sequência de passo será realizada.
Sendo assim, a interface funcionará sob um entre quatro modos: passo completo
decodificado, meio passo decodificado, wave-drive decodificado ou acionamento
direto não decodificado: nos primeiros três modos, a interface recebe dois bits de
controle - passo e sentido. No quarto modo de funcionamento o microcontrolador
controla diretamente cada bobina do motor.
Entradas:
Passo(step): disparo por borda de subida;
Sentido(dir): 0 = para trás; 1 = para frente;
Cin0, cin1, cin2, cin3, m1, m0: entradas de controle em nível ALTO.
Saídas:
cout0, cout1, cout2, cout3: entradas de controle em nível ALTO.
Slide 04
-Planejamento estratégico: interface para um motor de passo universal
Como podemos ver no slide (figura 1.1), temos um circuito de interface que conecta o
microcontrolador ao motor de passo e interpreta sinais de acordo com as definições feitas
no início do projeto.
Esta interface é composta por um contador binário crescente/decrescente que
responde às entradas de passo e sentido, conectado a um decodificador que traduz a
contagem binária no estado de saída adequado, dependendo da configuração da entrada de
modo. Quando o modo está setado para 3, o circuito ignora as entradas do contador e
transmite as entradas de controle diretamente às saídas.
Agora, é necessário desenvolver um modo de testar cada parte. Para isso, o contador
deve ser testado em um simulador usando apenas as entradas de sentido e passo. Sendo
assim, cada sequência traduzida deve funcionar individualmente com o contador e fazer com
que as entradas de modo selecionem uma das sequências do decodificador e acrescentar a
opção de acionamento direto.
Assim, quando o circuito puder seguir os estados definidos na tabela 1.1, em ambos os
sentidos para todas as sequências de modo e transmitir os quatro sinais cin (cin0, cin1, cin2,
cin3, cin4) diretamente a cout no modo 3 teremos uma visão clara de como cada bloco deve
funcionar.
Slide 05
- Síntese e testes: módulo 8 em VHDL e simulação
Nesse slide temos um contador crescente/decrescente de módulo 8 em VHDL (figura
1.2) e o resultado da sua simulação (figura 1.3). Tratando se de VHDL, precisamos
apresentar alguns conceitos da linguagem para uma visão mais clara.
Primeiramente, na estrutura do código, temos a ENTITY (Entidade), que é onde será
definida a interface de entradas e saídas do circuito. Nela temos a declaração das portas
(PORT), que no exemplo mostrado no slide são as portas de entrada step e dir e a porta de
saída q, que possui um range de 0 a 7. Após isso, encerramos a entidade com o comando
END e a declaração do seu nome.
Logo em seguida temos a ARCHITECTURE (Arquitetura), que constitui as definições
de comportamento do circuito propriamente dito. Nela temos os comandos BEGIN e END
que sinalizam o início e o fim de um processo. Como vemos no código, o primeiro BEGIN
traz um PROCESS na porta de entrada step(passo), ou seja, o comportamento necessário
para que o motor realize um passo. Dentro de PROCESS temosum contador(count) que
abrange de 0 a 7 para ser compatível com o range da porta de saída q, e logo em seguida
outro BEGIN para verificação da ocorrência de troca de valor do sinal no ciclo corrente do
step(step ‘EVENT) e se o step é igual a 1, então é verificado se a direção(dir) é crescente
(se dir = 1) ou decrescente (se dir = 0).
É visto também o resultado da simulação deste contador, no qual é possível notar a
troca constante de valor na porta de entrada step a cada pulso do clock e a variação de dir
quando crescente (saídas de 0 a 7) e decrescente (saídas de 7 a 0).
Slide 06
- Decodificador de sequência de passo completo em VHDL e simulação
Nessa parte, é apresentado um decodificador de sequência de passo completo em
VHDL(figura 1.4), que possui portas de entrada step e dir, saída q e saídas cout declaradas
como de tipo BIT_VECTOR (3 downto 0) para atribuir padrões de bit binário a elas com
quatro dígitos. Logo em seguida temos o comportamento de decodificação na sequência de
contagem do contador crescente/decrescente, onde podemos notar que os valores de count
são associados aos padrões de bit binário das saídas cout. Além disso, foi utilizado a
estrutura CASE para determinar que a variável count pode assumir um número limitado de
valores para selecionar a saída adequada.
Na simulação de sequência decodificada (figura 1.5), podemos ver o teste de seu
funcionamento com ciclos de clock para testar um ciclo de contagem crescente e
decrescente do contador e o que cada valor na contagem representa nas saídas cout. Neste
teste podemos ver que o sentido (dir) vai para frente enquanto o contador faz contagem
crescente de 0 a 7 na saída q, e logo após o sentido muda para trás quando a contagem é
decrescente de 7 a 0.
Slide 07
- Síntese e testes: Acionador de motor de passo em VHDL
Na figura 1.6 podemos notar que novas entradas foram definidas, são elas: m, que é a
entrada que define qual modo foi selecionado, declarado como BIT_VECTOR (1 DOWNTO
0), ou seja, padrão de bit com 2 dígitos e a entrada cin que são as entradas de controle dos
enrolamentos de acionamento direto, declarada como BIT_VECTOR (3 DOWNTO 0), padrão
de bit com 4 dígitos.
Como o controle de modo(m) possui quatro estados possíveis(00: passo completo, 01:
wave drive, 10: meio passo e 11: acionamento direto) e o objetivo é fazer algo diferente
com cada um, uma construção CASE foi utilizada para fazer aninhamento entre os modos
para selecionar o modo e outra dentro de cada modo. No primeiro CASE, temos a lógica de
funcionamento do passo completo, onde está sendo definido como decodificador vai
interpretar o modo 0 quando ativo. Assim como ,no segundo CASE, quando o modo 1 está
ativo e o terceiro CASE, quando o modo 2 está ativo. Quando chegamos ao acionamento
direto(modo 3), temos o funcionamento da entrada cin e então é ignorado as entradas do
contador e é transmitido às entradas de controle diretamente às saídas.
Slide 08
- Síntese e testes: Teste de simulação de um acionador de motor de passo
Nos testes de simulações do acionador de motor de passo(figura 1.7), podemos ver
que o circuito está funcionando de forma correta com a lógica do código. Pois, na figura
1.7(a) são mostrados os estados decodificando no modo 00 (passo completo), com o ciclo
em ambos os sentidos. Depois o modo 00(passo completo) muda para 01 e vemos que a
saída (cout) é decodificada para o modo wave-drive. Já na figura 1.17(b) podemos identificar
o estado wave-drive em ambos os sentidos e depois vemos que muda o modo para 10, o
que faz a sequência mudar para meio passo, e por fim, na figura 1.17(c) podemos notar que
o meio passo está contando em ordem crescente e reiniciando em ordem decrescente.
Então ao mudar para o modo 3, aos 7,5ms, os dados do acionamento direto(cin) são
transferidos para as saídas.
Slide 09
- Projeto de codificador de teclado numérico: Diagrama de bloco
Na figura 1.8, temos um diagrama de codificador para teclado numérico, nele nós
vemos um clock sensível a borda de subida ligado a um contador de anel(contadores
síncronos cuja designação é reflexo da interligação “em anel” das suas entradas/saídas de
dados), usado para gerar a varredura sequencial das quatro linhas(codificador de linha: R0,
R1, R2, R3).
Quando uma tecla pressionada é detectada, o contador em anel deve guardar o estado
atual (freeze) até que a tecla seja liberada. Cada tecla representa uma combinação única de
um número de linha e um de coluna, colunas(codificador de colunas: C0, C1, C2, C3) essas
que são ligadas a uma porta NAND que é usada para determinar se qualquer coluna está
em nível BAIXO, indicando que uma tecla está pressionada na linha ativa, já a sua saída
(Freeze) é utilizada para congelar o contador em anel e parar a varredura até que a tecla
seja liberada.
Enquanto os codificadores passam pelo atraso de propagação, os buffers tri-state são
habilitados(a intenção dos buffers tri-state é permitir que diversos circuitos compartilhem da
mesma linha ou barramento de dados, sem afetar umas às outras) e as saídas de dados
ficam em um estado temporário. Na próxima borda de subida do clock, o flip-flop D transfere
um nível ALTO de Freeze para a saída DAV, indicando que uma tecla está sendo
pressionada e os dados válidos estão disponíveis.
Slide 10
- Funcionamento do codificador e diagrama de estado do contador em anel
Nesse slide podemos ver como é o funcionamento do decodificador quando a tecla 6 é
pressionada(figura 1.9), e o que é importante constar é que ao serem usado
estrategicamente as linhas e colunas, podemos combinar os números binários de linha e
coluna para criar o valor binário das teclas hexadecimais. Para verificar isso, vemos que a
linha R1(01) é colocada em nível BAIXO e os dados no codificador de coluna são C2(10),
com isso podemos garantir que a tecla da linha R1 com C2 está pressionada e com a
decodificação de D0, D1, D2, D3 a combinação binária entre elas é 0110, que corresponde
ao número 6.Logo em seguida, temos um diagrama de estado do contador em anel de
acionamento de linha(figura 1.10), que vai precisar que todos os estados e valores de coluna
sejam codificados para gerar um número de linha binário e um número coluna binária,
respectivamente, de dois bits.
Estado Atual Freeze Próximo Estado
0111 0 1011
1 0111
1011 0 1101
1 1011
1101 0 1110
1 1101
1110 0 0111
1 1110
Todos os outros
estados
X 0111
Entradas:
4 entradas de leitura de coluna C0, C1, C2, C3
1 entrada de habilitação tristate OE
1 entrada de clock CLK
Saídas:
4 saídas de acionamento de linha R0, R1, R2, R3
4 saídas de dados codificados D0, D1, D2, D3
1 saída strobe de dados disponíveis DAV
Slide 11
- Decomposição do problema: Codificador para varredura em VHDL
No código VHDL para o codificador de varredura do teclado numérico, nós começamos
declarando uma biblioteca(LIBRARY) chamada ieee, que possui várias funções e tipos
básicos, como por exemplo, a inclusão do pacote ieee.std_logic_1164.all, que permite somar
vetores de bits (std_logic_vector) apenas com operador aditivo(+). Logo após, dentro da
entidade, encontramos as portas de entrada: clk(clock), declarada como tipo STD_LOGIC,
que é semelhante ao tipo bit, mas permite assumir mais valores que permitem melhor
análise na simulação, e também a entrada col(coluna), declarada como tipo
STD_LOGIC_VECTOR (3 DOWNTO 0), que é o tipo que designa um conjunto de bits
std_logic, agora, as saídas são: row(linha) e d(decodificador), ambos do tipo
STD_LOGIC_VECTOR (3 DOWNTO 0) e também a saída dav(dados disponíveis) do tipo
STD_LOGIC.
Na arquitetura, onde definimos o comportamento do circuito, temos o freeze que
detecta quando a tecla está pressionada e o data, usado para combinar os dados do
codificador de linha e de coluna. Então começamos o processo respondendo à entrada
clock, declarando a variável ring(contador anel) e verificando se há troca de valor do sinal no
ciclo corrente do clock e se o clock for igual a ‘1’ e o freeze igual a ‘0’, temos as saídas de
acordo com os estados do contadoranel.
Ainda dentro do primeiro IF, vemos que a contagem é feita com o estado de freeze
sendo verificado antes que uma instrução CASE seja usada para atribuir um próximo estado
a ring e que o contador auto reiniciará no o estado ‘1110’ a partir de qualquer estado que não
aqueles na sequência ring. Logo em seguida, temos um segundo CASE, onde a codificação
do valor da linha está descrita(para cada valor de ring no estado atual é definida a saída do
codificador de linha data (3 DOWNTO 2)). Por fim, no terceiro CASE, é descrito a codificação
do valor da coluna.
No código vemos uma diferença para a figura 1.8, pois não é aplicada a porta NAND
entre as colunas, mas sim a estrutura CASE que ativa o freeze quando uma coluna está em
nível BAIXO. Com isso, se várias teclas forem pressionadas na mesma linha, o codificador
não reconhecerá nenhuma tecla pressionada como válida e não ativa dav.
Slide 12
- Decomposição do problema: Simulação do codificador para varredura
Na figura 1.12, temos a simulação do codificador para varredura do teclado numérico,
onde os valores de col(colunas) são uma entrada de teste que simula o valor lido a partir das
colunas do teclado numérico, enquanto as linhas estão passando pela varredura.
Podemos ver que enquanto o valor F(1111) está em col(colunas em nível ALTO), o
contador ring está habilitado, dav está em nível BAIXO, e as saídas d estão no estado de
alta impedância(força oposta criada pelos componentes de um circuito à passagem da
energia elétrica, o que resulta em perda e exige que mais energia seja necessária para o
funcionamento do mecanismo). Depois temos o 7(0111) como entrada col, ou seja, uma das
colunas foi para o nível BAIXO, e como resultado disso, na próxima subida da borda do
clock, a linha dav vai para nível ALTO e o contador em anel não muda de estado. Logo,
enquanto a tecla estiver pressionada, o ring estará desabilitado e não passará ao próximo
estado.
Enquanto isso, o valor da linha é o E(1110), o que significa que a linha menos
significativa (R0) está sendo levada para o nível BAIXO pelo contador em anel, com isso o
codificador de linha traduz para 00 o número binário da linha. Então localizamos que a
coluna 11 faz intersecção com a linha 00, ou seja, a tecla 3 é pressionada, como mostra na
saída d. Logo depois de 4 ms, o valor da coluna volta ao hexadecimal F, o que faz com que
a saída d vá para o estado de alta impedância e na próxima borda de subida do clock, a
linha dav vai para nível BAIXO e o contador em anel retoma sua sequência de contagem.
Slide 13
- Projeto de Relógio Digital
Projetar relógios digitais é uma das formas mais comuns de se aplicar circuitos
contadores, que são a essência de projetos desse tipo. Devido a seu grau de
complexidade ligeiramente maior em relação aos apresentados anteriormente, esse
projeto nos introduz a novas estratégias de organização que facilitam sua
construção. Discutiremos sobre elas no decorrer deste segmento.
- Funcionamento e estrutura
A construção de um relógio digital requer o controle rigoroso de uma
frequência de clock básica a fim de obter exatidão na contagem do tempo. A
forma de alimentação pode variar de acordo com o tipo de aparelho que se
deseja construir - alguns funcionam a bateria, outros por alimentação AC(60hz) -,
mas a regra para todos os casos é dividir a frequência básica a 1Hz ou 1pps
(passo por segundo). Sendo assim, o circuito poderá realizar as contagens,
conversões e mudanças de estado de acordo com a medida universal de tempo
(horas, minutos e segundos).
Mostrada no slide, a figura nos apresenta um diagrama de bloco contendo
os elementos necessários para a construção de um relógio digital: temos uma
fonte de alimentação, um conformador de pulso, um divisor de frequência (cuja
saída é usada como clock síncrono para o sistema) e uma série de contadores,
decodificadores e displays. Abaixo estão definidas as entradas e saídas que
estarão presentes no nosso projeto.
Slide 14
- Projeto hierárquico top-down
Tendo em vista as informações obtidas anteriormente a respeito do nosso
projeto, e levando em conta o comportamento e os componentes peculiares que
algumas estruturas podem apresentar, podemos concluir que será preciso passar por
múltiplos níveis de decomposição para que possamos compreender o problema e
desenvolvê-lo da melhor maneira possível. Estes múltiplos níveis são seguidamente
referidos como hierarquia.
Uma hierarquia é um grupo de objetos dispostos em classificação de magnitude,
importância ou complexidade. No caso do projeto em questão, a se manifesta na
separação dos blocos que funcionam de maneira independente. Essa separação pode
ser feita dividindo o projeto do relógio em divisor de frequência, horas, minutos e
segundos, visto que o comportamento desses componentes é, basicamente, contar e
passar um pulso para seu sucessor na frequência definida.
A partir da figura mostrada no slide (Fig. 1.14) podemos concluir que a maioria
dos componentes possui uma estrutura que se repete: um contador BCD (mod10) e um
contador de módulo 6. Essa semelhança se torna um benefício, pois tendo isso em
vista podemos criar módulos padrão, que são construídos somente uma vez e
reutilizados ao longo do projeto.
Um diagrama de bloco do projeto geral (nível mais alto da hierarquia) é mostrado
na Figura 1.15. Nela temos uma representação em formato de “caixa- preta” com
entradas e saídas, que simboliza nosso projeto como um todo (essa representação
será concretizada na etapa de integração dos subsistemas).
Slide 15
- Construção dos módulos: MOD6 e MOD10
Como dito anteriormente, a construção de módulos padrão auxiliará o
desenvolvimento, facilitando o processo de implementação. No slide temos o exemplo
do código em VHDL de um contador de módulo 6, usado no divisor de frequência, no
segmento dos segundos e no segmento dos minutos. Esse é o componente
responsável por gerar um pulso sempre que seu ciclo de contagem for concluído,
fazendo o sistema entender que se passou um minuto ou uma hora (dependendo do
componente em questão).
Sua constituição é relativamente simples: Existem as entradas do tipo BIT
enable e clock e as saídas q(contagem) e tc(pulso de fim de contagem), sendo a
primeira do tipo INTEGER e a segunda do tipo BIT.
Quando temos enable em nível BAIXO o sistema ignora o pulso de relógio e
congela a contagem, guardando seu valor atual, e quando está em nível ALTO, a
contagem segue normalmente. Sempre que o ciclo se encerra temos uma subida de
nível em tc, que sinalizará a passagem do tempo para o próximo contador. Logo após
isso, acontece a reciclagem do contador, e o processo reinicia.
Note que para obtermos um contador de módulo 10 basta “aumentarmos o
tamanho da contagem”, ou mais especificamente, aumentar o número de bits no port
de saída e a variável count, bem como aumentar o limite da reciclagem do contador.
Dessa forma, temos a construção de dois dos principais módulos do projeto, que
serão parte dos contadores de módulo 60 usados na divisão da frequência básica e na
contagem dos segundos/minutos.
Slide 16
- Construção dos módulos: MOD12
Neste slide temos a descrição em VHDL de um contador de módulo 12, que se
comporta de maneira diferente dos construídos anteriormente (MOD6 e MOD10), e
portanto, não se encaixa no modelo. Isso se deve principalmente ao fato de que o
segmento que conta as horas funciona de maneira peculiar, como foi visto no
diagrama de blocos do projeto.
A contagem das horas seguirá o modelo de 12 horas - dia e 12 horas - noite,
logo, é necessário uma sinalização que indique AM (pós meia-noite) e PM (pós
meio-dia). Sendo assim, as saídas BCD precisam ser uma matriz de quatro bits para o
dígito de mais baixa ordem (unidades) e de um bit único para o dígito de mais alta
ordem (dezena).
Tendo isso em vista, apresentam-se algumas operações necessárias que
garantem o funcionamento deste segmento e as transições de estado corretas:
As figuras mostradas no slide representam a implementação de um contador que
segue essas operações. Temosas entradas clk e ena do tipo BIT e as saídas pm(BIT),
low e hi(INTEGER). As saídas receberão a contagem das horas e, de acordo com o
que foi definido acima, acontecerá a mudança de estado AM->PM. Em cada borda de
subida do relógio (se a entrada de ativação estiver em ALTO) o circuito decide o que
fazer com o contador de unidades de horas em BCD, o flip-flop de bit único para as
dezenas das horas e também o flip-flop AM/PM.
Com isso, teremos concluído a etapa de implementação e teste dos módulos.
Agora basta aplicá-los em cada um dos componentes do projeto e em seguida realizar
a integração desses subsistemas para obtermos o circuito final que abrange todas as
funcionalidades requisitadas.
Slide 17
- Integração do sistema
Aqui é finalmente mostrada a integração do projeto. É nesse estágio do
desenvolvimento que os componentes são conectados. O slide mostra uma primeira
parte desse processo, na qual acontece a criação dos contadores de módulo 60 a partir
dos contadores MOD6 e MOD10 desenvolvidos durante a etapa de síntese. Note que é
possível integrar projetos feitos em VHDL e AHDL normalmente sem nenhum tipo de
dificuldade.
Os contadores são integrados utilizando somente uma entrada CLK e uma
entrada ENA pois apesar de serem sistemas distintos, funcionam com o mesmo
princípio. Entretanto, a quantidade de saídas não permanece preservada, visto que nos
circuitos separados eram duas em cada (Q e TC) e após a integração uma terceira
saída aparece. Isso acontece pois o contador de módulo 60 trabalha com dezenas
enquanto os outros dois possuem apenas unidades. Sendo assim, é preciso
estabelecer uma nova saída que contenha o valor que representará as dezenas.
Por fim, temos um contador MOD60 completo, que obedece às funcionalidades
necessárias para a construção de um relógio digital. Esse contador agora pode ser
replicado e implementado nos segmentos onde é necessário, como visto anteriormente.
No próximo slide mostraremos a junção de todas as partes do projeto em um
escopo mais abrangente, resultando no produto final.
Slide 18
- Integração do sistema - FINAL
Como dito na página anterior, o contador MOD60 foi replicado duas vezes,
resultando em um contador para o divisor de frequência, um para a contagem dos
segundos e um para a contagem dos minutos.
Neste slide vemos como acontece a conexão desses elementos (Figura 1.22),
que também são conectados ao contador MOD12 das horas. O projeto agora apresenta
uma aparência muito semelhante ao que foi definido nas etapas primárias: Temos uma
fonte de pulsos e uma chave de ativação e um circuito que divide esses pulsos de
forma síncrona e controla a contagem do relógio ao longo do sistema.
As saídas estão estabelecidas conforme o necessário, e podemos notar no
circuito das horas a presença de uma saída extra (além das unidades e dezenas). Esta
é a saída que garante a discrepância entre AM/PM, e faz com que o relógio conte da
maneira correta.
Finalmente, na figura 1.23, temos o que será a representação final do projeto.
Todas as entradas e saídas estão definidas no bloco que contém o circuito. O projeto
de construção do relógio digital foi bem-sucedido.
CONCLUSÃO
O trabalho apresentou o gerenciamento de projetos para a formação de sistemas
usando circuitos digitais e linguagem de descrição de hardware(HDL), mediante a
passos essenciais para o funcionamento correto de um projeto. Destaca-se, portanto, a
importância do conteúdo adquirido para o desenvolvimento na área dos integrantes da
dupla, de forma que todos cooperaram com a realização da atividade e extraíram o
máximo de conhecimento possível sobre projetos de sistema digital usando HDL.

Outros materiais