2017-03-24 8 views
0

내 프로젝트에는 SystemC 시뮬레이션을 수행하는 여러 함수가 있습니다. 각 함수에는 자체 선언 prelude 및 sc_start()가 있습니다. 다음과 같이 이 그래서 그들은 구성되어 다음 sc_stop 때까지 원하는대로여러 SystemC 시뮬레이션을 사용하는 프로젝트에서 예외가 발생합니다.

// first Simulation: 
sc_signal<double> s1_sim1; 
.. 
ControlFoo<double> *cf = new ControlFoo<double>(); 
cf->Foo_port(s1_sim1); 
.. 
sc_start(); // works fine 
delete(cf); 
.. 
// second Simulation: 
sc_signal<double> s1_sim2; // this leads to an exception 

첫 번째 시뮬레이션 실행(). 하지만 첫 번째 시뮬레이션이 완료된 후 새 sc_signals를 선언하려고하면 예외가 발생합니다.

문제를 어떻게 해결할 수 있습니까?

안부

답변

2

사용 설명서 ". 당신은 인스턴스화 한 후에 만 ​​시뮬레이션을 시작하고 제대로 모든 모듈과 신호를 연결할 수 있습니다"

동적으로 하드웨어를 만드는 방법은 무엇입니까?

옵션은 별도의 프로젝트로 모델을 분할하거나 하나 개의 프로젝트에서 모든 모델을 선언하고 같은으로, ON과 OFF를 전환하는 방법이 있습니다 당신의 후속으로 신호 대답에

을 '가능' 질문을하면 이런 식으로 시도 할 수 있습니다. 우리는 "enable"출력을 가진 컨트롤러 모듈을 생성하고 우리는이 모듈을 사용하여 스위치를 켜거나 끌고 자하는 일부 모델이나 서브 시스템을 나타 내기 위해 여기서 사용하는 3 개의 제어 모듈을 제어합니다.

#include <systemc.h> 
#include <iostream> 

using namespace sc_core; 
using namespace std; 

/* 
Controller module with output enable signals to enable and 
disable other modules representing the models we wish to switch on/off 
*/ 
SC_MODULE(Controller){ 

    SC_CTOR(Controller) 
     : clk_i("clk_i"), 
     en_a("en_a"), 
     en_b("en_b"), 
     en_c("en_c"), 
     counter(0) 
    { 
     SC_METHOD(proc); 
     sensitive << clk_i.pos(); //run process on positive clock edge 
    } 

    void proc(){ 
     if(counter < 10){ //enable model A and disable others 
      en_a.write(true); 
      en_b.write(false); 
      en_c.write(false); 
     } 
     else if(counter < 20){ //enable B and disable others 
      en_a.write(false); 
      en_b.write(true); 
      en_c.write(false); 
     } 
     else{ //enable C and disable others 
      en_a.write(false); 
      en_b.write(false); 
      en_c.write(true); 
     } 
     counter = (counter + 1) % 30; 
    } 

    sc_in<bool> clk_i; // clock input 
    sc_out<bool> en_a; // enable model A when high 
    sc_out<bool> en_b; // enable model B when high 
    sc_out<bool> en_c; // enable model C when high 
    int counter; //simple counter to simulate some condition 
}; 

/* 
Module with an enable signal to represent the sub-systems we 
wish to switch on and off 
*/ 
SC_MODULE(Controlled){ 
    SC_CTOR(Controlled) : en_i("en_i"), clk_i("clk_i"){ 
     SC_METHOD(proc); 
     sensitive << clk_i.pos(); //run process on positive clock edge 
    } 

    void proc(){ 
     //if we are enabled then run "real process" otherwise do nothing 
     if(en_i.read() == true) enabledProc(); 

    } 

    // the "real process" that we wish to switch on and off 
    void enabledProc(){ 
     cout << "model " << name() << " is enabled\n"; 
    } 

    sc_in<bool> en_i; 
    sc_in<bool> clk_i; 
}; 


int sc_main(int, char**){ 

    // created controller and 3 controlled modules 
    Controller controller("controller"); 
    Controlled modelA("A"), modelB("B"), modelC("C"); 

    // create a clock and connect it to all 4 modules 
    sc_clock clk("clk", 1.0, SC_SEC); 
    controller.clk_i(clk); 
    modelA.clk_i(clk); 
    modelB.clk_i(clk); 
    modelC.clk_i(clk); 

    // create an enable signal for each module and connect to controller 
    sc_signal<bool> en_a("en_a"); 
    sc_signal<bool> en_b("en_b"); 
    sc_signal<bool> en_c("en_c"); 
    controller.en_a(en_a); 
    controller.en_b(en_b); 
    controller.en_c(en_c); 
    // connect enable lines to controlled modules 
    modelA.en_i(en_a); 
    modelB.en_i(en_b); 
    modelC.en_i(en_c); 

    sc_start(30, SC_SEC); // run for 30 seconds 

    return 0; 
} 

그리고 컨트롤러가 가능 차례로 각각의 모듈을 비활성화로서 당신은 출력을

model A is enabled 
model A is enabled 
model A is enabled 
model A is enabled 
model A is enabled 
model A is enabled 
model A is enabled 
model A is enabled 
model A is enabled 
model A is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model B is enabled 
model C is enabled 
model C is enabled 
model C is enabled 
model C is enabled 
model C is enabled 
model C is enabled 
model C is enabled 
model C is enabled 
model C is enabled 
model C is enabled 

을 얻어야한다. 이 간단한 예제는 간단한 인쇄를 위해 실제 시스템을 대체 할 수있을 때까지 시작해야합니다.

+0

이 방법은 누가 표시 될 수 있습니까? –