Forum: FPGA, VHDL & Co. Altera DE2-115 mit Cyclone IV - Hardware verhält sich anders als die Simulation (ModelSim)


von Steffen (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich bin ganz neu in der FPGA Welt. Wahrscheinlich mache ich einen 
totalen Anfängerfehler, nur hab ich meinen Fehler auch nach einer Woche 
intensiver Suche nicht verstanden. Deswegen schreibe ich grade diesen 
Beitrag (das erste mal, dass ich etwas in ein Forum schreibe - 
aufregend!).


Ich möchte als erstes Projekt einen Morse Decoder bauen, dazu verwende 
ich ein Altera DE2-115 Board. Mein aktueller Stand ist so, dass ich mit 
einem Taster morsen kann und die Buchstaben auf dem LCD erscheinen.


Als nächstes würde ich gerne einen Morse-Trainer programmieren. Das 
funktioniert leider nicht so wie geplant.

Die Idee ist, dass ich nacheinander die Buchstaben des Alphabet morse. 
Durch zwei LED´s (Grün und Rot) wird angezeigt ob meine Eingabe richtig 
oder falsch war. Das Ergebnis muss mit einem Taster quittiert werden 
bevor man die nächste Eingabe macht. Auf dem Bord passiert leider nichts 
davon.

Bei der Simulation in ModelSim ist der Verhalten genau wie geplant. 
Screenshot im Anahng.


Mein Code ist im Anhang, Regel 5: "Längeren Sourcecode nicht im Text 
einfügen, sondern als Dateianhang"

Diesen Eingang muss ich kurz erklären.
1
Morse_Array    : in std_logic_vector(9 downto 0);
Der ist immer "0000000000" es seiden der Nutzer hat einen Buchstaben 
gemorst, dann wird der Eingang für zwei Takte einer 15 Hz Clock zu dem 
gemorsten Buchstaben. Danach wieder zu "0000000000".



Ich wäre sehr dankbar falls sich jemand die Zeit nimmt mir zu Helfen!


Viele Grüße
Steffen

von Markus F. (mfro)


Lesenswert?

Steffen schrieb:
> Wahrscheinlich mache ich einen
> totalen Anfängerfehler,

Leider nicht nur einen, sondern gleich eine ganze Reihe davon ;)

Ohne Anspruch auf Vollständigkeit:
- Du hast keinen einzigen getakteten Prozess (es reicht nicht, die 
Clock in die Sensitivity-Liste einzutragen, Du mußt sie auch verwenden) 
in deinem Design, alles asynchron. Man kann das zwar auch in einem FPGA 
machen, aber nur, wenn man's kann. Beginne erst mal mit synchronem 
Design.
- Du hast Latches ohne Ende
- Du hast kombinatorische Schleifen

Darüber hinaus dürfte die Synthese Warnungen ohne Ende ausspucken. 
Schau' dir die genau an und versuche, sie zu verstehen (und zu beheben).

von Steffen (Gast)


Lesenswert?

Danke für deine Antwort!

Ich habe mir grade ein paar Einträge zu Latches und kombinatorischen 
Schleifen durchgelesen. Ich denke jetzt einigermaßen zu verstehen, wie 
wenig ich über das ganze Thema weiß :)

Ich versuche deine Ratschläge mal umzusetzen und sag dann bescheid ob es 
geklappt hat.


Danke nochmal!

von Mampf F. (mampf) Benutzerseite


Lesenswert?

versuch mal alles auf das hier umzubauen:
1
process(clk_50MHz)
2
begin
3
  if rising_edge(clk_50MHz) then
4
    if reset='0' then
5
      -- reset
6
    else
7
      -- hier den rest machen
8
    end if;
9
  end if;
10
end process;

Das kannst du quasi so gut wie immer benutzen außer du hast einen guten 
Grund, wieso du kombinatorische Prozesse bauen willst.

So hast du keinen Ärger mit Latches, Sensitivity-Listen, Resets, 
Simulationen, ...

: Bearbeitet durch User
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.