Dudas sobre Programación en VHDL

Hombre muchas gracias...eres muy amable... no pense que fueran a responder tan rapido... de verdad te lo agradezco mucho.
 
buenas tardes colegas despues de un año ahora ingreso a esta comunidad pidiendoles ayuda al respecto del miniproyecto este de hacer un dado electronico digital y requiero de su ayuda cesaritox no tendras de casualidad el proyecto hecho en xilinx aun ?? si lo subes te lo agradecere mucho igual a ti ardogan
 
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;
Hola jaimepsantos, estuve probando el codigo que me sugeriste sobre BCD a BCD3 (el primero de ellos).... en la parte "0000000" ; me sale un error en el ISE xilinx.... y no me compila.... le hace falta algo alli???...gracias
 
aqui te dejo una idea, consiste en un conteo de alta velocidad demanera que cuando tu presionas el boton este se muestra en display de 7 segmentos, el conteo se resetea cuando es seis, de ahi lo decodoficamos a 7 segmentos, asi tenemos una secuencia de velocidad muy alta diciendo que es imposible elegir un valor es decir es al azar

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

Entity dado is
    port
    (
    clk_50, env_data: in std_logic;--al cristal de 50MHZ y env data es el boton
    salida7s: out std_logic_vector(6 downto 0)
    );
end dado;

Architecture special of dado is
   signal conteo: std_logic_vector(2 downto 0);
   signal conteo_deco: std_logic_vector(6 downto 0);
      begin
        process(clk_50)
            begin
            if(clk_50' event and clk_50='1')then
            conteo<=conteo+'1';
                if(conteo="110")then
                conteo<=0;
                end if;
            end if;    
        end process;    
    conteo_deco <=
        "1111110" when (conteo="000")else--0
        "0110000" when (conteo="001")else--1
        "1101101" when (conteo="010")else--2
        "1111001" when (conteo="011")else--3
        "0110011" when (conteo="100")else--4
        "1011011" when (conteo="101")else--5
        "1011111" when (conteo="110")else--6
        "0000000"  ;
    
    salida7s = conteo_deco when (env_data='1')else
    "ZZZZZZZ";    
end special;
 
Última edición:
Buenos dias.

hace algunos dias pregunte por un condigo VHDL para un convertidor BCD a BCD exceso 3 y me ayudaron con el siguiente. Pero resulta que al usarlo me sale un error en la penultima linea ("0000000" ; ).... mi pregunta es...que le falta a este codigo???...gracias.. :confused:

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;
 
Última edición por un moderador:
Pero en el display estarias viendo como es que va avanzando el contador solo cuando env_data='1' no? es necesario tambien pausar esa serie de datos cuando env_data='1'

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

Entity dado is
    port
    (
    clk_50, env_data: in std_logic;--al cristal de 50MHZ y env data es el boton
    salida7s: out std_logic_vector(6 downto 0)
    );
end dado;

Architecture special of dado is
   signal conteo: std_logic_vector(2 downto 0);
   signal conteo_deco: std_logic_vector(6 downto 0);
      begin
        process(clk_50)
            begin
            if(clk_50' event and clk_50='1')then
               [COLOR="Red"]if (env_data='0') then
                  conteo<=conteo+'1';
               elsif (env_data='1') then
                  conteo<=conteo;
               end if;[/COLOR]
                if(conteo="110")then
                conteo<="001";
                end if;
            end if;    
        end process;    
    conteo_deco <=
        "0110000" when (conteo="001")else--1
        "1101101" when (conteo="010")else--2
        "1111001" when (conteo="011")else--3
        "0110011" when (conteo="100")else--4
        "1011011" when (conteo="101")else--5
        "1011111" when (conteo="110")else--6
        "0000000"  ;
    
    salida7s <= conteo_deco when (env_data='1') else
    "ZZZZZZZ";    
end special;
 
Última edición:
gracias colegas pero yo estuve haciendolo mediante makina de moore con mapas k, tabla de exitacion y me falta solo es el eskematico para convertirlo en bloke en xilinx asi q si me pueden ayudar nuevamente se los agradezco gracias
 
Buenas tardes, quisiera que porfavor me ayudaran:

Necesito varios ejemplos de programación en lenguaje VHDL para Registros Lifo Lilo, Filo Fifo (Desplazamiento a derecha o izquierda).... agradezco de antemano la ayuda... Muchas gracias... :)
 
Hola tengo que hacer en la spartan 3E un circuito de detección de flanco descendente podeis ayudarme?? no se ni por donde empeza.

gracias y un saludo

Hola que tal te dejo esto es un FF tipo d de 8 bits utilizando flanco de bajada:

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

entity FFD_8 is
port(
    oe,clk : in std_logic;
    data_in : in std_logic_vector (7 downto 0);
    data_out: out std_logic_vector (7 downto 0)
    );
end FFD_8;

Architecture func of FFD_8 is
begin
    process(clk,oe)
    begin
        if (oe ='0') then
        data_out <= "ZZZZZZZZ";
        elsif(clk' event and clk='0') then--deteccion del flanco con cero es bajada
        data_out <= data_in;--con un 1 es subida
        end if;
    end process;
end func;
 
Compañeros, lo que sucede es que tengo que hacer un modulo en vhdl, en el cual me entran dos vectores de 14 bits, y lo que tengo que hacer es sacar otro vector corregido de 14 bits segun la siguiente formula. (TR/TF)xTF , donde TR y TF son los vectores de entrada, ya que necesito hacer una calibracion para un termometro. Mi problema es que necesito que la salida tenga la mayor exactitud posible, para que se aproxime a TF, por lo tanto la division TR/TF de ser un real (ej:100/30=3.33) pero no he podido cuadrar el codigo ya que solo me permite hacer divisiones por 2 a la n. Agradeceria que me pudieran ayudar a cuadrar este codigo para que mi salida sea lo mas precisa posible.
 
Debes cambiar el tipo de variable seguramente estas usando el std_logic cambiala a real, aqui te dejo un ejemplo de como sebes hacerlo.

Variables en VHDL
•Tipos reales o flotantes.
Real o punto flotante, sirven para representar números enteros y fraccionarios su rango esta entre -1e38 a 1e38.

Ejemplos:
type Voltaje is range-5.5 TO 5.5;
signal V1: voltaje:= -3.3;
signal duracion: real:= -3.3; --Predefinido en el lenguajeVHDL

http://usuarios.multimania.es/israelsu/unimayab/Arquitectura%20de%20Computadoras/Arq%20computadoras_05.pdf

Ve la hoja tres
 
Gracias por todo jaimepsantos, me salvaste la vida!!

amigo pero ahora el programa no me sintetiza, no se que pasa, te agrego el codigo por si me puedes ayudar.

entity calibracion is
Port ( E : in STD_LOGIC;
TR : in STD_LOGIC_VECTOR (13 downto 0);
TF : in STD_LOGIC_VECTOR (13 downto 0);
TC : out STD_LOGIC_VECTOR (13 downto 0));
end calibracion;

architecture Behavioral of calibracion is

signal RI : integer;
signal FI : integer;
signal RR : real;
signal FR : real;
signal C : real;
signal CR : real;
signal CI : integer;
signal CV : STD_LOGIC_VECTOR (13 downto 0);

begin

process(TR,TF,E)
begin
if (E=1) then
RI:= conv_integer(TR);
FI:= conv_integer(TF);
RR:= real(RI);
FR:= real(FI);
C:= (RR/FR);
CR:= (C*FR);
CI:= integer(CR);
CV<= to std_(13 downto 0)logic_vector(CI);
end if;
end process;
TC<=CV;

end Behavioral;

Creo que tal vez estoy fallando en la conversion de entero a vector (señal CV).
 
Última edición:
Hola:
Tengo que diseñar un osciloscopio de una manera abierta (en cuanto a los elementos que contenga) en código VHDL y me gustaría ver algún código relacionado en VHDL para que me sirva como inspiración.
¿Conocéis algún repositorio de código donde pueda encontrar este tipo de elemento?
Muchas gracias
 
amigos agradeceria si alguien me pudiera ayudar con este programa de vhdl el cual no se por que razon no me quiere funcionar. Gracias.

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

---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives in this code.
--library UNISIM;
--use UNISIM.VComponents.all;

entity calibracion is
Port ( E : in STD_LOGIC;
TR : in STD_LOGIC_VECTOR (13 downto 0);
TF : in STD_LOGIC_VECTOR (13 downto 0);
TC : out STD_LOGIC_VECTOR (13 downto 0));
end calibracion;

architecture Behavioral of calibracion is
signal RI : integer RANGE 0 TO 150;
signal FI : integer RANGE 0 TO 150;
signal CI : integer RANGE 0 TO 150;
signal RR : real RANGE 0.0 TO 150.0;
signal FR : real RANGE 0.0 TO 150.0;
signal C : real RANGE 0.0 TO 150.0;
signal CR : real RANGE 0.0 TO 150.0;
signal CV : std_logic_vector(13 downto 0);

begin
process(TR,TF,E)

--VARIABLE RI: integer RANGE 0 TO 150;
--VARIABLE FI: integer RANGE 0 TO 150;
--VARIABLE CI: integer RANGE 0 TO 150;
--VARIABLE RR: real RANGE 0.0 TO 150.0;
--VARIABLE FR: real RANGE 0.0 TO 150.0;
--VARIABLE C: real RANGE 0.0 TO 150.0;
--VARIABLE CR: real RANGE 0.0 TO 150.0;
--VARIABLE CV : std_logic_vector(13 downto 0);

begin
if (E='1') then
RI<= conv_integer(TR);
FI<= conv_integer(TF);
RR<= real(RI);
FR<= real(FI);
C<= (RR/FR);
CR<= (C*FR);
CI<= integer(CR);
CV<= conv_std_logic_vector(CI, 14);
end if;
TC<=CV;
end process;

end Behavioral;
 
Buenas noches colegas, me gustaria que me ayudaran a resolver un problema que me plantearon en lenguaje VHDL, y que yo no tengo mucho experiencia en este lenguaje, pero que es muy utilizado en al actualidad, el problema consiste en hacer en VHDL un indicador visual que muestre cuando van pasando una materia o si la van perdiendo basandose en un circuito logico, yo pienso implementarlo con un sumador, y un comparador, el sumador tomara las notas y las sumara para luego comparar el resultado en un comparador el cual dara el resultado segun la condicion impuesta.

agradezco la colaboracion de ustedes

LUIS CARLOS COTES
 
Atrás
Arriba