
Índice:
2025 Autor: John Day | [email protected]. Última modificação: 2025-01-23 15:03


Bem-vindo ao instrutivo sobre como construir um cronômetro usando VHDL básico e placa Basys 3. Estamos ansiosos para compartilhar nosso projeto com você! Este foi um projeto final para o curso CPE 133 (Design Digital) na Cal Poly, SLO no outono de 2016. O projeto que construímos é um cronômetro simples que inicia, redefine e pausa o tempo. Leva três botões na placa Basys3 como entradas, e a hora é exibida no display de quatro dígitos e sete segmentos da placa. O tempo decorrido é exibido no formato segundos: centissegundos. Ele usa o relógio do sistema da placa como uma entrada para controlar o tempo decorrido e gera o tempo para os quatro dígitos do display de sete segmentos.
Etapa 1: Materiais

Os materiais de que você precisará para este projeto:
- 1 computador com Vivado Design Suite WebPack instalado a partir do Xilinx (preferir versão 2016.2)
- 1 placa Digilent Basys3 Xilinx Artix-7 FPGA
- 1 cabo de porta USB
Etapa 2: Definir entradas e saídas
A figura acima mostra um diagrama de blocos de nível superior do módulo principal do cronômetro. O cronômetro recebe as entradas "CLK" (relógio), "S1" (botão iniciar), "S2" (botão de pausa) e "RST" (redefinir) e tem uma saída de 4 bits "Anodos", um 7 bits saída "segmento" e uma saída de bit único "DP" (ponto decimal). Quando a entrada "S1" é alta, o cronômetro começa a contar o tempo. Quando "S2" está baixo, o cronômetro pausa o tempo. Quando "RST" está alto, o cronômetro para e zera a hora. Existem quatro submódulos dentro do circuito: o divisor de relógio, o contador de dígitos, o driver de exibição de sete segmentos e o codificador de exibição de sete segmentos. O módulo principal do cronômetro conecta todos os submódulos e às entradas e saídas.
Etapa 3: Fazendo relógios

O módulo divisor de relógio recebe um relógio do sistema e usa uma entrada divisora para criar um relógio de qualquer velocidade não maior que a do relógio do sistema. O cronômetro usa dois módulos de relógio diferentes, um que cria um relógio de 500 Hz e outro que cria um relógio de 100 Hz. O esquema do divisor de relógio é mostrado na figura acima. O divisor de clock recebe uma entrada de bit único "CLK" e uma entrada de 32 bits "Divisor" e a saída de bit único "CLKOUT". "CLK" é o relógio do sistema e "CLKOUT" é o relógio resultante. O módulo também inclui uma porta NOT, que alterna o sinal "CLKTOG" quando a contagem atinge o valor do divisor.
Etapa 4: contando até dez

O contador de dígitos conta cada dígito de 0 a 10 e cria outro relógio para o próximo dígito funcionar, o que oscila quando a contagem chega a 10. O módulo recebe 3 entradas de bit único "S", "RST" e "CLK "e resulta em uma saída de bit único" N "e uma saída de 4 bits" D ". A entrada "S" é a habilitação na entrada. O relógio liga quando "S" está alto e desliga quando "S" está baixo. "RST" é a entrada de reset, então o relógio é reiniciado quando "RST" está alto. "CLK" é a entrada do relógio para o contador de dígitos. "N" é a saída do relógio que se torna o relógio de entrada para o próximo dígito. A saída "D" apresenta o valor binário do dígito em que o contador está.
Etapa 5: Exibindo Números

O codificador do display de sete segmentos codificará o número binário recebido do módulo driver do display de sete segmentos e o transformará em um fluxo de bits que será interpretado como valores '1' ou '0' para cada segmento do display. O número binário é recebido pelo módulo como o "dígito" de entrada de 4 bits e resulta nos "segmentos" de saída de 7 bits. O módulo consiste em um único bloco de processo de caso que atribui um fluxo específico de 7 bits para cada valor de entrada possível de 0 a 9. Cada bit nos fluxos de sete bits representa um dos sete segmentos dos dígitos no visor. A ordem dos segmentos no fluxo é "abcdefg" com '0s representando os segmentos que acendem para o número fornecido.
Etapa 6: como exibir o cronômetro

No módulo de driver de display de sete segmentos, há quatro entradas de 4 bits "D0", "D1", "D2" e "D3", cada uma representando os quatro dígitos a serem exibidos. A entrada "CLK" é a entrada do relógio do sistema. A saída de bit único "DP" representa o ponto decimal no display de sete segmentos. A saída de 4 bits "Anodos" determina qual dígito no display de sete segmentos é mostrado e a saída de 4 bits "temp" depende do estado da entrada de controle de 2 bits "SEL". O módulo utiliza 4 multiplexadores para a entrada de controle "SEL" e as três saídas; "Ânodos", "temp" e "DP".
Etapa 7: juntando tudo
Um bloco de processo 'if' fora do clock de 500 Hz é usado para criar os botões de início e pausa. Em seguida, vincule todos os submódulos no módulo principal do cronômetro, declarando os componentes de cada submódulo individual e usando vários sinais. Os submódulos de dígitos recebem a saída de relógio do submódulo de dígitos anterior, com o primeiro levando o relógio de 100Hz. As saídas "D" dos submódulos de dígitos tornam-se então as entradas "D" do módulo driver de exibição de sete segmentos. E, por último, a saída "temp" do módulo do driver do display de sete segmentos torna-se a entrada "temp" do módulo codificador de sete segmentos.
Etapa 8: restrições

Use 3 botões (W19, T17 e U18) para as entradas "RST", "S1" e "S2". W19 é o botão de reinicialização, T17 é o botão iniciar (S1) e U18 é o botão de pausa (S2). Uma restrição para a entrada de entrada do relógio também é necessária usando a porta W5. Além disso, lembre-se de adicionar esta linha à restrição de relógio:
create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports {CLK}]
Também vincule os ânodos e segmentos ao quadro para que o cronômetro seja exibido no visor de sete segmentos, conforme visto no arquivo de restrições.
Etapa 9: Teste

Certifique-se de que seu dispositivo funcione brincando com os três botões: pressionando e segurando-os em todas as ordens possíveis para encontrar quaisquer problemas possíveis com seu código.
Recomendado:
Cronômetro digital tudo em um (relógio, cronômetro, alarme, temperatura): 10 etapas (com imagens)

Cronômetro Digital All in One (Relógio, Cronômetro, Alarme, Temperatura): Estávamos planejando fazer um Cronômetro para alguma outra competição, mas posteriormente também implementamos um relógio (sem RTC). À medida que entramos na programação, nos interessamos em aplicar mais funcionalidades ao dispositivo e acabamos adicionando DS3231 RTC, como
Cronômetro Arduino usando LCD I2C: 5 etapas

Cronômetro do Arduino usando LCD I2C: Neste projeto, irei ensiná-lo a usar um display LCD e um Arduino como um cronômetro interativo. Quando seu projeto for concluído com o código fornecido, ele deve se parecer com a foto acima. Vá para a próxima etapa para saber por onde começar
VHDL Basys3: Conecte 4 jogos: 5 etapas

VHDL Basys3: Connect 4 Game: Introdução: Este é um Connect 4 Digital Logic Game projetado em VHDL usando o software Vivado e programado para o Basys3 Board. A construção e o design deste projeto são intermediários, mas os recém-chegados podem copiar as etapas e construir o ga
Cronômetro VHDL de um minuto: 5 etapas

Cronômetro de um minuto VHDL: Este é um tutorial sobre como construir um cronômetro de um minuto usando VHDL e uma placa Basys 3. Esse dispositivo é ideal para jogos em que cada jogador tem no máximo um minuto para fazer sua jogada. O cronômetro exibe com precisão os segundos e milissegundos o
Cronômetro VHDL: 8 etapas (com imagens)

Cronômetro VHDL: Este é um tutorial sobre como fazer um cronômetro usando VHDL e uma placa de circuito FPGA, como uma placa Basys3 Atrix-7. O cronômetro pode contar de 00,00 segundos a 99,99 segundos. Ele usa dois botões, um para o botão iniciar / parar e outro para o