Guten Tag,
ich habe eine FPGA spezifische Frage zur Artix7 Reihe.
Ich habe ein Design, das unter anderem Ausgänge an einen externen
analogen Schaltungsteil weitergibt. Die Ausgänge hierhin sind
"besonders" kritisch und sollten nicht glitchen etc. Deshalb werden alle
diese Ausgänge aus Flops getrieben. Die Instantiierung dieser Flops
erfolgt aktuell implizit im RTL (VHDL). Also quasi wie hier:
1
...
2
entitymy_dummy_topis
3
port(
4
...
5
critical_signal:outstd_logic);
6
endentitymy_dummy_top;
7
architectureRTLofmy_dummytopis
8
begin
9
...
10
...
11
flop_proc:process(clk,rst_n)is
12
begin
13
ifrst_n='0'then
14
critical_signal<='0';
15
elsifrising_edge(clk)then
16
critical_signal<=combinational_stuff;
17
endif;
18
endprocessflop_proc;
19
endarchitectureRTL;
Meine Frage ist nun:
Wenn sich "combinational_stuff" nicht ändert und somit zu jeder Flanke
derselbe Wert gelatcht wird, ist dann garantiert, dass das Flop in
seiner "Clock-to-output" Zeit keinen Mist auf dem Ausgang macht? Je nach
Flop Topologie im Silizium gibt es da nämlich schon so
Schaltungskandidaten, wo da mal was sein kann. Ich habe keine
Spezifikation dazu gefunden.
Eventuell werden irgendwelche "minimalen" Glitches eh in der
Ausgangsstufe des Pin-Treibers abgefangen... Aber das ist alles nur
Mutmaßung.
Kann mir hier jemand weiterhelfen?
M. H. schrieb:> Je nach Flop Topologie im Silizium gibt es da nämlich schon so> Schaltungskandidaten, wo da mal was sein kann.
Das würde mich aber nun stark interessieren, was für eine Flop-Topologie
(interessantes Wort) das ist, bei der sich ein Flip-Flop-Ausgang beim
Takt ändert, während sich an dessen Eingang nichts getan hat.
Du denkst hoffentlich nicht darüber nach, dass sich die Vorwärtswirkung
des Taktes auf den Ausgang auswirkt, oder?
Wenn, wirst du da eher das Rauschen auf deiner Resetleitung messen
können.
M. H. schrieb:> Die Ausgänge hierhin sind> "besonders" kritisch und sollten nicht glitchen etc.
Dann würde ich mir eher Gedanken machen, was nach dem Einschalten in der
Konfigurationsphase passiert, wo die Ausgänge i.d.R. hochohmig sind.
Echte Glitches sind das nicht. Aber wenn du ein getaktetes Design hast,
dann wird das periodisch mit dem Takt unterschiedlich viel Strom ziehen.
Eben zur Taktflanke viel um Kapazitäten umzuladen und zwischen den
Flanken eher wenig.
Je nachdem wie gut die Versorgung gebaut ist resultieren daraus dann
auch Spannungseinbrüche immer zur Taktflanke. Sollte kaum sichtbar sein
und bei Digitaltechnik nicht stören. Die Ausgänge können doch sowieso
nur 0 und 1 was soll eine Analogschaltung damit schon anfangen? Sonst
könntest du damit extern noch auf einen Buffer gehen der unabhängig
versorgt wird.
M. H. schrieb:> Kann mir hier jemand weiterhelfen?
Das ist doch ein stinknormales Delay-FlipFlop mit asynchronem clear, da
glitched nix. Bezüglich Dokumentation schaut man in den Library guide
(https://www.yumpu.com/en/document/view/4965533/xilinx-vivado-design-suite-7-series-fpga-libraries-guide-ug953)
und dort auf die Wahrheitstabelle.
IMHO kommt die Angst vor Glitches von den Erklärungsblockbildern der FF,
die da gerne rückkoppelte Gatter zeichnen. In Echt sind das aber keine
Gatter sondern Transistorschaltungen. Um deren Zeitverhalten
nachzustellen muss man die Schaltung in die einzelne Elemente
aufdröseln, was aber heute nicht gemacht wird um den Informatiker, der
nur programmieren kennt, nicht mit der praktischen Realität zu
verwirren.
Man muß dann schon tief in den Grundlagen hinabsteigen um beim
"bistabilen Multivibrator" für den Aufbau mit bipos Erklärungsmodelle zu
finden:
http://www.dieelektronikerseite.de/Lections/Bistabiler%20Multivibrator%20-%20Es%20kann%20nur%20Einen%20geben.htm
M. H. schrieb:> Wenn sich "combinational_stuff" nicht ändert und somit zu jeder Flanke> derselbe Wert gelatcht wird, ist dann garantiert, dass das Flop in> seiner "Clock-to-output" Zeit keinen Mist auf dem Ausgang macht? Je nach> Flop Topologie im Silizium gibt es da nämlich schon so> Schaltungskandidaten, wo da mal was sein kann. Ich habe keine> Spezifikation dazu gefunden.
Meinst du wirklich gelatcht oder doch eher registriert?
Ein Latch wäre taktpegel-, ein Register (FF) taktflankengesteuert. Ein
Flop ist übrigens ein Misserfolg.
In FPGAs gibt es keine Latches mehr. Ein Latch hätte aber schon die
Eigenschaft, im so genannten Kippinterval das Eingangssignal
durchzuschalten (Transparenz). Bei beiden Speichertypen gäbe es dann
noch Metastabilität aus analoger Sicht.
> Die Ausgänge hierhin sind> "besonders" kritisch und sollten nicht glitchen etc.> Meine Frage ist nun:> Wenn sich "combinational_stuff" nicht ändert und somit zu jeder Flanke> derselbe Wert gelatcht wird, ist dann garantiert, dass das Flop in> seiner "Clock-to-output" Zeit keinen Mist auf dem Ausgang macht?
IMHO solltest Du das ganze Szenario dringenst mit einem erfahrenen
Elektrotechniker/Hardwerker besprechen statt zu versuchen dieses
Physische Problem durch uninspiriertes VHDL-Getippse lösen zu wollen.
(1) Die Formulierung "besonders kritisch" ist für den Systementwurf
nicht sonderlich brauchbar, das muss man in messbare Begriffe
umformulieren wie "unempfindlich gegen Störungen".
(2) Davon ist zweierlei abzuleiten -
(2a) Wie teste ich die geforderte Eigenschaft
(2b) wie wie konstruiere ich eine störunempfindliche Schaltung
Im FPGA-Datenblatt wird man eher wenig/garnichts finden, aber man weiss
aus dem Studium/Praxis das bspw differentiale Signalstandard
unempfindlich ist (Der Klassiker RS485 versus RS232), kennt verschiedene
Möglichkeiten der Stör-einkopplung (Übersprechen zw. benachbarten
Leitungen, schlecht entkoppelte Stromversorgungen)
und benutzt deshalb elektrische (Schirmung, beachtung der SSO-Regeln
(Simulteanous Switching Outputs), Optimierung Treiberstärken (Strength-
constraint, Terminierungen) und logische Gegenmassnahmen (FM statt AM;
Prüfziffer; Gray-Encoding, ...).
Und hat man (2b) erfüllt, braucht man wegen irgendwelcher (scheinbarer)
"Garantien" nicht in den Specs fühlen - man Stress-tested eben die
Konstruktion und weist so nach, das sie gegen Störungen immun ist und
das kritische Signal nicht verfälscht wird.
Natürlich sollte man auch die log-files/Netzlisten durchgehen (per
script prüfen), um sicherzustellen, das das gewünschte Stück
Silizium-Treiber konfiguriert wurde.
Aber letztes Garantie/Kriterium für die Wahrheit ist immer noch die
Praxis. Es gibt genug fehlerhafte Software, von der bewiesen wurde, das
sie entweder:
* nicht anders als korrekt funktionieren kann (Achtung, Sarkasmus) oder
* das man für die Funktion der Software nicht verantwortlich sei,
sondern nur für deren Erstellung nach Vorgabe (Achtung, Sarkasmus).
Kay-Uwe R. schrieb:> In FPGAs gibt es keine Latches mehr.
Na aber sicher gibt es die. Die kannst du jederzeit aus Kombinatorik
hinzimmern. Viele zimmern sogar, ohne es zu wollen. :-)
@TE: Meine Frage von oben ist noch offen.
J. S. schrieb:> Kay-Uwe R. schrieb:>> In FPGAs gibt es keine Latches mehr.> Na aber sicher gibt es die. Die kannst du jederzeit aus Kombinatorik> hinzimmern. Viele zimmern sogar, ohne es zu wollen. :-)
Kann man, nennt sich dann aber nicht mehr Kombinatorik. Sowie es
Rückkopplungspfade gibt, entstehen Speicherelemente. So unterscheiden
sich halt S- von C-Zellen. Sind dann ja auch keine Zellen mehr. Vom
Timing bei dem Gebastel noch ganz abgesehen.
Wer sowas macht, frisst auch kleine Kinder.
Kay-Uwe R. schrieb:> Kann man, nennt sich dann aber nicht mehr Kombinatorik. Sowie es> Rückkopplungspfade gibt, entstehen Speicherelemente.
ja, wobei ein Latch für mich noch keinen Rückkopplungspfad enthalten
muss. Ich dachte da nun wirklich an kombinatorisch gegatete Signale.
Kay-Uwe R. schrieb:> Vom Timing bei dem Gebastel noch ganz abgesehen.
Das Gebastel eben, das wir in den 90ern machen mussten, um schnelle PLDs
zu haben, weil alles was getaktet lief, furchtbar langsam war.
> Wer sowas macht, frisst auch kleine Kinder.
:D