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;