TODOPIC

Otros Microcontroladores / Dispositivos programables => Lógica Programable => Mensaje iniciado por: GeoMX en 01 de Marzo de 2006, 02:43:00

Título: Diseñando un contador síncrono 0-3
Publicado por: GeoMX en 01 de Marzo de 2006, 02:43:00
Qué tal, me pidieron implementar un contador síncrono up/down de base 16 en VHDL (descripción estructural), pero como no me salía me decidí por empezar con uno ascendente de 2 bits, tengo esto pero no me funciona, el bit menos significativo de la cuenta se queda en "unknown", ¿me pueden echar una mano?

Codigo:

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity ContadorBase4 is
    Port ( clk : in  STD_LOGIC;
           cuenta : out  STD_LOGIC_VECTOR (1 downto 0));
end ContadorBase4;

architecture Behavioral of ContadorBase4 is
   component FlipFlopD
      port(
         clk : in std_logic;
         d   : in std_logic;
         q   : out std_logic;
         qnot: out std_logic
      );
   end component;
   
   component xor2
      port(
         a : in std_logic;
         b : in std_logic;
         y : out std_logic
      );
   end component;
      
   signal q0, q1 : std_logic;
   signal qnot0, qnot1 : std_logic;
   signal q0xorq1 : std_logic;
begin

ffd_00:     FlipFlopD port map( clk => clk, d => qnot0, q => q0, qnot => qnot0 );
ffd_01:     FlipFlopD port map( clk, q0xorq1, q1, qnot1 );
xor2_00: xor2 port map( q0, q1, q0xorq1 );

cuenta(0) <= q0;
cuenta(1) <= q1;

end Behavioral;



Saludos,
José Jorge (Geo).
Título: RE: Diseñando un contador síncrono 0-3
Publicado por: antoniof en 01 de Marzo de 2006, 04:45:00
Buenas.

Tienes que utilizar la señal de reset para los FlipFlops, y una entrada de reset a tu contador. Si no no hay manera de que los registros sepan su estado inicial.
Título: RE: Diseñando un contador síncrono 0-3
Publicado por: GeoMX en 01 de Marzo de 2006, 22:18:00
Hoy logré que funcionara y me imaginaba que el problema era por lo de los diferentes valores que puede tomar una señal std_logic, intenté inicializando las señales auxiliares en 0 pero no funcionó.
Por ahora me funcionó utilizando señales de tipo bit en lugar de las std_logic, con ello pude ver el contador en acción; pero solo me pasó un momento por la mente lo del reset, gracias por comentarlo, esa debe ser la forma correcta Sonrisa.

Saludos,
José Jorge (Geo).
Título: Re: Diseñando un contador síncrono 0-3
Publicado por: CARONTE en 05 de Mayo de 2006, 18:37:52
podrias colocar tambien el programa que te salio para entenderlo ya que apenas estoy en eso de aprender muchas gracias de atemano :-/
Título: Re: Diseñando un contador síncrono 0-3
Publicado por: Geo en 29 de Mayo de 2006, 17:50:53
Es el mismo que el de arriba, sólo que agregándole una señal de reset a cada uno de los componentes (al flip-flop D y a la entidad principal ContadorBase4). Como verás, el contador está implementado conectando flip flops y una compuerta xor, atendiendo a un diseño común de un contador. Esto con la intención de aprender a conectar componentes en VHDL.

Pero un contador se puede hacer de una manera mucho más sencilla en VHDL, si cuentas con el ISE de Xilinx, en la documentación viene un tutorial en el que se diseña un contador ascendente/descendente de 4 bits, bastante sencillo y con menos código.

Saludos,
José Jorge (Geo).