Archiv verlassen und diese Seite im Standarddesign anzeigen : XILINX 9572 als 3 Bit Zähler programmieren
connewitz
22.11.2005, 17:31
Und zwar habe ich folgende Aufgabe erhalten:
den XILINX 9572 als 3 Bitzähler zu programmieren in VHDL und das Ergebnis auf einer 7 Segmentanzeige darzustellen, je Takt und damit die ganze Sache nicht zu langweilig wird, kann über einen Schalter zwischen
vorwärts und rückwärtszählen umgeschaltet werden.
Als Logik sollen D-FF's verwendet werden und der Zähler soll synchron arbeiten.
Vielleicht hört sich die Aufgabe schwieriger an, als sie wirklich ist,
bloss weiss ich nicht, wie ich die Sache anfangen soll und bin
für jeden guten Vorschlag sehr dankbar.
Generell hast Du es immer mit D-FFs zu tun, aber das juckt die Hochsprache nicht, nur den Synthesizer und den Compiler.
Also: typischen Vorspann...
irgendwas (clock : in std_ulogic;
...
... usw.
dann
on pos_edge (clk) and (not rückwärts) then
...
...
else
...
...
aber das mußt Du Dir schon selbst mal raussuchen, dazu sind die Compiler zu verschieden.
Tipp: Probier´s einfach mal in Standard Basic (Q-Basic; GW-Basic; egal...)
100 IF Rückwärts THEN Count = Count -1
120 IF NOT Rückwärts THEN Count = Count +1
140 GOSUB 1000 : REM DISPLAY
160 INPUT Taste$
180 IF Taste$ = "+" THEN LET Rückwärts=1
200 IF Taste$ = "-" THEN LET Rückwärts=0
220 GOTO 100
1000 REM und hier die Segmente ansteuern
1020 IF Count = 0 THEN...
1040 IF Count = 1 THEN...
usw.
RETURN
Vom Prinzip kannst Du das 1:1 übernehmen und auch so machen. Der Compiler optimiert den Unsinn weg, aber man kann es wenigstens lesen. Kannst auch schachteln mit IF ELSEIF ELSEIF ELSE...
Irgendein C-Fritze bekommt das in eine Zeile gepackt; nur wozu?
Dafür ist der Compiler zuständig; der guckt sich das an; denkt sich... (können Compiler denken???); "Oh Gott, was für ein Source; grausam...",
aber er optimiert den Schrott weg und generiert im Idealfall den gleichen Code. Soll Dir doch erstmal egal sein, wie er das macht, warum er das wie macht, nicht Dein Ding!!!
Denke mal an FORTRAN oder COBOL. Dem Atomwissenschaftler im Synchrotron oder dem Banker ist es egal: Wenn der Wissenschaftler schreibt "Typ Complex" oder der Banker "Typ 100Stellen_genau", dann hat der Compiler das umzusetzen.
connewitz
23.11.2005, 23:22
ja, die Idee mit dem verschachtelten IF-Amweisungen ist schon ziemlich gut.
Ich hatte beim Frage stellen vergessen, dass ich zum XILINX 9572 die passende Software mit dazu erhalten habe.
Der CPLD soll mit VHDL programmiert werden und da wird das schon so in etwa funktionieren,
IF-Anweisungen sehen dann bloss bissel anders aus. ;)
Probieren geht über studieren:)
Es ist in VHDL normalerweise so, dass du einen Zähler programmierst, ohne zu wissen, mit welcher Logik das Ding eigendlich implementiert wird. Das macht deine Software automatisch so, wie es für dein Zieldevice am Besten ist.
Natürlich kannst du den Zähler auch aus D-Flipflops aufbauen lassen, dafür musst du erst eine Komponente programmieren (falls nicht in einer Lib vorhanden), die das Verhalten eines D-FF hat, und diese Komonenten dann zu deinem Zähler verschalten.
Gruss Henrik
connewitz
30.11.2005, 14:07
Danke für die tollen Tips von euch.
Hier ist das VHDL Programm.
Mit verschachtelten IF-Anweisungen hätte auch funktioniert,
vom Umfang her hätte das kein Unterschied gemacht.
p.s.: Formatierung des Quelltextes wollte so richtig funktionieren,
deswegen als Quelltext als Anhang :(
Eine andere Möglichkeit für die 7-Segment Anzeige wäre diese:
-- HEX-to-seven-segment decoder
-- <hex>: in STD_LOGIC_VECTOR (3 downto 0);
-- <led>: out STD_LOGIC_VECTOR (6 downto 0);
--
-- 0
-- ---
-- 5 | | 1
-- --- <- 6
-- 4 | | 2
-- ---
-- 3
with <hex> select
<led> <=
"1111001" when "0001", --1
"0100100" when "0010", --2
"0110000" when "0011", --3
"0011001" when "0100", --4
"0010010" when "0101", --5
"0000010" when "0110", --6
"1111000" when "0111", --7
"0000000" when "1000", --8
"0010000" when "1001", --9
"0001000" when "1010", --A
"0000011" when "1011", --b
"1000110" when "1100", --C
"0100001" when "1101", --d
"0000110" when "1110", --E
"0001110" when "1111", --F
"1000000" when others; --0
für den Zähler gibt's verschiedene Möglichkeiten, hier eine:
-- Counter/Binary: Up; w/CE and async Reset
process (clk, reset)
begin
if (reset = '1') then
count <= (others => '0');
elsif rising_edge(clk) then
if (clock_enable = '1') then
count <= count + 1;
end if;
end if;
end process;
Hier musst Du nur noch in Abhängigkeit eines weiteren Signales up/down counten, d.h. count <= count - 1. Jetzt musst Du nur noch die entities schreiben, die richtigen Signal benutzen und es funktioniert :D.
Ab hier beginnt dann somit das Erlernen von VHDL, die Implementierung stehen oben.
Viele Grüße
Olaf</led></hex></led></hex>
Ich finde das Programm "STARK"; hab wohl auch anfangs ein wenig gehakelt damit, aber ich habe es als "BASIC" angepriesen (versucht zu erklären...)
In Zeiten, deren es Compiler gibt und nicht mehr Interpreter (so seit 1983 mit meinem KWS-SAM68k) ist es egal, wie Du es definierst; das aufzulösen, ist der Compiler für geschrieben worden.
SORBAS nannte sich das damals "Struktur Orientiertes Basic"
oder an der FH-Gießen (da mußten wir FORTRAN lernen); im Rechenzentrum, dessen Rechner, eine "Cyber" eigentlich immer auf gelb stand (Ampel; eingeschränkter Betrieb)..
Wir haben es dann zu hause auf einer CP/M Kiste gemacht; war einfacher, als jedesmal nach Gießen zu fahren und sich dort "eingeschränkter Betrieb" anhören zu müssen.:)
Letztenendes: Der Compiler ist dafür da, egal welch obstrusen Code in ein funktionsfähiges Binary zu "compilieren".
Ob Du das mit "If then elese" oder Tabelle oder sonstwie machst ist nicht Dein Problem, sondern des Compilers. Der hat vernünftigen Code zu erzeugen, dafür verlangen die Compilerhersteller ja schließlich Geld (nicht zu knapp..)
gleich geht´s weiter...
Die Sache mit dem ISP (E)
und dem LEVER / Lover / looser
da hat Lattice Scheiße gebaut. (PUNKT)
Xilinx übrigens auch! Die verlassen sich auf einen Kopierschutz, der aus der Festplatten-Datenträgerbezeichnung und sonstigem PC-inneren einen Freischaltcode für 1/2 Jahr bildet.
Ergo: alle 1/2 Jahr bei Lattice oder Xilinx anrufen und einen neuen "Key" anfordern.
Sollte vorher die Festplatte abrauchen (hoffe nicht), oder einer Neuformatierung ausgesetzt werden (müssen???) --> ASCHE
Dann geht nix mehr: selbst der gnädige PC-Händler, der auf eigene Kosten (Kulanz) die Platte austauscht, und soweit vorhanden das letzte Backup, der ihm übergebenen CD einspielt --> gelitten!!!
weiter geht´s
einen bin ich ja jetzt noch schuldig...
sozusagen als Weihnachtswunsch:
Die "Elektronik-Bibel" (das ist jetzt ernst gemeint); nennt sich Tietze-Schenk, hat ca. B5 Format, ist fast 7 cm dick, schlappe 1600 (Sechzehnhundert) Seiten, kostet auch nur!!! ca. 100 Euronen, also 200,- alte DMs, ist es aber Wert.
Da liegt eine CD mit Design-Expert mit drin, ein PSpice usw.
Ersteres (Design-Expert) also der Nachfolger von Synario muß man sich dann nur noch von Lattice freischalten lassen; das geht binnen eines Tages per E-Mail und gilt 1/2 Jahr; danach wieder neu beantragen... falls nicht vorher die Platte oder das Mainboard stirbt, weil dann ist die Aktivierungssequenz (im Arsch!!!).
Gibt aber auch einen HACK auf einer ominösen Seite aus Californien, aber dazu muß man sich schon super mit Debuggern (also Entwanzern!!!) auskennen.
Freilich darf ich diesen Link nicht veröffentlichen...
aber alles halbe Jahr eine Mail an Lattice und dann geht das auch.
P.S. Xilinx´s Web-Pack beruht auf dem gleichen (Kopierschutz) - voll Schrott, man genieße die Xilinx-Page - da telefoniert der "Licence-Manager" von zu hause aus permanent mit der Firma und fragt den "Licence-Server", ob man das Programm (Compiler) starten darf...??? - sehr zum Ärger der Programmierer...
vor allem, er nistet sich in Windows ein, wie ein Virus. LM heißt das Ding!!!
... vor allem, er nistet sich in Windows ein, wie ein Virus. LM heißt das Ding!!!
oh ja...das ding ist echt nervend... vor allem wenn man noch mehr software installiert hat die den pfeffer benutzt (in ner anderen version z.b.) und sich das ganze geraffel in die quere kommt und am ende gar nichts mehr funktioniert....
LameM
Powered by vBulletin® Version 4.1.7 Copyright ©2012 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.