V0.9: 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:
Cary R 2011-11-17 21:31:30 -08:00 committed by Stephen Williams
parent 8e1c507984
commit 68c6e578ae
1 changed files with 10 additions and 4 deletions

View File

@ -1,5 +1,5 @@
/*
* Copyright (c) 2001-2010 Stephen Williams (steve@icarus.com)
* Copyright (c) 2001-2011 Stephen Williams (steve@icarus.com)
*
* This source code is free software; you can redistribute it
* and/or modify it in source code form under the terms of the GNU
@ -533,7 +533,7 @@ char* 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;
@ -544,25 +544,31 @@ char* draw_net_input_x(ivl_nexus_t nex,
switch (res) {
case IVL_SIT_TRI:
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;
}
@ -688,8 +694,8 @@ char* draw_net_input_x(ivl_nexus_t nex,
unsigned int inst;
for (inst = 0; inst < ndrivers; inst += 4) {
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);