Eingänger werden weg optimiert

Gast #389687
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
Angehängte Dateien:
Gast #389690
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
#389691
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
Gast #389692
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;
Gast #389694
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
Gast #389697
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
Angehängte Dateien:
Gast #389698
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

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