Concatenación en el mapeo de puertos

Usando Vivado 2015.2, VHDL. Recibí una advertencia "[Synth 8-1565] actual para el puerto formal b no es un nombre estático ni una expresión estática global"

ADD1: Adder_32_33
PORT MAP (
A => a1,
B => a1&"0", -- warning here
CLK => clock,
S => s1
);

Sim funciona bien. ¿Se puede ignorar esta advertencia? ¿Hay alguna solución además de agregar una nueva señal?

Intente definir una señal asignada a1&"0"y asignarla al puerto. No agregará ninguna sobrecarga lógica y borrará la advertencia.
Intente configurar el FILE_TYPE de la fuente en VHDL2008. Haga clic en él en el Administrador de proyectos, vaya a la pestaña de propiedades del archivo fuente y cambie FILE_TYPE a VHDL 2008.

Respuestas (1)

La advertencia se muestra porque otras herramientas VHDL, como el simulador ModelSim VHDL, no admiten este tipo de asignación de puertos (para la señal B).

Otra solución sería usar un mapeo de puertos divididos para B, por ejemplo:

ADD1: Adder_32_33
PORT MAP (
A => a1,
B(32 downto 1) => a1,  -- assign upper bits of B
B(0) => '0', -- assign (single) bit 0 of B only
CLK => clock,
S => s1
);

Esto supone que el puerto B se declara con un rango de (32 downto 0).

Tenga en cuenta que siempre se deben asignar todos los bits de un puerto.

Resolvió perfectamente mi propio problema, ¡gracias!