Lothar Miller schrieb:
> Kurz: als Takt unbrauchbar.
Das kommt davon wenn man "en" nicht einsynchronisiert grins
Ich habe ein wenig herumgespielt und ein Beispiel gefunden bei dem die
Gated Clock Conversion von Synopsys nicht das erwartete Ergebniss
liefert, und auch ein anderes als die Simulation.
1 | module GatedClock(
|
2 | input wire Clock1,
|
3 | input wire Clock2,
|
4 | input wire Clock1Sel,
|
5 | input wire Clock2Sel,
|
6 | output wire Out1,
|
7 | output wire Out2
|
8 | );
|
9 |
|
10 | reg Out1Reg = 0;
|
11 | wire Clock = Clock1 & Clock1Sel | Clock2 & Clock2Sel;
|
12 | assign Out1 = Out1Reg;
|
13 | always @(posedge Clock) Out1Reg <= ~Out1Reg;
|
14 |
|
15 | reg Out2Reg = 0;
|
16 | assign Out2 = Out2Reg;
|
17 | always @(posedge Clock1) Out2Reg <= ~Out2Reg;
|
18 |
|
19 | endmodule
|
Wenn Clock1Sel low und Clock2Sel high ist soll Out1 bei jder Flanke von
Clock2 den Zustand ändern. Wie man aber im angehängten Bild sieht,
werden beide Ausgänge mit Clock1 getaktet. (Clock für die FF ist rot)
PS: Wenn ich Out2 weglasse oder statt Clock1Sel und Clock2Sel ein
ClockSel dessen Pegel zwischen Clock1 und Clock2 umschaltet verwende
wird keine Gated Clock Conversion gemacht.