Hallo zusammen, ich möchte eine Warteschleife in VHDL programmieren, die ich dann in meinen FPGA laden kann, um ein Signal um ca. 100 ns zu verzögern (Sytem-Clock 50MHz). Ich habs wie folgt versucht, ohne Erfolg: signal Counter : integer range 4 downto 0; WaitLoop: while (Counter < 4) loop Counter <= Counter + 1; end loop WaitLoop; Compiliert wird das ganze ohne Probleme. Auch das Laden in den FPGA funktioniert, aber die gewünschte Wartezeit wird nicht eingehalten. Was mache ich denn da falsch? Vielen Dank im Voraus! Gruß Alex
Schieberegister?
1 | library ieee; |
2 | use ieee.std_logic_1164.all; |
3 | use ieee.std_logic_unsigned.all; |
4 | |
5 | entity Shift is |
6 | port( CLK : in std_logic; |
7 | reset : in std_logic; |
8 | Data_in : in std_logic; |
9 | Data_out : out std_logic |
10 | );
|
11 | end Shift; |
12 | |
13 | architecture verhalten of Shift is |
14 | signal Reg : std_logic_vector(3 downto 0); |
15 | begin
|
16 | |
17 | process (CLK) |
18 | begin
|
19 | |
20 | if CLK='1' and CLK'event then |
21 | Reg(0) <= Data_in; |
22 | Reg(3 downto 1) <= Reg(2 downto 0); |
23 | end if; |
24 | |
25 | end Process; |
26 | |
27 | Data_out <= Reg(3); |
28 | end verhalten; |
Holger
Hallo Holger, was passiert denn in folgender Zeile? Reg(3 downto 1) <= Reg(2 downto 0); Aber so könnte es funktionieren. Das mit den while- und for-Schleifen funktioniert nicht, oder? Ist wahrscheinl. ähnlich der wait- und after-Anweisung nur für die Simulation möglich. Es geht darum, eine Datenleitung (MOSI) zu setzen. Anschließend sollen ca. 100 ns gewartet werden, bis die Clock-Leitung auf high gehen soll. Es soll irgendwann in 'ferner Zukunft' ein ganz einfacher SPI-Master entstehen. Ich hab auch in folgendem Thread schon nach Hilfe gesucht, einen SPI-Master zu implementieren und Jörn hat mir freundlicherweise ein sehr umfangreiches Projekt zur Verfügung gestellt. http://www.mikrocontroller.net/forum/read-9-227154.html#new Leider ist das Projekt, auch nach dem Rausschmeißen der nicht relevanten Teile für mich als (blutiger) Anfänger sehr schwer zu verstehen. Leider kann ich das Projekt SPI nicht einfach in die Ecke schmeißen! Vielleicht kannst du mir ja noch den ein oder anderen Tipp geben. Ich hab mein bisheriges Projekt (auf Basis von Jörns Design) mal in den Anhang gehängt. Ich brauche im ersten Schritt nur einen festen Clock, kein SlaveSelect, kein CPOL und CPHA. Ich kann den Clock zwar schon erzeugen, aber nicht steuern, wieviele Pulse ausgegeben werden. Ich will beispielsweise 1x 8 Bit senden. Dann soll die Clk-Ltg. in hochohmigen Zustand gehen. Noch einige Angaben zu meiner Entwicklungsumgebung: Spartan 3 mit einem XC3S200 FPGA und WebPack ISE 6.3i. Über jeden noch so kleinen Tipp bin ich sehr dankbar. Quäle mich schon einige Zeit mit diesen Problemen. Danke! Gruß Alex
Hallo Alex Diese ist die Antwort auf die Frage in deinem anderen Thread. data_int <= (others => '0'); Alle Bit des Signals data_int werden auf Null gesetzt. Reg(3 downto 1) <= Reg(2 downto 0); Da habe ich ein Schieberegister getrickst. ;-) Langform: Reg(0) < = Reg(Data_in); Reg(1) < = Reg(0); Reg(2) < = Reg(1); Reg(3) < = Reg(2); Da das in dem Clock-Ereignis steht, wird bei jeder steigenden Flanke der Zustand ein Register weiter geschoben. Die for und die while-Schleife dienen dazu ähnliche Codeteile zu generieren. Dabei muss aber sichergestellt werden, dass die Anzahl der Schleifendurchläufe zum Synthesezeitpunkt feststeht. Holger
Danke Holger, deine Antworten haben mir sehr weitergeholfen (alles kappiert), auch wenn ich immer noch nicht ganz in der Lage sein werde ein SPI-Master-Design zu implementatieren. Aber ich kann ja auch nicht von dir verlangen, dass du alle ca. 1000 Fragen von mir beantwortest. Ich danke dir vielmals. War sehr nett von dir am Sonntag Abend Zeit für wahrscheinlich trivialste VHDL-Fragen zu nehmen! Danke! Bin natürlich für alle Antworten der bisher noch offenen Fragen auch sehr dankbar (anderer Thread). Gruß Alex
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.