duda vhdl y case when (xilinx)

#1
tengo un problemita, espero me puedan ayudar por favor
es que con la declaración case when tengo que diseñar el cto 74ls245 y ya lo intente y no mas no me sale, tengo esto no se si este bien o no
entity CI_74LS245 is
Port ( E : in STD_LOGIC;
DIR : in STD_LOGIC;
A : inout STD_LOGIC_VECTOR (7 downto 0);
B : inout STD_LOGIC_VECTOR (7 downto 0));
end CI_74LS245;

architecture Behavioral of CI_74LS245 is
SIGNAL C: STD_LOGIC_VECTOR (7 DOWNTO 0);
SIGNAL EDIR: STD_LOGIC_VECTOR (1 DOWNTO 0);
begin
CI:pROCESS (E,DIR, A, B)
BEGIN
EDIR(1) <= E;
EDIR(0) <= DIR;
CASE EDIR IS
WHEN "00" => A <= B;
WHEN "01" => B <= A;
WHEN OTHERS => C <= "ZZZZZZZZ";
END CASE;
A <= C;
B <= C;
END PROCESS CI;

end Behavioral;

y me marca de advertencia

WARNING:Xst:646 - Signal <EDIR> is assigned but never used. This unconnected signal will be trimmed during the optimization process.

estoy usando el project navigator (ISE) de Xilinx 12.4
 
Última edición:
#2
Prueba declarando EDIR como variable, dentro del proceso. Y luego haz la siguientes asignacion:
EDIR := E & DIR;
 
#3
Yo lo dejaría así:

Código:
(.... entity, etc. ....)

architecture Behavioral of CI_74LS245 is
SIGNAL EDIR: STD_LOGIC_VECTOR (1 DOWNTO 0);
begin
EDIR <= E & DIR;
CI:PROCESS (EDIR, A, B)
BEGIN
  CASE EDIR IS 
    WHEN "00" =>
      A <= B;
      B <= (others => 'Z');
    WHEN "01" =>
      A <= (others => 'Z');
      B <= A;
    WHEN OTHERS =>
      A <= (others => 'Z');
      B <= (others => 'Z');
  END CASE;
END PROCESS CI;
Al ser las señales A y B bidireccionales, la señal que en un determinado caso no es asignada sino que es "leída", tienes que asignarle alta impedancia ('Z'), que es como funciona en la realidad.

La señal EDIR se puede sacar fuera del process. Por otro lado, lo que te sale es un warning y simplemente indica que durante la fase de optimización de las puertas lógicas en la FPGA, esa señal va a desaparecer ya que no es necesaria. Es muy típico que salgan este tipo de warnings, no te preocupes. En tu caso, fíjate que EDIR no es necesaria ya que podrías haber usado perfectamente E y DIR por separado, EDIR es una señal redundante.

Un saludo
 

Temas similares

Arriba