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  CNode* packageImportDecls;
94 public:
101  static CModule* LookupModule( CSymtab<CDecl>& symtab, char* aName );
107  CModule( CSymbol* symbol, Coord_t* aLoc );
113  virtual CDecl* Clone( CObstack* heap ) { MASSERT(FALSE); }
118  void InlineParamDecls( int v ) { inlineParamDecls = v; }
123  int InlineParamDecls() { return inlineParamDecls; }
128  void InlinePortDecls( int v ) { inlinePortDecls = v; }
133  int InlinePortDecls() { return inlinePortDecls; }
138  void PackageImportDecls( CNode* v ) { packageImportDecls = v; }
143  CNode* PackageImportDecls() { return packageImportDecls; }
149  void ModuleDirectlyDefined( int v ) { moduleDirectlyDefined = v; }
155  int ModuleDirectlyDefined() { return moduleDirectlyDefined; }
160  int IsDefined( void ) { return defined; }
165  void SetDefined( int flag ) { defined = flag; }
171  void ModuleIncluded( int v ) { moduleIncluded = v; }
177  int ModuleIncluded() { return moduleIncluded; }
182  int IsMacroModule( void );
187  void SetMacroModule( int flag );
192  bool IsInterface( void );
197  void SetInterface( bool flag );
202  bool IsModport( void );
207  void SetModport( bool flag );
212  int IsPrimitive( void );
217  void SetPrimitive( int flag );
222  virtual void Dump( FILE* f );
227  void SetPorts( CNode* ports );
232  CNode* GetPorts() { return ports; }
237  virtual vector<CFunction*>* GetFunctionList();
242  virtual vector<CInstance*>* GetInstanceList();
247  virtual vector<CPort*>* GetPortList();
252  virtual vector<CPortDir*>* GetPortDirList();
258  CDecl* FindDecl( CSymbol* sym );
259 
264  int Cell() { return cell; }
269  void Cell( int v ) { cell = v; }
274  int Protect() { return protect; }
279  void Protect( int v ) { protect = v; }
284  int Precision() { return precision; }
289  void Precision( int v ) { precision = v; hasTimescale = TRUE; }
294  int Unit() { return unit; }
299  void Unit( int v ) { unit = v; hasTimescale = TRUE; }
304  int HasTimescale() { return hasTimescale; }
310  int DefaultNetType() { return defaultNetType; }
316  void DefaultNetType( int v ) { defaultNetType = v; }
321  int UnconnectedDrive() { return unconnectedDrive; }
326  void UnconnectedDrive( int v ) { unconnectedDrive = v; }
335  virtual void Add( CFunction* function );
344  virtual void Add( CInstance* instance );
353  virtual void Add( CFref* fref );
362  virtual void Add( CVar* var ) { CBlock::Add(var); }
371  virtual void Add( CNet* net ) { CBlock::Add(net); }
380  virtual void Add( CNode* n );
389  virtual void Add( CParam* param ) { CBlock::Add(param); }
390 
395  void PreVisit1( int (*func)(CNode*,void*), void* data );
396  void PostVisit1( void (*func)(CNode*, void*), void* data );
397  void PostSubVisit1( CNode* (*func)(CNode*, void*), void* data );
398  void FixupPorts( void );
399  void SetFrefSymtab( CSymtab<CDecl>& symtab );
400  void SetPortSymtab( CSymtab<CDecl>& symtab );
401  CSymtab<CDecl>& GetPortSymtab() { return portSymtab; }
402 private:
403  virtual void CodeListChanged() { portDirListValid = FALSE; }
404  CModule( const CModule& );
408 };
409 
410 #endif // CMODULE_HPP
Declaration object for nets.
Definition: cnet.h:46
void ModuleIncluded(int v)
Set included attribute.
Definition: cmodule.h:171
virtual void Add(CInstance *instance)
void Unit(int v)
Set timescale unit.
Definition: cmodule.h:299
static CModule * LookupModule(CSymtab< CDecl > &symtab, char *aName)
Find module declaration from name.
void InlineParamDecls(int v)
Set inline parameter attribute.
Definition: cmodule.h:118
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:371
int IsDefined(void)
Get defined attribute.
Definition: cmodule.h:160
int Protect()
Get protect attribute.
Definition: cmodule.h:274
virtual vector< CInstance * > * GetInstanceList()
Get list if module instances.
int Cell()
Get cell attribute.
Definition: cmodule.h:264
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:128
int ModuleIncluded()
Get included attribute.
Definition: cmodule.h:177
void Precision(int v)
Set timescale precision.
Definition: cmodule.h:289
void DefaultNetType(int v)
Set default net type attribute.
Definition: cmodule.h:316
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:326
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:155
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:362
Definition: cmodule.h:54
void SetInterface(bool flag)
Set interface attribute.
void Cell(int v)
Set cell attribute.
Definition: cmodule.h:269
int InlineParamDecls()
Get inline parameter attribute.
Definition: cmodule.h:123
void SetDefined(int flag)
Set defined attribute.
Definition: cmodule.h:165
CModule(CSymbol *symbol, Coord_t *aLoc)
Create a module declaration.
void Protect(int v)
Set protect attribute.
Definition: cmodule.h:279
virtual void Add(CParam *param)
Definition: cmodule.h:389
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:113
Declaration object for parameters.
Definition: cparam.h:46
void ModuleDirectlyDefined(int v)
Set directly defined attribute.
Definition: cmodule.h:149
CNode * GetPorts()
Get modules port list.
Definition: cmodule.h:232
virtual void PostVisit1(void(*func)(CNode *, void *), void *data)
int InlinePortDecls()
Get inline port attribute.
Definition: cmodule.h:133
Declaration object for functions and tasks.
Definition: cfunction.h:50
virtual vector< CPortDir * > * GetPortDirList()
Get list if module ports declarations.
CNode * PackageImportDecls()
Get package import declarations.
Definition: cmodule.h:143
Declaration object for input/output/inout statements.
Definition: cportdir.h:45
int DefaultNetType()
Get default net type attribute.
Definition: cmodule.h:310
CSymtab< CDecl > symtab
Definition: cblock.h:63
Declaration class for block constructs.
Definition: cblock.h:52
int Precision()
Get timescale precision.
Definition: cmodule.h:284
int Unit()
Get timescale unit.
Definition: cmodule.h:294
bool IsModport(void)
Get modport attribute.
int IsPrimitive(void)
Get primitive attribute.
int UnconnectedDrive()
Get unconnected drive attribute.
Definition: cmodule.h:321
int HasTimescale()
Get timescale present attribute.
Definition: cmodule.h:304
void PackageImportDecls(CNode *v)
Set package import declarations.
Definition: cmodule.h:138