Generate

Es una construcción que ya disponía Verilog en su versión de 2001

En principio estaba pensado para replicado de instancias cuando se quería realizar de manera lo más automática posible.

Por ejemplo si se quería instanciar 32 sumadores de tipo Full Adder para la construcción de un sumador “ripple carry” de 32 bits, se puede recurrir de manera elegante a este tipo de construcción que nos permite un replicado rápido

Se puede observar los elementos esenciales de esta construcción:

  • La variable en base a la cual trabajará la construcción de replicado (ver linea 6). Se tiene que definir a través de la palabra reservada “genvar”
  • La cabecera y final de dicha construcción mediante “generate” y “endgenerate”
  • el uso interno de la variable especificada en contrucciones iterativas de tipo “for” o en estructuras condicionales de tipo “if” y “case”

Nada impide que esta construcción pueda replicar cualquier otra estructura concurrente: always, assign, primitivas, initial.

Tanto es así que podemos realizar su uso para el replicado por ejemplo de aserciones concurrentes.

Veamos en el siguiente ejemplo como replicamos las ecuaciones básicas de suma y acarreo de un full-adder (por tanto replicamos construcciones “assign”) para generar un sumador de 8 bits