Clocking blocks

Especifica las características de sincronización del diseño separándola de las consideraciones funcionales. Ofrece una forma clara de conducir y muestrear señales. Puede ser declarado en módulos , interface y program Posibilidades

  • Especificación de reloj
  • Input skew,output skew (que pueden ser omitidos)
  • Cycle delay (##)

Funcionamiento de clocking blocks

Vamos a poner un ejemplo de clocking block insertado dentro de un modulo

Driver

Si analizamos la generación de la secuencia de sd.dout (25=>33) podemos observar el efecto del clocking block en la copia exacta que tenemos en la señal dout retrasada un tiempo exactamente igual al skew especificado en la línea 8

Muestreo

En cuanto a din (que es generado desde el banco de pruebas) y es introducido en el modulo M1 a través de un puerto de entrada, podemos ver que sd.din es una copia exacta de din sincronizada por el reloj y que asemeja su comportamiento al que tendría una copia registrada de din mediante una asignación “non_blocking”.

La única forma de ver el efecto del skew señalado en la línea 7 sería si nos fijamos en la señal ein. Su comportamiento (que procede también del banco de pruebas) se ha programado para que su cambio sea 1 ns antes de cada flanco positivo del reloj de forma que pueda observarse que sd.ein es una copia exacta de ein sincronizada por el reloj; pero el momento de captura se encuentra 2 ns antes de cada flanco de reloj (su skew en el clocking block).

Si alguno tiene dudas sobre este funcionamiento he preparado el siguiente proyecto de simulación, en el que se han creado ciertas copias de las señales del clocking block para que podáis observarlas en un visualizador VCD. En el caso de realizar esta simulación en questasim podréis referenciar directamente a dichas variables.

Seria conveniente que hagáis los cambios que creáis convenientes para acabar de entender cómo funciona el clocking block.

[iframe width=”100%” height=”480″ src=”https://www.edaplayground.com/x/6uYW”].