2016-12-12 3 views
2

Ich möchte ein Signal in meiner Testbench verzögern. Das Problem ist, dass ich Hunderte von Taktzyklen brauche und daher nicht Hunderte von Zwischensignalen verwenden möchte.Verzögerung eines Signals in VHDL Testbench

Da dies nur für eine Simulation verwendet wird, gibt es eine Möglichkeit, eine Verzögerung mit unsynthetisierbarem Code hinzuzufügen (vielleicht mit WAIT oder AFTER)?

Antwort

3

Es klingt, als ob Sie eine transport Verzögerung verwenden möchten. Standardmäßig, wenn Sie eine verzögerte Zuordnung machen, wird dies verwenden, um ein ‚träge‘ Verzögerungsmodell:

my_sig_delayed <= my_sig after 100 ns; 

jedoch mit diesem Beispiel, wenn Ihr Signal mehr als einmal schaltet in 100 ns, Ihr my_sig_delayed Signal nicht folgen so wie Sie es erwarten können. Mit einer Verzögerung von transport replizieren Sie eine "Verzögerungslinie".

my_sig_delayed <= transport my_sig after 100 ns; 

Für eine ausführlichere Erklärung, versuchen Sie diese http://www.gmvhdl.com/delay.htm


Eine Alternative ein Schieberegister mit einer Länge von was auch immer Sie brauchen Verzögerung zu verwenden wäre:

signal delay_line : std_logic_vector(255 downto 0) := (others => '0'); 

.. .

process (clk) 
begin 
    if (rising_edge(clk)) then 
    delay_line <= delay_line(delay_line'left-1 downto 0) & my_sig; 
    end if; 
end process; 

my_sig_delayed <= delay_line(delay_line'left); 
+0

Danke fo r die Erklärungen. In der Tat habe ich den ersten Weg ausprobiert, der für mich offensichtlich war, aber da meine Signalperiode kürzer ist als die Verzögerung, konnte es nicht funktionieren. Wenn es keinen anderen Weg gibt, werde ich die zweite Option verwenden. –

+1

@ A.Kieffer sollte es funktionieren, wenn Sie das 'transport' Schlüsselwort für die zweite Zeile des obigen Codes verwenden. –

+0

Entschuldigung, ich habe den Punkt auf den ersten Blick nicht verstanden. Ich habe 'transport' versucht und es funktioniert gut. Danke @scarry_jeff! –

Verwandte Themen