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/parser.y | |
| 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/parser.y')
| -rw-r--r-- | src/parser/parser.y | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/parser/parser.y b/src/parser/parser.y index e8602a7..9208dc8 100644 --- a/src/parser/parser.y +++ b/src/parser/parser.y @@ -73,7 +73,7 @@ int yyerror(yyscan_t scanner, ParseTree *pt, const char *err); %token <s_ptr> T_ELEM_CWSRC T_ELEM_VLSRC T_ELEM_EVLSRC %token <s_ptr> T_ELEM_WG T_ELEM_COUPLER T_ELEM_MERGER T_ELEM_SPLITTER %token <s_ptr> T_ELEM_PSHIFT T_ELEM_MZI T_ELEM_CROSSING T_ELEM_PCMCELL -%token <s_ptr> T_ELEM_PROBE T_ELEM_MLPROBE T_ELEM_PDET +%token <s_ptr> T_ELEM_PROBE T_ELEM_MLPROBE T_ELEM_PDET T_ELEM_PWR_METER %token <s_ptr> T_ELEM_X %token <i_val> T_ANALYSIS_OP T_ANALYSIS_DC T_ANALYSIS_TRAN %token <i_val> T_DIRECTIVE_OPTIONS T_DIRECTIVE_NODESET @@ -98,6 +98,7 @@ int yyerror(yyscan_t scanner, ParseTree *pt, const char *err); %type <i_val> element.evlsrc %type <i_val> element.probe %type <i_val> element.mlprobe +%type <i_val> element.power_meter %type <i_val> element.pdet %type <i_val> element.x @@ -375,6 +376,14 @@ element.pdet: T_ELEM_PDET net.oa.in net.eanalog } ; +element.power_meter: T_ELEM_PWR_METER net.oa.in + { + $$ = cur_pt->register_element(new PowerMeterElement(*$1, {*$2})); + delete $1; + delete $2; + } +; + element.x: T_ELEM_X { $$ = cur_pt->register_element(new XElement(*$1)); @@ -456,6 +465,7 @@ atomelement: element.wg { $$ = $1; } | element.evlsrc { $$ = $1; } | element.probe { $$ = $1; } | element.mlprobe { $$ = $1; } + | element.power_meter { $$ = $1; } | element.pdet { $$ = $1; } ; |
