Forum: FPGA, VHDL & Co. Triggersignal zwischen zwei Automaten


von alex (Gast)


Lesenswert?

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?

von Xenu (Gast)


Lesenswert?

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.

von Schlumpf (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.