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

Temas similares

12/06/2007 #1


Dudas sobre Programación en VHDL
Realmente soy muy nuevo con esto de las FPGA's. Sin embargo, he estado probando cada dispositivo extra. Sin embargo, no he logrado satisfactoriamente una señal variable (con un potenciómetro). Mi salida, la cual está a los 8 LED's, siempre me muestra números sin sentido. Después de varias pruebas, me recomendaron que programara al preamplificador y al ADC en un programa como máquina de estados, sin embargo, aún sigo teniendo el mismo problema. El programa lo adjunto más adelante, el cual escribe la ganancia al preamplificador, luego activa al ADC, esperando los 34 pulsos de reloj. Si se quiere tomar otra muestra, se tiene que presionar un pushbutton, el cual solo repite los estados del ADC. También posee una activación externa del preamplificador.

Aquí está el ucf de mi programa:

Código:
#PACE: Start of Constraints generated by PACE

#PACE: Start of PACE I/O Pin Assignments
NET "ad_conv"  LOC = "p11" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 6 ; 
NET "amp_cs"  LOC = "n7" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 6 ; 
NET "amp_shdn"  LOC = "p7" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 6 ; 
NET "clk50"  LOC = "c9" | IOSTANDARD = LVCMOS33 ; 
NET "DAC_CS"  LOC = "n8" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 8 ; 
NET "data<0>"  LOC = "f12" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "data<1>"  LOC = "e12" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "data<2>"  LOC = "e11" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "data<3>"  LOC = "f11" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "data<4>"  LOC = "c11" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "data<5>"  LOC = "d11" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "data<6>"  LOC = "e9" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "data<7>"  LOC = "f9" | IOSTANDARD = LVCMOS33  | SLEW = FAST  | DRIVE = 8 ; 
NET "FPGA_INIT_B"  LOC = "t3" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 4 ; 
NET "onpre"  LOC = "l13" | IOSTANDARD = LVTTL  | PULLUP ; 
NET "rstadc"  LOC = "k17" | IOSTANDARD = LVTTL  | PULLDOWN ; 
NET "rstpre"  LOC = "d18" | IOSTANDARD = LVTTL  | PULLDOWN ; 
NET "sel"  LOC = "l14" | IOSTANDARD = LVTTL | PULLUP ;
NET "SF_CE0"  LOC = "d16" | IOSTANDARD = LVCMOS33  | DRIVE = 4  | SLEW = SLOW ; 
NET "spi_clk"  LOC = "u16" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 6 ; 
NET "spi_miso"  LOC = "n10" | IOSTANDARD = LVCMOS33 ; 
NET "spi_mosi"  LOC = "t4" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 6 ; 
NET "SPI_SS_B"  LOC = "u3" | IOSTANDARD = LVCMOS33  | SLEW = SLOW  | DRIVE = 6 ; 

#PACE: Start of PACE Area Constraints

#PACE: Start of PACE Prohibit Constraints

#PACE: End of Constraints generated by PACE
Dejo el programa en el archivo adjunto
De antemano, gracias
13/03/2008 #2


Dudas sobre Programacion en VHDL
tengo que hacer un multiplexor 3 a 8 con enable activo en bajo (lm 74251) en vhdl con arquitectura estrutural, cuando el enable esta en '1' la salidad tiene que ser alta impedancia, el problema es que no como hacer la compuerta para que cuando el anable sea '1' obtener la salida deseada
08/06/2008 #3


hola es sencillo suponiendo que enable sea una señal de entrada tipo bit como es en realizad y suponiendo que mi salida es un std_logic_vector(7 downto 0) y se llama sal, entonces se puede implementar asi:

if enable='1' then
sal<="zzzzzzzz";
end if;

y listo claro que depende de como declares las señales
25/09/2008 #4


Estructura en VHDL de un contador
hola pues miren basicamente lo que quiero hacer en realizar
en vhdl el desarrollo de un contador modulo 10 alguna
buena aportación?

y pues de ahi desarrollar otros contadores como le modifico?
gracias
21/04/2009 #5


Dado flip-flop D maquina de moore
Hola soy nuevo en el foro, y pues tengo una especie de tarea y es crear, a partir de un circuito secuencial, un dado digital; empleando el concepto de maquina de moore y usando flip flops tipo D y que se pueda visualizar en un display 7 segmento de la Spartan 3.
Pero tengo un problema, por alguna razón solo visualizo la secuencia 1,4,5,6... en verdad necesito que alguien me ayude, he revisado las tablas de exitación y los mapas K pero no he encontrado errores algunos, ni siquiera en la conexión del circuito. Ahi he adjuntado las tablas espero que puedan ayudarme...
Gracias
Archivos Adjuntos
Tipo de Archivo: rar dadompk_113.rar (79,5 KB (Kilobytes), 111 visitas)
22/04/2009 #6

Avatar de Ardogan

Me costó entenderlo al principio porque no incluiste un diagrama de flujo, ni aclaraste bien cuales eran las entradas/salidas del circuito.
Viendo la tabla de excitación, el estado no cambia cuando X=0, solo cuando X=1. Supongo que la idea es que al presionar X (X=1) un cierto tiempo el dado "ruede" hasta que se suelte X (X=0).
Las salidas S1,S2,S3 más una más que estaría siempre a 0 formarían una salida BCD que después la Spartan la utilizará para visualizar el valor en un display 7 segmentos.

Por otra parte, me alegra ver que un nuevo participante tiene el buen criterio de elegir un buen título, y postear algo hecho sin esperar que se lo resuelvan desde 0 acá. Así que va mi bienvenida a alguien que primero lo intenta y después si no sale pide ayuda!.

Bueno, encontré un error, es la 1ra vez que veo plantear las tablas de Karnaugh de esa manera así que lo tuve que hacer por mi parte.
El error está en la ecuación de D2 que queda:
D2 = /X Q2 + /Q1 Q2 + X Q1 /Q2 /Q3
La diferencia está en el último término, Q1 va sin negar.

Fijate que tu ecuación de D2 no se cumple para la fila 4 de la tabla.

Las ecuaciones de las salidas no las ví, si corrigiendo eso sigue sin salir volvé por acá que te damos una mano.

Saludos
22/04/2009 #7


ah discúlpame, no se como pude olvidar lo del diagrama de estados jaja, es que ayer estaba tan desesperado porque llevo 1 semana en esto y es para entregar el jueves. Y si con un botón de la Spartan el dado debe girar mientras el botón se mantenga presionado (X=1) y detenerse cuando se suelte (X=0).

Por otra parte las ecuaciones de salidas S3 S2 S1 estaban en el archivo "2.jpg". Se que hay otra forma de hacer el mapa de Karnaugh, pero jamás llegue a entenderla bien jeje y por eso empleo esta otra forma.

Y ya vi mi error tienes razón con lo de la ecuación D2, lo que pasa es que cuando hice el mapa de Karnaugh, del lado izquierdo puse dos veces en la tabla: /Q1 y /Q1, y debía ser /Q1 y Q1.

Muchísima gracias en verdad, no sabes cuanto te lo agradezco, ya por fin el dado funciona simulado en circuit maker, ahora solo debo pasarlo a Xilinx y listo...

MIL GRACIAS! de nuevo....
22/04/2009 #8

Avatar de Ardogan

Ok cesaritox09, me alegra haber podido ayudar.
Otra cosa destacable es que respondiste comentando como te fué, muchas veces uno da una respuesta o propone una solución y el que hizo la pregunta desaparece.
Así que bienvenido colega a la comunidad, comenzaste con el pie derecho, jaja.

Saludos
15/06/2009 #9


Sumador BCD en VHDL ayudaaa
El problema que tengo es que al hacer un sumador BCD en VHDL cuando compilo me marca 2 errores ya he intentado de todo y nada, ademas de todo estoy desesperado por que el proyecto es para mañana y no me queda espero me puedan ayudar les anexo el codigo que tengo.

-- Librerias aUtilizar --
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_arith.all;
USE ieee.std_logic_unsigned.all;
-- Definiendo Suma (bcd1+bcd2) --
entity SumBCD is
Port ( bcd1 : in std_logic_vector(3 downto 0);
bcd2 : in std_logic_vector(3 downto 0);
cibcd: in std_logic;
bcdsum : out std_logic_vector(3 downto 0);
cobcd : out std_logic);
end SumBCD;
-- Comportamiento de SumBCD --
architecture uno of SumBCD is
component sum4bit is
Port ( a : in std_logic_vector(3 downto 0);
b : in std_logic_vector(3 downto 0);
cin : in std_logic;
sum : out std_logic_vector(3 downto 0);
cout : out std_logic);
end component sum4bit;
signal s,x: std_logic_vector(3 Downto 0);
signal c,K : std_logic;
begin
u1: sum4bit port
map(a(3)=>bcd1(3),a(2)=>bcd1(2),a(1)=>bcd1(1),a(0) =>bcd1(0),
b(3)=>bcd2(3),b(2)=>bcd2(2),b(1)=>bcd2(1),b(0)=>bc d2(0),
cin=>cibcd,sum(3)=>s(3),sum(2)=>s(2),sum(1)=>s(1), sum(0)=>s(0),cout=>c);
K <= (s(3)and s(2))or(s(3)and s(1))or(c);
x <= "0110" when k ='1' else
"0000";
u2: sum4bit port
map(a(3)=>s(3),a(2)=>s(2),a(1)=>s(1),a(0)=>s(0),b( 3)=>x(3),b(2)=>x(2),b(1)=>x(1),b(0)=>x(0),
cin=>'0',sum(3)=>bcdsum(3),sum(2)=>bcdsum(2),sum(1 )=>bcdsum(1),sum(0)=>bcdsum(0),
cout=>cobcd);

end uno;
y este es el error que me arroja el compilador
Error: Node instance "u1" instantiates undefined entity "sum4bit"
,
Error: Node instance "u2" instantiates undefined entity "sum4bit"
.

Espero de su valiosa ayuda ya que si no entrego esto voy a reprobar la asignatura! :(
Archivos Adjuntos
Tipo de Archivo: zip bcd_addervhd_197.zip (700 Bytes, 40 visitas)
15/06/2009 #10

Avatar de Elvic

saludos

asegura te de agregar en el espacio de trabajo el archivo con nombre sum4bit, con su respectivo codigo
cuando haces la compilación es necesario que este adjunto al proyecto...

asi no te marcara ese error.
15/06/2009 #11


trabajando en eso gracias
13/12/2009 #12


Respuesta: ADC del Spartan 3E
Bueno disculpen que después de tanto tiempo me conecte al foro, pero estuve haciendo algunos trabajos con mi spartan. Respecto al adc de la spartan el código de arriba esta bueno, solo falta hacerle unos ajustes respecto a la señal de muestreo del adc, ya que para que pueda trabajar debe pasarse al estado bajo, por otro lado si se encuentra en estado alto mientras algún dispositivo trata de acceder al bus spi se pueden generar conflictos, por eso es mejor dejarlo en estado bajo mientras se escribe en el amplificador. Les dejo el código modificado y funcionando.
Archivos Adjuntos
Tipo de Archivo: rar adc.rar (2,3 KB (Kilobytes), 111 visitas)
10/03/2010 #13
Visitante


VHDL entradas sin signo
Hola,
Estoy interesado en hacer un contador básico con dos entradas, y que éstas sean sin signo, es decir, que el contador me de A+B O A-B (con un multiplexor poder seleccionar si es la suma o la resta). El código vhdl no me da ningún error, pero al querer simularlo con ISE, me sale lo siguiente:

Multiple declarations of unsigned included via multiple use clauses; none are made directly visible

Unit contador ignored due to previous errors

Entity contador is not yet compiled

unsigned is not declared
El código es el siguiente:

Código PHP:
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;
use 
IEEE.NUMERIC_STD.ALL;

entity contador is
    Port 
entrada1 in unsigned (3 downto 0);
             
entrada2 in  unsigned (3 downto 0);
             
operacion in  STD_LOGIC;
             
salida out  STD_LOGIC_VECTOR (3 downto 0));
end contador;

architecture Behavioral of contador is

signal numero
unsigned (3 downto 0);

begin

numero
<=(a+bwhen operacion='0' else (a-b)
salida<=std_logic_vector(numero)

end Behavioral

Muchas gracias.
11/03/2010 #14


VHDL Complemento A2
Hola estoy haciendo un sumador en el cual tengo dos entradas A y B, en funcion de un selecctor puedo hacer A+B ; A-B, A+1; A-1. la cuestion es que solo puedo usar un sumador, por lo que he hecho lo siguiente:

Código:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;

entity sumador2 is
    Port ( a : in  unsigned (15 downto 0);
           b : in  unsigned (15 downto 0);
           ctrl : in  unsigned (1 downto 0);
           result : out  unsigned (15 downto 0));
end sumador2;

architecture Behavioral of sumador2 is
signal aux: unsigned (15 downto 0);
begin
--Multiplexador
with ctrl select
aux<= b when "00",
-b when "01",
"0000000000000001" when "10",
"1111111111111111" when others;
-- Sumador
result<= a+aux;

end Behavioral;
la cuestion es que no se como hacer A-B, para hacer el -1 lo e pasado a complemento A2

Gracias y un saludo
19/03/2010 #15

Avatar de jaimepsantos

Respuesta: VHDL Complemento A2
hola que tal mira solo consiste en invertir todo y sumarle uno te puede quedar de la siguiente manera, a ademas le agregue un bit mas a la salida para que veas tu suma completa.

Código PHP:
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;

entity sumador2 is
    Port 
in  std_logic_vector (15 downto 0);
           
in  std_logic_vector (15 downto 0);
           
ctrl in  std_logic_vector(1 downto 0);
           
result out  std_logic_vector (16 downto 0));
end sumador2;

architecture Behavioral of sumador2 is
signal aux
std_logic_vector (15 downto 0);
begin
--Multiplexador
aux
<=
    
b when (ctrl ="00")else--sumas b
    
((not b)+'1'when (ctrl ="01")else--restas b por complemento a 2
    
"0000000000000001" when (ctrl ="01")else--sumas 1
    
"1111111111111111" when (ctrl ="11");--restas 1
-- Sumador
result
<= '0'&(a+aux);

end Behavioral
19/03/2010 #16

Avatar de jaimepsantos

Respuesta: VHDL entradas sin signo
___ dijo: Ver Mensaje
Hola,
Estoy interesado en hacer un contador básico con dos entradas, y que éstas sean sin signo, es decir, que el contador me de A+B O A-B (con un multiplexor poder seleccionar si es la suma o la resta). El código vhdl no me da ningún error, pero al querer simularlo con ISE, me sale lo siguiente:

Multiple declarations of unsigned included via multiple use clauses; none are made directly visible

Unit contador ignored due to previous errors

Entity contador is not yet compiled

unsigned is not declared



El código es el siguiente:

Código PHP:
library IEEE;
use 
IEEE.STD_LOGIC_1164.ALL;
use 
IEEE.STD_LOGIC_ARITH.ALL;
use 
IEEE.STD_LOGIC_UNSIGNED.ALL;
use 
IEEE.NUMERIC_STD.ALL;

entity contador is
    Port 
entrada1 in unsigned (3 downto 0);
             
entrada2 in  unsigned (3 downto 0);
             
operacion in  STD_LOGIC;
             
salida out  STD_LOGIC_VECTOR (3 downto 0));
end contador;

architecture Behavioral of contador is

signal numero
unsigned (3 downto 0);

begin

numero
<=(a+bwhen operacion='0' else (a-b)
salida<=std_logic_vector(numero)

end Behavioral

Muchas gracias.
Oye por que pusiste a+b y a-b si tus entradas se llaman entrada1 y entrada2 ??????
19/03/2010 #17

Avatar de jaimepsantos

Respuesta: como implementar alta impedancia en vhdl en arq estructural
darkcomet dijo: Ver Mensaje

if enable='1' then
sal<="zzzzzzzz";
end if;
Con mayusculas

sal<="ZZZZZZZZ"
22/03/2010 #18

Avatar de jaimepsantos

Respuesta: Estructura en VHDL de un contador
ThaConectted dijo: Ver Mensaje
hola pues miren basicamente lo que quiero hacer en realizar
en vhdl el desarrollo de un contador modulo 10 alguna
buena aportación?

y pues de ahi desarrollar otros contadores como le modifico?
gracias
Este es el codigo de un contador ascendente y/o descente un poco tarde pero aqui esta
Código:
Library IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity count_5 is
port
( clk,ad,reset: in std_logic;--ad es ascendente o descendente
out_data : buffer std_logic_vector (4 downto 0)
);
end count_5;

Architecture func of count_5 is
    begin
        process(clk,reset)
            begin
            if(reset='1') then
                out_data<="00000";
            elsif(clk' event and clk='1') then
                if (ad='0') then
                    out_data <= out_data + '1';
                else
                    out_data <= out_data - '1';
                end if;
            end if;
        end process;
end func;
29/03/2010 #19


Convertidor BCD a BCD exceso 3 en VHDL
Buenos dias, estoy buscando alguien que me informe donde puedo encontrar el codigo VHDL de un covertidor BCD (8421) a BCD exceso 3.... pues no se de programacion en este lenguaje...agradezco la ayuda....saludos.
29/03/2010 #20

Avatar de jaimepsantos

Respuesta: Convertidor BCD a BCD exceso 3 en VHDL
Hay dos formas de hacerlo. aqui te las pongo ambas:

Código:
Library IEEE;
use ieee.std_logic_1164.all;

Entity BCD_EX3 is
port
(
BCD: in std_logic_vector (3 downto 0);
BCD_3 : out std_logic_vector (3 downto 0)
);
end BCD_EX3;

Architecture flujo of BCD_EX3 is
begin
BCD_3<= "0011" when (BCD="0000")else--0
        "0100" when (BCD="0001")else--1
        "0101" when (BCD="0010")else--2
        "0110" when (BCD="0011")else--3
        "0111" when (BCD="0100")else--4
        "1000" when (BCD="0101")else--5
        "1001" when (BCD="0110")else--6
        "1010" when (BCD="0111")else--7
        "1011" when (BCD="1000")else--8
        "1100" when (BCD="1001")else--9
        "0000000"  ;
end flujo;
Código:
Library IEEE;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

Entity BCD_EX3 is
port
(
BCD: in std_logic_vector (3 downto 0);
BCD_3 : out std_logic_vector (3 downto 0)
);
end BCD_EX3;

Architecture flujo of BCD_EX3 is
begin

BCD_3<= BCD + "11";

end flujo;
¿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.