divisor vhdl
Nombre de archivo: fq_divider.vhd
----Este módulo es un divisor de frecuencia, que divide la frecuencia del reloj de 1 KHZ en una frecuencia de reloj de una vez por minuto
----De hecho, este código fuente puede realizar la división de frecuencia de cualquier número entero, principalmente dejando que el valor de N establezca el número correspondiente
------------- -------------------------------------------------- -- ----------
BIBLIOTECA IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
p>USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fq_divider IS
generic(n:integer:=60000);
PORT(
p>
CLK, restablecer: IN STD_LOGIC;
CLK_OUT: búfer STD_LOGIC
);
END;
ARQUITECTURA A DE fq_divider IS
SEÑAL CNT1, CNT2: entero:=0;
SEÑAL OUTTEMP: STD_LOGIC;
SEÑAL LOUT : STD_LOGIC;
SEÑAL DE SALIDA3: STD_LOGIC:='0';
COMENZAR
P1: PROCESO(CLK)
COMENZAR
SI CLK' EVENTO Y CLK='1' ENTONCES
SI CNT1=n-1 ENTONCES
CNT1lt;=0;
ELSE
CNT1lt ;=CNT1 1;
TERMINAR SI;
TERMINAR SI
TERMINAR PROCESO
P2: PROCESO(CLK)
COMENZAR
SI CLK'EVENT Y CLK='0' ENTONCES
SI CNT2=n-1 ENTONCES p>
CNT2lt;=0 ;
ELSE
CNT2lt;=CNT2 1;
FINALIZAR SI;
TERMINAR SI ;
FIN DEL PROCESO P2;
P3: PROCESO(CNT1, CNT2)
COMENZAR
si ((n mod 2)= 1) entonces
SI CNT1=1 ENTONCES
SI CNT2=0 ENTONCES
OUTTEMPlt;='1';
ELSE
OUTTEMPlt;= '0';
END IF
ELSIF CNT1=(n 1)/2 THEN
IF CNT2= (n 1)/2 ENTONCES p>
> OUTTEMPlt;='1';
ELSE OUTTEMPlt;='0';
END IF;
ELSE
OUTTEMPlt; ='0';
END IF;
else
si cnt1=1 entonces
outtemplt;='1';
elsif (cnt1=(n/2 1)) entonces
outtemplt;='1';
else
outtemplt;= '0';
finalizar si;
finalizar si;
FIN DEL PROCESO P3; reset)
COMENZAR
si reset='0' entonces
clk_outlt;=clk;
elsif ((n/=2 ) y (n/=1)) entonces
IF OUTTEMP'EVENT AND OUTTEMP='1' THEN
CLK_OUTlt;=NOT CLK_OUT;
END IF ;
elsif (n=2) entonces
si(clk'event y clk='1')entonces
clk_outlt;=not clk_out; p>
p>
finalizar si;
else
clk_outlt;=clk;
finalizar si;
FINALIZAR PROCESO P4;
FIN A;