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


von Mark W. (kram) Benutzerseite


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:
1
   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:
1
   Frame : PROCESS
2
   wait for 3 ns;
3
   BEGIN
4
   FCLK <= '1'; wait for 12 ns;
5
   FCLK <= '0'; wait for 12 ns;
6
   END PROCESS;
Wo koennte ich die 3 ns Verzoegerung einbauen?

: Bearbeitet durch User
von Mark W. (kram) Benutzerseite


Lesenswert?

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

von FPGA zum Spass (Gast)


Lesenswert?

So sollte es gehen:
(Syntaxcheck ungeprüft)
1
Frame : PROCESS
2
BEGIN
3
   FCLK <= '0'; 
4
   wait for 3 ns;
5
   while (true) loop
6
      FCLK <= not FCLK; 
7
      wait for 12 ns;
8
   end loop;
9
END PROCESS;

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

von Mark W. (kram) Benutzerseite


Lesenswert?

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

Ja, geht auch so.
>
>
1
> Frame : PROCESS
2
> BEGIN
3
>    FCLK <= '0';
4
>    wait for 3 ns;
5
>    while (true) loop
6
>       FCLK <= not FCLK;
7
>       wait for 12 ns;
8
>    end loop;
9
> END PROCESS;
10
>
>
> 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.

von Duke Scarring (Gast)


Angehängte Dateien:

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:
1
library ieee;
2
use ieee.std_logic_1164.all;
3
4
entity transport_test is
5
end entity transport_test;
6
7
architecture test of transport_test is
8
9
    signal FCLK         : std_ulogic;
10
    signal FCLK_delayed : std_ulogic;
11
12
begin
13
14
    Frame : PROCESS
15
    BEGIN
16
        FCLK <= '1'; wait for 12 ns;
17
        FCLK <= '0'; wait for 12 ns;
18
    END PROCESS;
19
20
    FCLK_delayed <= transport FCLK after 3 ns;
21
22
end architecture test;

Duke

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.