Hi, ich habe einen sehr speziellen Analog nach Digital Wandler entworfen, der einen 6-Bit-Gray-Code ausgibt. Mit TTL-IC's wüsste ich, wie ich das auf einer 2-stelligen 7-Segment-Anzeige (00...63) ausgeben würde: 1. Zuerst mit 5 Stück 1/4 7486 XOR den Gray-Code nach Binär wandeln. 2. den Binär-Code nach 2 stellig BCD wandeln. Auch da gibt es ein IC, dessen Name mir im Moment entfleucht ist. 3. mit 2 Stück 7447 oder 7448 die 7-Segment-Anzeigen treiben. Wie würde ich das in VHDL schreiben um es vielleicht in ein CPLD XC9572 zu bringen? Brauche ich da die drei Schritte, oder geht das in einem Rutsch?
Du kannst natürlich auch in einem Rutsch aus dem Gray-Code den 7-Segment Code erzeugen. Per LUT oder case Anweisung. Man kann natürlich auch den Gray Code erst nach bin wandeln und dann bin zu 7-Segment, aber das bringt in deinem Fall ja nix.
Christian R. schrieb: > Du kannst natürlich auch in einem Rutsch aus dem Gray-Code den 7-Segment > Code erzeugen. Per LUT oder case Anweisung. case kenn ich, aber LUT nicht. Hast du mal ein Beispiel?
Peter Zz schrieb: > Mit TTL-IC's wüsste ich, wie ich das auf einer 2-stelligen > 7-Segment-Anzeige (00...63) ausgeben würde: Recht viel Aufwand. Ich würde da ein 16 Bit EPROM mit den passenden 64 Werten programmieren und die Anzeige direkt da anschließen... Peter Zz schrieb: > Wie würde ich das in VHDL schreiben In etwa so:
1 | port ( |
2 | gray : in std_logic_vector(5 downto 0), -- 6 Eingangsbits |
3 | zehner : out std_logic_vector(6 downto 0), -- 7 Bits für die Zehnerstelle |
4 | einer : out std_logic_vector(6 downto 0) -- 7 Bits für die Einerstelle |
5 | );
|
6 | |
7 | process (gray) begin |
8 | case gray is -- abcdefg abcdefg |
9 | when "00000" => zehner <= "1111110"; einer <= "1111110"; -- 00 |
10 | when "00001" => zehner <= "1111110"; einer <= "0110000"; -- 01 |
11 | when "00011" => zehner <= "1111110"; einer <= "1101101"; -- 02 |
12 | :
|
13 | when "10001" => zehner <= "0110000"; einer <= "0110000"; -- 62 |
14 | when others => zehner <= "0011111"; einer <= "1111001"; -- 63 |
15 | end process; |
> um es vielleicht in ein CPLD XC9572 zu bringen? Kann sein, dass das gelingt, allerdings ist für ein CPLD die Tabelle schon recht groß... Peter Zz schrieb: > case kenn ich, aber LUT nicht. LUT heißt Lookup Table. Ein RAM oder ein EPROM sind z.B. LUTs: immer wenn ich mit der selben Adress reinschaue bekomme ich das selbe zurück...
:
Bearbeitet durch Moderator
Lothar Miller schrieb: > Und in VHDL > Das passt alles in ein XC9572? Danke für den VHDL-Code. Ist aber ein wenig viel Tipparbeit, dafür in einem Schritt. :-) Das begünstigt wahrscheinlich die Optimierung?! Kann man das in VHDL auch in 3 Schritten machen? Würde das in drei Schritten eine Optimierung für ein XC9572 eher hilfreich sein oder hinderlich? Kennt VHDL den Gray-Code? Kennt VHDL bin to BCD? Kennt VHDL 7-Segment?
Ich vermute, über das direkte Case-Monster freut sich der Synthesizer mehr. Ist auch weniger Arbeit für dich. Die Tipparbeit brauchst du sowieso, spätestens bei bcd -> 7-Segment. Ob es reinpasst? Probier es einfach aus, Xilinx Webpack ist kostenlos, die 64 Zeilen einhacken und durchlaufen lassen.
:
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.