Draw PULLUP constants with their own BUFZ.
This doesn't have any significant runtime consequence other then to create a functor that is otherwise stable. But this does connect to .net nodes more naturally, and gets me a step closer to banning Cx<> labels as arguments to .net records.
This commit is contained in:
parent
92fe0e0fc7
commit
e076087320
|
|
@ -285,9 +285,11 @@ static char* draw_net_input_drive(ivl_nexus_t nex, ivl_nexus_ptr_t nptr)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lptr && (ivl_logic_type(lptr) == IVL_LO_PULLUP)) {
|
if (lptr && (ivl_logic_type(lptr) == IVL_LO_PULLUP)) {
|
||||||
|
char*result;
|
||||||
|
char tmp[32];
|
||||||
if (ivl_nexus_ptr_drive1(nptr) == IVL_DR_STRONG) {
|
if (ivl_nexus_ptr_drive1(nptr) == IVL_DR_STRONG) {
|
||||||
size_t result_len = 5 + ivl_logic_width(lptr);
|
size_t result_len = 5 + ivl_logic_width(lptr);
|
||||||
char*result = malloc(result_len);
|
result = malloc(result_len);
|
||||||
char*dp = result;
|
char*dp = result;
|
||||||
strcpy(dp, "C4<");
|
strcpy(dp, "C4<");
|
||||||
dp += strlen(dp);
|
dp += strlen(dp);
|
||||||
|
|
@ -296,11 +298,11 @@ static char* draw_net_input_drive(ivl_nexus_t nex, ivl_nexus_ptr_t nptr)
|
||||||
*dp++ = '>';
|
*dp++ = '>';
|
||||||
*dp = 0;
|
*dp = 0;
|
||||||
assert((dp-result) <= result_len);
|
assert((dp-result) <= result_len);
|
||||||
return result;
|
|
||||||
} else {
|
} else {
|
||||||
char val[4];
|
char val[4];
|
||||||
size_t result_len = 5 + 3*ivl_logic_width(lptr);
|
size_t result_len = 5 + 3*ivl_logic_width(lptr);
|
||||||
char*result = malloc(result_len);
|
result = malloc(result_len);
|
||||||
char*dp = result;
|
char*dp = result;
|
||||||
|
|
||||||
val[0] = "01234567"[ivl_nexus_ptr_drive0(nptr)];
|
val[0] = "01234567"[ivl_nexus_ptr_drive0(nptr)];
|
||||||
|
|
@ -315,8 +317,17 @@ static char* draw_net_input_drive(ivl_nexus_t nex, ivl_nexus_ptr_t nptr)
|
||||||
*dp++ = '>';
|
*dp++ = '>';
|
||||||
*dp = 0;
|
*dp = 0;
|
||||||
assert((dp-result) <= result_len);
|
assert((dp-result) <= result_len);
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Make the constant an argument to a BUFZ, which is
|
||||||
|
what we use to drive the PULLed value. */
|
||||||
|
fprintf(vvp_out, "L_%p .functor BUFZ 1, %s, C4<0>, C4<0>, C4<0>;\n",
|
||||||
|
lptr, result);
|
||||||
|
snprintf(tmp, sizeof tmp, "L_%p", lptr);
|
||||||
|
result = realloc(result, strlen(tmp)+1);
|
||||||
|
strcpy(result, tmp);
|
||||||
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lptr && (nptr_pin == 0)) {
|
if (lptr && (nptr_pin == 0)) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue