Tesis de Graduación del Calendario Perpetuo
Este experimento implementa un reloj digital que puede mostrar horas, minutos y segundos.
*/
Reloj del módulo (clk, rst, dataout, en);
Entrada clk, rst
salida[7: 0]salida de datos;
reg[7:0]salida de datos;
salida[7:0]en;
reg[7:0]es ;
reg[3:0]salida de datos _ buf[7:0];
reg[25:0]CNT;
reg[15: 0]CNT_scan;
reg[3:0]data out_code;
wire[5:0]cal; //Lleva todos los niveles de banderas
Asignar cal[0]=(dataout_buf[0]==9)? 1:0;
¿Asignar cal[1]=(cal[0]&&dataout_buf[1]==5)? 1:0;
¿Asignar cal[2]=(cal[1]&&dataout_buf[3]==9)? 1:0;
¿Asignar cal[3]=(cal[2]&&dataout_buf[4]==5)? 1:0;
¿Asignar cal[4]=(cal[3]&&dataout_buf[6]==9)? 1:0;
¿Asignar cal[5]=(cal[3]&&data out_buf[6]===2&&dataout_buf[7]==1)? 1:0;
siempre@(posedge clk o negedge rst)
iniciar
if (!rst) iniciar
cnt _ escanear & lt=0;
en & lt= 8 ' b 1111 _ 1110
Fin
En caso contrario, iniciar
cnt _; scan & lt= CNT _ scan+1;
if(CNT _ scan = = 16 'hffff)begin
es[7:1]& lt;= es[6: 0];
es[0]<= es[7];
Fin
Fin
Fin
Siempre@(*)
Inicio
Caso (inglés)
8 ' b 1111 _ 1110:
salida de datos _ código = salida de datos _ buf[0];
8 ' b 1111 _ 1101:
salida de datos _ código = salida de datos _ buf[1];
8 ' b 1111 _ 1011:
salida de datos _ código = salida de datos _ buf[2];
8 ' b 1111 _ 0111:
salida de datos _ código = salida de datos _ buf[3];
8 ' b 1110 _ 1111:
salida de datos _ código = salida de datos _ buf[4];
8 ' b 1101 _ 1111:
salida de datos _ código = salida de datos _ buf[5];
8 ' b 1011 _ 1111:
salida de datos _ código = salida de datos _ buf[6];
8 ' b 0111 _ 1111:
datos
out_code = datos out_buf[7];
Valor predeterminado:
datos out_code = datos out_buf[0];
Fin de caso
Fin
siempre@(posedge clk o negedge rst)
Inicio
if (!rst)
cnt & lt=0;
si no(cnt!=40000000)
cnt & lt= CNT+1;
Otro
cnt & lt=0 ;
Fin
Siempre @ (colocar clic o negar borde primero)//Implementar las funciones de conteo y acarreo.
Iniciar
Si (!rst) inicio
salida de datos _ buf[0]<=0;
salida de datos _ buf[1]<=0;
salida de datos _ buf[2]<=15;
salida de datos _ buf[3]<=0 ;
salida de datos _ buf[4]& lt;=0;
salida de datos _ buf[5]& lt;=15;
salida de datos _ buf[6 ]<=2;
salida de datos _ buf[7]<=1;
Fin
En caso contrario, inicio
p>if(cnt==26'd40000000) start
if (!cal[0])
salida de datos _ buf[0]<= salida de datos _ buf[0] +1;
De lo contrario, inicie
datos fuera _ buf[0]<=0;
if (!cal[1 ])
data out_buf[1]<= data out_buf[1]+1;
De lo contrario, inicie
data out_buf [1]<=0;
if(!kar[2])
datos out_buf[3]<= datos out_buf[3]+ 1;
De lo contrario, iniciar
datos salida _ buf[3]<=0;
if (! Carl[3])
salida de datos _ buf[4]& lt; ]+1;
De lo contrario, inicie
datos fuera _ buf[4]& lt; =0;
if (!kar[4]) p>
salida de datos _ buf[6]< = salida de datos _ buf[6]+1;
else start
salida de datos _ buf[6]< =0;
if (!kal[5])
salida de datos _ buf[7]<= salida de datos_buf[7]+1;
Otros
datos out_buf[7]<=0;
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Fin
Siempre@(código de salida de datos)
Inicio
Caso (código de salida de datos)
4'b0000:
salida de datos = 8'b 1100_0000;
4'b0001:
salida de datos = 8'b 1111_1001 ;
4'b0010:
salida de datos = 8 ' b 1010 _ 0100;
4'b0011:
salida de datos = 8' b 1011_0000;
4'b0100:
salida de datos = 8' b 1001_1001;
4'b0101:
salida de datos = 8' b 1001_0010;
4'b0110:
salida de datos = 8' b 1000_0010 ;
4' b0111:
datos
salida = 8 ' b 1111 _ 1000;
4'b1000:
salida de datos = 8 ' b 1000 _ 0000
Fin de caso
Fin
Fin del módulo
Puedes cambiarlo nuevamente. No debería ser difícil. ¡Buena suerte!