Skip to content

Commit 336f84a

Browse files
bug fixes
1 parent 547e756 commit 336f84a

File tree

2 files changed

+63
-16
lines changed

2 files changed

+63
-16
lines changed

src/codegen/SubsystemSolverEngineGenerator.cpp

Lines changed: 17 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -51,10 +51,10 @@ SubsystemSolverEngineGenerator::SubsystemSolverEngineGenerator
5151
port_source_ids()
5252
{
5353
if(model_name == "")
54-
throw std::runtime_error("SubsystemSimulationEngineGenerator::constructor(): model_name cannot be null or empty");
54+
throw std::runtime_error("SubsystemSolverEngineGenerator::constructor(): model_name cannot be null or empty");
5555

5656
if(num_solutions == 0)
57-
throw std::runtime_error("SubsystemSimulationEngineGenerator::constructor(): num_solutions must be positive nonzero value");
57+
throw std::runtime_error("SubsystemSolverEngineGenerator::constructor(): num_solutions must be positive nonzero value");
5858
}
5959

6060
SubsystemSolverEngineGenerator::SubsystemSolverEngineGenerator(const SubsystemSolverEngineGenerator& base) :
@@ -67,10 +67,10 @@ SubsystemSolverEngineGenerator::SubsystemSolverEngineGenerator(const SubsystemSo
6767
void SubsystemSolverEngineGenerator::reset(std::string model_name, unsigned int num_solutions)
6868
{
6969
if(model_name == "")
70-
throw std::runtime_error("SubsystemSimulationEngineGenerator::reset(): model_name cannot be null or empty");
70+
throw std::runtime_error("SubsystemSolverEngineGenerator::reset(): model_name cannot be null or empty");
7171

7272
if(num_solutions == 0)
73-
throw std::runtime_error("SubsystemSimulationEngineGenerator::reset(): num_solutions must be positive nonzero value");
73+
throw std::runtime_error("SubsystemSolverEngineGenerator::reset(): num_solutions must be positive nonzero value");
7474

7575
this->model_name = model_name;
7676
this->num_solutions = num_solutions;
@@ -91,7 +91,7 @@ void SubsystemSolverEngineGenerator::addPort(const Port& port)
9191
{
9292
if(port.id == -1 || port.p == -1 || port.n == -1)
9393
{
94-
throw std::invalid_argument("SubsystemSimulationEngineGenerator::addPort(port) -- port cannot contain invalid id or indices (-1)");
94+
throw std::invalid_argument("SubsystemSolverEngineGenerator::addPort(port) -- port cannot contain invalid id or indices (-1)");
9595
}
9696

9797
bool nonexistent = true;
@@ -117,7 +117,7 @@ void SubsystemSolverEngineGenerator::setPorts(const std::vector<Port>& ports)
117117
{
118118
if(p.id == -1 || p.p == -1 || p.n == -1)
119119
{
120-
throw std::invalid_argument("SubsystemSimulationEngineGenerator::addPorts(ports) -- ports cannot contain invalid id or indices (-1)");
120+
throw std::invalid_argument("SubsystemSolverEngineGenerator::addPorts(ports) -- ports cannot contain invalid id or indices (-1)");
121121
}
122122
}
123123

@@ -134,14 +134,14 @@ const SubsystemSolverEngineGenerator::Port& SubsystemSolverEngineGenerator::getP
134134
}
135135
}
136136

137-
throw std::out_of_range("SubsystemSimulationEngineGenerator::getPort(id) -- port does not exist for given id");
137+
throw std::out_of_range("SubsystemSolverEngineGenerator::getPort(id) -- port does not exist for given id");
138138
}
139139

140140
std::vector<SubsystemSolverEngineGenerator::PortModel> SubsystemSolverEngineGenerator::computePortModels() const
141141
{
142142
if(ports.empty())
143143
{
144-
throw std::runtime_error("SubsystemSimulationEngineGenerator::computePortModels() -- subsystem has no ports for which to compute models");
144+
throw std::runtime_error("SubsystemSolverEngineGenerator::computePortModels() -- subsystem has no ports for which to compute models");
145145
}
146146

147147
unsigned int num_ports = ports.size();
@@ -219,7 +219,8 @@ std::vector<SubsystemSolverEngineGenerator::PortModel> SubsystemSolverEngineGene
219219
}
220220
else
221221
{
222-
mdl.transconductances[i] = xprobe(dimension+i);
222+
//mdl.transconductances[i] = xprobe(dimension+i); //changed 2021-01-15-17.52
223+
mdl.transconductances[i+1] = xprobe(dimension+i);
223224
}
224225

225226
}
@@ -299,7 +300,7 @@ void SubsystemSolverEngineGenerator::stampOthersPortModel(const PortModel& port_
299300
}
300301
}
301302

302-
throw std::invalid_argument("SubsystemSimulationEngineGenerator::stampOthersPortModel(port_model) -- given port model does not correspond to any port of this subsystem");
303+
throw std::invalid_argument("SubsystemSolverEngineGenerator::stampOthersPortModel(port_model) -- given port model does not correspond to any port of this subsystem");
303304
}
304305

305306
void SubsystemSolverEngineGenerator::stampOthersPortModels(const std::vector<PortModel>& port_models)
@@ -313,7 +314,7 @@ void SubsystemSolverEngineGenerator::stampOthersPortModels(const std::vector<Por
313314
}
314315
catch(...)
315316
{
316-
throw std::invalid_argument("SubsystemSimulationEngineGenerator::stampOthersPortModels(port_models) -- one or more of the given port models does not correspond to any port of this subsystem");
317+
throw std::invalid_argument("SubsystemSolverEngineGenerator::stampOthersPortModels(port_models) -- one or more of the given port models does not correspond to any port of this subsystem");
317318
}
318319
}
319320

@@ -329,7 +330,7 @@ void SubsystemSolverEngineGenerator::addOwnSourceGains(const PortModel& port_mod
329330
}
330331
}
331332

332-
throw std::invalid_argument("SubsystemSimulationEngineGenerator::addOwnSourceGains(port_model) -- given port model does not correspond to any port of this subsystem");
333+
throw std::invalid_argument("SubsystemSolverEngineGenerator::addOwnSourceGains(port_model) -- given port model does not correspond to any port of this subsystem");
333334
}
334335

335336
void SubsystemSolverEngineGenerator::addOwnSourceGains(const std::vector<PortModel>& port_models)
@@ -376,7 +377,7 @@ std::string SubsystemSolverEngineGenerator::generatePortSourceEquation(unsigned
376377
catch(const std::out_of_range& error)
377378
{
378379
throw std::out_of_range
379-
("SubsystemSimulationEngineGenerator::generatePortSourceEquation(port_id) -- given port_id does not correspond to any port of the subsystem");
380+
("SubsystemSolverEngineGenerator::generatePortSourceEquation(port_id) -- given port_id does not correspond to any port of the subsystem");
380381
}
381382

382383

@@ -684,7 +685,7 @@ std::string SubsystemSolverEngineGenerator::generateCFunction(double zero_bound)
684685
void SubsystemSolverEngineGenerator::generateCFunctionAndExport(std::string filename, double zero_bound) const
685686
{
686687
if(filename == "")
687-
throw std::invalid_argument("SubsystemSimulationEngineGenerator::generateCFunctionAndExport(): filename cannot be null or empty");
688+
throw std::invalid_argument("SubsystemSolverEngineGenerator::generateCFunctionAndExport(): filename cannot be null or empty");
688689

689690
std::fstream file;
690691

@@ -696,15 +697,15 @@ void SubsystemSolverEngineGenerator::generateCFunctionAndExport(std::string file
696697
}
697698
catch(...)
698699
{
699-
throw std::runtime_error("SubsystemSimulationEngineGenerator::generateCFunctionAndExport(): failed to open or create source files");
700+
throw std::runtime_error("SubsystemSolverEngineGenerator::generateCFunctionAndExport(): failed to open or create source files");
700701
}
701702

702703
file <<
703704
"/**\n"
704705
" *\n"
705706
" * LBLMC Vivado HLS Simulation Engine for FPGA Designs\n"
706707
" *\n"
707-
" * Auto-generated by SubsystemSimulationEngineGenerator Object\n"
708+
" * Auto-generated by SubsystemSolverEngineGenerator Object\n"
708709
" *\n"
709710
" */\n\n";
710711

src/codegen/components/ModularMultilevelConverter_HalfBridgeModules.cpp

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -258,9 +258,55 @@ std::string ModularMultilevelConverter_HalfBridgeModules::generateFields()
258258
generateTypedArrayField<double>(sstrm, "real", "mula", 2*NUM_ARM_SUBMOD);
259259
generateTypedArrayField<double>(sstrm, "real", "mulb", 2*NUM_ARM_SUBMOD);
260260
generateTypedArrayField<double>(sstrm, "real", "mulc", 2*NUM_ARM_SUBMOD);
261+
262+
#if 0
261263
generateTypedArrayField<double>(sstrm, "real", "Vca", 2*NUM_ARM_SUBMOD, CAP_SUBMOD_INIT);
262264
generateTypedArrayField<double>(sstrm, "real", "Vcb", 2*NUM_ARM_SUBMOD, CAP_SUBMOD_INIT);
263265
generateTypedArrayField<double>(sstrm, "real", "Vcc", 2*NUM_ARM_SUBMOD, CAP_SUBMOD_INIT);
266+
#endif
267+
268+
auto generateVcxArrayField = [&](const std::string& name)
269+
{
270+
if(NUM_ARM_SUBMOD < 1)
271+
{
272+
throw std::invalid_argument
273+
(
274+
"ModularMultilevelConverter_HalfBridgeModules::generateFields()::generateVcxArrayField() -- NUM_ARM_SUBMOD cannot be less than 1"
275+
);
276+
}
277+
278+
sstrm
279+
<< "static real "
280+
<< appendName(name)
281+
<< "["
282+
<< 2*NUM_ARM_SUBMOD
283+
<< "] = { "
284+
<< CAP_SUBMOD_INIT
285+
;
286+
287+
for(unsigned long i = 1; i < 2*NUM_ARM_SUBMOD; i++)
288+
{
289+
double init_value = 0.0;
290+
291+
if(i < NUM_ARM_SUBMOD )
292+
{
293+
init_value = CAP_SUBMOD_INIT;
294+
}
295+
else
296+
{
297+
init_value = -CAP_SUBMOD_INIT;
298+
}
299+
300+
sstrm << "," << init_value;
301+
}
302+
303+
sstrm << " };\n";
304+
305+
};
306+
307+
generateVcxArrayField("Vca");
308+
generateVcxArrayField("Vcb");
309+
generateVcxArrayField("Vcc");
264310

265311
generateTypedTemporary<double>(sstrm, "real", "upa", 0.0);
266312
generateTypedTemporary<double>(sstrm, "real", "upb", 0.0);

0 commit comments

Comments
 (0)