Autor Tema: Diseñando un contador síncrono 0-3  (Leído 5153 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado GeoMX

  • PIC10
  • *
  • Mensajes: 46
Diseñando un contador síncrono 0-3
« 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).

Desconectado antoniof

  • Moderadores
  • PIC24F
  • *****
  • Mensajes: 729
RE: Diseñando un contador síncrono 0-3
« Respuesta #1 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.

Desconectado GeoMX

  • PIC10
  • *
  • Mensajes: 46
RE: Diseñando un contador síncrono 0-3
« Respuesta #2 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).

Desconectado CARONTE

  • PIC10
  • *
  • Mensajes: 18
Re: Diseñando un contador síncrono 0-3
« Respuesta #3 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 :-/
El hombre inteligente no es el que tiene muchas ideas sino el que sabe sacar provecho de las pocas que tiene.

Desconectado Geo

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 922
    • Mexchip
Re: Diseñando un contador síncrono 0-3
« Respuesta #4 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).
La imaginación es el límite.
Visita mi blog, en inglés o en español :).
Mini curso de introducción a VHDL en MEXCHIP :-/