domingo, 6 de octubre de 2013

Bloques lógicos útiles en VHDL #1 - Flip Flop tipo D con Clear y Chip Enable (FDCE)

Como ahora ando metido en esto de los FPGAs, he decidido comprartirles unos cuantos códigos útiles que pueden utilizar en sus diseños a bloques. Este primer código es un Flip Flop tipo D con habilitador (Chip Enable), Reset (Clear) asíncrono y entrada de reloj.
Si se dan cuenta (y con mucha imaginación), el nombre de este Flip Flop se puede simplificar como FDCE. Recuerden esto, pues les será muy útil después. El circuito es este:



Como podrán ver, tiene una entrada "D", una salida "Q", un habilitador "CE", un reset asíncrono "CLR" y una entrada de reloj (el triangulito). Es bastante básico, pero muy útil.

Este es el código.



library IEEE;
use IEEE.STD_LOGIC_1164.all;  

entity FDCE is
generic (INIT :std_logic:='0'); -- El Flip Flop inicia en 0
port(CE, CLR, C, D: in std_logic;
Q: out std_logic);
end FDCE;

architecture FDCE of FDCE is
signal temp: std_logic :=INIT;
begin
process (CLR, C)
begin
if(CLR='1') then -- Clear asíncrono
temp <='0';
elsif(CE='1' and C' event and C='1') then -- Si hay una señal de reloj con flanco positivo, Q obtiene el valor de D
temp <=D;
end if;
end process;
Q<= temp;
end FDCE;


Aquí les dejo una captura de la simulación en Active-HDL para que vean que sí funciona


Ahora lo padre de este Flip Flop es que en prácticamente todos los FPGAs viene ya construido y es muy fácil hacerlo funcionar sin necesidad de escribir este código. Lo único que tienen que hacer es instanciarlo y ya. Ni siquiera lo tienen que declarar como componente. Aquí les va un ejemplo usando las librerías de Xilinx para un Spartan 3E.

library IEEE;
use IEEE.STD_LOGIC_1164.all; 

library UNISIM;
use UNISIM.vcomponents.all;

entity FDCE_Xilinx is
port(
CK, D, CE, CLR: in std_logic;
Q: out std_logic
);
end FDCE_Xilinx;


architecture FDCE_Xilinx of FDCE_Xilinx is
begin

FlipFlop: FDCE generic map('0') -- Comienza en 0
port map (C=>CK, D=>D, CE=>CE, CLR=>CLR, Q=>Q);

end FDCE_Xilinx;

Como podrán ver, estoy utilizando una librería adicional que es la UNISIM. Esta librería es de Xilinx y está hecha para instanciar un montón de cosas en sus FPGAs, entre ellas este FlipFlop llamado FDCE (como el nombre que convenientemente le puse al otro código!!). Existe una muy buena documentación sobre todo lo que trae esta librería. Les dejo el link de la info para el Spartan 3.

Los archivos del Active-HDL también los pueden bajar de mi cuenta de MediaFire. Les dejo el link.

My Github
https://github.com/DiegoRosales

Saludos!!

No hay comentarios:

Publicar un comentario