mikrocontroller.net

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


Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: high_speed (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Schieberegister?
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;

entity Shift is
  port( CLK      : in  std_logic;
        reset    : in  std_logic;
        Data_in  : in  std_logic;
        Data_out : out std_logic
      );
end Shift;

architecture verhalten of Shift is
signal Reg  : std_logic_vector(3 downto 0);
begin

  process (CLK)
  begin
      
    if CLK='1' and CLK'event then
       Reg(0) <= Data_in;
       Reg(3 downto 1) <= Reg(2 downto 0);
    end if;
      
  end Process;
  
  Data_out <= Reg(3);
end verhalten;

Holger

Autor: Alex (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: high_speed (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Alex (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [vhdl]VHDL-Code[/vhdl]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.