Created
September 14, 2022 18:40
-
-
Save rahulbhadani/24bff32525080a873bda5cc091ed87c3 to your computer and use it in GitHub Desktop.
Active low-pass filter of fifth-order
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#ifndef ELECTRICAL_H | |
#define ELECTRICAL_H | |
#include <systemc-ams> | |
using namespace std; | |
using namespace sc_core; | |
SC_MODULE(lowpass) | |
{ | |
/* TDF I/O ports for data to be read in/out from TDF modules*/ | |
sca_tdf::sca_in<double> input; | |
sca_tdf::sca_out<double> output; | |
/* TDF-ELN, ELN-TDF converter voltage sources */ | |
sca_eln::sca_tdf::sca_vsource v_in; | |
sca_eln::sca_tdf::sca_vsink v_out; | |
/* Ideal OP-AMPS */ | |
sca_eln::sca_nullor nullr0; | |
sca_eln::sca_nullor nullr1; | |
sca_eln::sca_nullor nullr2; | |
/*Capacitors*/ | |
//vector<sca_eln::sca_c> c = vector<sca_eln::sca_c>(5); | |
sca_eln::sca_c c0, c1, c2, c3, c4; | |
/* Resistors */ | |
//vector<sca_eln::sca_r> r = vector<sca_eln::sca_r>(5); | |
sca_eln::sca_r r0, r1, r2, r3, r4; | |
/* Electrical netlist nodes */ | |
vector<sca_eln::sca_node> n = vector<sca_eln::sca_node>(10); | |
/* Ground node*/ | |
sca_eln::sca_node_ref gnd; | |
/* Set I/O port parameters */ | |
void set_attributes() | |
{ | |
input.set_rate(1); | |
output.set_timestep(1.0, SC_US); | |
output.set_rate(1); | |
} | |
/*Constructor */ | |
SC_CTOR(lowpass): v_in("v_in", 1.0), v_out("v_out", 1.0), nullr0("nullr0"), nullr1("nullr1"), nullr2("nullr2"), c0("c0", 1.0E-6), | |
c1("c1", 1.0E-6), | |
c2("c2", 2.5E-6), | |
c3("c3", 1.0E-6), | |
c4("c4", 15.0E-6), | |
r0("r0", 2650.0), | |
r1("r1", 3697.0), | |
r2("r2", 763.0), | |
r3("r3", 1210.0), | |
r4("r4", 390.0) | |
{ | |
v_in.inp(input); v_in.p(n.at(0)); v_in.n(gnd); | |
v_out.outp(output); v_out.p(n.at(8)); v_out.n(gnd); | |
nullr0.nip(n.at(1)); nullr0.nin(n.at(2)); nullr0.nop(n.at(2)); nullr0.non(gnd); | |
r0.p(n.at(0)); r0.n(n.at(1)); | |
c0.p(n.at(1)); c0.n(gnd); | |
r1.p(n.at(2)); r1.n(n.at(3)); r2.p(n.at(3)); r2.n(n.at(4)); | |
nullr1.nip(n.at(4)); nullr1.nin(n.at(5)); nullr1.nop(n.at(5)); nullr1.non(gnd); | |
c1.p(n.at(3)); c1.n(n.at(5)); | |
c2.p(n.at(4)); c2.n(gnd); | |
r3.p(n.at(5)); r3.n(n.at(6)); | |
r4.p(n.at(6)); r4.n(n.at(7)); | |
nullr2.nip(n.at(7)); nullr2.nin(n.at(8)); nullr2.nop(n.at(8)); nullr2.non(gnd); | |
c3.p(n.at(6)); c3.n(n.at(8)); | |
c4.p(n.at(7)); c4.n(gnd); | |
} | |
~lowpass(){} | |
}; | |
#endif |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment