Handle real-valued unary subtract.
the sub_net_from function is used by the ::synthesize method of the NetEUnary class to make the expression 0-N. By making that function handle a real-valued net, the NetEUnary suddenly supports real-valued nets, and this probably helps in other places as well.
This commit is contained in:
parent
65c3bc91de
commit
0341679360
20
netmisc.cc
20
netmisc.cc
|
|
@ -78,16 +78,26 @@ NetNet* add_to_net(Design*des, NetNet*sig, long val)
|
||||||
|
|
||||||
NetNet* sub_net_from(Design*des, NetScope*scope, long val, NetNet*sig)
|
NetNet* sub_net_from(Design*des, NetScope*scope, long val, NetNet*sig)
|
||||||
{
|
{
|
||||||
verinum zero ((uint64_t)0, sig->vector_width());
|
|
||||||
NetConst*zero_obj = new NetConst(scope, scope->local_symbol(), zero);
|
|
||||||
des->add_node(zero_obj);
|
|
||||||
|
|
||||||
NetNet*zero_net = new NetNet(scope, scope->local_symbol(),
|
NetNet*zero_net = new NetNet(scope, scope->local_symbol(),
|
||||||
NetNet::WIRE, sig->vector_width());
|
NetNet::WIRE, sig->vector_width());
|
||||||
zero_net->data_type(sig->data_type());
|
zero_net->data_type(sig->data_type());
|
||||||
zero_net->local_flag(true);
|
zero_net->local_flag(true);
|
||||||
|
|
||||||
connect(zero_net->pin(0), zero_obj->pin(0));
|
if (sig->data_type() == IVL_VT_REAL) {
|
||||||
|
verireal zero (val);
|
||||||
|
NetLiteral*zero_obj = new NetLiteral(scope, scope->local_symbol(), zero);
|
||||||
|
des->add_node(zero_obj);
|
||||||
|
|
||||||
|
connect(zero_net->pin(0), zero_obj->pin(0));
|
||||||
|
|
||||||
|
} else {
|
||||||
|
verinum zero ((int64_t)val);
|
||||||
|
zero = pad_to_width(zero, sig->vector_width());
|
||||||
|
NetConst*zero_obj = new NetConst(scope, scope->local_symbol(), zero);
|
||||||
|
des->add_node(zero_obj);
|
||||||
|
|
||||||
|
connect(zero_net->pin(0), zero_obj->pin(0));
|
||||||
|
}
|
||||||
|
|
||||||
NetAddSub*adder = new NetAddSub(scope, scope->local_symbol(), sig->vector_width());
|
NetAddSub*adder = new NetAddSub(scope, scope->local_symbol(), sig->vector_width());
|
||||||
des->add_node(adder);
|
des->add_node(adder);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue