Skip to content

Instantly share code, notes, and snippets.

@rahulbhadani
Created September 14, 2022 18:40
Show Gist options
  • Save rahulbhadani/24bff32525080a873bda5cc091ed87c3 to your computer and use it in GitHub Desktop.
Save rahulbhadani/24bff32525080a873bda5cc091ed87c3 to your computer and use it in GitHub Desktop.
Active low-pass filter of fifth-order
#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