2017-04-12 15 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型で、私はint比較のためにsc_timeを実行できないということです。

sc_time scImageDur; 
scImageDur(imageDur,SC_SEC); 

しかし、これはまた、文法的に正しくありません。だから、私の次のアイデアは、以下によりsc_timeするimageDurを変換することでした。

これをやり遂げるにはどうすればいいのですか。また、減算の比較を行っているとき、sc_time_stamp()の解像度は関係しますか?または、システムが解決自体をしていますか?

答えて

0

まず、SystemCでシミュレーション時間を移動するためにSC_THREADを使用していると仮定しています。

あなたは、シミュレーションのためにこれを試すことができます。

// ... 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.