diff options
| author | Clément Zrounba <clement.zrounba@ec-lyon.fr> | 2023-12-07 10:47:23 +0000 |
|---|---|---|
| committer | Clément Zrounba <clement.zrounba@ec-lyon.fr> | 2023-12-07 10:48:56 +0000 |
| commit | 0e4b33a965e8eabb687ba07580be749e5f0ffe4c (patch) | |
| tree | c5dfd6564a6b8809dd23aba06e5b165af7bbe766 /src/parser/parse_element.cpp | |
| parent | 4b1c60c90936b52093d287f59eb118f93bc82407 (diff) | |
| download | specs-0e4b33a965e8eabb687ba07580be749e5f0ffe4c.tar.gz specs-0e4b33a965e8eabb687ba07580be749e5f0ffe4c.zip | |
Add power meter element to measure DC optical power
This device replaces photodetector in cases where the DC power should be
measured efficiently, without considering realistic effects (bandwidth,
noise, responsivity...).
* Syntax in netlist: `PWRnnnn <optical net>`
* Parameters: none
Diffstat (limited to 'src/parser/parse_element.cpp')
| -rw-r--r-- | src/parser/parse_element.cpp | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/parser/parse_element.cpp b/src/parser/parse_element.cpp index bbd284c..e03eee8 100644 --- a/src/parser/parse_element.cpp +++ b/src/parser/parse_element.cpp @@ -1134,6 +1134,50 @@ sc_module *MLProbeElement::create(ParseTreeCreationHelper &pt_helper) const } /** ******************************************* **/ +/** Power meter **/ +/** ******************************************* **/ +INSTANTIATE_AND_CONNECT_UNI(PowerMeterElement, pt_helper) +{ + element_type_uni *obj = new element_type_uni(name.c_str()); + + // connect p_in + pt_helper.connect_uni<spx::oa_signal_type>(obj->p_in, nets[0], AS_READER); + + // return the module + return obj; +} + +sc_module *PowerMeterElement::create(ParseTreeCreationHelper &pt_helper) const +{ + element_type_base *obj = nullptr; + + // Verify number of nets + assert(nets.size() == n_nets); + + // Verify number of positional args + assert(args.size() == 0); + + // Create signals if they don't exist + pt_helper.create_signals(this); + + // Create the object and connect ports to signals + INSTANTIATE(pt_helper, false); + + // Parse positional args + // nothing + + // Parse keyword arguments + for (auto &p: kwargs) + { + cerr << name << ": unknown keyword: " << p.first << endl; + exit(1); + } + + return obj; +} + + +/** ******************************************* **/ /** Phase-change cell **/ /** ******************************************* **/ INSTANTIATE_AND_CONNECT_UNI(PCMCellElement, pt_helper) |
