使switch case语句中的switch case成为systemc中的一个端口

时间:2014-12-13 18:06:15

标签: systemc

我试图在systemc中使用switch case语句,我希望case是一个数据类型int的端口。我创建的代码如下:

#ifndef TRAFFIC_H_
#define TRAFFIC_H_
#include<systemc.h>

SC_MODULE(traffic){
sc_in<int>next; //R,G,A;
sc_out<bool>t_R1,t_G1,t_A1;
sc_out<bool>t_R2,t_G2,t_A2;
sc_out<bool>t_R3,t_G3,t_A3;
sc_out<bool>t_R4,t_G4,t_A4;


void traffic_light();

    SC_CTOR(traffic){
        SC_THREAD(traffic_light);
        sensitive<<next;

    }
};
void traffic :: traffic_light(){

    switch(next){

    case  next == 1:

        t_R1 == 0; t_G1 == 1; t_A1 == 0;
        t_R2 == 1; t_G2 == 0; t_A2 == 0;
        t_R3 == 1; t_G3 == 0; t_A3 == 0;
        t_R4 == 1; t_G4 == 0; t_A4 == 0;
        wait(5, SC_NS);
        t_R2==1;t_G2==0;t_A2 == 1;
        break;


    }
}



#endif /* TRAFFIC_H_ */

错误在线;

case  next == 1:

我得到的错误信息是:

  

调用非constexpr函数'sc_core :: sc_in :: operator const data_type&amp;()const [with T = int; sc_core :: sc_in :: data_type = int]

如何声明案例以便它将成为一个端口并使用哪种数据类型,因为我希望有四种情况1到4以便它可以进行四次?

1 个答案:

答案 0 :(得分:1)

正确的语法是:

switch(next) {
case 1:
    // your code goes here
    break;
case 2:
    // your code for next==2 goes here
    break;
// etc.
}

另外,除非while中有fortraffic::traffic_light()循环,否则您要使用SC_METHOD,而不是SC_THREAD

SC_METHOD(traffic_light)