Advertencia: real para el puerto formal a no es ni un nombre estático ni una expresión global estática

2

Este es el código que he implementado:

entity tinyMultiplier2X is
Port ( x : in  STD_LOGIC_VECTOR (3 downto 0);
       y : in  STD_LOGIC_VECTOR (3 downto 0);
       ml : out  STD_LOGIC_VECTOR (3 downto 0);
       mh : out  STD_LOGIC_VECTOR (3 downto 0);
       mc : out  STD_LOGIC);
end tinyMultiplier2X;

architecture Behavioral of tinyMultiplier2X is

component ThreeXthreeMultiply
    Port ( x : in  STD_LOGIC_VECTOR (2 downto 0);
             y : in  STD_LOGIC_VECTOR (2 downto 0);
             mul : out  STD_LOGIC_VECTOR (5 downto 0));
end component;

component Multi4x3
    Port ( x : in  STD_LOGIC_VECTOR (2 downto 0);
             y : in  STD_LOGIC;
             mul : out  STD_LOGIC_VECTOR (5 downto 0));
end component;

component FastBin2XDecConvert
    Port ( bin : in  STD_LOGIC_VECTOR (5 downto 0);
         dec : out  STD_LOGIC_VECTOR (8 downto 0));
end component;

signal b,s1,s2,s3,s4 : STD_LOGIC; --THIS IS LINE 59
signal p0 : STD_LOGIC_VECTOR(2 downto 0);
signal p1,p2,p3 : STD_LOGIC_VECTOR(5 downto 0);
signal p4,p5,p6 : STD_LOGIC_VECTOR (8 downto 0);

begin

s1 <= x(3) or y(3);
s2 <= x(0) or y(0);
s3 <= x(0) and y(0);
s4 <= x(3) and y(3);

m3x3 : ThreeXthreeMultiply port map(x(2 downto 0), y(2 downto 0), p1);

p0 <= y(2 downto 0) when x(3)='1' else x(2 downto 0);
b <= x(0) when x(3)='1' else y(0);

m4x3 : Multi4x3 port map(p0, b, p2);

p3 <= p2 when s1='1' else p1;

bndc : FastBin2XDecConvert port map(p3, p4);

p5 <= "101000100" when s2='1' else "100101000";
p6 <= "101100010" when s3='1' else p5;

ml <= p6(3 downto 0) when s4='1' else p4(3 downto 0);
mh <= p6(7 downto 4) when s4='1' else p4(7 downto 4);
mc <= p6(8) when s4='1' else p4(8);

end Behavioral;

ISE crea un esquema pero existe una advertencia y creo que debido a ese informe de síntesis no se crea. la advertencia es:

  

ADVERTENCIA: HDLCompiler: 946 - "C: \ VHDL \ SignificantSquarer \ compactMultiplier.vhd" Línea 59: el real para el puerto formal a no es un nombre estático ni una expresión global estática

y apunta al lugar donde he implementado mis señales.

¿Alguna ayuda?

    

1 respuesta

6

Finalmente, después de que algunos buscaron una respuesta aparecieron.

El sumador completo dentro de uno de los componentes (ThreeXthreeMultiply) no se ha creado correctamente.

Fue portado así:

port map(A and B, f, cin, s, cout);

El problema es que, en un mapa de puertos, no se deben usar funciones. Cambiar a este código solucionó el problema:

s <= A and B; --s is a signal
port map(s, f, cin, s, cout);
    
respondido por el Alireza Tabatabaeian

Lea otras preguntas en las etiquetas