vrq
cmodule.h
Go to the documentation of this file.
1 /*****************************************************************************
2  * Copyright (C) 1997-2007, Mark Hummel
3  * This file is part of Vrq.
4  *
5  * Vrq is free software; you can redistribute it and/or
6  * modify it under the terms of the GNU General Public
7  * License as published by the Free Software Foundation; either
8  * version 2 of the License, or (at your option) any later version.
9  *
10  * Vrq is distributed in the hope that it will be useful,
11  * but WITHOUT ANY WARRANTY; without even the implied warranty of
12  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13  * General Public License for more details.
14  *
15  * You should have received a copy of the GNU General Public
16  * License along with this library; if not, write to the Free Software
17  * Foundation, Inc., 51 Franklin Street, Fifth Floor,
18  * Boston, MA 02110-1301 USA
19  *****************************************************************************
20  */
21 /******************************************************************************
22  *
23  *
24  * cmodule.hpp
25  * - class definition of module, macromodules, and primitive
26  * definition nodes
27  *
28  ******************************************************************************
29  */
30 
31 #ifndef CMODULE_HPP
32 #define CMODULE_HPP
33 
34 #include <stdio.h>
35 #include <vector>
36 #include "glue.h"
37 #include "cdecl.h"
38 #include "csymtab.h"
39 #include "cblock.h"
40 #include "cnode.h"
41 extern "C" {
42  #include "vpi_user.h"
43 }
44 
45 
46 class CInstance;
47 class CParam;
48 class CVar;
49 class CPortDir;
50 class CFref;
51 class CNode;
52 
53 
54 class CModule: public CBlock
55 {
56 private:
57  int isMacroModule;
58  bool isInterface;
59  bool isModport;
60  int isPrimitive;
61  vector<CInstance*> instanceList;
62  vector<CFunction*> functionList;
63  vector<CFref*> frefList;
64  int portListValid;
65  vector<CPort*> portList;
67  int portDirListValid;
68  vector<CPortDir*> portDirList;
70  CNode* ports;
71  int defined;
72  CSymtab<CDecl> frefSymtab;
74  CSymtab<CDecl> portSymtab;
75  int moduleDirectlyDefined;
76  int moduleIncluded;
79  int cell;
81  int protect;
82  int hasTimescale;
83  int precision;
84  int unit;
85  int defaultNetType;
86  int unconnectedDrive;
88  int inlineParamDecls;
90  int inlinePortDecls;
92 public:
100  static CModule* LookupModule( CSymtab<CDecl>& symtab, char* aName );
106  CModule( CSymbol* symbol, Coord_t* aLoc );
112  virtual CDecl* Clone( CObstack* heap ) { MASSERT(FALSE); }
117  void InlineParamDecls( int v ) { inlineParamDecls = v; }
122  int InlineParamDecls() { return inlineParamDecls; }
127  void InlinePortDecls( int v ) { inlinePortDecls = v; }
132  int InlinePortDecls() { return inlinePortDecls; }
138  void ModuleDirectlyDefined( int v ) { moduleDirectlyDefined = v; }
144  int ModuleDirectlyDefined() { return moduleDirectlyDefined; }
149  int IsDefined( void ) { return defined; }
154  void SetDefined( int flag ) { defined = flag; }
160  void ModuleIncluded( int v ) { moduleIncluded = v; }
166  int ModuleIncluded() { return moduleIncluded; }
171  int IsMacroModule( void );
176  void SetMacroModule( int flag );
181  bool IsInterface( void );
186  void SetInterface( bool flag );
191  bool IsModport( void );
196  void SetModport( bool flag );
201  int IsPrimitive( void );
206  void SetPrimitive( int flag );
211  virtual void Dump( FILE* f );
216  void SetPorts( CNode* ports );
221  CNode* GetPorts() { return ports; }
226  virtual vector<CFunction*>* GetFunctionList();
231  virtual vector<CInstance*>* GetInstanceList();
236  virtual vector<CPort*>* GetPortList();
241  virtual vector<CPortDir*>* GetPortDirList();
247  CDecl* FindDecl( CSymbol* sym );
248 
253  int Cell() { return cell; }
258  void Cell( int v ) { cell = v; }
263  int Protect() { return protect; }
268  void Protect( int v ) { protect = v; }
273  int Precision() { return precision; }
278  void Precision( int v ) { precision = v; hasTimescale = TRUE; }
283  int Unit() { return unit; }
288  void Unit( int v ) { unit = v; hasTimescale = TRUE; }
293  int HasTimescale() { return hasTimescale; }
299  int DefaultNetType() { return defaultNetType; }
305  void DefaultNetType( int v ) { defaultNetType = v; }
310  int UnconnectedDrive() { return unconnectedDrive; }
315  void UnconnectedDrive( int v ) { unconnectedDrive = v; }
324  virtual void Add( CFunction* function );
333  virtual void Add( CInstance* instance );
342  virtual void Add( CFref* fref );
351  virtual void Add( CVar* var ) { CBlock::Add(var); }
360  virtual void Add( CNet* net ) { CBlock::Add(net); }
369  virtual void Add( CNode* n );
378  virtual void Add( CParam* param ) { CBlock::Add(param); }
379 
384  void PreVisit1( int (*func)(CNode*,void*), void* data );
385  void PostVisit1( void (*func)(CNode*, void*), void* data );
386  void PostSubVisit1( CNode* (*func)(CNode*, void*), void* data );
387  void FixupPorts( void );
388  void SetFrefSymtab( CSymtab<CDecl>& symtab );
389  void SetPortSymtab( CSymtab<CDecl>& symtab );
390  CSymtab<CDecl>& GetPortSymtab() { return portSymtab; }
391 private:
392  virtual void CodeListChanged() { portDirListValid = FALSE; }
393  CModule( const CModule& );
397 };
398 
399 #endif // CMODULE_HPP
Declaration object for nets.
Definition: cnet.h:46
void ModuleIncluded(int v)
Set included attribute.
Definition: cmodule.h:160
virtual void Add(CInstance *instance)
void Unit(int v)
Set timescale unit.
Definition: cmodule.h:288
static CModule * LookupModule(CSymtab< CDecl > &symtab, char *aName)
Find module declaration from name.
void InlineParamDecls(int v)
Set inline parameter attribute.
Definition: cmodule.h:117
void SetPorts(CNode *ports)
Set module port list.
virtual void Dump(FILE *f)
Dump macro info to file descriptor.
virtual void Add(CNet *net)
Definition: cmodule.h:360
int IsDefined(void)
Get defined attribute.
Definition: cmodule.h:149
int Protect()
Get protect attribute.
Definition: cmodule.h:263
virtual vector< CInstance * > * GetInstanceList()
Get list if module instances.
int Cell()
Get cell attribute.
Definition: cmodule.h:253
int IsMacroModule(void)
Get macro module attribute.
virtual void PreVisit1(int(*func)(CNode *, void *), void *data)
void InlinePortDecls(int v)
Set inline port attribute.
Definition: cmodule.h:127
int ModuleIncluded()
Get included attribute.
Definition: cmodule.h:166
void Precision(int v)
Set timescale precision.
Definition: cmodule.h:278
void DefaultNetType(int v)
Set default net type attribute.
Definition: cmodule.h:305
virtual vector< CPort * > * GetPortList()
Get list if module ports.
Structure to hold file coordinates.
Definition: cdecl.h:47
Holder for character strings.
Definition: csymbol.h:44
Forward reference declaration.
Definition: cfref.h:51
void UnconnectedDrive(int v)
Set unconnected drive attribute.
Definition: cmodule.h:315
Bulk object allocation object.
Definition: cobstack.h:46
void SetMacroModule(int flag)
Set macro module attribute.
virtual vector< CFunction * > * GetFunctionList()
Get list of functions/tasks.
Primary data structure representing parse tree nodes.
Definition: cnode.h:197
virtual void Add(CFunction *function)
void SetModport(bool flag)
Set modport attribute.
Declaration object for module and gate instances.
Definition: cinstance.h:45
int ModuleDirectlyDefined()
Get directly defined attribute.
Definition: cmodule.h:144
void SetPrimitive(int flag)
Set primitive attribute.
CDecl * FindDecl(CSymbol *sym)
Find declaration in modules scope for given symbol.
virtual void PostSubVisit1(CNode *(*func)(CNode *, void *), void *data)
virtual void Add(CVar *var)
Definition: cmodule.h:351
Definition: cmodule.h:54
void SetInterface(bool flag)
Set interface attribute.
void Cell(int v)
Set cell attribute.
Definition: cmodule.h:258
int InlineParamDecls()
Get inline parameter attribute.
Definition: cmodule.h:122
void SetDefined(int flag)
Set defined attribute.
Definition: cmodule.h:154
CModule(CSymbol *symbol, Coord_t *aLoc)
Create a module declaration.
void Protect(int v)
Set protect attribute.
Definition: cmodule.h:268
virtual void Add(CParam *param)
Definition: cmodule.h:378
Base class for describing declaration objects.
Definition: cdecl.h:164
bool IsInterface(void)
Get interface attribute.
Declaration object for variables.
Definition: cvar.h:50
virtual CDecl * Clone(CObstack *heap)
Create a clone of this declaration.
Definition: cmodule.h:112
Declaration object for parameters.
Definition: cparam.h:46
void ModuleDirectlyDefined(int v)
Set directly defined attribute.
Definition: cmodule.h:138
CNode * GetPorts()
Get modules port list.
Definition: cmodule.h:221
virtual void PostVisit1(void(*func)(CNode *, void *), void *data)
int InlinePortDecls()
Get inline port attribute.
Definition: cmodule.h:132
Declaration object for functions and tasks.
Definition: cfunction.h:50
virtual vector< CPortDir * > * GetPortDirList()
Get list if module ports declarations.
Declaration object for input/output/inout statements.
Definition: cportdir.h:45
int DefaultNetType()
Get default net type attribute.
Definition: cmodule.h:299
CSymtab< CDecl > symtab
Definition: cblock.h:62
Declaration class for block constructs.
Definition: cblock.h:52
int Precision()
Get timescale precision.
Definition: cmodule.h:273
int Unit()
Get timescale unit.
Definition: cmodule.h:283
bool IsModport(void)
Get modport attribute.
int IsPrimitive(void)
Get primitive attribute.
int UnconnectedDrive()
Get unconnected drive attribute.
Definition: cmodule.h:310
int HasTimescale()
Get timescale present attribute.
Definition: cmodule.h:293