我正在尝试比较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()
的分辨率是否重要?或者系统自己做分辨率?
答案 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.