4 votos

Cuándo establecer valores por defecto para los genéricos VHDL

Los genéricos VHDL pueden tener un valor por defecto.

Las reglas sobre cómo se anulan en las instancias y declaraciones parecen ser bastante complejas, por lo que quería preguntar sobre las prácticas más fáciles y seguras para reducir el riesgo de desajustes en la simulación y la síntesis debido a errores de código evitables o a problemas de la herramienta.

He aquí un ejemplo sencillo. ¿Qué haría usted?

Definición:

entity counter is
  generic(
           G_NBITS : integer range 1 to 8 := 3
         );
  ...

Declaración:

architecture behav of counter_tb is

  component counter is

  generic(
           G_NBITS : integer range 1 to 8 := 4
         );

Instanciación:

begin

  counter_inst0 : counter

  generic map (
     G_NBITS => 5
    )

5voto

GRoNGoR Puntos 81

Mis pensamientos

  1. Es una buena práctica mencionar siempre un valor por defecto a generic durante entity porque asegura que la entidad puede ser sintetizada y simulada como un módulo individual si es necesario.

  2. Cualquiera que sea el valor por defecto generic en la declaración de la entidad puede ser anulada durante component en un módulo superior*.

  • Si hubiera un defecto generic en el entity y desea utilizar el mismo valor en el módulo superior, puede evitar el uso de generic dentro del component declaración.
  • Si hubiera un defecto generic en el entity y quiere anularla, puede hacerlo anulándola dentro de la declaración component declaración.
  1. En VHDL, generic map da el último nivel de anulación. Puede anular los valores por defecto generic asignado por component y/o entity . De nuevo, no es obligatorio hacerlo generic map , si desea los valores por defecto actuales.

Nunca fui realmente un fan de las declaraciones de componentes en VHDL desordenando y 'duplicando' en un módulo superior, así que prefiero dar un valor por defecto a todos generic durante entity declaración. A continuación, poner todos los component en un paquete, o utilizar entity work.entity_name durante generic map y port map . Y anular todos los generic durante generic map () en su lugar, si quiero.

Sintetizabilidad

La regla es esa: El simulador/sintetizador debe ser capaz de resolver el valor final de generic de la instancia en cualquiera de los tres niveles mencionados anteriormente.

  • El valor resuelto se utilizará tanto para la simulación como para la síntesis. Si no es capaz de resolver, arrojará errores durante la síntesis/simulación.
  • No habrá desajuste síntesis-simulación ya que el valor resuelto se utilizará tanto para sintetizar como para simular el instancia .

*Módulo superior : es cualquier otro módulo/entidad de la jerarquía superior que instancie la entidad en cuestión.

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