Fix spurious event from net8 that is forced.
This commit is contained in:
parent
64b4e2fa01
commit
2ac30824ac
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: compile.h,v 1.83 2006/09/23 04:57:19 steve Exp $"
|
#ident "$Id: compile.h,v 1.84 2006/11/22 06:10:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include <stdio.h>
|
# include <stdio.h>
|
||||||
|
|
@ -260,16 +260,10 @@ extern void compile_ufunc(char*label, char*code, unsigned wid,
|
||||||
* the threads.
|
* the threads.
|
||||||
*/
|
*/
|
||||||
extern void compile_event(char*label, char*type,
|
extern void compile_event(char*label, char*type,
|
||||||
unsigned argc, struct symb_s*argv);
|
unsigned argc, struct symb_s*argv,
|
||||||
|
bool debug_flag);
|
||||||
extern void compile_named_event(char*label, char*type);
|
extern void compile_named_event(char*label, char*type);
|
||||||
|
|
||||||
#if 0
|
|
||||||
/*
|
|
||||||
* Word declarations include a label, a type symbol, and a vpi name.
|
|
||||||
* TAKEN OVER BY compile_var_real.
|
|
||||||
*/
|
|
||||||
extern void compile_word(char*label, char*type, char*name);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A code statement is a label, an opcode and up to 3 operands. There
|
* A code statement is a label, an opcode and up to 3 operands. There
|
||||||
|
|
@ -352,6 +346,9 @@ extern void compile_alias_real(char*label, char*name,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: compile.h,v $
|
* $Log: compile.h,v $
|
||||||
|
* Revision 1.84 2006/11/22 06:10:05 steve
|
||||||
|
* Fix spurious event from net8 that is forced.
|
||||||
|
*
|
||||||
* Revision 1.83 2006/09/23 04:57:19 steve
|
* Revision 1.83 2006/09/23 04:57:19 steve
|
||||||
* Basic support for specify timing.
|
* Basic support for specify timing.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
25
vvp/event.cc
25
vvp/event.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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: event.cc,v 1.21 2006/02/21 04:57:26 steve Exp $"
|
#ident "$Id: event.cc,v 1.22 2006/11/22 06:10:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "event.h"
|
# include "event.h"
|
||||||
|
|
@ -33,6 +33,8 @@
|
||||||
# include <malloc.h>
|
# include <malloc.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
# include <iostream>
|
||||||
|
|
||||||
void waitable_hooks_s::run_waiting_threads_()
|
void waitable_hooks_s::run_waiting_threads_()
|
||||||
{
|
{
|
||||||
if (threads == 0)
|
if (threads == 0)
|
||||||
|
|
@ -66,8 +68,8 @@ const vvp_fun_edge::edge_t vvp_edge_negedge
|
||||||
|
|
||||||
const vvp_fun_edge::edge_t vvp_edge_none = 0;
|
const vvp_fun_edge::edge_t vvp_edge_none = 0;
|
||||||
|
|
||||||
vvp_fun_edge::vvp_fun_edge(edge_t e)
|
vvp_fun_edge::vvp_fun_edge(edge_t e, bool debug_flag)
|
||||||
: edge_(e)
|
: edge_(e), debug_(debug_flag)
|
||||||
{
|
{
|
||||||
bits_[0] = BIT4_X;
|
bits_[0] = BIT4_X;
|
||||||
bits_[1] = BIT4_X;
|
bits_[1] = BIT4_X;
|
||||||
|
|
@ -96,7 +98,8 @@ void vvp_fun_edge::recv_vec4(vvp_net_ptr_t port, const vvp_vector4_t&bit)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
vvp_fun_anyedge::vvp_fun_anyedge()
|
vvp_fun_anyedge::vvp_fun_anyedge(bool debug_flag)
|
||||||
|
: debug_(debug_flag)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -164,8 +167,8 @@ void vvp_named_event::recv_vec4(vvp_net_ptr_t port, const vvp_vector4_t&bit)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
** Create an event functor
|
** Create an event functor
|
||||||
** edge: compile_event(label, type, argc, argv)
|
** edge: compile_event(label, type, argc, argv, debug_flag)
|
||||||
** or: compile_event(label, NULL, argc, argv)
|
** or: compile_event(label, NULL, argc, argv, debug_flag)
|
||||||
**
|
**
|
||||||
** Named events are handled elsewhere.
|
** Named events are handled elsewhere.
|
||||||
*/
|
*/
|
||||||
|
|
@ -173,7 +176,8 @@ void vvp_named_event::recv_vec4(vvp_net_ptr_t port, const vvp_vector4_t&bit)
|
||||||
static void compile_event_or(char*label, unsigned argc, struct symb_s*argv);
|
static void compile_event_or(char*label, unsigned argc, struct symb_s*argv);
|
||||||
|
|
||||||
void compile_event(char*label, char*type,
|
void compile_event(char*label, char*type,
|
||||||
unsigned argc, struct symb_s*argv)
|
unsigned argc, struct symb_s*argv,
|
||||||
|
bool debug_flag)
|
||||||
{
|
{
|
||||||
vvp_net_fun_t*fun = 0;
|
vvp_net_fun_t*fun = 0;
|
||||||
|
|
||||||
|
|
@ -185,7 +189,7 @@ void compile_event(char*label, char*type,
|
||||||
if (strcmp(type,"edge") == 0) {
|
if (strcmp(type,"edge") == 0) {
|
||||||
|
|
||||||
free(type);
|
free(type);
|
||||||
fun = new vvp_fun_anyedge;
|
fun = new vvp_fun_anyedge(debug_flag);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
|
|
||||||
|
|
@ -199,7 +203,7 @@ void compile_event(char*label, char*type,
|
||||||
assert(argc <= 4);
|
assert(argc <= 4);
|
||||||
free(type);
|
free(type);
|
||||||
|
|
||||||
fun = new vvp_fun_edge(edge);
|
fun = new vvp_fun_edge(edge, debug_flag);
|
||||||
}
|
}
|
||||||
|
|
||||||
vvp_net_t* ptr = new vvp_net_t;
|
vvp_net_t* ptr = new vvp_net_t;
|
||||||
|
|
@ -250,6 +254,9 @@ void compile_named_event(char*label, char*name)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: event.cc,v $
|
* $Log: event.cc,v $
|
||||||
|
* Revision 1.22 2006/11/22 06:10:05 steve
|
||||||
|
* Fix spurious event from net8 that is forced.
|
||||||
|
*
|
||||||
* Revision 1.21 2006/02/21 04:57:26 steve
|
* Revision 1.21 2006/02/21 04:57:26 steve
|
||||||
* Callbacks for named event triggers.
|
* Callbacks for named event triggers.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
11
vvp/event.h
11
vvp/event.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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: event.h,v 1.11 2005/06/22 00:04:49 steve Exp $"
|
#ident "$Id: event.h,v 1.12 2006/11/22 06:10:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "vvp_net.h"
|
# include "vvp_net.h"
|
||||||
|
|
@ -52,7 +52,7 @@ class vvp_fun_edge : public vvp_net_fun_t, public waitable_hooks_s {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
typedef unsigned short edge_t;
|
typedef unsigned short edge_t;
|
||||||
explicit vvp_fun_edge(edge_t e);
|
explicit vvp_fun_edge(edge_t e, bool debug_flag);
|
||||||
|
|
||||||
virtual ~vvp_fun_edge();
|
virtual ~vvp_fun_edge();
|
||||||
|
|
||||||
|
|
@ -61,6 +61,7 @@ class vvp_fun_edge : public vvp_net_fun_t, public waitable_hooks_s {
|
||||||
private:
|
private:
|
||||||
vvp_bit4_t bits_[4];
|
vvp_bit4_t bits_[4];
|
||||||
edge_t edge_;
|
edge_t edge_;
|
||||||
|
bool debug_;
|
||||||
};
|
};
|
||||||
|
|
||||||
extern const vvp_fun_edge::edge_t vvp_edge_posedge;
|
extern const vvp_fun_edge::edge_t vvp_edge_posedge;
|
||||||
|
|
@ -76,12 +77,13 @@ extern const vvp_fun_edge::edge_t vvp_edge_none;
|
||||||
class vvp_fun_anyedge : public vvp_net_fun_t, public waitable_hooks_s {
|
class vvp_fun_anyedge : public vvp_net_fun_t, public waitable_hooks_s {
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit vvp_fun_anyedge();
|
explicit vvp_fun_anyedge(bool debug_flag);
|
||||||
virtual ~vvp_fun_anyedge();
|
virtual ~vvp_fun_anyedge();
|
||||||
|
|
||||||
void recv_vec4(vvp_net_ptr_t port, const vvp_vector4_t&bit);
|
void recv_vec4(vvp_net_ptr_t port, const vvp_vector4_t&bit);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
bool debug_;
|
||||||
vvp_vector4_t bits_[4];
|
vvp_vector4_t bits_[4];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -120,6 +122,9 @@ class vvp_named_event : public vvp_net_fun_t, public waitable_hooks_s {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: event.h,v $
|
* $Log: event.h,v $
|
||||||
|
* Revision 1.12 2006/11/22 06:10:05 steve
|
||||||
|
* Fix spurious event from net8 that is forced.
|
||||||
|
*
|
||||||
* Revision 1.11 2005/06/22 00:04:49 steve
|
* Revision 1.11 2005/06/22 00:04:49 steve
|
||||||
* Reduce vvp_vector4 copies by using const references.
|
* Reduce vvp_vector4 copies by using const references.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -21,7 +21,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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: lexor.lex,v 1.63 2006/09/23 04:57:20 steve Exp $"
|
#ident "$Id: lexor.lex,v 1.64 2006/11/22 06:10:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "parse_misc.h"
|
# include "parse_misc.h"
|
||||||
|
|
@ -148,6 +148,7 @@
|
||||||
".mem" { return K_MEM; }
|
".mem" { return K_MEM; }
|
||||||
".mem/p"(ort)? { return K_MEM_P; }
|
".mem/p"(ort)? { return K_MEM_P; }
|
||||||
".mem/i"(nit)? { return K_MEM_I; }
|
".mem/i"(nit)? { return K_MEM_I; }
|
||||||
|
"-debug" { return K_DEBUG; }
|
||||||
|
|
||||||
/* instructions start with a % character. The compiler decides what
|
/* instructions start with a % character. The compiler decides what
|
||||||
kind of instruction this really is. The few exceptions (that have
|
kind of instruction this really is. The few exceptions (that have
|
||||||
|
|
@ -211,6 +212,9 @@ int yywrap()
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: lexor.lex,v $
|
* $Log: lexor.lex,v $
|
||||||
|
* Revision 1.64 2006/11/22 06:10:05 steve
|
||||||
|
* Fix spurious event from net8 that is forced.
|
||||||
|
*
|
||||||
* Revision 1.63 2006/09/23 04:57:20 steve
|
* Revision 1.63 2006/09/23 04:57:20 steve
|
||||||
* Basic support for specify timing.
|
* Basic support for specify timing.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
14
vvp/parse.y
14
vvp/parse.y
|
|
@ -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
|
||||||
*/
|
*/
|
||||||
#ifdef HAVE_CVS_IDENT
|
#ifdef HAVE_CVS_IDENT
|
||||||
#ident "$Id: parse.y,v 1.85 2006/09/23 04:57:20 steve Exp $"
|
#ident "$Id: parse.y,v 1.86 2006/11/22 06:10:05 steve Exp $"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
# include "parse_misc.h"
|
# include "parse_misc.h"
|
||||||
|
|
@ -70,7 +70,7 @@ static vvp_fun_modpath*modpath_dst = 0;
|
||||||
%token K_ARITH_SUB K_ARITH_SUB_R K_ARITH_SUM
|
%token K_ARITH_SUB K_ARITH_SUB_R K_ARITH_SUM
|
||||||
%token K_CMP_EEQ K_CMP_EQ K_CMP_NEE K_CMP_NE
|
%token K_CMP_EEQ K_CMP_EQ K_CMP_NEE K_CMP_NE
|
||||||
%token K_CMP_GE K_CMP_GE_S K_CMP_GT K_CMP_GT_S
|
%token K_CMP_GE K_CMP_GE_S K_CMP_GT K_CMP_GT_S
|
||||||
%token K_CONCAT K_DELAY K_DFF
|
%token K_CONCAT K_DEBUG K_DELAY K_DFF
|
||||||
%token K_EVENT K_EVENT_OR K_EXTEND_S K_FUNCTOR K_MODPATH K_NET K_NET_S K_NET_R
|
%token K_EVENT K_EVENT_OR K_EXTEND_S K_FUNCTOR K_MODPATH K_NET K_NET_S K_NET_R
|
||||||
%token K_NET8 K_NET8_S
|
%token K_NET8 K_NET8_S
|
||||||
%token K_PARAM_STR K_PARAM_L K_PART K_PART_PV
|
%token K_PARAM_STR K_PARAM_L K_PART K_PART_PV
|
||||||
|
|
@ -372,13 +372,16 @@ statement
|
||||||
named event instead. */
|
named event instead. */
|
||||||
|
|
||||||
| T_LABEL K_EVENT T_SYMBOL ',' symbols ';'
|
| T_LABEL K_EVENT T_SYMBOL ',' symbols ';'
|
||||||
{ compile_event($1, $3, $5.cnt, $5.vect); }
|
{ compile_event($1, $3, $5.cnt, $5.vect, false); }
|
||||||
|
|
||||||
|
| T_LABEL K_EVENT K_DEBUG T_SYMBOL ',' symbols ';'
|
||||||
|
{ compile_event($1, $4, $6.cnt, $6.vect, true); }
|
||||||
|
|
||||||
| T_LABEL K_EVENT T_STRING ';'
|
| T_LABEL K_EVENT T_STRING ';'
|
||||||
{ compile_named_event($1, $3); }
|
{ compile_named_event($1, $3); }
|
||||||
|
|
||||||
| T_LABEL K_EVENT_OR symbols ';'
|
| T_LABEL K_EVENT_OR symbols ';'
|
||||||
{ compile_event($1, 0, $3.cnt, $3.vect); }
|
{ compile_event($1, 0, $3.cnt, $3.vect, false); }
|
||||||
|
|
||||||
|
|
||||||
/* Instructions may have a label, and have zero or more
|
/* Instructions may have a label, and have zero or more
|
||||||
|
|
@ -778,6 +781,9 @@ int compile_design(const char*path)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: parse.y,v $
|
* $Log: parse.y,v $
|
||||||
|
* Revision 1.86 2006/11/22 06:10:05 steve
|
||||||
|
* Fix spurious event from net8 that is forced.
|
||||||
|
*
|
||||||
* Revision 1.85 2006/09/23 04:57:20 steve
|
* Revision 1.85 2006/09/23 04:57:20 steve
|
||||||
* Basic support for specify timing.
|
* Basic support for specify timing.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
|
|
@ -16,7 +16,7 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
|
||||||
*/
|
*/
|
||||||
#ident "$Id: vvp_net.cc,v 1.54 2006/07/08 21:48:00 steve Exp $"
|
#ident "$Id: vvp_net.cc,v 1.55 2006/11/22 06:10:05 steve Exp $"
|
||||||
|
|
||||||
# include "config.h"
|
# include "config.h"
|
||||||
# include "vvp_net.h"
|
# include "vvp_net.h"
|
||||||
|
|
@ -1570,8 +1570,7 @@ void vvp_fun_signal8::recv_vec8(vvp_net_ptr_t ptr, vvp_vector8_t bit)
|
||||||
if (needs_init_ || !bits8_.eeq(bit)) {
|
if (needs_init_ || !bits8_.eeq(bit)) {
|
||||||
bits8_ = bit;
|
bits8_ = bit;
|
||||||
needs_init_ = false;
|
needs_init_ = false;
|
||||||
vvp_send_vec8(ptr.ptr()->out, bit);
|
calculate_output_(ptr);
|
||||||
run_vpi_callbacks();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
@ -1579,8 +1578,7 @@ void vvp_fun_signal8::recv_vec8(vvp_net_ptr_t ptr, vvp_vector8_t bit)
|
||||||
case 1: // Continuous assign value
|
case 1: // Continuous assign value
|
||||||
continuous_assign_active_ = true;
|
continuous_assign_active_ = true;
|
||||||
bits8_ = bit;
|
bits8_ = bit;
|
||||||
vvp_send_vec8(ptr.ptr()->out, bits8_);
|
calculate_output_(ptr);
|
||||||
run_vpi_callbacks();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 2: // Force value
|
case 2: // Force value
|
||||||
|
|
@ -1593,8 +1591,7 @@ void vvp_fun_signal8::recv_vec8(vvp_net_ptr_t ptr, vvp_vector8_t bit)
|
||||||
force_ = bit;
|
force_ = bit;
|
||||||
|
|
||||||
force_mask_ = vvp_vector2_t(vvp_vector2_t::FILL1, size());
|
force_mask_ = vvp_vector2_t(vvp_vector2_t::FILL1, size());
|
||||||
vvp_send_vec8(ptr.ptr()->out, force_);
|
calculate_output_(ptr);
|
||||||
run_vpi_callbacks();
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
|
@ -1603,6 +1600,25 @@ void vvp_fun_signal8::recv_vec8(vvp_net_ptr_t ptr, vvp_vector8_t bit)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void vvp_fun_signal8::calculate_output_(vvp_net_ptr_t ptr)
|
||||||
|
{
|
||||||
|
if (force_mask_.size()) {
|
||||||
|
assert(bits8_.size() == force_mask_.size());
|
||||||
|
assert(bits8_.size() == force_.size());
|
||||||
|
vvp_vector8_t bits (bits8_);
|
||||||
|
for (unsigned idx = 0 ; idx < bits.size() ; idx += 1) {
|
||||||
|
if (force_mask_.value(idx))
|
||||||
|
bits.set_bit(idx, force_.value(idx));
|
||||||
|
}
|
||||||
|
vvp_send_vec8(ptr.ptr()->out, bits);
|
||||||
|
|
||||||
|
} else {
|
||||||
|
vvp_send_vec8(ptr.ptr()->out, bits8_);
|
||||||
|
}
|
||||||
|
|
||||||
|
run_vpi_callbacks();
|
||||||
|
}
|
||||||
|
|
||||||
void vvp_fun_signal8::release(vvp_net_ptr_t ptr, bool net)
|
void vvp_fun_signal8::release(vvp_net_ptr_t ptr, bool net)
|
||||||
{
|
{
|
||||||
force_mask_ = vvp_vector2_t();
|
force_mask_ = vvp_vector2_t();
|
||||||
|
|
@ -2193,6 +2209,9 @@ vvp_bit4_t compare_gtge_signed(const vvp_vector4_t&a,
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* $Log: vvp_net.cc,v $
|
* $Log: vvp_net.cc,v $
|
||||||
|
* Revision 1.55 2006/11/22 06:10:05 steve
|
||||||
|
* Fix spurious event from net8 that is forced.
|
||||||
|
*
|
||||||
* Revision 1.54 2006/07/08 21:48:00 steve
|
* Revision 1.54 2006/07/08 21:48:00 steve
|
||||||
* Delay object supports real valued delays.
|
* Delay object supports real valued delays.
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue