1 votos

Señal de bit constante en VHDL

Necesito declarar un bit con el valor constante de 1.

Lo que casi funcionó fue:

signal name: bit := '1';

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

¿Cómo puedo hacerlo 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;

1voto

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 soporta los valores iniciales de "encendido" (cierto para las FPGAs, no así para los ASICs). Véase ¿Es necesaria la inicialización?

También hay que tener en cuenta que signal sólo se utiliza en el cuerpo de la arquitectura, no en la declaración de la entidad.

0voto

Paul Puntos 11

Si desea utilizar esta entidad siempre con un valor fijo para sel y luego eliminar el puerto de entrada sel y declarar una constante sel dentro de la arquitectura en su lugar.

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 hay que mantener el puerto de entrada (eliminar signal palabra clave). Pero, si quiere sintetizar esta unidad también como un módulo superior con un valor fijo para sel , instanciarlo en una envoltura:

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 establece esta envoltura como el módulo superior para la simulación y la síntesis.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X