Señal de bit constante en VHDL

0

Necesito declarar un poco con el valor constante de 1.

Lo que casi funcionó fue:

signal name: bit := '1';

pero el valor de "nombre" siempre es '0' en este caso.

¿Cómo puedo hacer esto correctamente?

Código completo:

ENTITY sleA IS
PORT(
    signal sel: std_logic; 
    A: in bit_vector (3 downto 0);
    S: out bit_vector (3 downto 0)
);
end sleA;
architecture arq_sleA of sleA is
begin
    sel <= '1';
    S(3) <= ((not sel) and A(3)) or (sel and A(2));
    S(2) <= ((not sel) and A(2)) or (sel and A(1));
    S(1) <= ((not sel) and A(1)) or (sel and A(0));
    S(0) <= ((not sel) and A(0)) or (sel and sel);
end arq_sleA;
    
pregunta Fuga

2 respuestas

1

Si sel es una entrada para la entidad, entonces puede establecer el valor inicial en el puerto de la entidad:

port(
  sel: in std_logic := '1';
  A: in bit_vector (3 downto 0);
  S: out bit_vector (3 downto 0)
);

Esto funcionará en la simulación, pero para la síntesis, asegúrese de que su tecnología de destino admita valores iniciales de "encendido" (es cierto para los FPGA, no para los ASIC). Consulte ¿Es necesaria la inicialización?

También tenga en cuenta que signal solo se usa en el cuerpo de la arquitectura, no en la declaración de la entidad.

    
respondido por el Tony K
0

Si desea utilizar esta entidad siempre con un valor fijo para sel , elimine el puerto de entrada sel y declare una constante sel dentro de la arquitectura.

entity sleA is
port(
    A: in bit_vector (3 downto 0);
    S: out bit_vector (3 downto 0)
);
end sleA;
architecture arq_sleA of sleA is
    constant sel : std_logic := '1';
begin
    S(3) <= ((not sel) and A(3)) or (sel and A(2));
    S(2) <= ((not sel) and A(2)) or (sel and A(1));
    S(1) <= ((not sel) and A(1)) or (sel and A(0));
    S(0) <= ((not sel) and A(0)) or (sel and sel);
end arq_sleA;

Si desea utilizar esta entidad varias veces con un valor diferente para sel , entonces debe mantenerse el puerto de entrada (eliminar la palabra clave signal ). Pero, si desea sintetizar esta unidad también como un módulo superior con un valor fijo para sel , cree una instancia en un contenedor:

entity sleA_wrapper is
port(
    A: in bit_vector (3 downto 0);
    S: out bit_vector (3 downto 0)
);
end sleA_wrapper;
architecture rtl of sleA_wrapper is
    inst : entity work.sleA port map(sel => '1', A => A, S => S);
end rtl;

Ahora establezca este contenedor como el módulo superior para la simulación y síntesis.

    
respondido por el Martin Zabel

Lea otras preguntas en las etiquetas