Dezimalzahl auf 7 segment-Anzeige
Ich habe da ein großes problem mit VHDL für ein Projekt. Ich will sehen, auf 7-segment-Anzeige eine Nummer, die Benutzer-sets mit Schalter. Zum Beispiel, wenn das low-order-5-switches eingeschaltet sind, dann werden Sie stellen die binäre Zahl "11111", 31 in dezimal. So will ich sehen, dass 31 auf 7-segment-Anzeige.
Zu tun, dass ich Plane, diese Schritte:
- Legen Sie die 5 Wert des switch in ein array
- Konvertieren Sie das array in eine Ganzzahl Anzahl
- Sehen die integer-Zahl in eine 7-segment-Anzeige,
Punkt 1) einfügen in ein array
signal first: std_logic_vector (0 to 4);
signal temp: integer range 0 to 9999:=0;
for i in 0 to 4 loop
first(i)<=SW(i);
end loop;
temp<=VEC_TOINT(first);
HEX0<=INT_TO7SEG(temp);
Punkt 2) Vektor von Integer
Function VEC_TOINT(Vector: in std_logic_vector) return integer is
variable temp: bit_vector(Vector'range);
variable result: integer :=0;
Begin
for index in Vector'range loop
result:=result * 2 + bit'pos(temp(index));
end loop;
if Vector(Vector'left) = '1' then
result:=(-result)-1;
end if;
return result;
End VEC_TOINT;
Für den Dritten Punkt im moment habe ich keine Idee.
Wenn Sie wirklich keine Idee haben für den Dritten Teil sollten Sie bei einem anderen Karriere-Pfad. Wenn auf der anderen Seite, werden Sie eine Idee haben, dann sollten Sie uns sagen, was Sie verstehen, über das problem. Wie es ist, die Sie nur bitten uns zu tun, Ihre Hausaufgaben für Sie.
Deine 7-segment Anzeige hat einen eingebauten encoder, oder, wahrscheinlicher, akzeptiert 7-bit pro Zeichen, jedes bit für ein segment. Mit der Anzeige kommen sollte, eine Dokumentation (oder vielleicht die Nummerierung auf den Steckverbindern), die angibt, welches bit entspricht dem segment. Wenn Sie sind nummeriert, in der rechts-Links-Zeilen von oben nach unten, dann 1,2,4,6,7 wäre das Zeichen "5" und 1,3,6 wäre das Zeichen "7". (Zeichnen Sie aus.) Eine einfache 10-byte-übersetzung-Tabelle konvertieren von zahlen, um Ihre segment-Kodierungen.
Die Ziffern A-F sind ein wenig schwieriger. A, C, E, F sind leicht, B ist in der Regel gerendert als "b", D in der Regel als "d".
Deine 7-segment Anzeige hat einen eingebauten encoder, oder, wahrscheinlicher, akzeptiert 7-bit pro Zeichen, jedes bit für ein segment. Mit der Anzeige kommen sollte, eine Dokumentation (oder vielleicht die Nummerierung auf den Steckverbindern), die angibt, welches bit entspricht dem segment. Wenn Sie sind nummeriert, in der rechts-Links-Zeilen von oben nach unten, dann 1,2,4,6,7 wäre das Zeichen "5" und 1,3,6 wäre das Zeichen "7". (Zeichnen Sie aus.) Eine einfache 10-byte-übersetzung-Tabelle konvertieren von zahlen, um Ihre segment-Kodierungen.
Die Ziffern A-F sind ein wenig schwieriger. A, C, E, F sind leicht, B ist in der Regel gerendert als "b", D in der Regel als "d".
InformationsquelleAutor WhatElse88 | 2014-01-01
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich geschrieben habe, ein kleines Paket, das tut, was Sie wollen. Gegeben einen vorzeichenlosen Eingangswert ist, bricht es, diesen Wert in einer Reihe von Dezimalstellen, und erzeugt Signale, die fahren kann eine beliebige Anzahl von sieben-Segment-displays.
Hier ist ein Beispiel, wie Sie möchten, verwenden Sie:
Beachten Sie, dass der Eingabe-Wert ist ein unsigned. Konvertieren (eigentlich, "type cast") ein std_logic_vector in einen unsigned, nutzen Sie einfach:
Wenn aus irgendeinem Grund Sie sich entscheiden, konvertieren Sie den Wert von den Schaltern in eine ganze Zahl, es gibt eine Funktion in ieee.numeric_std, die das tut. Es ist eine gute Idee, es zu benutzen, anstatt zu schreiben Ihre eigenen. Sie können es verwenden, wie:
Schließlich, hier ist der code für das Paket. Sie sind willkommen, es zu benutzen oder es zu studieren und kommen mit Ihrer eigenen Lösung.
Ich mag Pedroni Cicuit Design mit VHDL für die Beispiele und Ashenden Designer ' s Guide to VHDL für seine Gründlichkeit. Wenn Sie sind beschränkt auf die Kostenlose online-Ressourcen, können Sie einen Blick auf Freier Bereich VHDL.
Ich Schätze Ihre Arbeit. Aber ich denke, dass die Bereitstellung von vollständigen code ist nicht der richtige Weg, um etwas zu lernen, ist es möglicherweise in die Irre führt, zu kopieren und ohne Verständnis.
Ich Teile die gleiche Sorge, @Sebastian, aber ich habe auch das Gefühl, dass VHDL keine Beispiele für den richtigen code geschrieben. Sogar Lehrbücher und Klasse Folien bieten erschreckende Beispiele, schlampig Empfehlungen, und schlecht beraten-Richtlinien. Ich glaube, dass die Programmierung kann nicht gelehrt werden wollte, indem er Allgemeinplätze, und der beste Weg, um gute Programmierer zu zeigen, Ihnen gute Beispiele. Ich sage nicht, dass der code, den ich Schreibe, ist immer vorbildlich, aber die Veröffentlichung wurde es ein guter Weg, um Konstruktive Kommentare. Neben der OP-Frage ist ein echtes Bedürfnis für viele, und das ist, warum ich schrieb, daß die Bibliothek in den ersten Platz
+1 @Sebastian, das heißt, ich denke, Ihr Kommentar ist sehr angemessen und verdient upvoting
InformationsquelleAutor rick
Letzten Fragen, die ich Versprechen 🙂
Ich anfangen zu studieren Sie den code und denken über Arbeit, und so beschließe ich, fügen Sie einen weiteren Eingang mit den beiden letzten hex-Anzeige, die ich habe, und Summe Sie
damit ich Anzeige erstellen fügen Sie diesen code
Es ist ein Fehler, den ich nicht finden kann, "in der Nähe text ":"; erwartet") " oder "," .....nach mir die synthax ist korrekt, da auf input1, input2 ich bereits mit der Funktion to_integer....
Beste Grüße
Michele
InformationsquelleAutor WhatElse88
Lösen 3) Sie haben zu verstehen, wie eine 7-segment Anzeige funktioniert, insbesondere Zeichen-display. Im Grunde müssen Sie implementieren einen encoder aus einer ganzen Zahl in die hexadezimale Kodierung der Anzeige. Der hexadezimale Codierung ist in dem Datenblatt von dem display, z.B. dieses Datenblatt zeigt Sie die display-pins sind miteinander verbunden, an welches segment. Eine beispielhafte hexadezimal-code ist an wikipedia.
InformationsquelleAutor Sebastian Dressler