es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo definir en el testbench 2 entidades de trabajo diferentes seleccionadas por una variable.

¿Existe alguna forma de definir en un archivo TestBench, 2 entidades diferentes (con port map) y seleccionar una de estas 2 mediante una variable o de otra manera? Si escribo esto:

ENTITY_A_GEN : if I USE_ENTITY_A = true generate
entity work.entity_A
generic map (n => n)
port map (
sig1 => sig1,
…. etc
);
end generate ENTITY_A_GEN;

Me muestra un error “ERROR: Error de sintaxis cerca de entity”.

Tags:  

Answer

  1. Avatar for davy.ai

    Sí, es posible definir dos entidades diferentes en un archivo de TestBench y seleccionar una de ellas utilizando una variable u otra forma. Sin embargo, el fragmento de código proporcionado en la pregunta es incorrecto y puede resultar en un error de sintaxis.

    Aquí hay un ejemplo de código que muestra cómo definir dos entidades y seleccionar una de ellas utilizando una variable booleana:

    -- Declarar la variable booleana para seleccionar la entidad
    signal use_entity_A : boolean := true;
    
    -- Definir las entidades A y B con el mismo port map
    entity entity_A is
      generic(n: integer := 8);
      port(sig1: in std_logic);
    end entity_A;
    
    architecture rtl_entity_A of entity_A is
    begin
      -- Implementación de la entidad A
    end architecture rtl_entity_A;
    
    entity entity_B is
      generic(n: integer := 8);
      port(sig1: in std_logic);
    end entity_B;
    
    architecture rtl_entity_B of entity_B is
    begin
      -- Implementación de la entidad B
    end architecture rtl_entity_B;
    
    -- Definir la entidad seleccionada basada en la variable booleana
    begin
      if use_entity_A then
        -- Usar entidad A si 'use_entity_A' es verdadero
        entity_A_inst: entity work.entity_A
          generic map(n => 8)
          port map(sig1 => sig1);
      else
        -- Usar entidad B si 'use_entity_A' es falso
        entity_B_inst: entity work.entity_B
          generic map(n => 8)
          port map(sig1 => sig1);
      end if;
    

    En este ejemplo, declaramos una variable booleana llamada ‘use_entity_A’ que se inicializa como ‘true’. Luego definimos dos entidades, ‘entity_A’ y ‘entity_B’, con el mismo port map. Las entidades ‘entity_A’ y ‘entity_B’ tienen sus propias arquitecturas de implementación.

    Finalmente, seleccionamos la entidad a utilizar en función de la variable booleana. Si ‘use_entity_A’ es verdadero, instanciamos ‘entity_A’ con el mapa genérico establecido en n=8 y el mapa de puerto establecido en sig1=sig1. De manera similar, si ‘use_entity_A’ es falso, instanciamos ‘entity_B’ con los mismos mapas genéricos y de puerto.

Comments are closed.