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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.