📄 tb_phc.cpp
字号:
#include "systemc-ams.h"#include "phc.h"SCA_SDF_MODULE(ref_src) { sca_sdf_out<double> out; double ampl, freq; // source amplitude and frequency void sig_proc() { double vout = 2*M_PI*freq*sc_time_stamp().to_seconds(); vout = ampl*sin(vout);/* cout << sc_time_stamp() << " Module: " << name() << " / sim time = " << sc_simulation_time() << " / time stamp = " << sc_time_stamp().to_seconds() << " / vout = " << vout << endl;*/ out.write(vout); } SCA_CTOR(ref_src) {} };SCA_SDF_MODULE(vco_src) { sca_sdf_out<double> out; double ampl, freq; // source amplitude and frequency double dphi; // phase shift void sig_proc() { const double DPHI_STEP = 157.1e-3*0.05; // per 1 us*SDF step double vout = ampl*sin(2*M_PI*freq*sc_time_stamp().to_seconds() + dphi); dphi += DPHI_STEP; dphi = (dphi > M_PI)? M_PI : dphi;/* cout << sc_time_stamp() << " Module: " << name() << " / time stamp = " << sc_time_stamp().to_seconds() << " / dphi = " << dphi << " / vout = " << vout << endl;*/ out.write(vout); } SCA_CTOR(vco_src) { dphi = -M_PI; } };SCA_SDF_MODULE(trace) { sca_sdf_in<double> sin; ofstream output; void sig_proc() { output << sc_time_stamp().to_seconds() << "\t " << sin.read() << endl; } SCA_CTOR(trace) { output.open(name(), ios::out); }};int sc_main(int argc, char* argv[]){ sca_sdf_signal<double> ref, vco, pco; sc_set_time_resolution(1.0, SC_NS); phc i_pc("pc"); i_pc.in1(ref); i_pc.in2(vco); i_pc.out(pco); i_pc.kpc = 0.66; ref_src i_ref_src("ref_src"); i_ref_src.out(ref); i_ref_src.out.set_T(sc_time(0.05, SC_US)); i_ref_src.ampl = 1.0; i_ref_src.freq = 1e6; vco_src i_vco_src("vco_src"); i_vco_src.out(vco); i_vco_src.ampl = 1.0; i_vco_src.freq = 1e6; trace tr_ref("tr_ref"); tr_ref.sin(ref); trace tr_vco("tr_vco"); tr_vco.sin(vco); trace tr_pco("tr_pco"); tr_pco.sin(pco); sc_start(41.0, SC_US); system("PAUSE"); return 0;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -