Forum: FPGA, VHDL & Co. Taster - VHDL


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Fatih F. (faith)


Angehängte Dateien:

Lesenswert?

Hallo!

Ich benötige für meinen Arbeitsauftrag Hilfe. Ich habe eine 
Angehensweise, jedoch hat sich herausgestellt, dass das meiste Falsch 
bzw. von der Logik nicht richtig ist.
Leider bin ich bei der Branche ziemlich neu und kenne mich nicht 
wirklich aus, daher würde ich gerne um Hilfe bitten bzw. Tipps oder 
andere Angehensweisen.

Code:



LIBRARY IEEE;
USE IEEE.std_logic_1164.ALL;
USE IEEE.numeric_std.ALL;

ENTITY Button IS
clk, tick, rst : IN std_logic;
buttonpress : OUT std_logic;
 tgl : OUT std_logic);
END ENTITY Button;

architecture behaviour of Button is
type status_art is (s1, s2, s3);
signal status: status_art;
signal count: integer range 0 to 250000;
signal state: std_logic_vector (3 downto 0);
signal buttonclk : std_logic;
begin

process
  if (falling_edge (buttonpress) ) then
tick =  '1';
  else   tick = '0';

  end if;

end process;

process(buttonpress)
begin
  if falling_edge(buttonpress) then        .
    tgl = '1'
  else rising_edge(buttonpress) then
    tgl = '0';

  end if;
end process;


process(clk, rst, count)
  begin
          if(rst='0') then
           count<=0;
            buttonclk <= '0';
  elsif(count=250000) then
            count<=0;
        elsif(clk'event and clk='1') then
    if(count=0) then
              buttonclk <= not buttonclk;
     end if;
          count<=count+1;
          end if;
end process


process(buttonpress, buttonclk, rst)
begin
  if(rst='0') then
    state<="1111";
  elsif(buttonclk'event AND buttonclk='1') then
    state(3 downto 1) <= state(2 downto 0);
    state(0) <= button;
    if( state = "0000") then
      hit <= '1';
      else
        hit <= '0';
  end if;
  end if;
end process;

von hausaufgaben selber machen (Gast)


Lesenswert?

Das sieht irgendwie so gar nicht nach einem "Arbeitsauftrag" aus "der 
Branche" aus, sondern nach einer Übungsaufgabe.

Und die sollte man schon am besten selber machen, wenn man es lernen 
will.

Wirf deinen Code doch erst mal einem Simulator vor, der nennt dir schon 
mal alle Stellen mit Syntaxfehlern. Danach kann man dann mit dem 
eigentlichen Problem und dem Verstehen anfangen.

von Delta (Gast)


Lesenswert?

buttonpress : OUT std_logic;
buttonpress muss ein Eingang sein.
Kann auch den Besten passieren...

von hausaufgaben selber machen (Gast)


Lesenswert?

Beispiel Syntaxfehler: In der Entity geht eine Klammer zu, aber nicht 
auf. Und bevor sie aufgeht, sollte da vielleicht noch ein Schlüsselwort 
hin, damit klar ist was diese IN und OUT - Elemente eigentlich sind ;-)

von Testosteron (Gast)


Lesenswert?

Erstelle eine Testbench, simuliere die Testbench in
Xilinx Vivado oder Modelsim oder einer anderen Simulatinsoftware
deiner Wahl. Damit kann man wunderschoen genau die Signale sehen,
die du in der Aufgebenstellung gezeigt hast.

Testosteron

von Wuerg (Gast)


Lesenswert?

hausaufgaben selber machen schrieb:
> Das sieht irgendwie so gar nicht nach einem "Arbeitsauftrag" aus
> "der
> Branche" aus, sondern nach einer Übungsaufgabe.

Ja, irgendwie könnte die Vermutung stimmen.

Und ich frage mich, was daran so schwer ist, mit einem counter eine 
Totzeit einzustellen, zumal die Lösung sogar in der Aufgabe verteckt 
erwähnt wird.

Mir wird Angst und Bang vor all diesen bachelors die aus den Hörsälen 
dringen

von hausaufgaben selber machen (Gast)


Lesenswert?

Wuerg schrieb:
> Mir wird Angst und Bang vor all diesen bachelors die aus den Hörsälen
> dringen

Dann hoffen wir mal, das dieser Kandidat hier gerade noch am Anfang des 
Semesters steht und die Kurve noch kriegt.

Wenn man es am Anfang nicht weiß, ist das kein Beinbruch.
Wenn man es am Ende des Semesters nicht weiß, aber schon.
Es gibt ja einen Grund für die hohen Durchfallquoten in manchen Fächern, 
selbst wenn es keine "Siebfächer" sind.

Tipp für jeden, der etwas lernt:
Wer es beim ersten Mal gleich richtig lernt, ist schneller fertig und 
hat es später immer leichter - auch wenn es am Anfang schwieriger 
aussieht.

von Fpgakuechle K. (fpgakuechle) Benutzerseite


Lesenswert?

Fatih F. schrieb:
1
 process
2
  if (falling_edge (buttonpress) ) then
3
   tick = '1';
4
  else   
5
   tick = '0';
6
  end if;
7
 end process;

Wechselerkennung funktioniert in echter Hardware anders. 
Signal-Zuweisung wird auch nicht mit '=' geschrieben, die äußeren 
if-Klammern sind unnötig. Tick ist auch ein Input, dem kann man sowieso 
nix zuweisen. Die anderen beiden Prozesse sehen besser aus, nimm diese 
als Beispiel.

: Bearbeitet durch User
von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Fatih F. schrieb:
> if falling_edge(buttonpress) then        .
>     tgl = '1'
>   else rising_edge(buttonpress) then
>     tgl = '0';
Wo hast du denn diesen sehr krativen Ansatz gefunden?
Mal zum Nachdenken: wenn tgl ein Flipflop ist (denn alles, was auf 
'event oder auf das daraus abgeleitete faling_edge() oder rising_edge() 
reagiert, IST bzw. WIRD ein Flipflop), dann musst du jetzt ein Flipflop 
finden, das auf beide Flanken von buttonpress reagieren kann. Gibt es 
sowas irgendwo? Und: gibt es sowas in deinem FPGA?

Zum eigentlichen Thema: such mit Google nach "einsynchronisieren" und 
"Flankenerkennung".

Und noch ein Tipp: such hier im FPGA-Forum nach "Postulate":
https://www.mikrocontroller.net/search?query=postulate&forums%5B%5D=9&max_age=-&sort_by_date=1
Versuche, diese Postulate zu verstehen und beachte sie!
Im Besonderen beachte die Stelle, wo steht: "es gibt nur einen Takt im 
System!"
Lies die Posts, in denen diese Postulate erwähnt werden. Da findest du 
dann z.B. den Beitrag "Select auf fallende und steigende Flanke"

: Bearbeitet durch Moderator
von Markus W. (elektrowagi78) Benutzerseite


Lesenswert?

Lothar M. schrieb:
> wo steht: "es gibt nur einen Takt im System!"
Wenn das mal stimmen würde oder so einfach wäre.

von Lothar M. (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Markus W. schrieb:
> Wenn das mal stimmen würde
... dann hätte man ein System, das man leicht unter Kontrolle halten 
könnte. So eines, das auch ein Anfänger verstehen und beherrschen würde.

> oder so einfach wäre.
In diesem Fall hier und in allgemeinen Fall "Anfänger" ist es genau so 
einfach. Aus meiner Erfahrung: wenn der Anfänger 2 oder mehr Takte 
braucht, dann hat er irgendwas falsch verstanden. Oder andrsrum: einer, 
der ein System mit mehreren Taktdomänen hat, ist kein Anfänger mehr.

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]
  • [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.

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