1+ using System ;
2+ using SpiceSharp . Components ;
3+ using SpiceSharpParser ;
4+ using SpiceSharpParser . ModelReaders . Netlist . Spice . Readers . EntityGenerators . Components . Semiconductors ;
5+ using SpiceSharpParser . ModelReaders . Netlist . Spice . Readers . EntityGenerators . Models ;
6+
7+ namespace SpiceSharpBSIM . Parser ;
8+
9+ /// <summary>
10+ /// A helper class that can extend Spice#.Parser with BSIM1 models.
11+ /// </summary>
12+ public static class BSIM2Extensions
13+ {
14+ /// <summary>
15+ /// Extends a <see cref="SpiceSharpReader"/> with the BSIM1 models.
16+ /// </summary>
17+ /// <param name="reader">The reader.</param>
18+ /// <param name="level">The level.</param>
19+ /// <exception cref="NotImplementedException"></exception>
20+ public static void UseBSIM2 ( this SpiceSharpReader reader , int level = 5 )
21+ {
22+ // Register the model level
23+ var nmosModelGenerator = reader . Settings . Mappings . Models . GetValue ( "NMOS" , false ) ;
24+ var pmosModelGenerator = reader . Settings . Mappings . Models . GetValue ( "PMOS" , false ) ;
25+ if ( ReferenceEquals ( nmosModelGenerator , pmosModelGenerator ) &&
26+ nmosModelGenerator is MosfetModelGenerator modelGenerator )
27+ modelGenerator . AddGenericLevel < BSIM2Model , Components . Semiconductors . BSIM . BSIM2Behaviors . ModelParameters > ( level ) ;
28+ else
29+ throw new NotImplementedException ( ) ;
30+
31+ // Register the mosfet component
32+ if ( reader . Settings . Mappings . Components . TryGetValue ( "M" , false , out var generator ) &&
33+ generator is MosfetGenerator mosGenerator )
34+ mosGenerator . AddMosfet < BSIM2Model , BSIM2 > ( ) ;
35+ else
36+ throw new NotImplementedException ( ) ;
37+ }
38+ }
0 commit comments