사용 설명서 ". 당신은 인스턴스화 한 후에 만 시뮬레이션을 시작하고 제대로 모든 모듈과 신호를 연결할 수 있습니다"
동적으로 하드웨어를 만드는 방법은 무엇입니까?
옵션은 별도의 프로젝트로 모델을 분할하거나 하나 개의 프로젝트에서 모든 모델을 선언하고 같은으로, 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
을 얻어야한다. 이 간단한 예제는 간단한 인쇄를 위해 실제 시스템을 대체 할 수있을 때까지 시작해야합니다.
이 방법은 누가 표시 될 수 있습니까? –