Skip to content

Commit 45ab543

Browse files
Merge pull request #174 from SpiceSharp/users/margo/mosfet2
AddGenericLevel
2 parents d508a48 + ea4e092 commit 45ab543

4 files changed

Lines changed: 55 additions & 5 deletions

File tree

src/SpiceSharpParser.IntegrationTests/Examples/Extensions/CustomMosfetModelTest.cs

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
using SpiceSharpParser.ModelReaders.Netlist.Spice.Readers.EntityGenerators.Components.Semiconductors;
1+
using SpiceSharp.Components;
2+
using SpiceSharpParser.ModelReaders.Netlist.Spice.Readers.EntityGenerators.Components.Semiconductors;
23
using SpiceSharpParser.ModelReaders.Netlist.Spice.Readers.EntityGenerators.Models;
34
using System.IO;
45
using Xunit;
@@ -49,6 +50,36 @@ public void When_CustomMosfetModel2_Used_NoExceptions()
4950
spiceSharpReader.Settings.Mappings.Components.Map("M", mosfetGenerator);
5051

5152

53+
var spiceSharpModel = spiceSharpReader.Read(parseResult.FinalModel);
54+
55+
Assert.False(spiceSharpModel.ValidationResult.HasError);
56+
Assert.False(spiceSharpModel.ValidationResult.HasWarning);
57+
}
58+
59+
60+
[Fact]
61+
public void When_BSIM1_Used_NoExceptions()
62+
{
63+
// Create a model from text file
64+
string path = Path.Combine(Directory.GetCurrentDirectory(), "Examples/Circuits/MosfetExample2.cir");
65+
var netlistContent = File.ReadAllText(path);
66+
var parser = new SpiceNetlistParser();
67+
parser.Settings.Lexing.HasTitle = true;
68+
var parseResult = parser.ParseNetlist(netlistContent);
69+
70+
// Convert to Spice#
71+
var spiceSharpReader = new SpiceSharpReader();
72+
spiceSharpReader.Settings.CaseSensitivity.IsModelTypeCaseSensitive = false;
73+
74+
// custom mosfet models
75+
var modelGenerator = new MosfetModelGenerator();
76+
modelGenerator.AddGenericLevel<BSIM1Model, SpiceSharpBSIM.Components.Semiconductors.BSIM.BSIM1Behaviors.ModelParameters>(4);
77+
spiceSharpReader.Settings.Mappings.Models.Map(new[] { "PMOS", "NMOS" }, modelGenerator);
78+
var mosfetGenerator = new MosfetGenerator();
79+
mosfetGenerator.AddMosfet<SpiceSharp.Components.Mosfet3Model, SpiceSharp.Components.Mosfet3>();
80+
spiceSharpReader.Settings.Mappings.Components.Map("M", mosfetGenerator);
81+
82+
5283
var spiceSharpModel = spiceSharpReader.Read(parseResult.FinalModel);
5384

5485
Assert.False(spiceSharpModel.ValidationResult.HasError);

src/SpiceSharpParser.IntegrationTests/SpiceSharpParser.IntegrationTests.csproj

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
<PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.12.0" />
2525
<PackageReference Include="SpiceSharp" Version="3.2.3" />
2626
<PackageReference Include="SpiceSharpBehavioral" Version="3.2.0" />
27+
<PackageReference Include="SpiceSharpBSIM" Version="3.2.0" />
2728
<PackageReference Include="xunit" Version="2.9.2" />
2829
<PackageReference Include="xunit.abstractions" Version="2.0.3" />
2930
<PackageReference Include="xunit.runner.console" Version="2.9.2">

src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/EntityGenerators/Models/MosfetModelGenerator.cs

Lines changed: 21 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,14 @@
1-
using System;
2-
using System.Collections.Generic;
3-
using SpiceSharp;
1+
using SpiceSharp;
42
using SpiceSharp.Components;
53
using SpiceSharp.Components.Mosfets;
64
using SpiceSharp.Entities;
5+
using SpiceSharp.ParameterSets;
76
using SpiceSharpParser.Common.Validation;
87
using SpiceSharpParser.ModelReaders.Netlist.Spice.Context;
98
using SpiceSharpParser.Models.Netlist.Spice.Objects;
109
using SpiceSharpParser.Models.Netlist.Spice.Objects.Parameters;
10+
using System;
11+
using System.Collections.Generic;
1112

1213
namespace SpiceSharpParser.ModelReaders.Netlist.Spice.Readers.EntityGenerators.Models
1314
{
@@ -76,6 +77,23 @@ public void AddLevel<TModel, TParameters>(int level)
7677
};
7778
}
7879

80+
public void AddGenericLevel<TModel, TParameters>(int level)
81+
where TModel : Entity<TParameters>
82+
where TParameters : ParameterSet<TParameters>, new()
83+
{
84+
Levels[level] = (name, type, _) =>
85+
{
86+
var mosfet = (TModel)Activator.CreateInstance(typeof(TModel), name);
87+
switch (type.ToLower())
88+
{
89+
case "nmos": mosfet.SetParameter("nmos", true); break;
90+
case "pmos": mosfet.SetParameter("pmos", true); break;
91+
}
92+
93+
return new Context.Models.Model(name, mosfet, mosfet.Parameters);
94+
};
95+
}
96+
7997
public override Context.Models.Model Generate(string id, string type, ParameterCollection parameters, IReadingContext context)
8098
{
8199
var clonedParameters = (ParameterCollection)parameters.Clone();

src/SpiceSharpParser/SpiceSharpParser.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<StartupObject />
2323
<PackageLicenseExpression>MIT</PackageLicenseExpression>
2424
<LangVersion>latest</LangVersion>
25-
<Version>3.2.7</Version>
25+
<Version>3.2.8</Version>
2626
</PropertyGroup>
2727

2828
<PropertyGroup Condition="'$(Configuration)|$(TargetFramework)|$(Platform)'=='Debug|netstandard1.5|AnyCPU'">

0 commit comments

Comments
 (0)