miércoles, 20 de abril de 2011

Otro uso del 'if-generate'

La instrucción 'generate' generalmente es usada para replicar instanciaciones de componentes, usando el típico 'for-generate' y algunas veces el 'if-generate' dentro del 'for-generate' (ejemplo típico: un registro de desplazamiento).
Sin embargo el 'if-generate' tiene otro uso que no es muy conocido, pero es muy útil: condicionalmente puede incluir u omitir cierta parte del diseño. Usualmente la inclusión u omisión depende del valor de una constante genérica (generic), de modo que la expresión del 'if-generate' es globalmente estática.
Cuáles son los típicos usos de este 'if-generate'?, normalmente son dos :
- Lógica que se agrega al diseño solo con propósito de debug, pero que no se desea que sea implementada en el diseño final.
- Procesos o instanciación de componentes usados solos durante simulación.

A continuación hay un esquema de como se usa el 'if-generate'  para generar o no cierta lógica del diseño en función del generic 'debug' definido en la entity:

 1 entity my_system is 
 2   generic ( debug: boolean := true)
 3   port (
 4        . . .
 5     ); 
 6 end entity my_system;
 7
 8 architecture rtl of my_system is 
 9 . . .
10 begin
11  . . .
12  debug_comp: if debug generate
13   .. .
14  end generate debug_comp;
15  . . . 
16 end architecture; 



Have a grrrrrrrrreat day !

No hay comentarios:

Publicar un comentario