Red de conocimientos turísticos - Conocimiento turístico - Diseño de calendario perpetuo de reloj digital basado en tecnología FPGA

Diseño de calendario perpetuo de reloj digital basado en tecnología FPGA

Propósito del experimento:

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";

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);