summaryrefslogtreecommitdiffstats
path: root/src/uscxml/transform/ChartToVHDL.h
diff options
context:
space:
mode:
authorjuehv <heuschkel@tk.tu-darmstadt.de>2016-12-06 14:21:47 (GMT)
committerjuehv <heuschkel@tk.tu-darmstadt.de>2016-12-06 14:21:47 (GMT)
commitc1863fbb939cc6c2b05dd4b39b3df0af03a3e3e9 (patch)
tree77f860258ce45d0f95f8b0963fa7c84e4d1d683a /src/uscxml/transform/ChartToVHDL.h
parentff8b0fef70c774bf60cbb822ec378dc999085fde (diff)
downloaduscxml-c1863fbb939cc6c2b05dd4b39b3df0af03a3e3e9.zip
uscxml-c1863fbb939cc6c2b05dd4b39b3df0af03a3e3e9.tar.gz
uscxml-c1863fbb939cc6c2b05dd4b39b3df0af03a3e3e9.tar.bz2
add condition solver sceleton
Diffstat (limited to 'src/uscxml/transform/ChartToVHDL.h')
-rw-r--r--src/uscxml/transform/ChartToVHDL.h266
1 files changed, 134 insertions, 132 deletions
diff --git a/src/uscxml/transform/ChartToVHDL.h b/src/uscxml/transform/ChartToVHDL.h
index e4d9c53..34cda71 100644
--- a/src/uscxml/transform/ChartToVHDL.h
+++ b/src/uscxml/transform/ChartToVHDL.h
@@ -31,129 +31,129 @@
namespace uscxml {
-class USCXML_API ChartToVHDL : public ChartToC {
-public:
+ class USCXML_API ChartToVHDL : public ChartToC {
+ public:
- virtual ~ChartToVHDL();
+ virtual ~ChartToVHDL();
- static Transformer transform(const Interpreter &other);
+ static Transformer transform(const Interpreter &other);
- void writeTo(std::ostream &stream);
+ void writeTo(std::ostream &stream);
- struct VNode {
- virtual void print(std::ostream &stream, const std::string padding = "") = 0;
+ struct VNode {
+ virtual void print(std::ostream &stream, const std::string padding = "") = 0;
- virtual ~VNode() { };
- };
-
- struct VBranch : VNode {
- std::vector<VNode *> v;
+ virtual ~VNode() { };
+ };
- virtual ~VBranch() {
- for (unsigned i = 0; i < v.size(); i++)
- delete v[i];
- }
+ struct VBranch : VNode {
+ std::vector<VNode *> v;
- VBranch &operator+=(VNode *p) {
- v.push_back(p);
- return *this;
- }
- };
+ virtual ~VBranch() {
+ for (unsigned i = 0; i < v.size(); i++)
+ delete v[i];
+ }
- struct VPointer {
- VNode *ptr;
+ VBranch &operator+=(VNode *p) {
+ v.push_back(p);
+ return *this;
+ }
+ };
- operator VNode *() {
- return ptr;
- }
+ struct VPointer {
+ VNode *ptr;
- operator VBranch *() {
- return static_cast<VBranch *> (ptr);
- }
+ operator VNode *() {
+ return ptr;
+ }
- VPointer &operator/(VNode *p) {
- ptr = p;
- return *this;
- }
- };
+ operator VBranch *() {
+ return static_cast<VBranch *> (ptr);
+ }
- struct VContainer {
- VBranch *ptr;
+ VPointer &operator/(VNode *p) {
+ ptr = p;
+ return *this;
+ }
+ };
- operator VBranch *() {
- return ptr;
- }
+ struct VContainer {
+ VBranch *ptr;
- VContainer &operator/(VBranch *p) {
- ptr = p;
- return *this;
- }
+ operator VBranch *() {
+ return ptr;
+ }
- VContainer &operator,(VPointer p) {
- if (ptr) ptr->v.push_back(p.ptr);
- return *this;
- }
+ VContainer &operator/(VBranch *p) {
+ ptr = p;
+ return *this;
+ }
- VContainer &operator,(VContainer c) {
- if (ptr) ptr->v.push_back(c.ptr);
- return *this;
- }
- };
+ VContainer &operator,(VPointer p) {
+ if (ptr) ptr->v.push_back(p.ptr);
+ return *this;
+ }
- struct VLine : VNode {
- VLine(const std::string &name) : name(name) { }
+ VContainer &operator,(VContainer c) {
+ if (ptr) ptr->v.push_back(c.ptr);
+ return *this;
+ }
+ };
- virtual void print(std::ostream &stream, const std::string padding = "") {
- stream << " " << name;
- }
+ struct VLine : VNode {
+ VLine(const std::string &name) : name(name) { }
- std::string name;
- };
+ virtual void print(std::ostream &stream, const std::string padding = "") {
+ stream << " " << name;
+ }
- struct VAssign : VBranch {
- virtual void print(std::ostream &stream, const std::string padding = "") {
- v[0]->print(stream, padding);
- stream << padding << " <=";
- v[1]->print(stream, padding + " ");
- }
- };
+ std::string name;
+ };
- struct VAnd : VBranch {
- virtual void print(std::ostream &stream, const std::string padding = "") {
- stream << std::endl << padding << "( '1' ";
- for (unsigned i = 0; i < v.size(); i++) {
- stream << std::endl << padding << " and";
- v[i]->print(stream, padding + " ");
+ struct VAssign : VBranch {
+ virtual void print(std::ostream &stream, const std::string padding = "") {
+ v[0]->print(stream, padding);
+ stream << padding << " <=";
+ v[1]->print(stream, padding + " ");
}
- stream << padding << ")" << std::endl;
- }
- };
-
- struct VOr : VBranch {
- virtual void print(std::ostream &stream, const std::string padding = "") {
- stream << std::endl << padding << "( '0' ";
- for (unsigned i = 0; i < v.size(); i++) {
- stream << std::endl << padding << " or";
- v[i]->print(stream, padding + " ");
+ };
+
+ struct VAnd : VBranch {
+ virtual void print(std::ostream &stream, const std::string padding = "") {
+ stream << std::endl << padding << "( '1' ";
+ for (unsigned i = 0; i < v.size(); i++) {
+ stream << std::endl << padding << " and";
+ v[i]->print(stream, padding + " ");
+ }
+ stream << padding << ")" << std::endl;
}
- stream << std::endl << padding << ")" << std::endl;
- }
- };
+ };
+
+ struct VOr : VBranch {
+ virtual void print(std::ostream &stream, const std::string padding = "") {
+ stream << std::endl << padding << "( '0' ";
+ for (unsigned i = 0; i < v.size(); i++) {
+ stream << std::endl << padding << " or";
+ v[i]->print(stream, padding + " ");
+ }
+ stream << std::endl << padding << ")" << std::endl;
+ }
+ };
- struct VNot : VBranch {
- virtual void print(std::ostream &stream, const std::string padding = "") {
- stream << " ( not";
- v[0]->print(stream, padding + " ");
- stream << " )";
- }
- };
+ struct VNot : VBranch {
+ virtual void print(std::ostream &stream, const std::string padding = "") {
+ stream << " ( not";
+ v[0]->print(stream, padding + " ");
+ stream << " )";
+ }
+ };
- struct VNop : VBranch {
- virtual void print(std::ostream &stream, const std::string padding = "") {
- v[0]->print(stream, padding);
- }
- };
+ struct VNop : VBranch {
+ virtual void print(std::ostream &stream, const std::string padding = "") {
+ v[0]->print(stream, padding);
+ }
+ };
//TODO can we create the macros without IDE errors ?!
#define VLINE VPointer()/new VLine
@@ -164,66 +164,68 @@ public:
#define VNOP VContainer()/new VNop
-protected:
- ChartToVHDL(const Interpreter &other);
+ protected:
+ ChartToVHDL(const Interpreter &other);
+
+ void findEvents();
- void findEvents();
+ void writeIncludes(std::ostream &stream);
- void writeIncludes(std::ostream &stream);
+ // top layer components
+ void writeFiFo(std::ostream &stream);
- // top layer components
- void writeFiFo(std::ostream &stream);
+ void writeEventController(std::ostream &stream);
- void writeEventController(std::ostream &stream);
+ void writeConditionSolver(std::ostream &stream);
- void writeMicroStepper(std::ostream &stream);
+ void writeMicroStepper(std::ostream &stream);
- void writeTestbench(std::ostream &stream);
+ void writeTestbench(std::ostream &stream);
- void writeTopLevel(std::ostream &stream);
+ void writeTopLevel(std::ostream &stream);
- // system
- void writeSignalsAndComponents(std::ostream &stream);
+ // system
+ void writeSignalsAndComponents(std::ostream &stream);
- void writeSystemSignalMapping(std::ostream &stream);
+ void writeSystemSignalMapping(std::ostream &stream);
- void writeModuleInstantiation(std::ostream &stream);
+ void writeModuleInstantiation(std::ostream &stream);
- // combinatorial logic
- void writeOptimalTransitionSetSelection(std::ostream &stream);
+ // combinatorial logic
+ void writeOptimalTransitionSetSelection(std::ostream &stream);
- void writeExitSet(std::ostream &stream);
+ void writeExitSet(std::ostream &stream);
- void writeEntrySet(std::ostream &stream);
+ void writeEntrySet(std::ostream &stream);
- void writeCompleteEntrySet(std::ostream &stream);
+ void writeCompleteEntrySet(std::ostream &stream);
- void writeActiveStateNplusOne(std::ostream &stream);
+ void writeActiveStateNplusOne(std::ostream &stream);
- // handler
- void writeStateHandler(std::ostream &stream);
+ // handler
+ void writeStateHandler(std::ostream &stream);
- void writeResetHandler(std::ostream &stream);
+ void writeResetHandler(std::ostream &stream);
- void writeSpontaneousHandler(std::ostream &stream);
+ void writeSpontaneousHandler(std::ostream &stream);
- void writeInternalEventHandler(std::ostream &stream);
+ void writeInternalEventHandler(std::ostream &stream);
- void writeErrorHandler(std::ostream &stream);
+ void writeErrorHandler(std::ostream &stream);
- Trie _eventTrie;
- std::list<TrieNode *> _eventNames;
- size_t _eventBitSize = 0;
- std::map<std::string, std::string> _eventsOnBus;
- std::list<XERCESC_NS::DOMElement *> _execContent;
+ Trie _eventTrie;
+ std::list<TrieNode *> _eventNames;
+ size_t _eventBitSize = 0;
+ std::map<std::string, std::string> _eventsOnBus;
+ std::list<XERCESC_NS::DOMElement *> _execContent;
-private:
- std::string getLineForExecContent(const XERCESC_NS::DOMNode *elem);
+ private:
+ std::string getLineForExecContent(const XERCESC_NS::DOMNode *elem);
- bool isSupportedExecContent(XERCESC_NS::DOMElement *execContentElement);
-};
+ bool isSupportedExecContent(XERCESC_NS::DOMElement *execContentElement);
+ };
}