You are on page 1of 8

Cdigo VHDL para Flipflop - D, JK, SR, T

Todos los flip-flops se pueden dividir en cuatro tipos bsicos: SR, JK,
D y T. Ellos difieren en el nmero de entradas y en la respuesta
invocada por un valor diferente de seales de entrada.

VHDL Code for SR FlipFlop


3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28

library ieee;
use ieee. std_logic_1164.all;
use ieee. std_logic_arith.all;
use ieee. std_logic_unsigned.all;
entity SR_FF is
PORT( S,R,CLOCK: in std_logic;
Q, QBAR: out std_logic);
end SR_FF;
Architecture behavioral of SR_FF is
begin
PROCESS(CLOCK)
variable tmp: std_logic;
begin
if(CLOCK='1' and CLOCK'EVENT) then
if(S='0' and R='0')then
tmp:=tmp;
elsif(S='1' and R='1')then
tmp:='Z';
elsif(S='0' and R='1')then
tmp:='0';
else
tmp:='1';
end if;
end if;
Q <= tmp;
QBAR <= not tmp;
end PROCESS;
end behavioral;

D FlipFlop
El flip-flop D mostrada en la figura es una modificacin 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
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

library ieee;
use ieee. std_logic_1164.all;
use ieee. std_logic_arith.all;
use ieee. std_logic_unsigned.all;
entity D_FF is
PORT( D,CLOCK: in std_logic;
Q: out std_logic);
end D_FF;
architecture behavioral of D_FF is
begin
process(CLOCK)
begin
if(CLOCK='1' and CLOCK'EVENT) then
Q<=D;
end if;
end process;
end behavioral;

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
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30

library ieee;
use ieee. std_logic_1164.all;
use ieee. std_logic_arith.all;
use ieee. std_logic_unsigned.all;
entity JK_FF is
PORT( J,K,CLOCK: in std_logic;
Q, QB: out std_logic);
end JK_FF;
Architecture behavioral of JK_FF is
begin
PROCESS(CLOCK)
variable TMP: std_logic;
begin
if(CLOCK='1' and CLOCK'EVENT) then
if(J='0' and K='0')then
TMP:=TMP;
elsif(J='1' and K='1')then
TMP:= not TMP;
elsif(J='0' and K='1')then
TMP:='0';
else
TMP:='1';
end if;
end if;
Q<=TMP;
Q<=not TMP;
end PROCESS;
end behavioral;

T FlipFlop
El flip-flop T es una sola versin 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 estn unidas entre s. La salida del flip-flop T "alterna"
con cada pulso de reloj. Cdigo VHDL para T FlipFlop

VHDL Code for T FlipFlop


1
2
3
4
5
6
7
8
9
10
11
12
13
14

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity T_FF is
port( T: in std_logic;
Clock: in std_logic;
Q: out std_logic);
end T_FF;
architecture Behavioral of T_FF is
signal tmp: std_logic;
begin
process (Clock)
begin
if Clock'event and Clock='1' then

15
16
17
18
19
20
21
22
23
24
25

if T='0' then
tmp <= tmp;
elsif T='1' then
tmp <= not (tmp);
end if;
end if;
end process;
Q <= tmp;
end Behavioral;

Un sencillo tutorial sobre circuitos lgicos en el que se programar un flip flop


en VHDL utilizando un FPGA NEXYS 2

En

teora

de

circuitos lgicos se da a conocer un dispositivo electrnico


llamado flip flop, catalogado como un elemento de memoria
conformado por compuertas lgicas. Donde stas a travs de
una configuracin especfica, pueden de cierta manera
almacenar informacin. Una de las caractersticas 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 dems 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 seor Jack Kilby el creador
de

los

circuitos

integrados.

En

este

caso

explicaremos

el

funcionamiento bsico:
El dispositivo pose tres entradas: J, K, reloj. La entrada de reloj es
porque en circuitos lgicos, muchos dispositivos se manejan a travs
de pulso de reloj que le indicarn cundo debe determinar una accin.
Adems de esto, se tienen dos salidas clsicas: 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 sncronos, los tiempos exactos en los que cualquier
entrada cambia de estado se determina en base a la seal de reloj.
Las seales de reloj por lo general suelen ser un tren de pulsos
rectangulares o una onda cuadrada, que tienen una propiedad
llamada transicin, 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 cmo lo vamos a trabajar en base a la transicin de la


seal de pulso de reloj, es decir si el flip flop cambiar de valor cuando
haya una transicin de pendiente positiva o negativa.
La transicin de pendiente positiva es aquella donde el cambio se da
de 0 para 1, mientras que la transicin de pendiente negativa es
cuando el cambio se da de 1 para 0. En base a esta informacin se
deduce que el flip flop para cambiar lo que hay en su salida necesita
de la transicin de pulso que envia el reloj ya que esto
indica CUNDO 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:
J
0
1
0
1

K
0
0
1
1

CLK
FPN
FPN
FPN
FPN

Q
Q (sin cambio)
1
0
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 cdigo en VHDL. Este
cdigo lo cre hace unos meses cuando trabaj con un FPGA
NEXYS 2, estaba trabajando especficamente en un contador binario
de 4 bits. Pueden tomar como referencia el cdigo y hacerle
modificaciones. Se agradece comentarios =)

Shell

1
2
3
4
5
6
7
8
9
1
0
1
1
1
2
1
3
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2

entity FF is
Port ( clk,j,k,prn,clrn: in bit;
q: out bit);
end FF;
architecture sintaxis1 of FF is
SIGNAL qestado: bit;
begin
PROCESS (clk,prn,clrn) --Responde a cualquiera de estas entradas
BEGIN
IF prn = '1' THEN QESTADO <= '1';
ELSIF clrn = '1' THEN QESTADO <= '0';
ELSIF CLK = '0' AND CLK'EVENT THEN --Bajo activo
IF J = '1' AND K = '1' THEN QESTADO <= NOT QESTADO;
ELSIF J = '1' AND K = '0' THEN QESTADO <= '1';
ELSIF J = '0' AND K = '1' THEN QESTADO <= '0';
ELSIF J = '0' AND K = '0' THEN QESTADO <= QESTADO;
END IF;
END IF;
END PROCESS;
Q <= QESTADO; --Guarda el valor de la seal en la salida de los leds
end sintaxis1;

You might also like