mirror of https://github.com/KLayout/klayout.git
Spice reader flags existing parameters as primary
This commit is contained in:
parent
cb085069ee
commit
37457aa02f
|
|
@ -620,11 +620,14 @@ bool NetlistSpiceReaderDelegate::element (db::Circuit *circuit, const std::strin
|
|||
defp = db::DeviceClassInductor::param_id_L;
|
||||
}
|
||||
|
||||
const std::vector<db::DeviceParameterDefinition> &pd = cls->parameter_definitions ();
|
||||
for (std::vector<db::DeviceParameterDefinition>::const_iterator i = pd.begin (); i != pd.end (); ++i) {
|
||||
std::vector<db::DeviceParameterDefinition> &pd = cls->parameter_definitions_non_const ();
|
||||
for (std::vector<db::DeviceParameterDefinition>::iterator i = pd.begin (); i != pd.end (); ++i) {
|
||||
std::map<std::string, double>::const_iterator v = params.find (i->name ());
|
||||
if (v != params.end ()) {
|
||||
device->set_parameter_value (i->id (), v->second / i->si_scaling ());
|
||||
// Make given parameters primary. This way they are netlisted again and participate in netlist compare when
|
||||
// they are made primary in the extracted netlist too.
|
||||
i->set_is_primary (true);
|
||||
} else if (i->id () == defp) {
|
||||
device->set_parameter_value (i->id (), value / i->si_scaling ());
|
||||
}
|
||||
|
|
|
|||
|
|
@ -590,3 +590,34 @@ TEST(15_ContinuationWithBlanks)
|
|||
"end;\n"
|
||||
);
|
||||
}
|
||||
|
||||
TEST(16_PrimaryParametersFromSpice)
|
||||
{
|
||||
db::Netlist nl;
|
||||
|
||||
std::string path = tl::combine_path (tl::combine_path (tl::testdata (), "algo"), "nreader16.cir");
|
||||
|
||||
db::NetlistSpiceReader reader;
|
||||
tl::InputStream is (path);
|
||||
reader.read (is, nl);
|
||||
|
||||
const db::DeviceClass *dc;
|
||||
|
||||
// RMODEL1 does not have L and W parameters
|
||||
dc = nl.device_class_by_name ("RMODEL1");
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_W)->is_primary (), false);
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_L)->is_primary (), false);
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_R)->is_primary (), true);
|
||||
|
||||
// RMODEL2 has L and W parameters
|
||||
dc = nl.device_class_by_name ("RMODEL2");
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_W)->is_primary (), true);
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_L)->is_primary (), true);
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_R)->is_primary (), true);
|
||||
|
||||
// RMODEL3 has W parameter only
|
||||
dc = nl.device_class_by_name ("RMODEL3");
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_W)->is_primary (), true);
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_L)->is_primary (), false);
|
||||
EXPECT_EQ (dc->parameter_definition (db::DeviceClassResistor::param_id_R)->is_primary (), true);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,5 @@
|
|||
|
||||
R$1 1 2 1k RMODEL1 M=2
|
||||
R$1 2 3 1k RMODEL2 W=0.5u L=17u
|
||||
R$1 3 4 1k RMODEL3 W=0.5u
|
||||
|
||||
Loading…
Reference in New Issue