Main Page | Namespace List | Class Hierarchy | Class List | File List | Namespace Members | Class Members | File Members | Related Pages

oagFpgaModuleCompiler.h

Go to the documentation of this file.
00001 
00002 #if !defined(oagFpgaModuleCompiler_P)
00003 #define oagFpgaModuleCompiler_P
00004 
00005 #include "oaDesignDB.h"
00006 #include "oagAiGraph.h"
00007 #include "oagFpga.h"
00008 #include "oagFpgaVerilogDesign.h"
00009 #include "oagFpgaManager.h"
00010 #include <list>
00011 #include <set>
00012 #include <string>
00013 
00014 using namespace std;
00015 
00016 namespace oagFpga {
00017 
00018 // *****************************************************************************
00019 // ModuleCompiler
00020 //
00026 //
00027 // *****************************************************************************
00028 
00029 class ModuleCompiler{
00030 
00031 protected:
00032 
00035 
00036     static void         scalarNet2Ai(oa::oaModBitNet* net);
00037     static void         busNet2Ai(oa::oaModBusNet* bus);
00038     static void         compileOneModule(oa::oaModule *module);
00039     static void         compileFunctionalBBNode(BBRef e);
00040     static void         compileFunctionalMuxBBNode(RtlNode* bbNode);
00041     static void         compileFunctionalSeqBBNode(RtlNode* bbNode);
00042     static void         compileFunctionalOptBBNode(RtlNode* bbNode);
00043     static void         compileBBNode(BBRef e);
00044     static oagAi::Ref   BBRef2AiRef(BBRef e);
00045     static void         BBRef2AiRef(BBRef e, vector<oagAi::Ref>& aiRefs);
00046     static void         BBRef2AiRef(list<BBRef> &e, list<oagAi::Ref>& aiRefs);
00047 
00048 public:
00049 
00050     static void compileModules(oa::oaLib *lib, oa::oaView *view);
00051 
00052 public:
00053 
00057 
00058     static void                    annotateAsynchronousSignal(oagAi::Ref sequential, 
00059                                                               const string label, 
00060                                                               oagAi::Ref signal);
00061 
00065 
00066     static oagAi::Ref                notOf(oagAi::Ref e);
00067     static oagAi::Ref                orOf(oagAi::Ref e1, oagAi::Ref e2);
00068     static oagAi::Ref                andOf(oagAi::Ref e1, oagAi::Ref e2);
00069     static oagAi::Ref                xorOf(oagAi::Ref e1, oagAi::Ref e2);
00070     static oagAi::Ref                mux(oagAi::Ref select, oagAi::Ref in0, oagAi::Ref in1);
00071     static void                      fullAdder(oagAi::Ref &sum, oagAi::Ref &carryOut, 
00072                                             oagAi::Ref e1, oagAi::Ref e2, oagAi::Ref carryIn);
00073     
00077     
00078     static oagAi::Ref                reductionOr(list<oagAi::Ref> &l);
00079     static oagAi::Ref                reductionXor(list<oagAi::Ref> &l);
00080     static oagAi::Ref                reductionAnd(list<oagAi::Ref> &l);
00081     static oagAi::Ref                lessThan(list<oagAi::Ref> &l1, list<oagAi::Ref> &l2);
00082     static oagAi::Ref                equalTo(list<oagAi::Ref> &l1, list<oagAi::Ref> &l2);
00083     static void                      mux(list<oagAi::Ref> &result, oagAi::Ref select, 
00084                                             list<oagAi::Ref> &in0, list<oagAi::Ref> &in1);
00085     static oagAi::Ref                mux(list<oagAi::Ref> &select, list<oagAi::Ref> &in);
00086 
00090 
00091     static void                    arithmeticAdd(list<oagAi::Ref> &result, list<oagAi::Ref> &l1, 
00092                                                     list<oagAi::Ref> &l2);
00093     static void                    arithmeticSubtract(list<oagAi::Ref> &result, oagAi::Ref &negFlag, 
00094                                                     list<oagAi::Ref> &l1, list<oagAi::Ref> &l2);
00095     static void                    arithmeticMultiply(list<oagAi::Ref> &result, 
00096                                                     list<oagAi::Ref> &l1, list<oagAi::Ref> &l2);
00097     static void                    arithmeticDivide(list<oagAi::Ref> &result, list<oagAi::Ref> &l1, 
00098                                                     list<oagAi::Ref> &l2);
00099     static void                    arithmeticModulo(list<oagAi::Ref> &result, 
00100                                                     list<oagAi::Ref> &l1, list<oagAi::Ref> &l2);
00101 
00105 
00106     static oagAi::Ref                latch(oagAi::Ref enable, oagAi::Ref in, const string name = "");
00107     static oagAi::Ref                seq(oagAi::Ref in, const string name = "");
00108 
00112 
00113     static void                    zeroExpand(list<oagAi::Ref> &l1, list<oagAi::Ref> &l2);
00114     static void                    multiBitConstant(list<oagAi::Ref> &result, int value, int bits = 0);
00115 
00119 
00120     static Manager                *currentManager;
00121 
00123 
00124 };
00125 
00126 }
00127 
00128 #endif

Generated on Mon Jul 9 14:17:20 2007 for OA Gear Fpga by  doxygen 1.3.9.1