diff --git a/vvp/vvp_island.cc b/vvp/vvp_island.cc index d1fe652b67..420e5a9e67 100644 --- a/vvp/vvp_island.cc +++ b/vvp/vvp_island.cc @@ -186,19 +186,7 @@ void vvp_island_port::recv_vec4_pv(vvp_net_ptr_t port, const vvp_vector4_t&bit, vvp_context_t) { vvp_vector8_t tmp(bit, 6, 6); - if (invalue.size()==0) { - assert(tmp.size() == wid); - invalue = part_expand(tmp, vwid, base); - } else { - assert(invalue.size() == vwid); - for (unsigned idx = 0 ; idx < wid ; idx += 1) { - if ((base+idx) >= invalue.size()) - break; - invalue.set_bit(base+idx, tmp.value(idx)); - } - } - - island_->flag_island(); + recv_vec8_pv(port, tmp, base, wid, vwid); } @@ -211,6 +199,24 @@ void vvp_island_port::recv_vec8(vvp_net_ptr_t port, const vvp_vector8_t&bit) island_->flag_island(); } +void vvp_island_port::recv_vec8_pv(vvp_net_ptr_t p, const vvp_vector8_t&bit, + unsigned base, unsigned wid, unsigned vwid) +{ + if (invalue.size() == 0) { + assert(bit.size() == wid); + invalue = part_expand(bit, vwid, base); + } else { + assert(invalue.size() == vwid); + for (unsigned idx = 0; idx < wid ; idx += 1) { + if ((base+idx) >= vwid) + break; + invalue.set_bit(base+idx, bit.value(idx)); + } + } + + island_->flag_island(); +} + vvp_island_branch::~vvp_island_branch() { } diff --git a/vvp/vvp_island.h b/vvp/vvp_island.h index 67620380d1..4199904549 100644 --- a/vvp/vvp_island.h +++ b/vvp/vvp_island.h @@ -126,6 +126,8 @@ class vvp_island_port : public vvp_net_fun_t { unsigned base, unsigned wid, unsigned vwid, vvp_context_t); virtual void recv_vec8(vvp_net_ptr_t port, const vvp_vector8_t&bit); + virtual void recv_vec8_pv(vvp_net_ptr_t p, const vvp_vector8_t&bit, + unsigned base, unsigned wid, unsigned vwid); vvp_vector8_t invalue; vvp_vector8_t outvalue;