📄 main.cpp
字号:
/************************************************************************
* file name:
* description: transaction test.
*
* modification history
* --------------------
* 2003-6-5, created by zhuwei
*/
/* includes----------------------------------------------------------- */
#include "systemc.h"
/* defines------------------------------------------------------------ */
/* typedefs----------------------------------------------------------- */
// Signal级的接口,只定义接口信号。
class adder_sig_if: public sc_module
{
public:
sc_inout<int> sig_a, sig_b, sig_c;
sc_inout<bool> sig_ctrl;
};
// 任务级的接口
class adder_task_if: public sc_interface
{
public:
virtual int task_do_sum(int a, int b) = 0; //纯虚函数。
};
// Signal级的设计
class adder_design: public adder_sig_if
{
public:
void get_sum()
{
sig_c = sig_a + sig_b;
cout << "output: " << sig_c << " (time: " << sc_time_stamp() << ")" << endl;
}
SC_CTOR(adder_design)
{
SC_METHOD(get_sum);
sensitive_pos << sig_ctrl;
}
};
// Transactor,它同时继承自信号级和任务级的接口。
class adder_transactor:
public adder_sig_if,
public adder_task_if
{
public:
virtual int task_do_sum(int a, int b)
{
sig_a = a;
sig_b = b;
sig_ctrl = false;
wait(10, SC_NS);
sig_ctrl = true;
wait(10, SC_NS);
return 0;
}
SC_CTOR(adder_transactor)
{
//
}
};
// Transaction级的TestBench.
class adder_test: public sc_module
{
public:
sc_port<adder_transactor> transactor;
void run_test()
{
while(true)
{
/* TestBench不涉及Signal级设计的细节,而
* 直接通过Transactor进行验证。
*/
transactor->task_do_sum(1, 2);
transactor->task_do_sum(3, 4);
transactor->task_do_sum(5, 6);
}
}
SC_CTOR(adder_test)
{
SC_THREAD(run_test);
}
};
/* externs------------------------------------------------------------ */
/* globals------------------------------------------------------------ */
/* forward declarations----------------------------------------------- */
int sc_main(int argc, char *argv[])
{
sc_signal<int> a, b, c;
sc_signal<bool> ctrl;
adder_design design("design");
design(a, b, c, ctrl);
adder_transactor transactor("transactor");
transactor(a, b, c, ctrl);
adder_test test("test");
test.transactor(transactor);
sc_start(1000);
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -