mikrocontroller.net

Forum: FPGA, VHDL & Co. Stimulus Signal einmalig verzoegern (Testbench)


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hallo,

ich frage mich gerade, wie ich ein kontinuierliches Signal oder Takt 
einmalig am Beginn der Simulation verzoegern kann. Und zwar nicht 
Taktabhaengig.
So generiere ich es mir derzeitig:
   FCLK <= '0', '1' after 3 ns, '0' after 15 ns, '1' after 27 ns, '0' after 39 ns, '1' after 51 ns;
Ich benoetige also ein Signal mit 24 ns Periode, aber starten soll es 
erst nach 3 ns, mein Takt hat eine Periode von 4 ns.
So geht es jedenfalls nicht:
   Frame : PROCESS
   wait for 3 ns;
   BEGIN
   FCLK <= '1'; wait for 12 ns;
   FCLK <= '0'; wait for 12 ns;
   END PROCESS;
Wo koennte ich die 3 ns Verzoegerung einbauen?

: Bearbeitet durch User
Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich habe mir jetzt wie folgt geholfen:
   Frame : PROCESS
   BEGIN
   FCLK <= '0'; wait for 3 ns;
   FCLK <= '1'; wait for 12 ns;
   FCLK <= '0'; wait for 9 ns;
   END PROCESS;
Geht auf jeden Fall, waere nur schoen, wenn man das irgendwie auch 
trennen koennte. Also die Verzoegerung vom eigentlichen Signal.

Autor: FPGA zum Spass (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
So sollte es gehen:
(Syntaxcheck ungeprüft)
Frame : PROCESS
BEGIN
   FCLK <= '0'; 
   wait for 3 ns;
   while (true) loop
      FCLK <= not FCLK; 
      wait for 12 ns;
   end loop;
END PROCESS;

Wobei ich die erste Zuweisung weglassen würde und stattdessen das Signal 
auf 0 Initialisieren würde, aber das ist Geschmackssache.

Autor: Mark W. (kram) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
FPGA zum Spass schrieb im Beitrag #5928415:
> So sollte es gehen:
> (Syntaxcheck ungeprüft)

Ja, geht auch so.
>
>
> Frame : PROCESS
> BEGIN
>    FCLK <= '0';
>    wait for 3 ns;
>    while (true) loop
>       FCLK <= not FCLK;
>       wait for 12 ns;
>    end loop;
> END PROCESS;
> 
>
> Wobei ich die erste Zuweisung weglassen würde und stattdessen das Signal
> auf 0 Initialisieren würde, aber das ist Geschmackssache.

Hab ich dann jetzt zwei Schreibweisen.

Autor: Duke Scarring (Gast)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht lesenswert
Mark W. schrieb:
> ich frage mich gerade, wie ich ein kontinuierliches Signal oder Takt
> einmalig am Beginn der Simulation verzoegern kann. Und zwar nicht
> Taktabhaengig.
Dafür gibt es das transport-Keyword:
library ieee;
use ieee.std_logic_1164.all;

entity transport_test is
end entity transport_test;

architecture test of transport_test is

    signal FCLK         : std_ulogic;
    signal FCLK_delayed : std_ulogic;

begin

    Frame : PROCESS
    BEGIN
        FCLK <= '1'; wait for 12 ns;
        FCLK <= '0'; wait for 12 ns;
    END PROCESS;

    FCLK_delayed <= transport FCLK after 3 ns;

end architecture test;

Duke

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.

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