Tengo un reloj muy rápido llamado CLOCK_50
que me gustaría reducir la velocidad mediante el uso de un divisor de reloj. La salida es clock
. También quiero usar un sincronizador de dos etapas para un puerto de reinicio asíncrono reset0
que debería generar reset
en el núcleo. Sin embargo, no estoy seguro de cómo hacer que funcionen en diferentes dominios de reloj.
Esto es lo que se me ocurrió. Se generó varios errores cuando se compila.
logic clock, reset1, reset2, reset;
logic [13:0] countCLK;
always_ff @(posedge CLOCK_50) begin
reset1 <= reset0;
reset2 <= reset1;
reset <= reset2;
end
always_ff @(posedge CLOCK_50 or negedge reset) begin
if (!reset) begin
clock <= 1'b0;
countCLK <= 14'b0;
end
else begin
if (countCLK[13])
clock <= ~clock;
countCLK <= countCLK + 14'b1;
end
end
Y las advertencias:
Warning (308040): (Medium) Rule C104: Clock signal source should drive only clock input ports. Found 1 nodes related to this rule.
Warning (308010): Node "clock"
Warning (308027): (Medium) Rule R105: The reset signal that is generated in one clock domain and used in another clock domain should be synchronized. Found 1 node(s) related to this rule.
Warning (308010): Node "reset"