Professional Documents
Culture Documents
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.
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
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
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;
En
teora
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
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;