mikrocontroller.net

Forum: FPGA, VHDL & Co. Eingänger werden weg optimiert


Autor: Autoflug (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Moin,
Ich stuer in mit hilfe eines prozesses einen AD Wandler. Leider werden
die datenleitungen (Wert_ad) vom FPGA zum AD-wandler weg optimiert mit
der begründung das die nicht gebraucht werden.

bei when 5 =>
und when 15 =>

wird Wert_Ad benötigt.

@W: CL159
:"C:\Actelprj\400758-01\Stickstoff\hdl\Stickstoff.vhd":21:10:21:16|Input
wert_ad is unused

Was kann ich dagegen tun?
danke
Erik

Autor: schlumpf (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Vervollständige mal deine Sensitivity-List!

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
state_ADC wird auf 1 gesetzt unabhaengig davon ob die delays
abgelaufen sind, drum kommts nie zum lesen von Wert_AD.

Cheers, Roger

Autor: Autoflug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
meines wissens nach sind "if" statements in VHDL sequenziell
ausgeführt. versteh also nicht ganz wieso state_ADC dann immer auf 1
gesetzt wird unabhängig von den Delays. State_ADC wird erst auf 1
gesetzt wenn ein delay abgelaufen ist, oder seh ich das verkehrt.

thx
erik

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
weil state_ADC ausserhalb dem if im state gesetzt wird,
du muesstest es halt ins if reinnehmen, dort wo du Wert_AD
lesen willst. Dann koennte das so funktionieren wie du willst.

und sequentiell ist dein Konstrukt hoechstens bei der Simulation,
Variablen benutzt du ja keine.

Cheers, Roger

Autor: TobiFlex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich schreibe mal ausführlicher was Roger meinen könnte. Hier Dein
Codeauszug:

                    --Daten von AD Wandler lesen // Wert Feuchte, darf
nur gelesen werden, wenn Taster Temperturanzeige
                    --(show_temperature) nicht betätigt ist, da sonst
der Wert der Temperatur ausgegeben wird
                    when 5 =>   Zustand    <= "0101";
                        timeout2    <= 0;
                                convst      <= '1';
                                cs          <= '0';
                                rd          <= '0';
                                switch      <= '0';
                        delay    <= delay-1;
                                if delay =0 and show_temperature='1'
then
                                      Wert_Feuchte <=
to_bitvector(Wert_AD);
                                      Zustand <= "1100";
                                end if;
                                state_ADC   <= 11;

delay wird von 5 auf 4 verringert und dann gleich State 11 aktiviert.
D.h. Wert_Feuchte wird nie ein Wert zugewiesen wiel es zu delay=3...
garnicht mehr kommt. Hier mein Codevorschlag:

                    --Daten von AD Wandler lesen // Wert Feuchte, darf
nur gelesen werden, wenn Taster Temperturanzeige
                    --(show_temperature) nicht betätigt ist, da sonst
der Wert der Temperatur ausgegeben wird
                    when 5 =>   Zustand    <= "0101";
                        timeout2    <= 0;
                                convst      <= '1';
                                cs          <= '0';
                                rd          <= '0';
                                switch      <= '0';
                        delay    <= delay-1;
                                if delay =0 then
                                state_ADC   <= 11;
 if show_temperature='1' then
                                      Wert_Feuchte <=
to_bitvector(Wert_AD);
                                      Zustand <= "1100";
                                end if;

Autor: Roger Steiner (edge)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
bingo

Autor: TobiFlex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Sorry beim Editieren felsche Taste gedrückt. War noch nicht fertig
Autor: TobiFlex
Datum: 31.07.2006 17:41

------------------------------------------------------------------------ 
--------

Ich schreibe mal ausführlicher was Roger meinen könnte. Hier Dein
Codeauszug:

                    --Daten von AD Wandler lesen // Wert Feuchte, darf
nur gelesen werden, wenn Taster Temperturanzeige
                    --(show_temperature) nicht betätigt ist, da sonst
der Wert der Temperatur ausgegeben wird
                    when 5 =>   Zustand    <= "0101";
                        timeout2    <= 0;
                                convst      <= '1';
                                cs          <= '0';
                                rd          <= '0';
                                switch      <= '0';
                        delay    <= delay-1;
                                if delay =0 and show_temperature='1'
then
                                      Wert_Feuchte <=
to_bitvector(Wert_AD);
                                      Zustand <= "1100";
                                end if;
                                state_ADC   <= 11;

delay wird von 5 auf 4 verringert und dann gleich State 11 aktiviert.
D.h. Wert_Feuchte wird nie ein Wert zugewiesen wiel es zu delay=3...
garnicht mehr kommt. Hier mein Codevorschlag:

                    --Daten von AD Wandler lesen // Wert Feuchte, darf
nur gelesen werden, wenn Taster Temperturanzeige
                    --(show_temperature) nicht betätigt ist, da sonst
der Wert der Temperatur ausgegeben wird
                    when 5 =>   Zustand    <= "0101";
                        timeout2    <= 0;
                                convst      <= '1';
                                cs          <= '0';
                                rd          <= '0';
                                switch      <= '0';
                        delay    <= delay-1;
                                if delay =0 then
                                state_ADC   <= 11;
                               if show_temperature='1' then
                                      Wert_Feuchte <=
to_bitvector(Wert_AD);
                                      Zustand <= "1100";
                                end if;
                                end if;

Mit State 15 genauso verfahren.
Wert_Druck und Wert_Feuchte verändern keinen OUTPUT. Deshalb werden sie
wahrscheinlich weiterhin wegoptimiert. Also am Besten für den Test noch
Ausgabepins definieren.
Viele Grüße
TobiFlex

Autor: Juergen Schuhmacher (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
guck Dir auch mal den When-4-Fall an (inneres IF). Was soll mit dem
state passieren ?

Autor: Autoflug (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Danke

Autor: Autoflug (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Es wird nur Wert_Feuchte wegoptimiert. Libero gibt mir folgende
Fehlermeldung:

@W: BN116
:"c:\actelprj\400758-01\stickstoff\hdl\stickstoff.vhd":91:12:91:13|Remov 
ing
sequential instance Wert_Feuchte[0:11] of view:PrimLib.dff(prim) because
there are no references to its outputs

Es ist nicht möglich weitere Pins am FPGA zu definieren da alle bereits
gebraucht werden. Wie kann ich die Wegoptimierung noch umgehen?

Die Signale Wert_Feuchte und Wert_Druck werden im Process
"Programmauswahl" mit Sollwerten verglichen, welche abhänging von
Schalterstellung S4 und S5 sind. Kann daher nicht ganz nachvollziehen
wieso die wegoptimiert werden.

Hab mal das ganze Programm angehängt.

gruß
erik

Autor: TobiFlex (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Oh man das ist ja schon ganz schön ordentlich. Da wirst du wohl mal
Simulieren müssen um den Fehler zu finden.
Zwei Sachen sind mir auf die Schnelle aufgefallen(sind Vermutungen):
-Zuweisung an Signal Programm nicht sauber. Eingang P1 könnte Prellen
oder zu jeder Zeit den Zustand ändern. Außerdem zeitgleiche
Wertzuweisung an Signal Programm in den Case-Zweigen.
-Startbedingung für Signal state_automatik bei Programm=5 wird mir
nicht klar.

Vielleicht hilft es weiter.
Viele Grüße
TobiFlex

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.