Lothar Miller schrieb:
> Markus schrieb:
>> Das Problem ist jetzt, dass das Signal beim Compilieren rausoptimiert
>> wird und später nicht mehr als solches im Simulator verfügbar ist.
> Machst du eine Verhaltenssimulation oder eine Timingsimulation?
>
Sorry, steh gerade aufm Schlauch. Was meinst du mit Timingsimulation
genau?
Ich verifiziere das Verhalten. Einmal auf RTL-Ebene (VHDL Code) einmal
auf Netlist ebene (Back Annotation File nach Synthese).
>> Die Simulation wird über DO-Files (Makros) gesteuert. Die Simulation
>> soll terminieren wenn ein Testbench-internes Signal (stop_simulation,
>> Typ std_logic) getriggert ist.
> Hast du da mal einen einfachen Sourcecode, der das Verhalten zeigt?
Ist n ziemlich großes Teil, aber ich probiers mal:
Ausschnitt aus DO-Makro:
1 | [...]
|
2 | run 1 us
|
3 |
|
4 | when -label l_break {stop_simulation='1'} { echo "Stop Simulation" stop }
|
5 | [...]
|
Der Code rennt tatsächlich 1 us und dann terminiert die Simulation
mit...
1 | # ---------Loading std wave ..
|
2 | # ** Error: (vsim-3561) No objects found matching 'stop_simulation'.
|
3 | # Error in macro ./dofiles/run_test.do line 25
|
4 | # ** Error: (vsim-3561) No objects found matching 'stop_simulation'.
|
5 | # while executing
|
6 | # when -label l_break {stop_simulation='1'} { echo "Stop Simulation" stop }
|
Und wenn ich in der ModelSim GUI nach dem Signal schaue sehe ich auch,
dass es nicht unter den Objects aufgelistet ist, also rausgeflogen.
Aus Synthesesicht macht das Sinn den das Signal macht im Prinzip nix.
Wird nur am Ende durch ein Flag scharf geschalten.
1 | p_stop : process
|
2 | begin
|
3 | stop_simulation <= '0';
|
4 | wait until (stop_simulation_flag'event and stop_simulation_flag = '1');
|
5 | stop_simulation <= '1';
|
6 | wait for 10 ns;
|
7 | wait;
|
8 | end process p_stop;
|