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


von Peter (Gast)


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;

von Peter (Gast)


Lesenswert?

P.S.: es handelt sich um VHDL-Code

von Klaus F. (kfalser)


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

von Falk (Gast)


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


von Neuer G. (vhdl_progger)


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

von Peter (Gast)


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.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.