SystemC时间比较

时间:2017-04-12 00:32:10

标签: visual-studio-2013 time systemc

我正在尝试比较SystemC中的模拟时间。我希望在我的while循环开始时得到当前的模拟时间,一旦模拟时间达到特定的数字,我希望它离开循环。这是我在尝试尝试但由于语法问题而无效。

sc_time currentTime;
int imageDur; //This value is variable; Resolution is seconds
currentTime = sc_time_stamp(); //Get current simulation time
while(sc_time_stamp() - currentTime < imageDur){
  //Do stuff
}

这个问题是imageDur是int类型,我不能执行sc_time到int比较。所以我的下一个想法是通过以下方式将imageDur转换为sc_time:

sc_time scImageDur;
scImageDur(imageDur,SC_SEC);

但这在语法上也不正确。

有点坚持如何去做这件事。另外,当我进行减法比较时,sc_time_stamp()的分辨率是否重要?或者系统自己做分辨率?

1 个答案:

答案 0 :(得分:0)

首先,我假设您正在使用SC_THREAD,以便在SystemC中移动模拟时间。

您可以尝试进行模拟:

// ... in SC_THREAD registered function.
sc_time currentTime = sc_time_stamp();
int imagDur; //< Assuming you are getting a value from somewhere.
sc_time scImageDur = sc_time(imagDur, SC_SEC);
while((sc_time_stamp() - currentTime) < scImageDur) {
    // Do stuff
    wait(10, SC_SEC); //< Move simulation time. (Very Important.)
}
// sc_stop(); //< Stop simulation or let it continue.
// ..... in SC_THREAD registered function.

请告诉我这是否适合您。

注意:每次更好的方法是计算结束时间(如果它是常量),而不是差异。

// ... in SC_THREAD registered function.
sc_time currentTime = sc_time_stamp();
int imagDur; //< Assuming you are getting a value from somewhere.
sc_time scImageDur = sc_time(imagDur, SC_SEC) + currentTime; //< calculate the end time.
while(sc_time_stamp() < scImageDur) { //< better since you are not computing the diff every time.
    // Do stuff
    wait(10, SC_SEC); //< Move simulation time. (Very Important.)
}
// sc_stop(); //< Stop simulation or let it continue.
// ..... in SC_THREAD registered function.