1 votos

Componente no encontrado VHDL XILINX ISE

Sé que esta puede ser una pregunta muy simple. Tengo que simular algunos retrasos para varios sumadores en ISE Suite. ¡( estoy un poco familiarizado con los conceptos vhdl pero ISE Medio Ambiente , no en absoluto ! )

este es el Código vhdl para Carry select adder :

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
use work.all ; 

library UNISIM;
use UNISIM.VComponents.all;

entity csa is
  generic (
    WIDTH : natural := 32 -- adder will add WIDTH bits, should be a power of 2
  );
-- some port mappings .. 
end csa;

architecture csa_arch of csa is

  component csa is
    generic (
      WIDTH : natural
    );
    port (
      op_1  : in std_logic_vector(WIDTH-1 downto 0);
      op_2  : in std_logic_vector(WIDTH-1 downto 0);
      c_in  : in std_logic;
      sum   : out std_logic_vector(WIDTH-1 downto 0);
      c_out : out std_logic
    );
  end component;

  signal sum_loc_0   : std_logic_vector(WIDTH-1 downto 0);
  signal sum_loc_1   : std_logic_vector(WIDTH-1 downto 0);
  signal c_out_loc_0 : std_logic_vector(1 downto 0);
  signal c_out_loc_1 : std_logic_vector(1 downto 0);
begin

  base_case : if (WIDTH = 1) generate
   full_adder_0 : full_adder -- GENERATES ERROR -- 
      port map (
        op_1  => op_1(0),
        op_2  => op_2(0),
        c_in  => '0',
        sum   => sum_loc_0(0),
        c_out => c_out_loc_0(1)
      );
  end generate;

y la línea que crea un componente de la entidad sumadora completa aumenta el error:

Line 44: full_adder is not a component

el sumador completo está definido en un archivo separado: ( en el mismo proyecto que otro módulo vhdl )

library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.NUMERIC_STD.ALL;
library work ;

library UNISIM;
use UNISIM.VComponents.all;

entity full_adder is
port (
    op_1  : in std_logic;
    op_2  : in std_logic;
    c_in  : in std_logic;
    sum   : out std_logic;
    c_out : out std_logic
);
end full_adder;

architecture full_adder_arch of full_adder is

begin

    sum   <= op_1 xor op_2 xor c_in;
    c_out <= (op_1 and c_in) or (op_2 and c_in) or (op_1 and op_2);

end full_adder_arch;

2voto

Dan Auclair Puntos 3063

1) Está declarando el componente csa dentro de la arquitectura de csa lo que es a) ilegal, b) innecesario.

2) Debe declarar el full_adder dentro de la cabecera de la arquitectura para instanciarla.

1voto

Dave Drager Puntos 506

Hay tres formas de instanciar componentes en VHDL, mediante el uso de la instanciación directa de entidades, la instanciación de un componente declarado y la instanciación de una configuración de una entidad.

Los dos primeros se muestran a continuación:

library ieee;
use ieee.std_logic_1164.all;
-- use IEEE.NUMERIC_STD.ALL;
-- library work ;
--
-- library UNISIM;
-- use UNISIM.VComponents.all;

entity full_adder is
    port (
        op_1:   in  std_logic;
        op_2:   in  std_logic;
        c_in:   in  std_logic;
        sum:    out std_logic;
        c_out:  out std_logic
    );
end full_adder;

architecture full_adder_arch of full_adder is

begin

    sum   <= op_1 xor op_2 xor c_in;
    c_out <= (op_1 and c_in) or (op_2 and c_in) or (op_1 and op_2);

end full_adder_arch;

library ieee;
use ieee.std_logic_1164.all;
-- use IEEE.NUMERIC_STD.ALL;
-- use work.all ; 

-- library UNISIM;
-- use UNISIM.VComponents.all;

entity csa is
    generic (
        WIDTH:  natural := 32 -- adder will add WIDTH bits, should be a power of 2
    );
    port (
        op_1:   in  std_logic_vector(WIDTH-1 downto 0);
        op_2:   in  std_logic_vector(WIDTH-1 downto 0);
        c_in:   in  std_logic;
        sum:    out std_logic_vector(WIDTH-1 downto 0);
        c_out:  out std_logic
    );
end entity csa;

architecture component_instantiation of csa is

    -- component csa is
    --     generic (
    --         WIDTH:  natural
    --     );
    --     port (
    --         op_1:   in  std_logic_vector(WIDTH-1 downto 0);
    --         op_2:   in  std_logic_vector(WIDTH-1 downto 0);
    --         c_in:   in  std_logic;
    --         sum:    out std_logic_vector(WIDTH-1 downto 0);
    --         c_out:  out std_logic
    --     );
    -- end component;

    component full_adder is
        port (
        op_1:   in  std_logic;
        op_2:   in  std_logic;
        c_in:   in  std_logic;
        sum:    out std_logic;
        c_out:  out std_logic
        );
    end component;

    signal sum_loc_0:    std_logic_vector(WIDTH-1 downto 0);
    signal sum_loc_1:    std_logic_vector(WIDTH-1 downto 0);
    signal c_out_loc_0:  std_logic_vector(1 downto 0);
    signal c_out_loc_1:  std_logic_vector(1 downto 0);
begin

base_case: 
    if (WIDTH = 1) generate
full_adder_0: 
        full_adder -- GENERATES ERROR -- 
            port map (
                op_1  => op_1(0),
                op_2  => op_2(0),
                c_in  => '0',
                sum   => sum_loc_0(0),
                c_out => c_out_loc_0(1)
            );
    end generate;
end architecture;

architecture direct_entity_instantiation of csa is

    -- component csa is
    --     generic (
    --         WIDTH:  natural
    --     );
    --     port (
    --         op_1:   in  std_logic_vector(WIDTH-1 downto 0);
    --         op_2:   in  std_logic_vector(WIDTH-1 downto 0);
    --         c_in:   in  std_logic;
    --         sum:    out std_logic_vector(WIDTH-1 downto 0);
    --         c_out:  out std_logic
    --     );
    -- end component;   

    signal sum_loc_0:    std_logic_vector(WIDTH-1 downto 0);
    signal sum_loc_1:    std_logic_vector(WIDTH-1 downto 0);
    signal c_out_loc_0:  std_logic_vector(1 downto 0);
    signal c_out_loc_1:  std_logic_vector(1 downto 0);
begin

base_case: 
    if (WIDTH = 1) generate
full_adder_0: 
        entity work.full_adder -- GENERATES ERROR -- 
            port map (
                op_1  => op_1(0),
                op_2  => op_2(0),
                c_in  => '0',
                sum   => sum_loc_0(0),
                c_out => c_out_loc_0(1)
            );
    end generate;
end architecture;

La entidad y la arquitectura para full_adder se incluye para el segundo csa arquitectura ( direct_entity_instantiation ).

Tenga en cuenta que hay una declaración de biblioteca implícita para el nombre simple de la biblioteca work en VHDL. Una cláusula de uso que especifica use work.all; haría disponibles todas las declaraciones de las unidades primarias en la biblioteca de trabajo actual. La arquitectura direct_entity_instantiation podría haber aprovechado y no utilizar un nombre seleccionado para especificar full_adder en la declaración de generación.

He analizado ambas arquitecturas y he comprobado que funcionan con el genérico WIDTH ajustado a 1 . Elaborando y corriendo nos dice que no hay problemas de conectividad para el ancho 1.

La instanciación de un componente con una declaración de componente no requiere el full_adder analizar, pero sí requiere que se analice antes de csa para la elaboración.

Asimismo, la instanciación directa de la entidad requiere full_adder en la biblioteca de trabajo para analizar csa con éxito.

Véase la norma IEEE 1076-2008 11.7 Declaraciones de instanciación de componentes.

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