Support carrying the scope of named begin-end
blocks down to the code generator, and have the vvp code generator use that to support disable.
This commit is contained in:
parent
bfad382fd1
commit
422754f36f
36
elaborate.cc
36
elaborate.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: elaborate.cc,v 1.250 2002/05/26 01:39:02 steve Exp $"
|
#ident "$Id: elaborate.cc,v 1.251 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -1078,7 +1078,7 @@ NetProc* PAssign::elaborate(Design*des, NetScope*scope) const
|
||||||
}
|
}
|
||||||
|
|
||||||
/* And build up the complex statement. */
|
/* And build up the complex statement. */
|
||||||
NetBlock*bl = new NetBlock(NetBlock::SEQU);
|
NetBlock*bl = new NetBlock(NetBlock::SEQU, 0);
|
||||||
bl->append(a1);
|
bl->append(a1);
|
||||||
bl->append(st);
|
bl->append(st);
|
||||||
|
|
||||||
|
|
@ -1194,10 +1194,8 @@ NetProc* PBlock::elaborate(Design*des, NetScope*scope) const
|
||||||
NetBlock::Type type = (bl_type_==PBlock::BL_PAR)
|
NetBlock::Type type = (bl_type_==PBlock::BL_PAR)
|
||||||
? NetBlock::PARA
|
? NetBlock::PARA
|
||||||
: NetBlock::SEQU;
|
: NetBlock::SEQU;
|
||||||
NetBlock*cur = new NetBlock(type);
|
|
||||||
bool fail_flag = false;
|
|
||||||
|
|
||||||
NetScope*nscope;
|
NetScope*nscope = 0;
|
||||||
if (name_.length()) {
|
if (name_.length()) {
|
||||||
nscope = scope->child(name_);
|
nscope = scope->child(name_);
|
||||||
if (nscope == 0) {
|
if (nscope == 0) {
|
||||||
|
|
@ -1205,16 +1203,19 @@ NetProc* PBlock::elaborate(Design*des, NetScope*scope) const
|
||||||
"unable to find block scope " << scope->name()
|
"unable to find block scope " << scope->name()
|
||||||
<< "<" << name_ << ">" << endl;
|
<< "<" << name_ << ">" << endl;
|
||||||
des->errors += 1;
|
des->errors += 1;
|
||||||
delete cur;
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
assert(nscope);
|
assert(nscope);
|
||||||
|
|
||||||
} else {
|
|
||||||
nscope = scope;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetBlock*cur = new NetBlock(type, nscope);
|
||||||
|
bool fail_flag = false;
|
||||||
|
|
||||||
|
if (nscope == 0)
|
||||||
|
nscope = scope;
|
||||||
|
|
||||||
// Handle the special case that the block contains only one
|
// Handle the special case that the block contains only one
|
||||||
// statement. There is no need to keep the block node.
|
// statement. There is no need to keep the block node.
|
||||||
if (list_.count() == 1) {
|
if (list_.count() == 1) {
|
||||||
|
|
@ -1370,7 +1371,7 @@ NetProc* PCondit::elaborate(Design*des, NetScope*scope) const
|
||||||
else if (else_)
|
else if (else_)
|
||||||
return else_->elaborate(des, scope);
|
return else_->elaborate(des, scope);
|
||||||
else
|
else
|
||||||
return new NetBlock(NetBlock::SEQU);
|
return new NetBlock(NetBlock::SEQU, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
// If the condition expression is more then 1 bits, then
|
// If the condition expression is more then 1 bits, then
|
||||||
|
|
@ -1503,7 +1504,7 @@ NetProc* PCallTask::elaborate_usr(Design*des, NetScope*scope) const
|
||||||
return cur;
|
return cur;
|
||||||
}
|
}
|
||||||
|
|
||||||
NetBlock*block = new NetBlock(NetBlock::SEQU);
|
NetBlock*block = new NetBlock(NetBlock::SEQU, 0);
|
||||||
|
|
||||||
|
|
||||||
/* Detect the case where the definition of the task is known
|
/* Detect the case where the definition of the task is known
|
||||||
|
|
@ -1899,7 +1900,7 @@ NetProc* PEventStatement::elaborate_st(Design*des, NetScope*scope,
|
||||||
block to join the wait and the statement. */
|
block to join the wait and the statement. */
|
||||||
|
|
||||||
if (enet) {
|
if (enet) {
|
||||||
NetBlock*bl = new NetBlock(NetBlock::SEQU);
|
NetBlock*bl = new NetBlock(NetBlock::SEQU, 0);
|
||||||
bl->set_line(*this);
|
bl->set_line(*this);
|
||||||
bl->append(co);
|
bl->append(co);
|
||||||
bl->append(enet);
|
bl->append(enet);
|
||||||
|
|
@ -2126,7 +2127,7 @@ NetProc* PForStatement::elaborate(Design*des, NetScope*scope) const
|
||||||
const PEIdent*id2 = dynamic_cast<const PEIdent*>(name2_);
|
const PEIdent*id2 = dynamic_cast<const PEIdent*>(name2_);
|
||||||
assert(id2);
|
assert(id2);
|
||||||
|
|
||||||
NetBlock*top = new NetBlock(NetBlock::SEQU);
|
NetBlock*top = new NetBlock(NetBlock::SEQU, 0);
|
||||||
|
|
||||||
/* make the expression, and later the initial assignment to
|
/* make the expression, and later the initial assignment to
|
||||||
the condition variable. The statement in the for loop is
|
the condition variable. The statement in the for loop is
|
||||||
|
|
@ -2150,7 +2151,7 @@ NetProc* PForStatement::elaborate(Design*des, NetScope*scope) const
|
||||||
|
|
||||||
top->append(init);
|
top->append(init);
|
||||||
|
|
||||||
NetBlock*body = new NetBlock(NetBlock::SEQU);
|
NetBlock*body = new NetBlock(NetBlock::SEQU, 0);
|
||||||
|
|
||||||
/* Elaborate the statement that is contained in the for
|
/* Elaborate the statement that is contained in the for
|
||||||
loop. If there is an error, this will return 0 and I should
|
loop. If there is an error, this will return 0 and I should
|
||||||
|
|
@ -2280,7 +2281,7 @@ NetProc* PRepeat::elaborate(Design*des, NetScope*scope) const
|
||||||
case 0:
|
case 0:
|
||||||
delete expr;
|
delete expr;
|
||||||
delete stat;
|
delete stat;
|
||||||
return new NetBlock(NetBlock::SEQU);
|
return new NetBlock(NetBlock::SEQU, 0);
|
||||||
case 1:
|
case 1:
|
||||||
delete expr;
|
delete expr;
|
||||||
return stat;
|
return stat;
|
||||||
|
|
@ -2331,7 +2332,7 @@ void PTask::elaborate(Design*des, NetScope*task) const
|
||||||
NetProc*st;
|
NetProc*st;
|
||||||
if (statement_ == 0) {
|
if (statement_ == 0) {
|
||||||
cerr << get_line() << ": warning: task has no statement." << endl;
|
cerr << get_line() << ": warning: task has no statement." << endl;
|
||||||
st = new NetBlock(NetBlock::SEQU);
|
st = new NetBlock(NetBlock::SEQU, 0);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
@ -2568,6 +2569,11 @@ Design* elaborate(list<const char*>roots)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: elaborate.cc,v $
|
* $Log: elaborate.cc,v $
|
||||||
|
* Revision 1.251 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.250 2002/05/26 01:39:02 steve
|
* Revision 1.250 2002/05/26 01:39:02 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
1
ivl.def
1
ivl.def
|
|
@ -140,6 +140,7 @@ ivl_process_type
|
||||||
ivl_statement_type
|
ivl_statement_type
|
||||||
|
|
||||||
ivl_stmt_block_count
|
ivl_stmt_block_count
|
||||||
|
ivl_stmt_block_scope
|
||||||
ivl_stmt_block_stmt
|
ivl_stmt_block_stmt
|
||||||
ivl_stmt_call
|
ivl_stmt_call
|
||||||
ivl_stmt_case_count
|
ivl_stmt_case_count
|
||||||
|
|
|
||||||
14
ivl_target.h
14
ivl_target.h
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: ivl_target.h,v 1.97 2002/05/26 01:39:02 steve Exp $"
|
#ident "$Id: ivl_target.h,v 1.98 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
|
|
@ -968,11 +968,18 @@ extern ivl_statement_type_t ivl_statement_type(ivl_statement_t net);
|
||||||
* make up the statement. Many of these functions apply to more then
|
* make up the statement. Many of these functions apply to more then
|
||||||
* one type of statement, so the comment in front of them tells which
|
* one type of statement, so the comment in front of them tells which
|
||||||
* statement types can be passed to the function.
|
* statement types can be passed to the function.
|
||||||
|
*
|
||||||
|
* ivl_stmt_block_scope
|
||||||
|
* If the block is named, then there is a scope associated with
|
||||||
|
* this. The code generator may need to know this in order to
|
||||||
|
* handle disable statements.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* IVL_ST_BLOCK, IVL_ST_FORK */
|
/* IVL_ST_BLOCK, IVL_ST_FORK */
|
||||||
extern unsigned ivl_stmt_block_count(ivl_statement_t net);
|
extern unsigned ivl_stmt_block_count(ivl_statement_t net);
|
||||||
/* IVL_ST_BLOCK, IVL_ST_FORK */
|
/* IVL_ST_BLOCK, IVL_ST_FORK */
|
||||||
|
extern ivl_scope_t ivl_stmt_block_scope(ivl_statement_t net);
|
||||||
|
/* IVL_ST_BLOCK, IVL_ST_FORK */
|
||||||
extern ivl_statement_t ivl_stmt_block_stmt(ivl_statement_t net, unsigned i);
|
extern ivl_statement_t ivl_stmt_block_stmt(ivl_statement_t net, unsigned i);
|
||||||
/* IVL_ST_UTASK IVL_ST_DISABLE */
|
/* IVL_ST_UTASK IVL_ST_DISABLE */
|
||||||
extern ivl_scope_t ivl_stmt_call(ivl_statement_t net);
|
extern ivl_scope_t ivl_stmt_call(ivl_statement_t net);
|
||||||
|
|
@ -1043,6 +1050,11 @@ _END_DECL
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: ivl_target.h,v $
|
* $Log: ivl_target.h,v $
|
||||||
|
* Revision 1.98 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.97 2002/05/26 01:39:02 steve
|
* Revision 1.97 2002/05/26 01:39:02 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
12
netlist.cc
12
netlist.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: netlist.cc,v 1.187 2002/05/26 01:39:02 steve Exp $"
|
#ident "$Id: netlist.cc,v 1.188 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -1484,6 +1484,11 @@ NetAssignMemNB::~NetAssignMemNB()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
NetBlock::NetBlock(Type t, NetScope*ss)
|
||||||
|
: type_(t), subscope_(ss), last_(0)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
NetBlock::~NetBlock()
|
NetBlock::~NetBlock()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
@ -2352,6 +2357,11 @@ const NetProc*NetTaskDef::proc() const
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netlist.cc,v $
|
* $Log: netlist.cc,v $
|
||||||
|
* Revision 1.188 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.187 2002/05/26 01:39:02 steve
|
* Revision 1.187 2002/05/26 01:39:02 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
13
netlist.h
13
netlist.h
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: netlist.h,v 1.238 2002/05/26 01:39:02 steve Exp $"
|
#ident "$Id: netlist.h,v 1.239 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
@ -1385,10 +1385,11 @@ class NetBlock : public NetProc {
|
||||||
public:
|
public:
|
||||||
enum Type { SEQU, PARA };
|
enum Type { SEQU, PARA };
|
||||||
|
|
||||||
NetBlock(Type t) : type_(t), last_(0) { }
|
NetBlock(Type t, NetScope*subscope);
|
||||||
~NetBlock();
|
~NetBlock();
|
||||||
|
|
||||||
const Type type() const { return type_; }
|
Type type() const { return type_; }
|
||||||
|
NetScope* subscope() const { return subscope_; }
|
||||||
|
|
||||||
void append(NetProc*);
|
void append(NetProc*);
|
||||||
|
|
||||||
|
|
@ -1407,6 +1408,7 @@ class NetBlock : public NetProc {
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const Type type_;
|
const Type type_;
|
||||||
|
NetScope*subscope_;
|
||||||
|
|
||||||
NetProc*last_;
|
NetProc*last_;
|
||||||
};
|
};
|
||||||
|
|
@ -2973,6 +2975,11 @@ extern ostream& operator << (ostream&, NetNet::Type);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: netlist.h,v $
|
* $Log: netlist.h,v $
|
||||||
|
* Revision 1.239 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.238 2002/05/26 01:39:02 steve
|
* Revision 1.238 2002/05/26 01:39:02 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
19
t-dll-api.cc
19
t-dll-api.cc
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: t-dll-api.cc,v 1.80 2002/05/26 01:39:03 steve Exp $"
|
#ident "$Id: t-dll-api.cc,v 1.81 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -1210,6 +1210,18 @@ extern "C" ivl_statement_type_t ivl_statement_type(ivl_statement_t net)
|
||||||
return net->type_;
|
return net->type_;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern "C" ivl_scope_t ivl_stmt_block_scope(ivl_statement_t net)
|
||||||
|
{
|
||||||
|
switch (net->type_) {
|
||||||
|
case IVL_ST_BLOCK:
|
||||||
|
case IVL_ST_FORK:
|
||||||
|
return net->u_.block_.scope;
|
||||||
|
default:
|
||||||
|
assert(0);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
extern "C" unsigned ivl_stmt_block_count(ivl_statement_t net)
|
extern "C" unsigned ivl_stmt_block_count(ivl_statement_t net)
|
||||||
{
|
{
|
||||||
switch (net->type_) {
|
switch (net->type_) {
|
||||||
|
|
@ -1531,6 +1543,11 @@ extern "C" ivl_statement_t ivl_stmt_sub_stmt(ivl_statement_t net)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll-api.cc,v $
|
* $Log: t-dll-api.cc,v $
|
||||||
|
* Revision 1.81 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.80 2002/05/26 01:39:03 steve
|
* Revision 1.80 2002/05/26 01:39:03 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
|
|
@ -18,7 +18,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: t-dll-proc.cc,v 1.43 2002/05/26 01:39:03 steve Exp $"
|
#ident "$Id: t-dll-proc.cc,v 1.44 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -326,6 +326,11 @@ bool dll_target::proc_block(const NetBlock*net)
|
||||||
stmt_cur_->u_.block_.stmt_ = (struct ivl_statement_s*)
|
stmt_cur_->u_.block_.stmt_ = (struct ivl_statement_s*)
|
||||||
calloc(count, sizeof(struct ivl_statement_s));
|
calloc(count, sizeof(struct ivl_statement_s));
|
||||||
|
|
||||||
|
if (net->subscope())
|
||||||
|
stmt_cur_->u_.block_.scope = lookup_scope_(net->subscope());
|
||||||
|
else
|
||||||
|
stmt_cur_->u_.block_.scope = 0;
|
||||||
|
|
||||||
struct ivl_statement_s*save_cur_ = stmt_cur_;
|
struct ivl_statement_s*save_cur_ = stmt_cur_;
|
||||||
unsigned idx = 0;
|
unsigned idx = 0;
|
||||||
bool flag = true;
|
bool flag = true;
|
||||||
|
|
@ -808,6 +813,11 @@ void dll_target::proc_while(const NetWhile*net)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll-proc.cc,v $
|
* $Log: t-dll-proc.cc,v $
|
||||||
|
* Revision 1.44 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.43 2002/05/26 01:39:03 steve
|
* Revision 1.43 2002/05/26 01:39:03 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
8
t-dll.h
8
t-dll.h
|
|
@ -19,7 +19,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: t-dll.h,v 1.79 2002/05/26 01:39:03 steve Exp $"
|
#ident "$Id: t-dll.h,v 1.80 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "target.h"
|
# include "target.h"
|
||||||
|
|
@ -534,6 +534,7 @@ struct ivl_statement_s {
|
||||||
struct { /* IVL_ST_BLOCK, IVL_ST_FORK */
|
struct { /* IVL_ST_BLOCK, IVL_ST_FORK */
|
||||||
struct ivl_statement_s*stmt_;
|
struct ivl_statement_s*stmt_;
|
||||||
unsigned nstmt_;
|
unsigned nstmt_;
|
||||||
|
ivl_scope_t scope;
|
||||||
} block_;
|
} block_;
|
||||||
|
|
||||||
struct { /* IVL_ST_CASE, IVL_ST_CASEX, IVL_ST_CASEZ */
|
struct { /* IVL_ST_CASE, IVL_ST_CASEX, IVL_ST_CASEZ */
|
||||||
|
|
@ -603,6 +604,11 @@ struct ivl_statement_s {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: t-dll.h,v $
|
* $Log: t-dll.h,v $
|
||||||
|
* Revision 1.80 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.79 2002/05/26 01:39:03 steve
|
* Revision 1.79 2002/05/26 01:39:03 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT) && !defined(macintosh)
|
#if !defined(WINNT) && !defined(macintosh)
|
||||||
#ident "$Id: stub.c,v 1.60 2002/05/26 01:39:03 steve Exp $"
|
#ident "$Id: stub.c,v 1.61 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
|
|
@ -273,7 +273,13 @@ static void show_statement(ivl_statement_t net, unsigned ind)
|
||||||
|
|
||||||
case IVL_ST_BLOCK: {
|
case IVL_ST_BLOCK: {
|
||||||
unsigned cnt = ivl_stmt_block_count(net);
|
unsigned cnt = ivl_stmt_block_count(net);
|
||||||
|
ivl_scope_t sscope = ivl_stmt_block_scope(net);
|
||||||
|
if (sscope)
|
||||||
|
fprintf(out, "%*sbegin : %s\n", ind, "",
|
||||||
|
ivl_scope_name(sscope));
|
||||||
|
else
|
||||||
fprintf(out, "%*sbegin\n", ind, "");
|
fprintf(out, "%*sbegin\n", ind, "");
|
||||||
|
|
||||||
for (idx = 0 ; idx < cnt ; idx += 1) {
|
for (idx = 0 ; idx < cnt ; idx += 1) {
|
||||||
ivl_statement_t cur = ivl_stmt_block_stmt(net, idx);
|
ivl_statement_t cur = ivl_stmt_block_stmt(net, idx);
|
||||||
show_statement(cur, ind+4);
|
show_statement(cur, ind+4);
|
||||||
|
|
@ -682,6 +688,11 @@ int target_design(ivl_design_t des)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: stub.c,v $
|
* $Log: stub.c,v $
|
||||||
|
* Revision 1.61 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.60 2002/05/26 01:39:03 steve
|
* Revision 1.60 2002/05/26 01:39:03 steve
|
||||||
* Carry Verilog 2001 attributes with processes,
|
* Carry Verilog 2001 attributes with processes,
|
||||||
* all the way through to the ivl_target API.
|
* all the way through to the ivl_target API.
|
||||||
|
|
|
||||||
|
|
@ -17,7 +17,7 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#if !defined(WINNT)
|
#if !defined(WINNT)
|
||||||
#ident "$Id: vvp_process.c,v 1.57 2002/04/22 02:41:30 steve Exp $"
|
#ident "$Id: vvp_process.c,v 1.58 2002/05/27 00:08:45 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vvp_priv.h"
|
# include "vvp_priv.h"
|
||||||
|
|
@ -33,6 +33,8 @@ static int show_statement(ivl_statement_t net, ivl_scope_t sscope);
|
||||||
unsigned local_count = 0;
|
unsigned local_count = 0;
|
||||||
unsigned thread_count = 0;
|
unsigned thread_count = 0;
|
||||||
|
|
||||||
|
static unsigned transient_id = 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* This file includes the code needed to generate VVP code for
|
* This file includes the code needed to generate VVP code for
|
||||||
* processes. Scopes are already declared, we generate here the
|
* processes. Scopes are already declared, we generate here the
|
||||||
|
|
@ -388,6 +390,34 @@ static int show_stmt_block(ivl_statement_t net, ivl_scope_t sscope)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This draws an invocation of a named block. This is a little
|
||||||
|
* different because a subscope is created. We do that by creating
|
||||||
|
* a thread to deal with this.
|
||||||
|
*/
|
||||||
|
static int show_stmt_block_named(ivl_statement_t net, ivl_scope_t scope)
|
||||||
|
{
|
||||||
|
int rc;
|
||||||
|
int out_id, sub_id;
|
||||||
|
ivl_scope_t subscope = ivl_stmt_block_scope(net);
|
||||||
|
|
||||||
|
out_id = transient_id++;
|
||||||
|
sub_id = transient_id++;
|
||||||
|
|
||||||
|
fprintf(vvp_out, " %%fork t_%u, S_%s;\n",
|
||||||
|
sub_id, vvp_mangle_id(ivl_scope_name(subscope)));
|
||||||
|
fprintf(vvp_out, " %%jmp t_%u;\n", out_id);
|
||||||
|
fprintf(vvp_out, "t_%u ;\n", sub_id);
|
||||||
|
|
||||||
|
rc = show_stmt_block(net, subscope);
|
||||||
|
fprintf(vvp_out, " %%end;\n");
|
||||||
|
|
||||||
|
fprintf(vvp_out, "t_%u %%join;\n", out_id);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static int show_stmt_case(ivl_statement_t net, ivl_scope_t sscope)
|
static int show_stmt_case(ivl_statement_t net, ivl_scope_t sscope)
|
||||||
{
|
{
|
||||||
ivl_expr_t exp = ivl_stmt_cond_expr(net);
|
ivl_expr_t exp = ivl_stmt_cond_expr(net);
|
||||||
|
|
@ -661,10 +691,9 @@ static int show_stmt_fork(ivl_statement_t net, ivl_scope_t sscope)
|
||||||
{
|
{
|
||||||
unsigned idx;
|
unsigned idx;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
static int transient_id = 0;
|
|
||||||
unsigned cnt = ivl_stmt_block_count(net);
|
unsigned cnt = ivl_stmt_block_count(net);
|
||||||
|
|
||||||
int out = transient_id++;
|
unsigned out = transient_id++;
|
||||||
|
|
||||||
/* Draw a fork statement for all but one of the threads of the
|
/* Draw a fork statement for all but one of the threads of the
|
||||||
fork/join. Send the threads off to a bit of code where they
|
fork/join. Send the threads off to a bit of code where they
|
||||||
|
|
@ -999,6 +1028,9 @@ static int show_statement(ivl_statement_t net, ivl_scope_t sscope)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case IVL_ST_BLOCK:
|
case IVL_ST_BLOCK:
|
||||||
|
if (ivl_stmt_block_scope(net))
|
||||||
|
rc += show_stmt_block_named(net, sscope);
|
||||||
|
else
|
||||||
rc += show_stmt_block(net, sscope);
|
rc += show_stmt_block(net, sscope);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -1168,6 +1200,11 @@ int draw_func_definition(ivl_scope_t scope)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vvp_process.c,v $
|
* $Log: vvp_process.c,v $
|
||||||
|
* Revision 1.58 2002/05/27 00:08:45 steve
|
||||||
|
* Support carrying the scope of named begin-end
|
||||||
|
* blocks down to the code generator, and have
|
||||||
|
* the vvp code generator use that to support disable.
|
||||||
|
*
|
||||||
* Revision 1.57 2002/04/22 02:41:30 steve
|
* Revision 1.57 2002/04/22 02:41:30 steve
|
||||||
* Reduce the while loop expression if needed.
|
* Reduce the while loop expression if needed.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue