2015-09-06 7 views
5

Hier ist mein Programm:Warum kann SystemC trace die letzte Wellenform nicht erfassen?

#include <systemc.h> 

int sc_main(int argc, char* argv[]) 
{ 
    sc_signal<sc_logic> a, b, c, d; 

    // trace file creation 
    sc_trace_file *tf = sc_create_vcd_trace_file("test"); 

    //tf->set_time_unit(1, SC_PS); 
    sc_trace(tf, a, "A"); 
    sc_trace(tf, b, "B"); 
    sc_trace(tf, c, "C"); 
    sc_trace(tf, d, "D"); 

    sc_start(0, SC_PS); 

    bool a_tmp = false; 
    bool b_tmp = true; 
    int c_tmp = 0; 
    int d_tmp = 1; 

    a = sc_logic(a_tmp); 
    b = sc_logic(b_tmp); 
    c = sc_logic(c_tmp); 
    d = static_cast<sc_logic>(d_tmp); 
    sc_start(1, SC_PS); 

    a = SC_LOGIC_1; b = SC_LOGIC_1; 
    c = SC_LOGIC_0; d = SC_LOGIC_1; 
    sc_start(1, SC_PS); 

    a = SC_LOGIC_0; b = SC_LOGIC_0; 
    c = SC_LOGIC_1; d = SC_LOGIC_0; 
    sc_start(1, SC_PS); 

    a = SC_LOGIC_1; b = SC_LOGIC_0; 
    c = SC_LOGIC_1; d = SC_LOGIC_0; 
    sc_start(1, SC_PS); 

    sc_close_vcd_trace_file(tf); 

    return 0; 
} 

Es ist sehr merkwürdig, dass die Wellenform zwischen 3 ~ 4ps verloren wurden, und wurden nicht von der VCD-Datei erfasst. Was ist der Grund? Selbst die Änderung von a, b, c, d in Variablen kann dieses Problem nicht lösen.

Antwort

3

Ich habe gerade versucht, den Code und das ist die Trace-Datei Ich habe (test.vcd):

$date 
    Sep 07, 2015  20:30:28 
$end 

$version 
SystemC 2.3.1-Accellera --- Nov 29 2014 15:29:06 
$end 

$timescale 
    1 ps 
$end 

$scope module SystemC $end 
$var wire 1 aaaaa A  $end 
$var wire 1 aaaab B  $end 
$var wire 1 aaaac C  $end 
$var wire 1 aaaad D  $end 
$upscope $end 
$enddefinitions $end 

$comment 
All initial values are dumped below at time 0 sec = 0 timescale units. 
$end 

$dumpvars 
xaaaaa 
xaaaab 
xaaaac 
xaaaad 
$end 

#0 
0aaaaa 
1aaaab 
0aaaac 
1aaaad 

#1 
1aaaaa 

#2 
0aaaaa 
0aaaab 
1aaaac 
0aaaad 

#3 
1aaaaa 

Was mir richtig aussieht. Die folgende Tabelle zeigt die gleichen Daten:

  a b c d 
at 0 ps (0) (1) (0) (1) 
at 1 ps (1) 1 0 1 
at 2 ps (0) (0) (1) (0) 
at 3 ps (1) 0 1 0 
at 4 ps No more stimulus, simulation ends 

() denotes a changed value 
+0

Thx. Ich habe die gleiche .vcd-Datei. Aber die gtkwave zeigt nicht die Wellenform zwischen 3ps bis 4ps. Entschuldigung, ich habe keinen guten Ruf und kann das Wellenformbild nicht hochladen. – swgchlry

+0

Ich habe test.vcd in GTKwave geöffnet und ich denke ich sehe was du meinst. Bei 3 ps kann ich nur den Übergang von 'a' von 0 nach 1 sehen, aber nichts nach 3 ps. Ich denke, dass GTKwave diese Daten so rendert - es zeigt nichts nach dem letzten Zeitpunkt in der .vcd-Datei. – DarrylLawson