Diseño de calendario perpetuo de reloj digital basado en tecnología FPGA
Diseñar un reloj digital de 24 horas que pueda mostrar horas, minutos y segundos y que pueda ajustarse manualmente.
Equipo utilizado en la prueba:
Entorno de desarrollo Max-Plus II, sistema de prueba ZY11EDA13BE, lenguaje VHDL.
Principio de diseño
El cuerpo principal del reloj digital es un contador, que registra y muestra el número de segundos pulsos recibidos, donde la suma de segundos se divide en un contador de módulo 60. , y la hora es un contador de módulo 60, 24 contadores, que generan respectivamente códigos BCD de 3 dígitos. El controlador de decodificación de código BCD va seguido de un circuito de visualización de tubo digital.
El bit de acarreo del segundo contador de módulo 60 se utiliza como reloj del contador de módulo 60, y el bit de acarreo del contador de módulo 60 se utiliza como reloj del contador de módulo 24.
Para poder ajustar manualmente la hora, se agregan botones setm y seth externamente. Cuando estos dos botones están bajos, los tiempos del circuito normalmente. Cuando estos dos botones están altos, los minutos y las horas se ajustan respectivamente. Al mismo tiempo, borre la tecla clr. y circuitos de eliminación de fluctuaciones.
Parte de diseño del módulo de la unidad
Parte clave del circuito de eliminación de fluctuaciones
Señal key_in1, key_in2:STD_logic:= ' 0 '
Inicio
Proceso(reloj, tipo)
Inicio
Si clk event y clk='1' entonces
key_in 1<= key_inkey_in2<= key_in 1;
Si key_in='1' y key_in1='1' y key_in2='1', entonces key_ out & lt='1';
otra tecla _ out & lt='0';
Diagrama de simulación de series de tiempo
La clave del programa de contador de módulo 60 Parte:
Señal md_temp, mg_temp:STD_logic_vector (3 hasta 0);
Inicio
Proceso (reloj, reloj)
Inicio
Si clr='1 ', entonces
md _ temp & lt="0000";mg _ temp & lt="0000";
elsif set='1 'Entonces
md _ temp & lt= setlmg _ temp & lt=set;
elsif clk ' evento y clk = ' 1 ' entonces
Si md_temp="1001 "entonces
md_temp<="0000";mg_temp<= mg_temp+'1';
si no md_temp<=MD_temp+'1';
Finalizar si;
Si md_temp="1001 " y mg_temp="0101 ", entonces
md _ temp & lt="0000";mg _ temp & lt= "0000";
Diagrama de simulación de segunda serie de tiempo
Simulación de serie de tiempo
Borrar y ajustar la porción de tiempo de los puntos.
Parte clave del programa de contador módulo 24
Señal hd_temp, hg_temp:STD_logic_vector(3 hasta 0);
Inicio
p>El proceso (reloj, reloj, configurar, configurar, configurar) es
Iniciar
Si set='1', entonces hd_temp & lt= setlhg_temp & lt=seth;
elsif clr = ' 1 ' luego HD _ temp & lt;="0000";hg _ temp & lt="0000";
elsif clk ' evento y clk = ' 1 ' entonces
Si hg_temp="0010 " y hd_temp="0011 ", entonces
hd _ temp & lt="0000";hg _ temp & lt="0000";
elsif hd_temp="1001 "Entonces
hg _ temp & lt= Hg _ temp+' 1 ' HD _ temp & lt;="0000" ;
else hd _ temp & lt= HD _ temp+' 1 ';
Finalizar si
Finalizar si
Finalizar proceso;
Diagrama de simulación de series de tiempo
Borrar y ajustar el tiempo
Mostrar algunos procedimientos clave
Proceso (definición estándar, sg, md, mg, hd, hg)
Inicio
Caso sd es
Cuando "0000" = > sl & lt="1111110";
Cuando " 0001 " = >; sl & lt="0110000";
Cuando " 0010" = >; sl & lt="1101101";
cuando " 0011" = >; sl & lt="1111001";
cuando " 0100" = > sl & lt="0110011";
cuando " 0101" = > sl & lt="1011011"; p>
Cuando " 0110" = > sl & lt="1011111";
Cuando " 0111" = >; sl & lt="1110000 ";
Cuando " 1000" = >sl & lt="1111111";
Cuando " 1001" = >sl & lt="1111011";
cuando otros = & gtsl & lt="0000000 ";
Fin de caso;
Si evento clk_g y clk_g='1' entonces
Si sel= "101", entonces
sel & lt="000";
else sel & lt= sel+' 1 ';
Finalizar si;
Finalizar si;
Finalizar proceso;
Proceso (select, SD, sl, sg, sh, md, ml, mg, mh, hd, hl, hg, hh)
Iniciar
La selección de caso es
Cuando "000" = >led & lt= sl
led _ cual & lt = sd
Cuando " 001" = >; led & lt= sh
led _ cual & lt= sg
Cuando " 010" = > ;led & lt= ml
led _ cual & lt= md
cuando " 011"= >led & lt= mh
<p>led _ cual & lt= mg
Cuando" 100"= >led & lt= hl
led _ cual & lt=HD;
Cuando " 101"= >led & lt= hh
led _ cual & lt= hg
Cuando otros= & gtled & lt="0000000";
led _ cual & lt="0000";
Fin del caso;
Diagrama de simulación
Programa clave de archivo superior
Puerto (
clk, clk_g: en std_logic; -CLK_G es la señal utilizada para la visualización del tubo digital
clr: en std_logic; -borrado cuando CLR = 1
setm, seth: en std_logic; -SETM es 1, seth es 1.
setd, setg: en STD_logic_vector(3 hasta 0); -tiempo de ajuste, setd ajusta el bit bajo y setg ajusta el bit alto.
led:out STD _ logic _ vector(6 hasta 0);
sel _ out:out STD _ logic _ vector (2 hasta 0);
led _ which:out STD _ logic _ vector (3 hasta 0)); - ¿Cuál es la segunda salida?
Inicio
u1:mapeo de puerto de_shake (clk = & gtclk, key_in = & gtclr, key_out = & gtclro
u2: mapeo de puerto de_shake (); clk = & gtclk, key_in = & gtsetm, key_out = & gtsetmo
u3: mapeo de puerto de_shake (clk = & gtclk, key_in = & gtseth, key _ out = & gtsetho);
u4:mapeo de puertos s60 (clk = & gtclk, clr = & gtclro, sd = & gtsdl, sg = & gtsgh, fenmaichong = & gtfenmaichongo);
u5:mapeo de puertos m60 (clk = & gtfenmaichongo, clr = & gtclro, md = & gtmdl, mg = & gtmgh, xiaoshimaichong = & gtxiaoshimaichongo, setl = & gtsetd, seth = & gtsetg, set = & gtsetmo
u6:h24); mapeo de puertos (clk = & gtxiaoshimaichongo, clr = & gtclro, hd = & gthdl, hg = & gthgh, set = & gtsetho, setl = & gtsetd, seth = & gtsetg
u7: puerto led_xs); mapeo (clk_g = & gtclk_g, sd = & gtsdl, sg = & gtsgh, md = & gtmdl, mg = & gtmgh, hd = & gthdl, hg = & gthgh, led = & gtled, sel_out = & gtsel_out, led _ cual = & gtled _ cual);