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;
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.
buttonpress : OUT std_logic; buttonpress muss ein Eingang sein. Kann auch den Besten passieren...
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 ;-)
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
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
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.
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.
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
Lothar M. schrieb: > wo steht: "es gibt nur einen Takt im System!" Wenn das mal stimmen würde oder so einfach wäre.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.