Forum: FPGA, VHDL & Co. Warteschleifen ohne 'wait'


von Alex (Gast)


Lesenswert?

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

von high_speed (Gast)


Lesenswert?

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

von Alex (Gast)


Angehängte Dateien:

Lesenswert?

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

von high_speed (Gast)


Lesenswert?

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

von Alex (Gast)


Lesenswert?

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
Noch kein Account? Hier anmelden.