• Lunes 23 de Diciembre de 2024, 12:19

Autor Tema:  Duda Con La Sentencia Case  (Leído 3123 veces)

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Duda Con La Sentencia Case
« en: Miércoles 8 de Febrero de 2006, 06:17 »
0
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:

Código: Text
  1.  
  2. library ieee;
  3. use ieee.std_logic_1164.all;
  4.  
  5. entity multiplexor is
  6.   port(
  7.     entrada0, entrada1: in std_logic;
  8.     selector: in std_logic;
  9.     salida: out std_logic
  10.   );
  11. end multiplexor;
  12.  
  13. architecture comp_multiplexor of multiplexor is
  14. begin
  15.   -- con esto funciona
  16.   -- salida <= entrada0 when selector = '0' else entrada1;
  17.  
  18.   -- pero aquí no
  19.   case selector is
  20.     when '0' => null;
  21.     when '1' => null;
  22.   end case;
  23. end data_flow;
  24.  
  25.  

¿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:

Código: Text
  1.  
  2. entity dec24 is
  3. port(
  4.   entrada: in std_logic_vector( 1 downto 0 );
  5.   salida: out std_logic_vector( 3 downto 0 );
  6.    ... );
  7. end dec24;
  8.  
  9. architecture arch of dec24 is
  10. begin
  11. ...
  12. case entrada is
  13.   when B"00" => ...
  14.   when B"01" =>
  15. end case;
  16. ...
  17. end arch;
  18.  
  19.  
Me refiero a las opciones B"00" y B"01", ¿es correcto hacerlo?

En este mismo ejemplo, ¿esta instrucción será válida?
Código: Text
  1.  
  2. salida <= ( 0 => '1', others => '0' );
  3.  
  4.  
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).
La imaginación es el límite.
Hardware & Software | Mexchip

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Duda Con La Sentencia Case
« Respuesta #1 en: Miércoles 8 de Febrero de 2006, 18:56 »
0
Pues nada, que ya se cuál era mi error en el primer código, las sentencias case DEBEN ir dentro de una process.

Para lo segundo, si funciona, pero me falta simularlo pues el programa que estoy usando no me deja alterar los valores de las entradas ni guardar los mapas de tiempos (formas de onda).

Saludos,
José Jorge (Geo).
La imaginación es el límite.
Hardware & Software | Mexchip