Baixe o app para aproveitar ainda mais
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.
Compartilhar