2017-04-12 201 views
0

我想比較SystemC中的仿真時間。我想在我的while循環開始時獲取當前的仿真時間,並且一旦仿真時間達到了特定的數字,我希望它離開循環。以下是我正在考慮的嘗試,但由於語法問題,它不起作用。SystemC時間比較

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

首先,我假設您正在使用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.