Considere el siguiente circuito, que multiplexa las entradas d0
y d1
a la salida y
en un ciclo de reloj (es decir, doble velocidad de datos, DDR).
Que puede ser el resultado de sintetizar el siguiente código de Verilog:
module ddr_mux (
input wire clk,
input wire d0, d1,
output wire y
);
reg q0, q1;
always @(posedge clk) q0 <= d0;
always @(negedge clk) q1 <= d1;
assign y = clk ? q1 : q0;
endmodule
Tengo los siguientes requisitos de tiempo:
-
q0
no debe cambiar mientras la entrada de selección deMUX
está en0
-
q1
no debe cambiar mientras la entrada de selección deMUX
está en1
En otras palabras,
-
y
debe tener como máximo dos transiciones por período de reloj.
Si las herramientas de análisis de síntesis y temporización no conocen estos requisitos en la salida y
, tienen la libertad de implementar el circuito con una relación de temporización arbitraria entre q0
, q1
y sel
. Aquí hay un ejemplo de cómo esto podría salir mal:
Yaquíestáelcomportamientodeseado:
¿Cómo puedo expresar esto correctamente en forma de restricciones de SDC para que las lean las herramientas de análisis de síntesis y sincronización de Cadence?