Gast
#7041004
Hallo guten Tag,
ich versuche eine Mealy Maschine zum Laufen zu bringen, die Muster eines
Datensstroms erkennen soll.
* Zuerst möchte ich "0x5a50dad0d1d2d3d4" (64 Bit) erkennen
* wenn ich das separat in einem process mache klappt das ohne weiteres
* Das ist auch relativ einfach, da bei rising edge dieses Signal
auftauchen kann
```
testcheck : process (Daten)
WHEN WAIT_FOR_ADR1 =>
-- check first addres
case FRAME_PART1v2 is
when X"5a50dad0d1d2d3d4" => DETECTED_ADR1 <= '1';
when others =>
end process testcheck;
```
* Mit meiner State Machine klappt das nicht
* Sie scheint zu spät zu prüfen oder so
* Erst wenn ich die "next state output "logic sensibel mache detektiert
sie dieses Muster...
* Wird nicht bei clk-rising edge der "next_state" aktualisiert und
deswegen gleichzeitig die FSM aufgerufen?
* Dort müsste doch erkannt werden, dass zu diesem Zeitpunkt dieser
Vektor (0x5a50dad0d1d2d3d4) anliegt!
* Bei dem Mealy Beispiel von Xilinx stand noch ein x neben dem
current_state. Ich könnte das für den Input verwenden...
Finde ich aber seltsam aber ok.
Wenn sich die state machine gerade in diesem Zustand befindet und dafür
sensibel sein muss ...
```
--- hier übergebe ich meine Eingangsdaten:
FRAME_PART1v2 <= m_axis_tdata;
-- Das ist meine "reset logic"
-- sie wird bei jedem m_axis_clk ausgeführt
-- current state wird dabei immer aktualisert
SYNC_PROC2 : PROCESS (m_axis_clk)
BEGIN
IF rising_edge(m_axis_clk) THEN
IF (axi_reset = '1') THEN
-- reset..
current_state <= IDLE;
ELSE
current_state <= next_state;
END IF;
END IF;
END PROCESS;
-- next state & Output logic:
-- dadurch, dass current_state bei jedem risign edge aktualisiert wird,
-- wird zeitgleich(?) die next state output logic ausgeführt.
-- es soll eine bestimmte Adresse in dem signal "FRAME_PART1v2"
detektiert werden.
-- dann soll DETECTED_ADR1 auf 1 gesetzt werden.
-- allerdings klappt das nicht
-- habe dann einfach m_axis_clk in die Sensibilitätsliste eingefügt..
und dann geht es
-- könnte evtl. noch den datenstream selber in in die
Sensibilitätsliste einfügen . Im xilinx beispiel war dort ein x... habe
ich weggemacht :D
NEXT_STATE_DECODE : PROCESS (current_state,m_axis_clk)
BEGIN
CASE (next_state) IS
WHEN IDLE =>
next_state<= WAIT_FOR_ADR1;
-- do nothing
WHEN WAIT_FOR_ADR1 =>
-- check first addres
case FRAME_PART1v2 is
when X"5a50dad0d1d2d3d4" => DETECTED_ADR1 <= '1';
when others =>
end case;
```