Haz una pregunta
  Foros de Electrónica » Diseño digital » Circuitos lógicos combinacionales y secuenciales
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

09/03/2013 #101

Avatar de chclau

y que hiciste hasta ahora ?

Contanos los,primeros pasos que diste y de ahi te ayudamos
09/03/2013 #102


Mostrar en cuatro displays de siete segmentos una palabra de cuatro caracteres. La palabra estará formada por las primeras 4 letras que son S T E F

lo que quiero hacer es mostrarlos en 4 displays pero con este efecto
0000
000S
00ST
0STE
STEF
TEF0
EF00
F000
0000

Lo primero que he realizado es saber q combinaciones necesito en los displays para generar estas letras
segmentos de mis display g f e d c b a
1 1 0 1 1 0 1 --s--
0 1 1 0 0 0 1 --t--
1 1 1 1 0 0 1 --e--
1 1 1 0 0 0 1 --f--
pero mi programacion de v.h.d.l no funciona =(
09/03/2013 #103

Avatar de chclau

... pone lo que hiciste y lo comentamos
09/03/2013 #104


entity Unidad_3 is

port( CLK: in std_logic ;
Q: out std_logic_vector ( 6 downto 0 ));
end Unidad_3;

architecture behavioral of Unidad_3 is
begin
process (CLK)
begin
if (CLK'event and CLK = '1' ) then
if (Q = "0111111") then --0--
Q<= "1101101";
elsif (Q = "1101101") then --s--
Q<= "0110001";
elsif (Q = "0110001") then --t--
Q<= "1111001";
elsif (Q = "1111001") then --e--
Q<= "1110001";
else Q<= "1110001"; --f--
end if;
end if;
end process;
end behavioral;
09/03/2013 #105

Avatar de chclau

Algunas observaciones

Fijate que asi como esta nunca va a pasar nada ya que Q no tiene un valor inicial. Lo que podes hacer es agregarle una swñal de reset y asignarle el primer valor en reset.

Lo otro es que en VHDL no se puede leer el valor de una salida, entonces lo que se hace es definir una señal interna y segun el valor que tenga, activar la logica y la salida.

Luego de esas correcciones ya tendrías la salida para un display, te falta pensar como hacer la logica para cuatro.
09/03/2013 #106


mira ya tengo la sincronia con 2 display solo me falta ajustarlo para que los sig dos funcionen =. tendras algun manual o algo q m pueda ayudar parte del libro de maxinez?
19/04/2013 #108


temporizador en VHDL
Hola

requiero la realizacion de un sistema secuencial para un trabajo en la universidad, el problema es que es circuito tiene un 555 como monoestable de unos 5sg, la tarea es realizar este temporizador en vhdl, las dudas me embargan ya que tengo practica con microprocesadores y no con este lenguaje, si es posible que alguien me oriente sobre este tema seria de gran ayuda, ya que no se si estos dispositivos tiene clock y como manejar esta señal.

Gracias
19/04/2013 #109

Avatar de chclau

Los FPGA normalmente tienen señal de reloj, si tenes una referencia exacta de reloj, hacer un temporizador en definitiva es contar n pulsos de reloj. Si el reloj tiene periodo de 1us, un contador hasta mil puede hacer un retardo de hasta 1ms
20/04/2013 #110


gracias por la nota aclarativa, lo siguiente es como puedo crear una variable en vhdl, segun veo
varible axx: integer 0 to 100; esta bien declarada y al hacer esto la puedo usar para decrementarla en cada transicion del clk.
20/04/2013 #111

Avatar de chclau

VHDL es distinto a un lenguaje de programacion comun. En un lenguaje como Basic o C creas una variable y ella ocupara una posicion de memoria. En VHDL lo que se hace es describir hardware. Por eso no pensamos en funcion de variables sino en funcion de elementos de hardware: compuertas, flipflops, contadores. Buscate algun libro de los que ya fueron recomendados en el foro y fijate como se define y usa un contador.
21/04/2013 #112


este es el algoritmo creado para resolver la aplicación, me podrías regalar tu opinión.

Código:
use IEEE.std_logic_1164.all;
use ieee.std_logic_arith.all;
use ieee.std_logic_unsigned.all;

entity    CAR is             //definer la eentidad carro
PORT (IN1,IN2,CLK:IN STD_LOGIC; Q1,Q1N,Q2,Q2N:OUT STD_LOGIC);// entradas y salidas de la entidad
end CAR

Architecture  CAR_CONTROL of CAR is
signal (QT,fin: STD_LOGIC;cont:integer range o to 99000)

begin 
process (IN1,IN2,CLK,fin,cont)
begin 


if  (rising_edge(IN1) or RISING_EDGE(IN2)) then
      QT<= NOT QT;
          if  QT=1 then
                Q1<=0;
                Q1N<=0;
                Q2<=0;
                Q2N<=1;
            
            else //QT=0
                         Q2<=0;
                Q2N<=0;
                Q1<=0;
                Q1N<=1;
        end if 
        cont<=3000;
                          fin<=0;
 CICLO DE ESPERA 
    while  fin = 0 loop 
        
        if  ( clk'event  and  clk='1') then 
             cont<=cont -1;
                if cont= '0'
                    fin<='1';
                end if
        end if 
       end loop 
    
     
else 
        Q1<=1;
        Q2<=1;
        Q1N<=0;
        Q2N<=0;
        
end if
21/04/2013 #113

Avatar de chclau

Hola!

bueno, has hecho ya un esqueleto y eso es bueno

unas cuantas observaciones

En un dispositivo sincrono, como flip flops y contadores, hay solamente dos señales a tomar en cuenta en la sensitividad de los procesos

Reset ( que no usaste)
y clock

se usa rising edge solamente para la señal de clock, ya que es el clock el que muestrea la entrada y la presenta a la salida
reset normalmente resetea al flip flop o contador

un ejemplo tipico de flip flop

process (reset, clock)

if (reset = '0')
q<= '0';
elsif(rising_edge(clock))
q<= in;
end if;

end process

fijate que la señal in y q no aparecen en la lista de sensibilidad

Un contador es parecido a un flip flop con el agregado de una señal de load para cargar datos y una de enable para contar.

Una compañia que a mi me gusta es Altera, busca en su sitio y encontraras exactamente como escribir flip flops y contadores. Si todavia no queda algo claro pregunta

Suerte!
21/10/2013 #114


Contador 0-9999 vhdl tarjeta basys 2
tengo un contador de 0 a 9999 con un pin de down/up con el cual el automaticamente comienza a contar ascendente o descendente, necesito quitarle el automatico y volverlo manual, de tal manera que le habilite un pulsador que cada vez que lo pulse cuente 1, 2, 3, 4, 5...etc
Archivos Adjuntos
Tipo de Archivo: rar 9999_CONTADOOR2 (1).rar (796,9 KB (Kilobytes), 51 visitas)
15/12/2013 #115


Dudas sobre Programacion en VHDL
Bueno, debo hacer una máquina de estado, e implementarla en una FPGA, sucede que no tengo claro como podría multiplexar 4 displays 7 segmentos de la targeta para mostrar una secuencia en dichos displays, cada cierto segundo.
A continuación la secuencia que debe seguir cada segundo.

Archivo Adjunto 102910
Alguien tiene documentación de como hacer esa multiplexación de displays..
gracias.

Algo que se me ocurre es mostrar el mensaje al tiempo en todos los displays y tener 4 señales de reloj..diseñar divisores de frecuencia para que la la frecuencia sea tan rápida que el ojo humano no la perciba.. gracias.
Imágenes Adjuntas
Tipo de Archivo: jpg cats.jpg (80,7 KB (Kilobytes), 5 visitas)
15/12/2013 #116


Tienes un ejemplo de como multiplexar los displays de 7 segmentos en el apartado 6.3.2 del libro Diseno de circuitos digitales con VHDL (http://eciencia.urjc.es/handle/10115/4045). Quiza tengas que mirarte los apartados anteriores para entenderlo mejor.
Saludos
15/02/2014 #117

Avatar de aguevara

Les comento, recién estoy haciendo mis primeros ensayos en VHDL usando el software QuartusII versión 13.1 de Altera.
La placa de desarrollo es la DE0, la intención es hacer un contador de 4 bits (muy simple creo yo) y para empezar está ok.
Bueno el código esta aquí:

-- contador 4 bits con clk y reset
Código:
library ieee;
use ieee.std_logic_1164.all;

entity contador is port (clk: in std_logic;
                 rst: in std_logic;
                   q: inout std_logic_vector (3 downto 0));
end contador;


architecture cuenta of contador is
begin 
process (clk,rst) begin 
    if (rst'event and rst = '0') then 
        q<= "0000";
        if (clk'event and clk = '0') then 
            q <= q+1;
        end if;
    end if;
end process;
end cuenta;
La pregunta es; al compilar me arroja el siguiente error:
Error (10327): VHDL error at contador.vhd(16): can\'t determine definition of operator "+" -- found 0 possible definitions

Buscando, encontré que usando la librería std_logic_unsigned se podría corregir dado que no es posible hacer una suma con datos del tipo std_logic y std_logic_vector, así que declaré la librería y nada, el error persiste.
He usado varias librerías sin resultado positivo. ¿Alguien tiene alguna pista sobre como corregir este error?

Saludos.
16/02/2014 #118


Estimado aguevara, estas trabajando con operadores sobrecargados, por lo que tendrás que utiliza la librería IEEE para tal fin. Esto lo puedes solucionar declarando al inicio de tu descripción:

library IEEE;
use IEEE.std_logic_1164.all;
use IEEE.numeric_std.all;

Además recuerda en declarar las señales de manera correcta para poder realizar la operaciones de suma.

Cualquier duda revisa las librerías o comenta para dar mas ayuda.
Recuerda que VHDL NO TIENE EL MISMO TRATO QUE LENGUAJE C.

---------- Actualizado después de 2 minutos ----------

Otra aclaración, no es recomendable declarar un puerto como entrada y salida a la vez, sobre todo si recien estas comenzando a describir hardware.
16/02/2014 #119

Avatar de aguevara

Lo de las librerias ya las he definido como indicas y .. nada de nada el mismo error, a que te refieres con declarar las señales de manera correcta?, es que acaso debo diseñar el contador completamente con compuertas?? que si deseo omitir ese paso y ver al contador solo como una caja con 2 entradas y 4 salidas?? (no se si me explique)
16/02/2014 #120

Avatar de chclau

Este anda, comparalo con el tuyo y fijate si entendes todos los cambios que hice, ya que todos son necesarios.

Código:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity counter is 
port (
	clk: in std_logic;
    rst: in std_logic;
    q: 	 out std_logic_vector (3 downto 0)
);
end counter;


architecture count of counter is
	signal cnt : std_logic_vector (3 downto 0);
begin 
process (clk,rst) begin 
    if (rst = '0') then 
        cnt <= (others => '0');
    elsif (clk'event and clk = '0') then 
        cnt <= cnt + 1;
    end if;
end process;
q <= cnt;
end count;
Te remarco algunos de los principales:

Usé out en lugar de inout para la salida q
No usé event para reset (es incorrecto usar event para reset, se usa para clock)
Usé la libreria unsigned
Usé una variable auxiliar (por que?)...
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Buscar más temas sobre:
Lupa Circuitos lógicos combinacionales y secuenciales

Compuertas, flips flops, registros, PLDs, codificadores, contadores, multiplexores, ...

Cerrar
Foros de Electrónica » Diseño digital » Circuitos lógicos combinacionales y secuenciales

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.