aboutsummaryrefslogtreecommitdiff
path: root/src/parser/parse_element.cpp
diff options
context:
space:
mode:
authorClément Zrounba <clement.zrounba@ec-lyon.fr>2023-12-07 10:47:23 +0000
committerClément Zrounba <clement.zrounba@ec-lyon.fr>2023-12-07 10:48:56 +0000
commit0e4b33a965e8eabb687ba07580be749e5f0ffe4c (patch)
treec5dfd6564a6b8809dd23aba06e5b165af7bbe766 /src/parser/parse_element.cpp
parent4b1c60c90936b52093d287f59eb118f93bc82407 (diff)
downloadspecs-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.cpp44
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)