Laboratório: Relógio Digital
Este laboratório propõe o desenvolvimento de um relógio digital, o que envolve a manipulação de múltiplos contadores e temporização.
Ver histórico de mudanças
Changelog
| Versão | Data | Descrição |
|---|---|---|
| v2025.1 | 31/mar/2025 | Versão inicial |
| v2025.2 | 12/abr/2025 | Renomeada entidade time para watch evitando conflito de palavra reservada |
Disciplina
Este laboratório faz parte da disciplina MC613 - Laboratório de Circuitos Digitais. Ver oferecimento mais recente.
Entrega
- A entrega deverá estar em único arquivo .ZIP contendo todos e apenas os arquivos listados abaixo.
- O nome do arquivo ZIP deve ser RA<RA>.zip, onde <RA> é o RA do componente do grupo que fará a entrega. Por exemplo, RA123456.zip é a entrega do grupo do aluno com o RA 123456.
- Os nomes dos arquivos dentro do ZIP devem ser seguidos.
- Se mais do que um arquivo for recebido para a mesma entrega, apenas o último recebido dentro do prazo será considerado.
- O cumprimento ou não dessas instruções fará parte dos critérios de avaliação.
Arquivos que fazem parte da entrega:
diagrama.pdf: Diagrama de blocos para a construção do relógio digital.clock.vhd: Descrição em VHDL da entidade principal do relógio.watch.vhd: Descrição em VHDL da entidade de visualização de horas.stopwatch.vhd: Descrição em VHDL da entidade do cronômetro.watch_tb.vhd: Testbench da visualização de horas.stopwatch_tb.vhd: Testbench do cronômetro.*.vhd: Descrição em VHDL de quaisquer módulos auxiliares pra construção do relógio.
Link para entrega: https://ic.unicamp.br/~isaias/mc613/entrega.
Atividades do Laboratório
Relógio Digital
Descrição geral do Relógio
Um relógio digital é um dispositivo eletrônico construído com circuitos eletrônicos baseados em pulsos de clock para contar horas, minutos e segundos. O seu relógio digital, construído nessa atividade, utilizará os visores de sete segmentos HEX*[6..0] como visor do relógio, os pushbuttons KEY[3..0] como botões de função, e os switches SW[9..0] para definir números e acertar o relógio.
O relógio deve ter duas exibições: uma para ver as horas, e outra para ver um cronômetro. Cada exibição deve ser descrita de forma funcional e independente em uma entidade separada. A visualização de horas deve mostrar a hora atual, com horas, minutos, e segundos, em formato 24 horas, com a possibilidade de acertar as horas. A visualização de cronômetro deve mostrar um cronômetro com centésimos de segundos, segundos e minutos, com as funções de começar, parar e zerar. Alterne entre as duas ao toque do botão de função KEY[3]. Lembre-se que a funcionalidade do relógio deve continuar, em background, mesmo que as informações não estejam sendo exibidas nos visores. Ou seja, a contagem do tempo deve continuar rodando.
Exibição das horas
Projete a entidade principal de exibição das horas em um arquivo watch.vhd.
Seu projeto deve armazenar valores para horas, minutos e segundos em contadores independentes.
Planeje os sinais de entrada e saída necessários para comunicação com a entidade principal do relógio. Seu diagrama de blocos deve deixar claro qual é a interface de comunicação (sinais e tamanhos), mostrar os contadores internos independentes e quais os sinais de controle. Se seu projeto incluir uma máquina de estados explícita, ela deve aparecer no diagrama como um bloco separado e você deve entregar o diagrama de estados dela.
Seu relógio deve exibir o horário nos visores de 7 segmentos da placa DE1-SoC e, usando os botões e os switches, ajustar o horário. Utilize o botão de função KEY[2] para alternar entre as funções do relógio: operação normal; acertar hora; acertar minuto; e acertar segundo, de forma circular. Para inserir valores durante as funções de acerto, utilize os switches SW[5..0]. Valores inválidos devem ser ignorados.
Durante as funções de acerto, faça com que o display de sete segmentos pisque (de forma visível, por exemplo alternando aceso e apagado em 1 Hz ou 2 Hz) os segmentos que estão sendo acertados, exibindo o novo valor. O relógio não deve parar de contar o tempo (horas, minutos e segundos) durante as funções de acerto.
Exibição do cronômetro
Projete a entidade principal do cronômetro em um arquivo stopwatch.vhd.
Seu projeto deve contar o tempo em minutos, segundos e centésimos de segundo, até o valor máximo 99:59.99.
Ao atingir o valor máximo, o cronômetro pode zerar e voltar a contar o tempo a partir do zero.
Planeje os sinais de entrada e saída necessários para a comunicação com a entidade principal do relógio. Seu diagrama de blocos deve deixar claro qual é a interface de comunicação (sinais e tamanhos), mostrar os contadores internos e quais os sinais de controle. Se seu projeto incluir uma máquina de estados explícita, ela deve aparecer no diagrama como um bloco separado e você deve entregar o diagrama de estados dela.
Seu cronômetro deve exibir o tempo transcorrido nos visores de 7 segmentos da placa DE1-SoC e, usando os botões, receber comandos para iniciar, parar e zerar. Utilize o botão de função KEY[2] para as operações de iniciar e parar. Utilize o botão KEY[1] para zerar o cronômetro.