📄 testbench_sc_fib.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 + -