For wire and/or nets we need all the net resolution to be and/or.
If a wired and/or net has more than four connections all the other resolution branches must also be wired and/or. All other nets can just be tri since tri0/tri1 only needs the final resolution to be an active pull up/down.
This commit is contained in:
parent
36d298a2b6
commit
f880b78b2b
|
|
@ -651,7 +651,7 @@ static void draw_net_input_x(ivl_nexus_t nex,
|
|||
int level;
|
||||
unsigned ndrivers = 0;
|
||||
|
||||
const char*resolv_type;
|
||||
const char*resolv_type, *branch_type;
|
||||
|
||||
char*nex_private = 0;
|
||||
|
||||
|
|
@ -663,25 +663,31 @@ static void draw_net_input_x(ivl_nexus_t nex,
|
|||
case IVL_SIT_TRI:
|
||||
case IVL_SIT_UWIRE:
|
||||
resolv_type = "tri";
|
||||
branch_type = "tri";
|
||||
break;
|
||||
case IVL_SIT_TRI0:
|
||||
resolv_type = "tri0";
|
||||
branch_type = "tri";
|
||||
nex_flags |= VVP_NEXUS_DATA_STR;
|
||||
break;
|
||||
case IVL_SIT_TRI1:
|
||||
resolv_type = "tri1";
|
||||
branch_type = "tri";
|
||||
nex_flags |= VVP_NEXUS_DATA_STR;
|
||||
break;
|
||||
case IVL_SIT_TRIAND:
|
||||
resolv_type = "triand";
|
||||
branch_type = "triand";
|
||||
break;
|
||||
case IVL_SIT_TRIOR:
|
||||
resolv_type = "trior";
|
||||
branch_type = "trior";
|
||||
break;
|
||||
default:
|
||||
fprintf(stderr, "vvp.tgt: Unsupported signal type: %u\n", res);
|
||||
assert(0);
|
||||
resolv_type = "tri";
|
||||
branch_type = "tri";
|
||||
break;
|
||||
}
|
||||
|
||||
|
|
@ -839,8 +845,8 @@ static void draw_net_input_x(ivl_nexus_t nex,
|
|||
}
|
||||
|
||||
if (ndrivers > 4)
|
||||
fprintf(vvp_out, "RS_%p/%d/%d .resolv tri",
|
||||
nex, level, inst);
|
||||
fprintf(vvp_out, "RS_%p/%d/%d .resolv %s",
|
||||
nex, level, inst, branch_type);
|
||||
else
|
||||
fprintf(vvp_out, "RS_%p .resolv %s",
|
||||
nex, resolv_type);
|
||||
|
|
|
|||
Loading…
Reference in New Issue