⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.cpp

📁 systemc源码
💻 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 + -