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

📄 testbench_sc_fib.cpp

📁 在SystemC下编的fibonicii 的程序
💻 CPP
字号:
// All systemc modules should include systemc.h header file
#include <systemc.h>
#include "SC_Fib.cpp"

// entry point of the application
int sc_main(int argc,char* argv[])
{
	sc_report_handler::set_actions("/IEEE_Std_1666/deprecated",SC_DO_NOTHING);
	// input ports
	sc_signal<bool>			clock;
	sc_signal<bool>			reset;
	sc_signal<bool>			enable;
	sc_signal<bool>			up_down;
	sc_signal<bool>			Next;
	sc_signal<bool>			prev1;
	sc_signal<bool>			prev2;
	sc_signal<bool>			preset;
	sc_signal<bool>			manual_auto;
	// output ports
	sc_signal<sc_uint<16>>	counter_out;

	int i = 0;
	// connect the Device Under Test (DUT)
	sc_fib counter("SC_Fib");
	// port map : map signals to ports
	counter.clk(clock);
	counter.reset(reset);
	counter.enable(enable);
	counter.up_down(up_down);
	counter.Next(Next);
	counter.prev1(prev1);
	counter.prev2(prev2);
	counter.preset(preset);
	counter.manual_auto(manual_auto);
	counter.counter_out(counter_out);

	// start simulation here
	sc_start(1);
	// Open VCD file
	sc_trace_file *wf = sc_create_vcd_trace_file("FibSimul");
	// dump the desired signals
	sc_trace(wf,clock,"clock");
	sc_trace(wf,reset,"reset");
	sc_trace(wf,enable,"enable");
	sc_trace(wf,up_down,"up_down");
	sc_trace(wf,counter_out,"Fibon");
	sc_trace(wf,Next,"Next");
	sc_trace(wf,prev1,"prev1");
	sc_trace(wf,prev2,"prev2");
	sc_trace(wf,preset,"Preset");
	sc_trace(wf,manual_auto,"manual/auto");

	// initialize all variables
	reset = 0;						// initial value of reset
	enable = 0;						// initial value of enable
	manual_auto = 0;				// default manual //1
	Next = 0 ;
	up_down =0;
	prev1 = 0;
	prev2 = 0;
	preset = 0;						// no preset

	
	// for 5 cylels we run the default values 
	for(i=0;i<5;i++)
	{
		clock = 0;
		sc_start(1);
		clock = 1;
		sc_start(1);
	}

	reset = 1;						//	assert the reset
	cout << "@" << sc_time_stamp() << "Asserting Reset on 1\n" << endl;
	for(i=0;i<5;i++){
		clock = 0;
		sc_start(1);
		clock = 1;
		sc_start(1);
	}
	reset = 0;						// de-assert the reset
	cout << "@" << sc_time_stamp() << "De-Asserting Reset on zero\n" << endl;
	for(i=0;i<5;i++){
		clock = 0;
		sc_start(1);
		clock = 1;
		sc_start(1);
	}
	enable = 1;						// Assert enable
	manual_auto = 1;				// Assert manual_auto -> auto
	up_down = 1;					// Assert up_down -> count up
	Next = 1;
	cout << "@" << sc_time_stamp() << "Asserting Enable on one\n" << endl;
	cout << "@" << sc_time_stamp() << "Asserting Up_Down -> count up\n" << endl;
	cout << "@" << sc_time_stamp() << "Asserting manual_auto -> auto up\n" << endl;
	cout << "@" << sc_time_stamp() << "Asserting next\n" << endl;
	for(i=0;i<15;i++){
		clock = 0;
		sc_start(1);
		clock = 1;
		sc_start(1);
	}
	up_down = 0;// de-assert up_down -> count down
	Next=0;
	cout << "@" << sc_time_stamp() << "Asserting Up_Down -> count up\n" << endl;
	cout << "@" << sc_time_stamp() << "Asserting next\n" << endl;
	for(i=0;i<15;i++){
		clock = 0;
		sc_start(1);
		clock = 1;
		sc_start(1);
	}
	
	manual_auto = 1;			// Assert manual_auto -> manual
	Next = 1;
	cout << "@" << sc_time_stamp() << "Asserting manual_auto -> auto up\n" << endl;
	cout << "@" << sc_time_stamp() << "Asserting next\n" << endl;
	for(i=0;i<3;i++){
		clock = 0;
		Next = 0;					// Assert Next -> true
		sc_start(1);
		clock = 1;
		Next = 1;					// Assert Next -> true
		sc_start(1);
	}
	Next = 0;					// Assert Next -> true
	up_down = 0;// de-assert up_down -> count down
	cout << "@" << sc_time_stamp() << "Asserting next\n" << endl;
	cout << "@" << sc_time_stamp() << "Asserting Up_Down -> count up\n" << endl;
	for(i=0;i<3;i++){
		clock = 0;
		sc_start(1);
		clock = 1;
		sc_start(1);
	}
	for(i=0;i<3;i++){
		clock = 0;
		Next = 0;					// Assert Next -> true
		sc_start(1);
		clock = 1;
		Next = 1;					// Assert Next -> true
		sc_start(1);
	}
	Next = 1;				// Assert Next -> false
	up_down = 1;
	cout << "@" << sc_time_stamp() << "Asserting prev1 to one \n" << endl;
	for(i=0;i<3;i++){	
		clock = 0;
		prev1 = 0;					// Assert prev1 -> true
		sc_start(1);
		clock = 1;
		prev1 = 1;					// Assert prev1 -> true
		sc_start(1);
	}
	Next = 0;				// Assert Next -> false
	prev1 = 0;					// Assert prev1 -> false
	
	cout << "@" << sc_time_stamp() << "Asserting prev2 to one \n" << endl;
	for(i=0;i<3;i++){
		clock = 0;
		prev2 = 0;					// Assert prev2 -> true
		sc_start(1);
		clock = 1;
		prev2 = 1;					// Assert prev2 -> true
		sc_start(1);
	}
	prev2 = 0;					// Assert prev2 -> true
	
	cout << "@" << sc_time_stamp() << "Asserting Reset on 1\n" << endl;
	for(i=0;i<3;i++){
		clock = 0;
		sc_start(1);
		preset = 1;						//	assert the reset
		clock = 1;
		sc_start(1);
	}
	
	preset = 0;					//	assert the preset
	
	cout << "@" << sc_time_stamp() << "Asserting preset on 10\n" << endl;
	for(i=0;i<5;i++){
		clock = 0;
		Next = 0;					// Assert Next -> true
		sc_start(1);
		clock = 1;
		Next = 1;					// Assert Next -> true
		sc_start(1);
	}
	Next = 0;					// Assert Next -> true
	manual_auto = 0;			// Assert manual_auto -> manual
	for(i=0;i<5;i++){
		clock = 0;
		sc_start(1);
		clock = 1;
		Next = 1;					// Assert Next -> true
		sc_start(1);
	}	
	cout << "@" << sc_time_stamp() << "Asserting prev1 to one \n" << endl;
	for(i=0;i<3;i++){
		clock = 0;
		prev1 = 0;					// Assert prev1 -> true
		sc_start(1);
		clock = 1;
		prev1 = 1;					// Assert prev1 -> true
		sc_start(1);
	}
	
	prev1 = 0;					// Assert prev1 -> false
	
	cout << "@" << sc_time_stamp() << "Asserting prev2 to one \n" << endl;
	for(i=0;i<3;i++){
		clock = 0;
		prev2 = 0;					// Assert prev2 -> true
		sc_start(1);
		clock = 1;
		prev2 = 1;					// Assert prev2 -> true
		sc_start(1);
	}
	prev2 = 0;					// Assert prev2 -> true
	for(i=0;i<3;i++){
		clock = 0;
		sc_start(1);
		clock = 1;
		sc_start(1);
	}
	enable = 0;						// de-assert enable
	cout << "@" << sc_time_stamp() << "De-Asserting Enable\n" << endl;
	cout << "@" << sc_time_stamp() << "Terminating simulation !\n" << endl;
	sc_close_vcd_trace_file(wf);
	return (0);						// terminate simulation
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -