Skip to content

Commit 18a9eca

Browse files
Add example about custom Mosfet
1 parent c045e89 commit 18a9eca

File tree

5 files changed

+65
-2
lines changed

5 files changed

+65
-2
lines changed
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
Mosfet circuit
2+
Md 0 1 2 3 my-pmos
3+
.model my-pmos pmos(level = 4)
4+
.END
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using SpiceSharp.Components;
2+
using SpiceSharpParser.ModelReaders.Netlist.Spice.Context.Models;
3+
using SpiceSharpParser.ModelReaders.Netlist.Spice.Readers.EntityGenerators;
4+
using SpiceSharpParser.ModelReaders.Netlist.Spice.Readers.EntityGenerators.Models;
5+
6+
namespace SpiceSharpParser.IntegrationTests.Examples.Extensions
7+
{
8+
public class CustomMosfetModelGenerator : MosfetModelGenerator
9+
{
10+
11+
public CustomMosfetModelGenerator()
12+
{
13+
Levels.Add(4, (name, type, _) =>
14+
{
15+
var m = new Mosfet3Model(name);
16+
switch (type.ToLower())
17+
{
18+
case "nmos": m.SetParameter("nmos", true); break;
19+
case "pmos": m.SetParameter("pmos", true); break;
20+
}
21+
22+
return new Model(name, m, m.Parameters);
23+
});
24+
}
25+
26+
27+
}
28+
}
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
using System.IO;
2+
using Xunit;
3+
4+
namespace SpiceSharpParser.IntegrationTests.Examples.Extensions
5+
{
6+
public class CustomMosfetModelTest : BaseTests
7+
{
8+
[Fact]
9+
public void When_CustomMosfetModel_Used_NoExceptions()
10+
{
11+
// Create a model from text file
12+
string path = Path.Combine(Directory.GetCurrentDirectory(), "Examples/Circuits/MosfetExample.cir");
13+
var netlistContent = File.ReadAllText(path);
14+
var parser = new SpiceNetlistParser();
15+
parser.Settings.Lexing.HasTitle = true;
16+
var parseResult = parser.ParseNetlist(netlistContent);
17+
18+
// Convert to Spice#
19+
var spiceSharpReader = new SpiceSharpReader();
20+
spiceSharpReader.Settings.CaseSensitivity.IsModelTypeCaseSensitive = false;
21+
spiceSharpReader.Settings.Mappings.Models.Map(new[] { "PMOS", "NMOS" }, new CustomMosfetModelGenerator());
22+
var spiceSharpModel = spiceSharpReader.Read(parseResult.FinalModel);
23+
24+
Assert.False(spiceSharpModel.ValidationResult.HasError);
25+
Assert.False(spiceSharpModel.ValidationResult.HasWarning);
26+
}
27+
}
28+
}

src/SpiceSharpParser.IntegrationTests/SpiceSharpParser.IntegrationTests.csproj

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,9 @@
9090
<None Update="Examples\Circuits\Example04_reversed.cir">
9191
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
9292
</None>
93+
<None Update="Examples\Circuits\MosfetExample.cir">
94+
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
95+
</None>
9396
<None Update="Resources\pwl_reference.txt">
9497
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
9598
</None>

src/SpiceSharpParser/ModelReaders/Netlist/Spice/Readers/EntityGenerators/Components/Semiconductors/MosfetGenerator.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -78,9 +78,9 @@ public override IEntity Generate(string componentIdentifier, string originalName
7878
return null;
7979
}
8080

81-
if (Mosfets.ContainsKey(model.GetType()))
81+
if (Mosfets.ContainsKey(model.Entity.GetType()))
8282
{
83-
var mosfetDetails = Mosfets[model.GetType()].Invoke(componentIdentifier);
83+
var mosfetDetails = Mosfets[model.Entity.GetType()].Invoke(componentIdentifier);
8484
mosfet = mosfetDetails.Mosfet;
8585

8686
context.SimulationPreparations.ExecuteActionBeforeSetup((simulation) =>

0 commit comments

Comments
 (0)