Laboratório: Relógio Digital

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.