Allow objects to work in automatic functions.
This commit is contained in:
parent
3b3a4d3ddc
commit
b9011d89ae
|
|
@ -296,6 +296,11 @@ vvp_net_fil_t::prop_t vvp_net_fil_t::filter_long(long&)
|
|||
return PROP;
|
||||
}
|
||||
|
||||
vvp_net_fil_t::prop_t vvp_net_fil_t::filter_object(vvp_object_t&)
|
||||
{
|
||||
return PROP;
|
||||
}
|
||||
|
||||
void vvp_net_fil_t::force_mask(vvp_vector2_t mask)
|
||||
{
|
||||
if (force_mask_.size() == 0)
|
||||
|
|
|
|||
|
|
@ -1231,6 +1231,7 @@ class vvp_net_fil_t : public vvp_vpi_callback {
|
|||
unsigned base, unsigned vwid);
|
||||
virtual prop_t filter_real(double&val);
|
||||
virtual prop_t filter_long(long&val);
|
||||
virtual prop_t filter_object(vvp_object_t&val);
|
||||
|
||||
virtual void release(vvp_net_ptr_t ptr, bool net_flag) =0;
|
||||
virtual void release_pv(vvp_net_ptr_t ptr, unsigned base, unsigned wid, bool net_flag) =0;
|
||||
|
|
@ -1717,7 +1718,9 @@ inline void vvp_net_t::send_string(const std::string&val, vvp_context_t context)
|
|||
|
||||
inline void vvp_net_t::send_object(vvp_object_t val, vvp_context_t context)
|
||||
{
|
||||
assert(!fil);
|
||||
if (fil && ! fil->filter_object(val))
|
||||
return;
|
||||
|
||||
vvp_send_object(out_, val, context);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -698,6 +698,11 @@ void vvp_fun_signal_object_sa::recv_object(vvp_net_ptr_t ptr, vvp_object_t bit,
|
|||
}
|
||||
}
|
||||
|
||||
vvp_object_t vvp_fun_signal_object_sa::get_object() const
|
||||
{
|
||||
return value_;
|
||||
}
|
||||
|
||||
vvp_fun_signal_object_aa::vvp_fun_signal_object_aa()
|
||||
{
|
||||
context_idx_ = vpip_add_item_to_context(this, vpip_peek_context_scope());
|
||||
|
|
@ -708,19 +713,44 @@ vvp_fun_signal_object_aa::~vvp_fun_signal_object_aa()
|
|||
assert(0);
|
||||
}
|
||||
|
||||
void vvp_fun_signal_object_aa::alloc_instance(vvp_context_t)
|
||||
void vvp_fun_signal_object_aa::alloc_instance(vvp_context_t context)
|
||||
{
|
||||
assert(0);
|
||||
vvp_object_t*bits = new vvp_object_t;
|
||||
vvp_set_context_item(context, context_idx_, bits);
|
||||
bits->reset();
|
||||
}
|
||||
|
||||
void vvp_fun_signal_object_aa::reset_instance(vvp_context_t)
|
||||
void vvp_fun_signal_object_aa::reset_instance(vvp_context_t context)
|
||||
{
|
||||
assert(0);
|
||||
vvp_object_t*bits = static_cast<vvp_object_t*>
|
||||
(vvp_get_context_item(context, context_idx_));
|
||||
bits->reset();
|
||||
}
|
||||
|
||||
vvp_object_t vvp_fun_signal_object_aa::get_object() const
|
||||
{
|
||||
vvp_object_t*bits = static_cast<vvp_object_t*>
|
||||
(vthread_get_rd_context_item(context_idx_));
|
||||
return *bits;
|
||||
}
|
||||
|
||||
void vvp_fun_signal_object_aa::recv_object(vvp_net_ptr_t ptr, vvp_object_t bit,
|
||||
vvp_context_t context)
|
||||
{
|
||||
assert(ptr.port() == 0);
|
||||
assert(context);
|
||||
|
||||
vvp_object_t*bits = static_cast<vvp_object_t*>
|
||||
(vvp_get_context_item(context, context_idx_));
|
||||
|
||||
if (*bits != bit) {
|
||||
*bits = bit;
|
||||
ptr.ptr()->send_object(bit, context);
|
||||
}
|
||||
}
|
||||
|
||||
unsigned vvp_fun_signal_object_aa::value_size() const
|
||||
{
|
||||
assert(0);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -323,13 +323,9 @@ class vvp_fun_signal_object : public vvp_fun_signal_base {
|
|||
|
||||
public:
|
||||
explicit vvp_fun_signal_object() {};
|
||||
|
||||
unsigned size() const { return 1; }
|
||||
|
||||
inline vvp_object_t get_object() const { return value_; }
|
||||
|
||||
protected:
|
||||
vvp_object_t value_;
|
||||
virtual vvp_object_t get_object() const =0;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -342,6 +338,11 @@ class vvp_fun_signal_object_sa : public vvp_fun_signal_object {
|
|||
|
||||
void recv_object(vvp_net_ptr_t port, vvp_object_t bit,
|
||||
vvp_context_t context);
|
||||
|
||||
vvp_object_t get_object() const;
|
||||
|
||||
private:
|
||||
vvp_object_t value_;
|
||||
};
|
||||
|
||||
/*
|
||||
|
|
@ -359,6 +360,9 @@ class vvp_fun_signal_object_aa : public vvp_fun_signal_object, public automatic_
|
|||
void free_instance(vvp_context_t context);
|
||||
#endif
|
||||
|
||||
void recv_object(vvp_net_ptr_t port, vvp_object_t bit,
|
||||
vvp_context_t context);
|
||||
|
||||
// Get information about the vector value.
|
||||
unsigned value_size() const;
|
||||
vvp_bit4_t value(unsigned idx) const;
|
||||
|
|
@ -367,6 +371,8 @@ class vvp_fun_signal_object_aa : public vvp_fun_signal_object, public automatic_
|
|||
//double real_value() const;
|
||||
//void get_signal_value(struct t_vpi_value*vp);
|
||||
|
||||
vvp_object_t get_object() const;
|
||||
|
||||
public: // These objects are only permallocated.
|
||||
static void* operator new(std::size_t size);
|
||||
static void operator delete(void*obj);
|
||||
|
|
|
|||
Loading…
Reference in New Issue