?? 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 + -