Síntesis lógica

Configuración por defecto:

Revisando la ruta ~/OpenLane/configuration/synthesis.tcl se encuentra la siguiente información en este archivo:

_images/synth_var.png

Configuración por defecto de las variables de síntesis.

Descripción y ejemplos:

SYNTH_CLOCK_UNCERTAINTY

Especifica un valor para la incertidumbre del reloj para el análisis de temporización. (Predeterminado: 0.25)

Al aumentarlo al doble de su valor por defecto (0.5) vemos que primeramente el cambio se aprecia en los reportes de sta de la siguiente manera:

_images/sta_min_CLOCK_UNCERTAINTY.png

Reporte sta min de la tapa de síntesis.

De donde comparando ambos reportes (mínimo y máximo) vemos que para el caso mínimo este delay se suma; mientras que para el caso máximo este delay se resta. Produciendo así aumento en el tiempo de hold y disminución el tiempo de setup respectivamente.

Se observa que el tiempo de hold puede aumentar tanto al punto de no cumplir para ciertos caminos. Lo cual se observa en la siguiente imagen:

_images/sta_CLOCK_UNCERTAINTY.png

Reporte sumatoria sta de la tapa de síntesis.

SYNTH_CLOCK_TRANSITION

Especifica un valor para el tiempo de transición/desplazamiento del reloj para el análisis de temporización. (Predeterminado: 0.15)

Al aumentarlo al doble de su valor por defecto (0.3) vemos que primeramente el cambio se aprecia en los reportes de sta de la siguiente manera:

_images/sta_min_CLOCK_TRANSITION.png

Reporte sta minimo de la tapa de síntesis

Además se obtiene un nuevo mensaje en el registro de advertencias:

_images/warning_CLOCK_TRANSITION.png

Registro de advertencias.

Del cual revisando el reporte mencionado vemos que se producen tres violaciones de slew, que significa que la transición de la señal es muy lenta.

SYNTH_TIMING_DERATE

Especifica un factor de reducción para multiplicar los retrasos de ruta. Especifica los rangos superior e inferior de sincronización. (Predeterminado: +5%/-5%)

Al aumentar este valor al doble de su valor por defecto (0.1) vemos que se aumenta el tiempo de llegada de los datos en 0.1 con respecto al valor por defecto; esto tras comparar para una misma ruta su análisis de sta como se observa en la siguiente imagen:

_images/sta_max_SYNTH_TIMING_DERATE.png

Reportes sta máximo de la tapa de síntesis.

SYNTH_STRATEGY

Estrategias para la síntesis lógica abc y el mapeo tecnológico. Valores posibles son DELAY/AREA con rangos de 0-4 y 0-3 respectivamente; la primera parte se refiere al objetivo de optimización de la estrategia de síntesis (area vs delay) y la segunda es un índice. (Predeterminado: AREA 0).

Al variar la estrategia se pueden obtener optimizaciones para ciertos objetivos específicos según la aplicación. Esto se puede observar en la siguiente imagen:

_images/design_exploration.png

Resultados exploración espacio de diseño.

SYNTH_BUFFERING

Habilita el buffer de celdas abc. Habilitado = 1, Deshabilitado = 0. (Predeterminado: 1) Lo cual tras deshabilitarlo se observa lo siguiente al comparar con el reporte por defecto:

_images/area_SYNTH_BUFFERING.png

Reportes de área de la etapa de sintesis.

De donde se observa que la principal diferencia entre las cantidad de celdas es provocada por disminución en la cantidad de buffers utilizados.

SYNTH_SIZING

Habilita el tamaño de celda abc (en lugar de almacenar en buffer). Habilitado = 1, Deshabilitado = 0. (Predeterminado: 0) Se tienen los mismo resultados de habilitar el parámetro SYNTH_BUFFERING.

SYNTH_READ_BLACKBOX_LIB

Bandera que permite leer el archivo biblioteca completo (sin recortar) como una caja negra para síntesis. No se utiliza en el mapeo tecnológico. Usarse para preservar instancias de compuerta en el rtl del diseño. Habilitado = 1, Deshabilitado = 0. (Predeterminado: 0)

Lo cual tras habilitarlo se observa que el área disminuye porque se leen menos celdas ya que se utiliza el concepto de caja negra. Lo anterior se observa en los siguientes reportes:

_images/area_SYNTH_READ_BLACKBOX_LIB.png

Reportes de área de la etapa de síntesis.

SYNTH_NO_FLAT

Bandera que deshabilita el aplanamiento de la jerarquía durante la síntesis, y solo la aplana después de la síntesis, el mapeo y las optimizaciones. Habilitado = 1, Deshabilitado = 0. (Predeterminado: 0)

SYNTH_SHARE_RESOURCES

Bandera que permite a yosys reducir el número de celdas determinando recursos que se pueden compartir y fusionándolos. Habilitado = 1, Deshabilitado = 0. (Predeterminado: 1).

SYNTH_ADDER_TYPE

Tipo de sumador al que se asignan los operadores $add y $sub. Posibles valores YOSYS/FA/RCA/CSA; donde YOSYS usa el sumador interno de Yosys, FA usa full-adder structure, RCA usa ripple carry adder structure y CSA usa carry select adder. (Predeterminado: YOSYS)

Para sus distintos valores posibles se tiene el siguiente cuadro resumen de los parámetros mas importantes:

Table 1 Resumen parámetros de interés para las distintos tipos de sumadores

Tipos de sumadores

YOSYS

FA

RCA

CSA

Chip Area

100462.6016

105050.752

100890.512

107314.1728

Potencia

1.99e-02

2.20e-02

2.00e-02

2.05e-02

Peor Setup

3.15

0.15

-16.59

0.46

Peor Hold

0.16

0.17

0.19

0.2

Violaciones Slew

0

0

0

28

Violaciones Fanout

4

7

13

31

Violaciones Cap

0

0

0

0

Por otro lado la potencia y el skew se mantiene bastante similar.

SYNTH_ELABORATE_ONLY

No se realiza ningún mapeo lógico. Útil cuando se trata de netlists estructurales de Verilog. (Predeterminado: 0)

SYNTH_FLAT_TOP

Se especifica si el nivel superior debe aplanarse o no durante la elaboración. 1 = Verdadero, 0 = Falso. (Predeterminado: 0)

IO_PCT

Especifica el porcentaje del período de reloj utilizado en los retrasos de entrada/salida. Varía de 0 a 1,0. (Predeterminado: 0.2)

Al aumentarlo al doble de su valor por defecto (0.4) vemos que este cambio primeramente se puede apreciar en los reportes de sta de la siguiente manera:

_images/sta_max_IO_PCT.png

Reporte sta máximo de la tapa de síntesis.

Esto principalmente afecta el tiempo de llegada del dato que para caminos críticos si se aumenta mucho puede provocar violaciones de setup, como es el caso por ejemplo de utilizar un valor de 0.6.

SYNTH_BUFFER_DIRECT_WIRES

Inserta celdas intermedias en el diseño para cables conectados directamente. (Predeterminado: 1)

Al deshabilitarlo se modifica el reporte de área, ya que la cantidad de celdas disminuye en 8, de 9442 a 9434, reduciendo ligeramente el área como se observa en la siguiente imagen:

_images/area_SYNTH_BUFFER_DIRECT_WIRES.png

Reportes área de la tapa de síntesis.

SYNTH_SPLITNETS

Divide redes de varios bits en redes de un solo bit. (Predeterminado: 1)

Al deshabilitarlo se aumenta considerablemente el área, debido a que se utilizan mas wires y bits por wire, esto se observa en el siguiente reporte:

_images/area_SYNTH_SPLITNETS.png

Reportes área de la tapa de síntesis.

Resumen de resultados:

Se va a compara, en porcentajes, cuanto vario con respecto al modelo de referencia los parámetros mas importantes para esta etapa al modificar cada variable. Los valores de las variables son los mismo utilizados anteriormente, de modo que se tienen los siguientes resultados:

Comparación de parámetros con el modelo de referencia, etapa de síntesis

Variables

Chip Area

Potencia

Peor Setup

Peor Hold

Violaciones Slew

Violaciones Fanout

Violaciones Cap

SYNTH_CLOCK_UNCERTAINTY

0

0

-7.94

-156.25

0

12

0

SYNTH_CLOCK_TRANSITION

0

0

-0.317

6.25

4

11

0

SYNTH_TIME_DERATE

0

0

-9.84

-12.50

0

-1

0

SYNTH_STRATEGY

3.963

44.72

47.30

18.75

2

49

0

SYNTH_BUFFERING

-7.65

-3.01

-76.50

0

0

-13

0

SYNTH_SIZING

-7.65

-3.01

-76.50

0

0

-13

0

SYNTH_READ_BLACKBOX_LIB

-0.340

-3.01

10.47

12.5

0

-6

0

SYNTH_ADDER_TYPE

6.82

3.015

-85.39

25

0

-21

0

IO_PCT

0

0

-66.35

0

2

1

0

SYNTH_BUFFER_DIRECT_WIRES

-0.039

0

0

0

0

8

0

SYNTH_SPLITNETS

17.76

8.04

-5.71

112.5

0

-29

0