angelslayer
Bekanntes Mitglied
Tag zusammen,
ich habe eine beinah peinliche Frage...wie realisiert man ein D-FlipFlop in einer Programmiersprache?
Bei jeder positiven Taktflanke (0-->1) wird ja der Wert am Dateneingang auf den Ausgang gegeben. Soweit sogut, klingt ja nicht weiter schwer. In meinem Code (C++) sieht das ganze dann so aus:
Die betreffende Stelle in der main-Funktion sieht dann so aus:
Nicht verwirren lassen, es ist beabsichtigt dass Signal1 den Clock abtastet. Die Übergabe-Reihenfolge bzw. die logische Beschaltung des FF stimmt so. Der Clock in der main-Funktion ist am Dateneingang des FF angeschlossen.
Das sollte doch richtig sein oder? Wird nämlich in der FF-Funktion keine steigende Flanke detektiert wird Q einfach durchgereicht, und zwar unverändert.
Der Clock ist bedeutend langsamer bzw. niederfrequenter als die Daten, aber die Funktionsweise (bei steigender Flanke die Daten durchzuschleusen) sollte doch die selbe sein. Trotzdem erhalte ich ein sehr sehr unterschiedliches Ergebnis, wenn ich das Problem zB in Simulink realisiere und mit einem Scope die Signale betrachte...wieso?
ich habe eine beinah peinliche Frage...wie realisiert man ein D-FlipFlop in einer Programmiersprache?
Bei jeder positiven Taktflanke (0-->1) wird ja der Wert am Dateneingang auf den Ausgang gegeben. Soweit sogut, klingt ja nicht weiter schwer. In meinem Code (C++) sieht das ganze dann so aus:
Code:
bool DFlipFlop(vector<bool> clk, bool data, bool Q){
return (!clk[0] && !clk[1] && clk[2]) ? data : Q;
}
Code:
Q1 = DFlipFlop(signal1, clock, Q1);
Das sollte doch richtig sein oder? Wird nämlich in der FF-Funktion keine steigende Flanke detektiert wird Q einfach durchgereicht, und zwar unverändert.
Der Clock ist bedeutend langsamer bzw. niederfrequenter als die Daten, aber die Funktionsweise (bei steigender Flanke die Daten durchzuschleusen) sollte doch die selbe sein. Trotzdem erhalte ich ein sehr sehr unterschiedliches Ergebnis, wenn ich das Problem zB in Simulink realisiere und mit einem Scope die Signale betrachte...wieso?