mikrocontroller.net

Forum: FPGA, VHDL & Co. Problem mit dem ganz einfachen Programmcode


Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Leute, ich habe ein Problem. Mein Design funktioniert nicht und da 
habe ich mit der Anschsteuerung von einer Leuchtdiode versucht das 
Problem einzugrenzen. Das komische ist, dass die Leuchtdiode hin ganz 
unwilkürlich beim Druck auf den Taster anfängt zu Leuchten. (heißt: ich 
drucke auf den Taster
- halte gedrückt: manchmal Leuchtet die LED nach x sek., machmal nicht.
- drucke mehrmals: manchmal Leuchtet die LED nach x sek., machmal nicht.

Das Takt DISP_ECLK ist 30MHz. Das das Programm ja bis dato ziemlich 
einfach ist und ich versthe überhaupt nicht warum es so nicht geht. Ich 
hoffe jemand von Euch kann mir helfen!


  shared variable x : integer :=0;
begin
--...
process (DISP_ECLK, rst)
   begin
    if Button= '1' then
    if DISP_ECLK = '1'  then
                    --...
        if x = 2 then
          x :=0;
          LED0<='1'; -- HIER LED!!!!
        else
          x:=x+1;
        end if;
    end if;
  end process;

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
P.S.: es handelt sich um VHDL-Code

Autor: Klaus Falser (kfalser)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
1. Der Code hat nicht die richtige Form.
   Ein getaktetes Signal beschreibt man so

process (DISP_ECLK, rst)
begin
    if (rst = '1') then
        ..
    elsif rising_edge(DISP_ECLK) then
        if Button= '1' then
             ...
        end if;
    end if;
end process;

Schreib es auf die Form um.

2) Was soll die shared variable? Die sollten Anfänger meiden wie der 
Teufel das Weihwasser. Die brauchst Du sicher nicht.

3) Wo wird LED wieder auf '0' gesetzt?

4) Wahrscheinlich kommt es davon das der Taster prellt. Dabei werden bei 
jedem menschlichen Tastendruck für das FPGA mehrere Schaltvorgänge 
generiert (ca. 50 ms lang)

Klaus

Autor: Falk (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Klaus Falser

>2) Was soll die shared variable? Die sollten Anfänger meiden wie der
>Teufel das Weihwasser. Die brauchst Du sicher nicht.

Was sollen shared variables überhaupt? Ich hab schon einige FPGA-Designs 
im professionellen Umfeld gemacht und bin nicht ein einziges Mal in die 
Verlegenheit gekommen, sowas zu benutzten. Um der Wahrheit die Ehre zu 
geben, ich wusste gar nicht, dass sowas in VHDL existiert.

MFG
Falk


Autor: Neuer Gast (vhdl_progger)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Falk wrote:
> @Klaus Falser
>
>>2) Was soll die shared variable? Die sollten Anfänger meiden wie der
>>Teufel das Weihwasser. Die brauchst Du sicher nicht.
>
> Was sollen shared variables überhaupt? Ich hab schon einige FPGA-Designs
> im professionellen Umfeld gemacht und bin nicht ein einziges Mal in die
> Verlegenheit gekommen, sowas zu benutzten. Um der Wahrheit die Ehre zu
> geben, ich wusste gar nicht, dass sowas in VHDL existiert.
>
> MFG
> Falk

Hallo,

shared Variablen sind eigentlich nur in der Simulation gut.
Wenn man Variablen über mehrere Prozesse braucht.
Vor allem bei File-IO und Text-IO. Sonst braucht man
sie eigenlicht nicht.
Vor allem in der Synthese sollte man so gut wie keine
Variablen nutzen.

Gruß

Ralf

Autor: Peter (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das mit der shared-Variable habe ich gemacht, da eine 
Instiialisierungssquenz für ein OLED-Display durchlaufen werden muss.
Nach jeder steigenen-Display-Takt-Flanke muss sich ein Wert änder und 
das 41 mal. Daher habe ich Signalarray erzeugt, es mit 41 werten 
gefüttert und wollte  praktisch mit einen zähler (x) dass sie das Array 
um eins hochschraubt (bis zur 41 halt).
Mittlerweile habe ich mir überlegt, dass ich den zähler als Signal nutze 
und diesen in einen eigenen Process hochzähle.
Vielen Dank für Eure Hilfe(!!) und ein schönes Wochenende. Die shared 
Variablen werde ich erstmal wieder als Werkzeug kicken.

@Klaus
zu 1) Vielen Dank!

zu 2) habe ich eingesehen

3) Wo wird LED wieder auf '0' gesetzt?

   Die LED solte nur testen ob das so funktioniert wie ich es gehofft
   hatte und wurde noch ga rnciht auf 0 gesezt (sitze an einem Virtex4-
   Evalu. Board)

4) Wahrscheinlich kommt es davon das der Taster prellt. Dabei werden bei
jedem menschlichen Tastendruck für das FPGA mehrere Schaltvorgänge
generiert (ca. 50 ms lang)

An das Prellen habe ich noch gar nicht gedacht. Bin immer davon 
ausgegangen, dass da eine art Filter eingebaut ist.

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.