Tengo un bit de fase de reloj que decide en qué borde del reloj debe funcionar el diseño. No puedo usar un bloque siempre dentro de una sentencia if. Es posible utilizar
'ifdef
declaración? ¿Se podrá sintetizar 'ifdef ?
Gracias
Tengo un bit de fase de reloj que decide en qué borde del reloj debe funcionar el diseño. No puedo usar un bloque siempre dentro de una sentencia if. Es posible utilizar
'ifdef
declaración? ¿Se podrá sintetizar 'ifdef ?
Gracias
Hay un par de maneras de abordar esto.
Una forma es invertir selectivamente el reloj antes de usarlo en su lógica:
Con este enfoque, si Clock edge select
es 0, entonces la polaridad del reloj externo e interno es la misma, y la lógica opera en el flanco ascendente del reloj externo. Por otro lado, si clock edge select
es 1, el reloj interno se invierte con respecto al reloj externo, y la lógica opera en el flanco descendente del reloj externo, que corresponde al flanco ascendente del reloj interno.
La otra forma es simplemente implementar ambos bloques y luego seleccionar la (s) salida (s) correcta (s):
Esto utiliza más recursos, pero tiene la ventaja de que U1 y U2 pueden implementar una lógica ligeramente diferente, si es necesario. Ambos bloques están activos todo el tiempo, pero simplemente descartas las salidas de la "incorrecta".
'ifdef es parte del preprocesador, por lo que se evalúa antes de la síntesis. Siempre que el código resultante sea sintetizable, debería estar bien.
Lea otras preguntas en las etiquetas verilog