EXEMPLOS DE PROGRAMAS EM VHDL COMENTADO
Pontifícia Universidade Católica do Rio Grande do Sul – PUCRS
Exemplos de rotina para dividir um sinal de CLOCK.
Porque dividir um sinal de clock?
Existem aplicações onde o clock de entrada precisa ser bem baixo, por exemplo, em um cronômetro de segundos. Em algumas placas, o clock é bem mais elevado, da ordem de milhares de Hertz. Desta forma é necessário fazer uma divisão de clock.
Como se faz um divisor de clock?
Para criarmos um novo clock a partir de um com freqüência maior, devemos dividir um clock pelo outro, por exemplo, um clock de 1kHz gerar um de 100Hz.
Dividindo 1kHz/100Hz = 10. Logo um período do novo clock, corresponde a 10 do outro. Como o período inclui a parte alta e parte baixa, então teremos 5 pulsos de clock para a parte alta e 5 pulsos de clock para parte baixa. Neste caso foi adotado um duty-cycle de 50%.
O que significa duty-cycle?
Duty-Cycle ou ciclo de trabalho é o tempo em que o sinal permanece em nível lógico alto em relação ao tempo em que ele permanece em nível lógico baixo.
Normalmente ele é expresso em porcentagem. Exemplo: Suponha um sinal com duty-cycle de 60% e a duração do período de 10ms. Qual o tempo em que ele permanece em nível lógico alto e baixo?
Resposta: T=T1+T2 Î T1=0,6*T e T=10ms, logo T1=6ms e T2=4ms.
Abaixo foi gerado a partir de um clock de 1kHz um sinal de 100Hz com dutycycle de 60%.
A seguir são apresentadas duas rotinas que implementam divisores de clock em VHDL. O primeiro exemplo gera um clock com duty-cycle de 50%. Note que esta rotina só é válida quando se pretende gerar clocks com ciclo de trabalho simétrico. O segundo exemplo, mostra a geração de um clock com duty-cycle de 60%.
Prof. Anderson Royes Terroso (www.aterroso.com)
Pontifícia Universidade Católica do Rio Grande do Sul – PUCRS
Faça um programa em VHDL que gere a partir de um clock de 10MHz um clock de 15Hz com duty-cycle de 50%.
A solução é igual ao exemplo anterior.
Resposta: T=T1+T2 Î T1=T2