Hallo,
ich hab mal eine grundsätzliche (wahrscheinlich ziemlich doofe, sorry)
Verständnisfrage zu Takt und Flipflop-Laufzeit im FPGA.
Angenommen, ich habe ein Signal, das mit der steigenden Taktflanke
geschrieben und gelesen wird:
1 | signal mySignal : std_logic := '0';
|
2 |
|
3 | signal_schreiben: process(CLK)
|
4 | begin
|
5 | if (rising_edge(CLK)) then
|
6 | if (Bedingung) then
|
7 | mySignal <= '1';
|
8 | else
|
9 | mySignal <= '0';
|
10 | end if;
|
11 | end if;
|
12 | end process;
|
13 |
|
14 | signal_lesen: process(CLK)
|
15 | begin
|
16 | if (rising_edge(CLK)) then
|
17 | if (mySignal = '1') then
|
18 | ...
|
19 | end if;
|
20 | end if;
|
21 | end process;
|
Dann würde ich erwarten, daß
- "mySignal" als FlipFlop realisiert wird,
- dieses FlipFlop mit der steigende Flanke von CLK getriggert wird,
- der Ausgang dieses Flipflop den Eingangswert zum Zeitpunkt "Taktflanke
+ Gatterlaufzeit" annimmt,
- die Gatterlaufzeit des Flipflops wahrscheinlich sehr klein ist.
Wenn ich nun dieses Signal mit der gleichen Taktflanke lese, laufe ich
dann nicht Gefahr, daß das Einlesen des Flipflop-Ausgangs durch die
nachfolgende Logik noch nicht 100%ig abgeschlossen ist, wenn sich der
Flipflop-Ausgang aufgrund der aktuellen Taktflanke ändert?
Oder ist der Takt (bzw. die Einlese-Zeit) so schnell, daß das sicher
ausgeschlossen werden kann?
Oder sehe ich da etwas grundsätzlich falsch?
(So rein vom Gefühl her hätte ich gedacht, daß es sinnvoller ist z.B.
immer nur mit steigenden Takt zu lesen
und immer nur mit fallender Flanke zu schreiben.)
Danke,
Dosmo