96 ArduinoCodeGen(
const QString &fileName,
const QVector<GraphicElement *> &elements);
102 void generateTestbench(
const QString &tbFileName,
const QVector<TestVector> &vectors);
108 static QString highLow(
Status val);
110 static QString removeForbiddenChars(
const QString &input);
112 static bool isArduinoReserved(
const QString &name);
119 QVector<ArduinoBoardConfig> availableBoards()
const;
124 QString buildSelectExpression(
GraphicElement *elm,
int startIndex,
int numSelectLines);
126 QString otherPortName(
Port *port);
127 QString otherPortNameImpl(
Port *port, QSet<Port *> &visited);
128 void emitFlipFlopBlock(
GraphicElement *elm,
const QString &typeName,
const QString &firstOut,
129 const QString &secondOut,
int clockInputIndex,
int presetInputIndex,
130 int clearInputIndex,
const std::function<
void()> &edgeLogic,
131 const std::function<
void()> &stateEpilogue = {});
135 static bool hasNativeMemory(
const QVector<GraphicElement *> &elements);
139 void emitCommitFlipFlops();
140 void emitCommitFlipFlopsRec(
const QVector<GraphicElement *> &elements);
143 void emitTickDriver();
146 void emitJKFlipFlop(
GraphicElement *elm,
const QString &firstOut);
147 void emitSRFlipFlop(
GraphicElement *elm,
const QString &firstOut);
158 void assignVariablesRec(
const QVector<GraphicElement *> &elements);
160 void declareAuxVariables();
162 void declareAuxVariablesRec(
const QVector<GraphicElement *> &elements,
const bool isBox,
const QString &icPrefix);
167 void declareSequentialStateRec(
const QVector<GraphicElement *> &elements,
bool topLevel);
168 void declareInputs();
170 void declareOutputs();
171 void emitComputeLogicFunction();
179 QHash<Port *, QString> m_varMap;
180 QHash<QString, InputPort *> m_txInputPorts;
181 QStringList m_availablePins;
182 QStringList m_declaredVariables;
183 QTextStream m_stream;
184 QVector<MappedPin> m_inputMap;
185 QVector<MappedPin> m_outputMap;
186 const QVector<GraphicElement *> m_elements;
187 IC *m_currentIC =
nullptr;
189 int m_totalRequiredPins = 0;
190 bool m_hasSequential =
false;
194 [[noreturn]]
void throwPinOverflow()
const;
MappedPin(GraphicElement *elm, const QString &pin, const QString &varName, Port *port, const int portNumber=0)
Constructs a MappedPin for a given element port.