Está en la página 1de 8

Código VHDL para Flipflop - D, JK, SR, T

Todos los flip-flops se pueden dividir en cuatro tipos básicos: SR, JK,
D y T. Ellos difieren en el número de entradas y en la respuesta
invocada por un valor diferente de señales de entrada.

VHDL Code for SR FlipFlop

3
4 library ieee;
use ieee. std_logic_1164.all;
5 use ieee. std_logic_arith.all;
6 use ieee. std_logic_unsigned.all;
7  
8 entity SR_FF is
9 PORT( S,R,CLOCK: in std_logic;
10 Q, QBAR: out std_logic);
end SR_FF;
11
 
12 Architecture behavioral of SR_FF is
13 begin
14 PROCESS(CLOCK)
15 variable tmp: std_logic;
16 begin
if(CLOCK='1' and CLOCK'EVENT) then
17 if(S='0' and R='0')then
18 tmp:=tmp;
19 elsif(S='1' and R='1')then
20 tmp:='Z';
elsif(S='0' and R='1')then
21 tmp:='0';
22 else
23 tmp:='1';
24 end if;
25 end if;
Q <= tmp;
26 QBAR <= not tmp;
27 end PROCESS;
28 end behavioral;
D FlipFlop
El flip-flop D mostrada en la figura es una modificación de la velocidad
de reloj del flip-flop SR. La entrada D va directamente a la entrada S y
el complemento de la entrada D va a la entrada R. La entrada D se
muestrea durante la ocurrencia de un pulso de reloj. Si es 1, el flip-flop
se cambia con el estado de ajuste (a menos que ya se creó). Si es 0,
el flip-flop conmuta al estado

claro. 

VHDL Code for D FlipFlop


1
2 library ieee;
3 use ieee. std_logic_1164.all;
4 use ieee. std_logic_arith.all;
5 use ieee. std_logic_unsigned.all;
6  
entity D_FF is
7 PORT( D,CLOCK: in std_logic;
8 Q: out std_logic);
9 end D_FF;
10  
11 architecture behavioral of D_FF is
12 begin
process(CLOCK)
13 begin
14 if(CLOCK='1' and CLOCK'EVENT) then
15 Q<=D;
16 end if;
end process;
17
end behavioral;
18

JK FlipFlop
Un flip-flop JK es un refinamiento del flip-flop SR en que el estado
indeterminado del tipo SR se define en el tipo JK. Las entradas J y K
se comportan como entradas S y R para ajustar y limpiar el flip-flop
(tenga en cuenta que en un flip-flop JK, la letra J es para el grupo y la
letra K es de clara).
VHDL Code for JK FlipFlop
1
2
3 library ieee;
4 use ieee. std_logic_1164.all;
5 use ieee. std_logic_arith.all;
6 use ieee. std_logic_unsigned.all;
7  
entity JK_FF is
8 PORT( J,K,CLOCK: in std_logic;
9 Q, QB: out std_logic);
10 end JK_FF;
11  
12 Architecture behavioral of JK_FF is
13 begin
PROCESS(CLOCK)
14 variable TMP: std_logic;
15 begin
16 if(CLOCK='1' and CLOCK'EVENT) then
17 if(J='0' and K='0')then
TMP:=TMP;
18
elsif(J='1' and K='1')then
19 TMP:= not TMP;
20 elsif(J='0' and K='1')then
21 TMP:='0';
22 else
TMP:='1';
23 end if;
24 end if;
25 Q<=TMP;
26 Q<=not TMP;
27 end PROCESS;
end behavioral;
28
29
30
T FlipFlop
El flip-flop T es una sola versión de entrada del flip-flop JK. Como se
muestra en la figura, el flip-flop T se obtiene a partir del tipo JK si
ambas entradas están unidas entre sí. La salida del flip-flop T "alterna"
con cada pulso de reloj. Código VHDL para T FlipFlop

VHDL Code for T FlipFlop


1
2
3 library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
4
5  
entity T_FF is
6 port( T: in std_logic;
7 Clock: in std_logic;
8 Q: out std_logic);
9 end T_FF;
10  
architecture Behavioral of T_FF is
11 signal tmp: std_logic;
12 begin
13 process (Clock)
14 begin
if Clock'event and Clock='1' then
15
16  
if T='0' then
17 tmp <= tmp;
18 elsif T='1' then
19 tmp <= not (tmp);
20 end if;
end if;
21 end process;
22 Q <= tmp;
23 end Behavioral;
24
25
Un sencillo tutorial sobre circuitos lógicos en el que se programará un flip flop
en VHDL utilizando un FPGA NEXYS 2

En teoría de circuitos
lógicos se da a conocer un dispositivo electrónico llamado flip flop,
catalogado como un elemento de memoria conformado por compuertas
lógicas. Donde éstas a través de una configuración específica, pueden de
cierta manera almacenar información. Una de las características principales de
un flip flop es su sensibilidad a ciertas entradas prioritarias; es decir, si estas
entradas se activan, no importa lo que haya en las demás entradas, se
producirá un cambio en la salida dependiendo de lo que se requiera.

Diagrama de un flip-flop tipo


JK
Explicando un poco el funcionamiento de estos dispositivos, podremos
programar un flip flop en VHDL, del tipo tipo JK. En la industria,
existen muchos flips flops: tipo D, tipo JK, tipo SR, entre otros.

El flip flop JK se dice así en memoria del señor Jack Kilby el creador
de los circuitos integrados. En este caso explicaremos el
funcionamiento básico:

El dispositivo poseé tres entradas: J, K, reloj. La entrada de reloj es


porque en circuitos lógicos, muchos dispositivos se manejan a través
de pulso de reloj que le indicarán cuándo debe determinar una acción.
Además de esto, se tienen dos salidas clásicas: Q y Q’; estas salidas
son complementarias, ya que una es la inversa de la otra. Recuerden
que estos dispositivos generalmente trabajan con valores binarios (0 ó
1).

En los sistemas síncronos, los tiempos exactos en los que cualquier


entrada cambia de estado se determina en base a la señal de reloj.
Las señales de reloj por lo general suelen ser un tren de pulsos
rectangulares o una onda cuadrada, que tienen una propiedad
llamada transición, esto es cuando se cambia de un valor a otro (0 ó
1). Bien, para los flip flops sincronizados por reloj como el JK, se
necesita saber cómo lo vamos a trabajar en base a la transición de la
señal de pulso de reloj, es decir si el flip flop cambiará de valor cuando
haya una transición de pendiente positiva o negativa.
La transición de pendiente positiva es aquella donde el cambio se da
de 0 para 1, mientras que la transición de pendiente negativa es
cuando el cambio se da de 1 para 0. En base a esta información se
deduce que el flip flop para cambiar lo que hay en su salida necesita
de la transición de pulso que envia el reloj ya que esto
indica CUÁNDO cambiar de valor la salida, mientras que las entradas
de control J y K nos indicará a QUÉ estado cambiará la salida.

Presentamos entonces la tabla de verdad del flip flop JK:


JKCLKQ
00 FPN Q (sin cambio)
10 FPN 1
01 FPN 0
11 FPN Q’ (conmuta)

FPN = Flancos por Pendiente Negativa. Esto quiere decir que el flip
flop a programar trabajará siendo bajo activo.

Como mencionamos, el flip flop responde a ciertas entradas


prioritarias en este caso usaremos CLEAR y PRESET. Donde CLEAR
es una entrada que pone a la salida del flip flop un 0, mientras que
PRESET es una entrada que pone a la salida del flip flop un 1. En flip
flop programables y comerciales estas entradas pueden ser bajo o alto
activo, nuestro caso como es programable podemos indicar de qué
tipo será.
Ahora que hemos terminamo de explicar un poquito sobre el
funcionamiento del flip flop JK, expondré el código en VHDL. Este
código lo creé hace unos meses cuando trabajé con un FPGA NEXYS
2, estaba trabajando específicamente en un contador binario de 4 bits.
Pueden tomar como referencia el código y hacerle modificaciones. Se
agradece comentarios  =)
Shell

1 entity FF is
2 Port ( clk,j,k,prn,clrn: in bit;
3 q: out bit);
4 end FF;
5   
6 architecture sintaxis1 of FF is
7 SIGNAL qestado: bit;
8 begin
9 PROCESS (clk,prn,clrn) --Responde a cualquiera de estas entradas
10 BEGIN
11 IF prn = '1' THEN QESTADO <= '1';
12 ELSIF clrn = '1' THEN QESTADO <= '0';
13 ELSIF CLK = '0' AND CLK'EVENT THEN --Bajo activo
14 IF J = '1' AND K = '1' THEN QESTADO <= NOT QESTADO;
15 ELSIF J = '1' AND K = '0' THEN QESTADO <= '1';
16 ELSIF J = '0' AND K = '1' THEN QESTADO <= '0';
17 ELSIF J = '0' AND K = '0' THEN QESTADO <= QESTADO;
18 END IF;
19 END IF;
20 END PROCESS;
21 Q <= QESTADO; --Guarda el valor de la señal en la salida de los leds
22 end sintaxis1;

También podría gustarte