Hallo,
ich habe zwei Zustandsautomaten, im ersten werden bestimmte Daten
empfangen und im zweiten die Daten verarbeitet und weitergegeben. Es
sieht ungefähr so aus:
fsm1: process(clk_i, rst_i)
begin
if rst_i = '1' then
...
elsif clk_i = '1' and clk_i'event then
trigger_sig <= '0';
case fsm1_state is
when fsm1_rx_data0 => ...
when fsm1_rx_data1 => ...
when fsm1_rx_data2 => ...
when fsm1_data_ok =>
trigger_sig <= '1';
...
end case;
end if;
end process fsm1;
fsm2: process(clk_i, rst_i)
begin
if rst_i = '1' then
...
elsif clk_i = '1' and clk_i'event then
case fsm2_state is
when fsm2_wait_trigg =>
if trigger_sig = '1' then
fsm2_state <= fsm2_start_compute;
end if;
when fsm2_start_compute => ...
end case;
end if;
end process fsm2;
Meine Frage bezieht sich auf das Signal trigger_sig, mit dem fsm2
sozusagen getriggert wird. In fsm1 wird dieses Signal für nur eine
Taktperiode auf 1 gesetzt. In fsm2 wird dieses Signal abgefragt und wenn
1, die Daten werden verarbeitet. - Es scheint zu funktionieren, nur bin
ich unsicher, ob das wirklich gut ist, dass das Signal trigger_sig für
nur eine Taktperiode aktiv ist. Wie findet ihr das? Ist es möglich, dass
sich Probleme ergeben mit clock skew oder dass fsm1 ein wenig früher
positive Flanke bekommt als fsm2, so dass trigger_sig etwas früher
zurückgesetzt und fsm2 nichts davon mitkriegt? Falls es nicht gut ist,
welche Möglichkeiten gibt es sonst, um zwei FSMs miteinander zu
synchronisieren?
Wenn das nicht möglich wäre, würde ja kein einziger Zähler funktionieren... Sicher gibt es hier Laufzeiten, aber diese ergeben ja dann die maximale Taktfrequenz, die Dir der Synthesizer ausspuckt.
solange beide FSM mit dem gleichen Takt "versorgt" werden, ist das ein ganz normales synchrones Desing und eine gängige Methode sowas zu implementieren.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.