Forum: FPGA, VHDL & Co. Taschenrechner in VHDL


von andreas (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

versuche in letzter Zeit einen "Taschenrechner" zu programmieren. 
Funktionen sollen +, - und ein paar logische Operationen sein.

Eingelesen werden die Ziffern über eine PS2 Tastatur, als Anzeige wird 
ein LCD verwendet. Das Einlesen einer Ziffer und Ausgabe klappt soweit.

Im Moment bin ich dabei nach jeder Eingabe die erste Ziffer um 4 Bit 
nach links zu schieben und die zweite Ziffer in die freigewordenen 
untersten 4 Bit zu speichern. Doch genau da hakt es. Beim Mappen kommt 
es zu mehreren Errors. Siehe Anhang Error Datei.

Irgendwie scheint mein komplettes Konzept, so wie ausgedacht nicht 
umsetzbar zu sein. Arbeite erst seit kurzen mit FPGAs und komm mit dem 
Entwurf von Zustandsautomaten nicht wirklich klar.

Weiß irgendjemand worans liegt?
Oder wie könnte mans einfacher umsetzen?

Gruß Andreas

von Weltbester FPGA-Pongo (Gast)


Lesenswert?

Hast Du eine Simulatino dafür, die zeigt, dass das funktioniert?

von andreas (Gast)


Angehängte Dateien:

Lesenswert?

Ne hab ich nicht. Letzter Stand (Anhang) bei dem noch alles funktioniert 
auf dem Spartan3 Board. Eingabe wird eingelesen und ausgegeben. Als 
nächsten Schritt möchte ich jede weitere Eingabe in den "ausgang" Vektor 
schieben. Doch sobald ich die Case when Anweisung einbaue hagelts 
Fehlermeldungen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Du könntest diese Fehlermeldungen einfach mal hier reinkopieren. Wenn es 
viele gleiche sind, reicht ja ein Exemplar...

Und ich würde sehr empfehlen, eine Testbench zu basteln. Den der 
Simulator ist der FPGA-Debugger.

von andreas (Gast)


Lesenswert?

Ok werd mal versuchen eine Testbench zu schreiben. Also die 
Fehlermeldung ist eigentlich in der Error Textdatei meines ersten Posts. 
Seh gerade wurde aber als bin Datei angehängt. Fehlermeldung Auszug:

ERROR:MapLib:979 - LUT4 symbol "lcd_data_mux0000<2>142" (output
signal=lcd_data_mux0000<2>142) has input signal "zahl0_9_mux0000" which 
willbe trimmed. See Section 5 of the Map Report File for details about 
why the input signal will become undriven.


Taucht auf, sobald ich das einfüge:

1
verarbeitung: PROCESS (eingabe,ausgabe,state_zahl)
2
  variable zahl: unsigned(15 downto 0);
3
4
Begin
5
 
6
              case state_zahl is
7
                when zahl1_state => 
8
                  zahl(3 downto 0)  := unsigned(eingabe);
9
                  state_zahl <= zahl2_state;
10
                when zahl2_state =>
11
                  zahl := shift_left(zahl,4);
12
                  zahl(3 downto 0)  :=  unsigned(eingabe);
13
                  state_zahl <= zahl3_state;
14
                when zahl3_state =>
15
                  zahl := shift_left(zahl,4);
16
                  zahl(3 downto 0)  :=  unsigned(eingabe);
17
                  state_zahl <= zahl4_state;
18
                when zahl4_state =>
19
                  zahl := shift_left(zahl,4);
20
                  zahl(3 downto 0)  :=  unsigned(eingabe);
21
                  state_zahl <= zahl1_state;  
22
                when others => state_zahl <= zahl1_state;
23
              end case;
24
    
25
26
          ausgabe(15 downto 0) <= std_logic_vector(zahl);
27
28
end process verarbeitung;

von Frahnz (Gast)


Lesenswert?

Ohne Testbench sollte man garnicht erst mit dem FPGA anfangen ;-) Das 
ist reine Zeitverschwendung und hoffentlich merkst du das gerade!

Es gibt nur eine einzige (!!!) Ausnahme bei der es erlaubt ist ohne eine 
TB direkt auf den FPGA zu gehen: Dein Vorname ist Lothar und dein 
Nachname fängt mit M an und hört mit iller auf.

von andreas (Gast)


Lesenswert?

Achso. Unser Professor meinte Testbench oder gleich direkt auf dem 
Board. Ich hab mich halt gleich fürs Board entschieden :-)

von Frahnz (Gast)


Lesenswert?

andreas schrieb:
> Achso. Unser Professor meinte Testbench oder gleich direkt auf dem
> Board. Ich hab mich halt gleich fürs Board entschieden :-)

Bist du auf einer FH? :-)

von andreas (Gast)


Lesenswert?

Jup HS Regensburg

von Klaus (Gast)


Lesenswert?

andreas schrieb:
> Achso. Unser Professor meinte Testbench oder gleich direkt auf dem
> Board. Ich hab mich halt gleich fürs Board entschieden :-)

Ok, die Entscheidung steht dir frei. Aber die mit deiner Entscheidung 
verbundenen Vor- und Nachteile hast du nun kennen gelernt ;-) Auf dem 
Board sieht man halt nicht, das intern passiert. Im Simulator kannst du 
alle Signale beobachten.

andreas schrieb:
> zahl := shift_left(zahl,4);

Dein kombinatorischer Prozess enthält eine kombinatorische Schleife. Oh, 
nee, ich seh gerade dein ganzer Prozess ist eine einzige riesige 
kombinatorische Schleife =-O

Sicher, dass du das nicht in irgendeiner Form getaktet haben wolltest?

von Frahnz (Gast)


Lesenswert?

andreas schrieb:
> Jup HS Regensburg

Ok lassen wir das mit der Ironie mal. Die Aussage gleich aufs Board zu 
gehen zeugt eigentlich eher davon, dass dein Prof noch nie ein 
vernünftiges HW-Projekt realisiert hat. Bevor der FPGA ins Spiel kommt, 
sollte alles komplett durchsimuliert sein.

von andreas (Gast)


Lesenswert?

Klaus schrieb:
> Ok, die Entscheidung steht dir frei. Aber die mit deiner Entscheidung
> verbundenen Vor- und Nachteile hast du nun kennen gelernt ;-) Auf dem
> Board sieht man halt nicht, das intern passiert. Im Simulator kannst du
> alle Signale beobachten.

Ah OK jetzt bin ich schon mal schlauer. Werd mich aufjedenfall mit der 
Testbench auseinandersetzen.

Klaus schrieb:
> Dein kombinatorischer Prozess enthält eine kombinatorische Schleife. Oh,
> nee, ich seh gerade dein ganzer Prozess ist eine einzige riesige
> kombinatorische Schleife =-O

Ja hab mir schon gedacht, dass mehr nicht stimmt :-). Alles nicht so 
einfach wie gedacht. Mein Problem ist, hab bis jetzt nur C programmiert 
und versuch das ganze genauso in VHDL umzusetzen, aber anscheinend ist 
die Vorgehensweise in VHDL ganz anders.

Klaus schrieb:
> Sicher, dass du das nicht in irgendeiner Form getaktet haben wolltest?

Dass is auch so eine Sache, wann brauch ich denn einen gatakteten 
Prozess, wann nicht? Hab mir das so überlegt, sobald sich das Signal 
eingabe ändert wird der Prozess Verarbeitung aufgerufen.

von andreas (Gast)


Lesenswert?

Frahnz schrieb:
> Ok lassen wir das mit der Ironie mal. Die Aussage gleich aufs Board zu
> gehen zeugt eigentlich eher davon, dass dein Prof noch nie ein
> vernünftiges HW-Projekt realisiert hat. Bevor der FPGA ins Spiel kommt,
> sollte alles komplett durchsimuliert sein.

Achso könnte gut sein :-). Viele Tips haben wir dazu auch nicht 
erhalten. Wir wurden vor den PC gesetzt und es hieß programmiert einen 
Taschenrechner in VHDL, so dass er auf dem Spartan3 Board läuft. Ja und 
jetzt steh ich da und weiß nicht genau wie ich da vorgehen soll.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Soso, es hieß also ihr solltet einen Taschenrechner in VHDL 
"programmieren"...  :-/
Oder ist es eher das Ziel, einen Taschenrechner in VHDL zu 
beschreiben?

Ich glaube fast, euer Prof hat euch mit seiner "Wahlmöglichkeit" 
zwischen Simulation und Realität einfach nur aufs Glatteis geführt. Denn 
üblicherweise wird an Schulen eher simuliert als sythetisiert...

Auf jeden Mal solltest du die Aufgabe teilen: so ein Gerät hat eine 
Eingabe, eine Ausgabe und ein Rechenwerk. Und mindestens diese 3 Module 
sollte dein Design auch haben...

von andreas (Gast)


Lesenswert?

Lothar Miller schrieb:
> Soso, es hieß also ihr solltet einen Taschenrechner in VHDL
> "programmieren"...  :-/
> Oder ist es eher das Ziel, einen Taschenrechner in VHDL zu
> beschreiben?

Kann auch sein, dass es beschreiben hieß, weiß ich jetzt nicht mehr 
genau :-)

Lothar Miller schrieb:
> Auf jeden Mal solltest du die Aufgabe teilen: so ein Gerät hat eine
> Eingabe, eine Ausgabe und ein Rechenwerk. Und mindestens diese 3 Module
> sollte dein Design auch haben...

Ah gut, dass dachte ich mir auch schon, einen Process fürs Einlesen, 
einen fürs Verarbeiten und einen für die Ausgabe.

Werd mir wohl Literatur dazu besorgen müssen. Welche Bücher sind denn zu 
empfehlen?

von Klaus (Gast)


Lesenswert?

Das Standard-Lehrwerk für VHDL-Synthese ist: VHDL-Synthese: Entwurf 
digitaler Schaltungen und Systeme von Jürgen Reichardt und Bernd 
Schwarz.

von Christian R. (supachris)


Lesenswert?

andreas schrieb:
> Mein Problem ist, hab bis jetzt nur C programmiert
> und versuch das ganze genauso in VHDL umzusetzen, aber anscheinend ist
> die Vorgehensweise in VHDL ganz anders.

Hattest du denn schon mal eine VHDL Vorlesung? Die Vorgehensweise ist 
grundlegend anders. in VHDL beschreibst du das Verhalten von Gattern 
und FlipFlops, also Schaltungstechnik. Da kommt man mit C nicht weit, im 
Gegenteil, das hindert nur. Überleg einfach, wie du den Taschenrechner 
mit FlipFlops und Logik-Gattern aufbauen würdest. Das musst du immer im 
Hinterkopf behalten. Dann kannst du sinnvoll mit VHDL was beschrieben.

von andreas (Gast)


Lesenswert?

Christian R. schrieb:
> Hattest du denn schon mal eine VHDL Vorlesung?

Ich hatte letztes Semester Digitaltechnik Vorlesung, aber da gings nur 
am Schluss um programmierbare Logik. War doch ein bisschen knapp.

von Klaus (Gast)


Lesenswert?

andreas schrieb:
> aber da gings nur
> am Schluss um programmierbare Logik. War doch ein bisschen knapp.

Das macht nichts! Hauptsache du hast Ahnung davon wie man aus Flipflops 
und Gattern digitale Schaltungen aufbaut.  Und aus der Richtung solltest 
du dich gedanklich auch VHDL nähern! Und nicht aus der Richtung 
irgendwelcher Programmiersprachen. Du tust nix anderes als zu 
Beschreiben, wie die Schaltung aus FFs und Gattern aussehen soll. Und 
noch ein Tipp: der RTL-Viewer* ist dein Freund! Da siehst du, was der 
Synthesizer aus deiner Beschreibung macht. Spiel damit rum, um ein 
Gefühl, oder vielmehr das Wissen, dafür zu bekommen, wie VHDL-Konstrukte 
in Hardware aussehen.

Der Ablauf ist also folgendermaßen: Zuerst überlegst du, wie du die 
Schaltung aus FFs und Gattern aufbauen würdest. Dabei ist nicht jede 
logische Verknüpfung wichtig, aber die Struktur deiner Schaltung sollte 
dir klar sein! Danach machst du eine Beschreibung davon in VHDL. Dann 
schaust du dir im RTL-Schematic an, was aus deiner Beschreibung gemacht 
wird. Und im Simulator schaust du dir an, ob das Verhalten deiner 
VHDL-Beschreibung auch der erwarteten Funktion entspricht. Und danach 
gehts ab mit dem Bit-File aufs Board :-)




*Heißt bei Xillinx glaube ich "View RTL-Schematic" oder so ähnlich.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

Und vor Allem: fang nicht mit einem Taschenrechner auf der Hardware an, 
Sonden mit einer sinkenden Led und dann weiter mit dem bewährten 
Lauflicht. Dabei lernst du dann auch die Anwendung des Simulators.

Siehe da:
http://www.lothar-miller.de/s9y/archives/81-Xilinx-ISE-Step-by-Step.html

von Klaus (Gast)


Lesenswert?

Lothar Miller schrieb:
> Sonden mit einer sinkenden Led

Hat einer die LED über Board geworfen? ;-)

Btw.: Endlich wieder Winterbock! plöpp  Prost! :)

von andreas (Gast)


Lesenswert?

Klaus schrieb:
> Der Ablauf ist also folgendermaßen: Zuerst überlegst du, wie du die
> Schaltung aus FFs und Gattern aufbauen würdest. Dabei ist nicht jede
> logische Verknüpfung wichtig, aber die Struktur deiner Schaltung sollte
> dir klar sein! Danach machst du eine Beschreibung davon in VHDL. Dann
> schaust du dir im RTL-Schematic an, was aus deiner Beschreibung gemacht
> wird. Und im Simulator schaust du dir an, ob das Verhalten deiner
> VHDL-Beschreibung auch der erwarteten Funktion entspricht. Und danach
> gehts ab mit dem Bit-File aufs Board :-)

Danke jetzt ist mir endlich mal klar wie ich überhaupt vorgehen muss.

Lothar Miller schrieb:
> Und vor Allem: fang nicht mit einem Taschenrechner auf der Hardware an,
> Sonden mit einer sinkenden Led und dann weiter mit dem bewährten
> Lauflicht. Dabei lernst du dann auch die Anwendung des Simulators.

Werd ich die nächste Tage gleich mal ausprobieren ;-).

Vielen Dank für die Infos. Wenn mal völlig falsch loslegt und dann 
funntkionierts einfach nicht, kommt doch ziemlich schnell Frust auf.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

"sinkende Led"?
Sch%#$$ Handy-Autokorrektur...   :-/

von PittyJ (Gast)


Lesenswert?

Ich hatte auch damit angefangen, den 'Code' gleich auf den FPGA zu 
transportieren und zu testen. Wie beim Programmieren... dann ein paar 
printf's zum Debuggen einbauen.
Das Problem ist nur, es gibt keine printfs, und eine Fehlersuche wird 
sehr mühsam. Da läßt man denn da mal ein LED Blinken, oder setzt dort 
ein Ausgang um. Aber das ist sehr langsam und unübersichtlich.

Dann bin ich doch dazu übergegangen, mir die Komponenten erst einmal zu 
simulieren. Das ist ziemlich nervig, weil erst der Testbench geschrieben 
werden muss. Doch hat man einmal einen, kann dieser auch gleich als 
Muster für andere Komponenten dienen.
Und beim Testbench finden man doch schneller die Fehler: "Oh, da geht 
das Signal erst einen Takt später los" .. das hätte man in dem 
Live-Ablauf nie mitbekommen. Und ähnliche Dinge.
Und wenn man eine Komponente ändert, kann man den Testbench weiter als 
Unit-Test verwenden.


Noch ein Tip: vergiss erst einmal die Variablen und mache alles mit 
Signalen.

von Lothar M. (Firma: Titel) (lkmiller) (Moderator) Benutzerseite


Lesenswert?

PittyJ schrieb:
> weil erst der Testbench geschrieben werden muss. Doch hat man einmal
> einen, kann dieser auch gleich als Muster für andere Komponenten dienen.
die Testbench
Testbench kommt von Bench = Bank, Werkbank, Arbeitsplatte

von Christian R. (supachris)


Lesenswert?

PittyJ schrieb:
> Das ist ziemlich nervig, weil erst der Testbench geschrieben
> werden muss.

Wenn man mit Xilinx ISE arbeitet kann man sich die Testbench für das 
jeweilige Modul automatisch generieren lassen. Macht kaum Arbeit und das 
Modul ist gleich passend verdrahtet. Die Stimuli-Daten muss man 
natürlich noch selber generieren.
Interessant wirds, wenn man mehrere Designs in einer Testbench 
verbindet, die Ein- und Ausgaben über Fio I/O macht und haufenweise 
Asserts einbaut....dann noch selber Modelle schreiben für exotische 
Bausteine um möglichst realistisch zu simulieren. Da hat man dann schon 
bissl Arbeit. Aber alles machbar. In der Simulation kann man mit VHDL 
zum Glück viel viel mehr machen als auf der Hardware.

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.