Hallo zusammen,
ich bin auf ein Verhalten meines VHDL-Modells gestoßen, dass ich mir
nicht erklären kann.
Ich erzeuge mir einen Signalverlauf mit Hilfe der Transport Anweisung in
meiner Testbench. Dieses Signal soll im "DUT" in einem syncronen Prozess
verzögert werden. Jedeoch findet diese Verzögerung nicht statt.
Hier ein Beispielcode:
1 | library ieee;
|
2 | use ieee.std_logic_1164.all;
|
3 | use ieee.numeric_std.all;
|
4 |
|
5 | entity problem is
|
6 |
|
7 | end entity problem;
|
8 |
|
9 |
|
10 |
|
11 | architecture behavioral of problem is
|
12 |
|
13 | signal clk : std_logic := '1';
|
14 | signal test_sig : std_logic := '0';
|
15 | signal reg : std_logic := '0';
|
16 | signal reg_r : std_logic := '0';
|
17 |
|
18 | constant clk_period : time := 10 ns;
|
19 |
|
20 |
|
21 | begin -- architecture behavioral
|
22 |
|
23 | clk <= not clk after clk_period/2;
|
24 |
|
25 | test_sig <= '0' after 0 ns,
|
26 | '1' after 20*clk_period;
|
27 |
|
28 | reg <= transport test_sig after 10*clk_period;
|
29 |
|
30 | process(clk)
|
31 | begin
|
32 | if rising_edge(clk) then
|
33 | reg_r <= reg;
|
34 | end if;
|
35 | end process;
|
36 |
|
37 |
|
38 | end architecture behavioral;
|
Die Simulation zeigt, dass "reg_r" immer gleich "reg" ist. Ohne die
Verwendung von "transport" (reg <= test_sig) ist das Verhalten wie
gewünscht und "reg_r" ist um eine Periode gegenüber "reg" verzögert.
Hat jemand eine Idee, woran das liegen kann? Im Anhang befindet sich das
Beispiel.
Viele Grüße,
Cotton