www.mikrocontroller.net

Forum: FPGA, VHDL & Co. fpga verzählt sich ?!


Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

baue gerade einen PS/2 Controller (Maus).

Jetzt verzählt sich aber mein fpga :-X

Hier mal mein Programm ohne den ps2 kram, nur das was probs macht:

process(clk25mhz)
variable count : natural := 0;
begin
 if rising_edge(clk25mhz) then
  count := count +1;
  if (count > 32) then
    led_out <= conv_std_logic_vector(count,8);
    count = 0;
  end if;
 end if
end process;

Wenn ich das laufen lasse ist count mal 32 und manchmal (!) 33 ?!?
Wenn ich also count = 32 als abfrage mache verabschiedet sich das ganze
da
es manchmal nicht trifft.

Wie kommt sowas ? Probleme mit der clock ?

Ich bin ratlos :(

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
err sorry sollte
if (count >= 32)
heissen ;)

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Habs jetzt noch ein bissl eingrenzen können:
process(clk25mhz)
variable count : natural := 0;
variable setup_ok : std_logic := '0';
begin
 if rising_edge(clk25mhz) then
   if setup_ok = '0' then
     --do something
     count := count +1;
     if end = '1' then
       count := 0;
       setup_ok = '1';
     end if;
   else
     count := count +1;
     if (count > 32) then
       led_out <= conv_std_logic_vector(count,8);
       count := 0;
     end if;
   end if;
 end if;
end process;

Wenn ich jetzt bei setup_ok if zweig ne andere variable count2 nehme
verzählt er sich nicht mehr.
Aber wieso wird der setup_ok=0 zweig nochmal
aufgerufen ?! das setup_ok kann sich doch nicht mehr ändern ?!?!

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
d'oh man sollte natürlich nicht davon ausgehen dass
in vhdl alles sequentiell abläuft :-X
vergesse ich immer wieder g

....
     if (count > 32) then
       led_out <= conv_std_logic_vector(count,8);
       count := 0;
     else
       count := count +1;
     end if;
....

schon sieht es vieeeel besser aus :)

Autor: FPGA-User (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo Ssssssss..

bei Deinem Code kommt man leicht durcheinander, was
nun eigentlich Register und was Kombinatorik werden
soll.
Du musst mit den Variablen aufpassen. Nimm doch besser
Signale für count bzw. setup_ok !
Die Zeile setup_ok = '1'; sollte sicher heißen
setup_ok := '1';

Probier erstmal folgendes :
...
   signal count : integer range 0 to 100; -- 100 nur als Bsp.
...
process(clk25mhz)
begin
 if rising_edge(clk25mhz) then
   if count >= 32 then
      count <= 0;
      led_out <= conv_std_logic_vector(count,8);
   else
      count <= count +1;
   end if;
end process;

Autor: Sssssss (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hi!

Danke für deinen Post!
Count habe ich vorhin schon in Signal geändert, da fiel
es mir dann direkt auf dass ich da zwei zuweisungen gleichzeitig
mache...
Jetzt funktioniert es schon besser, bzw ich hab "nur noch"
ein Problem mit dem ps2 protokoll 8)
Jedenfalls verhält es sich jetzt deterministisch.

Bei meiner ersten variante hat wohl manchmal
das :=0 und manchmal das := c +1; gewonnen g
Interessant 8)

Irgendwie mag mich das ps2 protokoll nicht...
Wenigstens bekomm ich die Maus mittlerweile in den sende modus
geschaltet.
Jetzt haperts nur noch am einlesen der 33 datenbits.

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.