duda con signal en vhdl

estoy haciendo el primer, ejercicio para la universidad, he leido unos cuantos archivos de vhdl. pero no logro entender por q no me funciona la signacion de SIGNAL

estoy haciendo un multiplexor de 4 canales con 4 bits, esto a su vez a un decodificador de 7 segmentos, utilizando xilinx, 12.1 y me genera 3 errores con las aignacion de signal

alguien me puede explicar donde comento los errores ya que mis escasos conocimientos sobre le tema y el programa no me lo permiten, gracias
 

Adjuntos

  • mux-7seg.txt
    2.3 KB · Visitas: 30
este tema no va aqui, porfabor moverlo a dudas en VHDL.... pero bueno.. te respondo... en primer lugar el vector Y esta mal dimencionado deberia de ser asi : y : out STD_LOGIC_VECTOR (6 downto 0) supongo que lo utilizar para mostrar en displays de 7 seg.
luego en la parte de asignacion de hexadecimal estan mal los codigos de c,d,e que deberias de ser 1100, 1101, 1110 respectivamente. eso es lo que podria opinar a primera revision del codigo... ahhh ademas que el signal z, su condicion inicial deberia de ser de la forma "0000". y en el process en la lista de sensibilidad solamente deberia de ir sel, los demas estan redundando

para el segundo case prueba añadir un process(z) antes de este que creo que eso lo borrastes ya que deberia de estar ahi segun tu codigo
 
Última edición:
estoy haciendo el primer, ejercicio para la universidad, he leido unos cuantos archivos de vhdl. pero no logro entender por q no me funciona la signacion de SIGNAL

estoy haciendo un multiplexor de 4 canales con 4 bits, esto a su vez a un decodificador de 7 segmentos, utilizando xilinx, 12.1 y me genera 3 errores con las aignacion de signal

alguien me puede explicar donde comento los errores ya que mis escasos conocimientos sobre le tema y el programa no me lo permiten, gracias


Buen día Andres, inicialmente quiero hacerte una aclaración:
A la hora de abordar un diseño en VHDL se debe decidir si se va a manejar desde el punto de vista secuencial (usando process) o concurrente (sin process).
Por mi parte te recomiendo usar la programación concurrente en la mayoría de los casos debido a que evita muchos problemas de comprensión de lo que se programa; utiliza secuencial cuando necesites diseñar registros o memorias.



estoy haciendo el primer, ejercicio para la universidad, he leido unos cuantos archivos de vhdl. pero no logro entender por q no me funciona la signacion de SIGNAL

estoy haciendo un multiplexor de 4 canales con 4 bits, esto a su vez a un decodificador de 7 segmentos, utilizando xilinx, 12.1 y me genera 3 errores con las aignacion de signal

alguien me puede explicar donde comento los errores ya que mis escasos conocimientos sobre le tema y el programa no me lo permiten, gracias

Luego de haberte aclarado lo anterior, empecemos con el diseño concurrente del multiplexor:

En VHDL existe la asignacion whit-select, con ella se hace de manera muy simple un multiplexor, veamos:

--Multiplexor utilizando WITH-SELECT

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity multiplexor is
port
(
A,B,C,D : in std_logic_vector (3 downto 0);--Entradas
ctrl : in std_logic_vector (1 downto 0);--señal de control
S : out std_logic_vector(3 downto 0)--salida
);

end multiplexor;

architecture fcn of multiplexor is
begin

with ctrl select --de acuerdo al valor de 'ctrl' se muestra cualquier entrada

S <= A when "00",
B when "01",
C when "10",
D when "11";
end fcn;



Si quieres mantener tu propuesta con 'process', veo varios errores en tu codigo:
1. 'y' es declarada de 4bits pero en el case se le asignan 7 bits, esto te presenta error.
2. No es necesario inicializar en '0' la señal 'z' debido a que su valor se actualiza inmediatamente en el primer 'case'.



Propuesta codigo completo, cualquier error me comentas:


--Multiplexor utilizando WITH-SELECT

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity multiplexor is
port
(
A,B,C,D : in std_logic_vector (3 downto 0);--Entradas
ctrl : in std_logic_vector (1 downto 0);--señal de control
y : out std_logic_vector(6 downto 0)--salida
);

end multiplexor;

architecture fcn of multiplexor is

signal z: std_logic_vector(3 downto 0);

begin

with ctrl select
z <= A when "00",
B when "01",
C when "10",
D when "11";

with z select
y <= "1111110" when "0000",
"1100000" when "0001",
"1101101" when "0010",
"1111001" when "0011",
"0110011" when "0100",
"1011011" when "0101",
"1011111" when "0110",
"1110000" when "0111",
"1111111" when "1000",
"1111011" when "1001",
"1111111" when "1010",
"1110111" when "1011",
"0011111" when "1010",
"0111101" when "1011",
"1001111" when "1010",
"1000111" when others;
end fcn;
 
Última edición:
Atrás
Arriba