Vereinfachung einer Beschreibung

Gast #4119438
Lesenswert?

Hallihallo,

habe folgende VHDL-Beschreibung

1
process(clk)
2
begin
3
    wait until rising_edge(clk);
4
    
5
    case s is
6
        when a =>   if iEna='1' then
7
                        s <= b;
8
                    end if;
9
        
10
        when b =>   if iEna='0' then
11
                        s <= a;
12
                        
13
                    elsif if iTrig='1' then
14
                        myEna <= '1';
15
                        s <= c;
16
                    end if;
17
        
18
        when c =>   if iEna='0' then
19
                        s <= d;
20
                    end if;
21
        
22
        when d =>   if other_ena='0' then
23
                        s <= a;
24
                    end if;     
25
    end case;
26
end process;


Nun möchte ich das vereinfachen, erster Ansatz in etwa so:
1
process(clk)
2
begin
3
    if rising_edge(clk) then
4
        
5
        myEna <= (myEna or iTrig) and iEna and (other_ena);
6
    end if;
7
end process;

Das Problem: die Abfrage in Zustand d ist meiner Meinung nach noch nicht 
richtig beschrieben in der vereinfachten Version. Kann mir jemand sagen, 
wie man die "nicht generelle" Überprüfung von 'other_ena' abbilden 
könnte?

GRUSS, Joe
Gast #4119484
Lesenswert?

Kleine Korrektur: myEna muss natürlich noch zurückgesetzt werden
1
process(clk)
2
begin
3
    wait until rising_edge(clk);
4
    
5
    case s is
6
        when a =>   if iEna='1' then
7
                        s <= b;
8
                    end if;
9
        
10
        when b =>   if iEna='0' then
11
                        s <= a;
12
                        
13
                    elsif if iTrig='1' then
14
                        myEna <= '1';
15
                        s <= c;
16
                    end if;
17
        
18
        when c =>   if iEna='0' then
19
                        myEna <= '0';
20
                        s <= d;
21
                    end if;
22
        
23
        when d =>   if other_ena='0' then
24
                        s <= a;
25
                    end if;     
26
    end case;
27
end process;
Gast #4119528
Lesenswert?

Deine "Vereinfachung" verhält sich schon am Anfang anders als deine FSM.

Z.B. der Fall iTrig bereits '1' wenn iEna auf '1' geht wird anders 
behandelt,
bei der FSM dauert es dabei länger bis myEna auf '1' gesetzt wird.

Das ist also keine Vereinfachung sondern eine funktional andere 
Beschreibung.
Moderator (Firma: Titel) Persönliche Seite #4119583
Lesenswert?

Lattice User schrieb:
> Das ist also keine Vereinfachung sondern eine funktional andere
> Beschreibung.
Besonders auch deshalb, weil in der "großen" FSM das other_ena keinen 
Einfluss auf myEna hat...

Man kann die Beschreibung nicht auf 1 Zeile zusammenfassen, weil das 
Setzen und Zurücksetzen unabhängig voneinander sind..

Ich würde also das hier bieten:
1
process begin
2
    wait until rising_edge(clk);
3
    if    (s=b and iEna='1' and iTrig='1') then myEna <= '1';
4
    elsif (s=c and iEna='0')               then myEna <= '0';
5
end process;


BTW: ein Prozess mit Sesitivliste darf kein wait enthalten...
Gast #4119616
Lesenswert?

>Besonders auch deshalb, weil in der "großen" FSM das other_ena keinen
>Einfluss auf myEna hat...

Naja, indirekt ja schon: myEna kann nicht wieder gesetzt werden, bevor 
others_ena nicht deaktiviert wurde.

>Ich würde also das hier bieten: ...

Hm, da werden ja die Zustände der FSM dekodiert, ich wollte die FSM ja 
eliminieren.


Gruss, Joe
Gast #4119635
Lesenswert?

Joe schrieb:
>>Besonders auch deshalb, weil in der "großen" FSM das other_ena keinen
>>Einfluss auf myEna hat...
>
> Naja, indirekt ja schon: myEna kann nicht wieder gesetzt werden, bevor
> others_ena nicht deaktiviert wurde.
>

Und dafür brauchts du zwingend eine FSM, da dieser Zweig von der 
Vorgeschichte abhängt.


>>Ich würde also das hier bieten: ...
>
> Hm, da werden ja die Zustände der FSM dekodiert, ich wollte die FSM ja
> eliminieren.
>

Wenn dir der Timungunterschied nicht wichtig ist, geht es mit einer 
kleineren FSM, (2 states) aber ohne geht es nicht.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren