Qué tal, recién empiezo un curso en el que usaremos VHDL, por ahora estoy comenzando a leer y ojalá puedan ayudarme con un par de ejercicios.
En el libro que estoy leyendo (en el capítulo dedicado a las setencias secuenciales), se pide implementar un multiplexor 2-1 utilizando la sentencia CASE. Ya hice el multiplexor con una sentencia when en una asignación, pero no logro que me funcione usando la sentencia case, tengo esto:
library ieee;
use ieee.std_logic_1164.all;
entity multiplexor is
port(
entrada0, entrada1: in std_logic;
selector: in std_logic;
salida: out std_logic
);
end multiplexor;
architecture comp_multiplexor of multiplexor is
begin
-- con esto funciona
-- salida <= entrada0 when selector = '0' else entrada1;
-- pero aquí no
case selector is
when '0' => null;
when '1' => null;
end case;
end data_flow;
¿Qué es lo que estoy haciendo mal? No sé si no pueda usar '0' y '1' para las selecciones, me gustaría que me comentaran al respecto. Por ahora estoy usando el simulador Simili Sonata 3.
También, tengo problemas con otro ejercicio, pero estoy seguro que la solución es la misma, se trata de un decodificador 2x4 implementado también con una sentencia case (y con una if), no sé si se pueda hacer esto:
entity dec24 is
port(
entrada: in std_logic_vector( 1 downto 0 );
salida: out std_logic_vector( 3 downto 0 );
... );
end dec24;
architecture arch of dec24 is
begin
...
case entrada is
when B"00" => ...
when B"01" =>
end case;
...
end arch;
Me refiero a las opciones B"00" y B"01", ¿es correcto hacerlo?
En este mismo ejemplo, ¿esta instrucción será válida?
salida <= ( 0 => '1', others => '0' );
La pretendo usar para poner en 1 el bit deseado y los demás en 0 explícitamente.
Gracias de antemano por cualquier comentario.
Saludos,
José Jorge (Geo).