48 (void) fprintf(
STDOUT,
"\n /* (main loop empty) */\n");
51 (void) fprintf(
STDERR,
" No simulation?\n");
58 (void) fprintf(
STDOUT,
"\n /* (start main loop) */\n");
83 (void) fprintf(
STDOUT,
" /* (prepare next loop) */\n");
84 (void) fprintf(
STDOUT,
" napa_abs_loop++;\n");
86 (void) fprintf(
STDOUT,
" napa_rel_loop++;\n");
92 (void) fprintf(
STDOUT,
" /* (main loop completed) */\n");
93 (void) fprintf(
STDOUT,
" napa_waypoint = 5;\n");
106 (void) fprintf(
STDOUT,
" napa_waypoint = 4;\n\n");
107 (void) fprintf(
STDOUT,
" do {");
116 (void) fprintf(
STDOUT,
"\n napa_segment = 0L;\n");
118 (void) fprintf(
STDOUT,
"\n } while ( !TERMINATE );\n\n");
124 char *str = (
char*) NULL;
130 (void) fprintf(
STDOUT,
" napa_rel_time = napa_rel_loop * napa_ts_ext;\n");
132 (void) fprintf(
STDOUT,
" napa_rel_time = napa_rel_loop * (napa_ts_ext * %.15eL);\n", 1.0 /
Segment_List[0].rate);
137 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
140 (void) fprintf(
STDOUT,
" napa_ref_time = napa_abs_loop * napa_ts_ext;\n");
142 (void) fprintf(
STDOUT,
" napa_ref_time = napa_abs_loop * (napa_ts_ext * %.15eL);\n", 1.0 /
Segment_List[0].rate);
144 (void) fprintf(
STDOUT,
" napa_abs_time = napa_ref_time + JITTER;\n");
146 (void) fprintf(
STDOUT,
" napa_rel_time += JITTER;\n");
150 (void) fprintf(
STDOUT,
" napa_abs_time = napa_abs_loop * napa_ts_ext;\n");
152 (void) fprintf(
STDOUT,
" napa_abs_time = napa_abs_loop * (napa_ts_ext * %.15eL);\n", 1.0 /
Segment_List[0].rate);
158 (void) fprintf(
STDOUT,
" napa_rel_time = napa_rel_loop;\n");
160 (void) fprintf(
STDOUT,
" napa_rel_time = napa_rel_loop * %.15eL;\n",
166 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
169 (void) fprintf(
STDOUT,
" napa_ref_time = napa_abs_loop;\n");
171 (void) fprintf(
STDOUT,
" napa_ref_time = napa_abs_loop * %.15eL;\n",
174 (void) fprintf(
STDOUT,
" napa_abs_time = napa_ref_time + JITTER;\n");
176 (void) fprintf(
STDOUT,
" napa_rel_time += JITTER;\n");
180 (void) fprintf(
STDOUT,
" napa_abs_time = napa_abs_loop;\n");
182 (void) fprintf(
STDOUT,
" napa_abs_time = napa_abs_loop * %.15eL;\n",
188 (void) fprintf(
STDOUT,
" napa_ref_time = ");
193 (void) fprintf(
STDOUT,
";\n");
197 (void) fprintf(
STDOUT,
"%s", tok);
199 (void) fprintf(
STDOUT,
"\n");
201 (void) fprintf(
STDOUT,
" napa_abs_time = napa_ref_time + (JITTER);\n");
203 (void) fprintf(
STDOUT,
" napa_rel_time += (JITTER);\n");
206 (void) fprintf(
STDOUT,
" napa_abs_time = napa_ref_time;\n");
211 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
213 (void) fprintf(
STDOUT,
" napa_abs_time += (TIME_OFFSET);\n");
223#if YES == COMPILE_LOOP_OPTION
226 (void) fprintf(
STDOUT,
"\n#if defined(NAPA_LOOP_OPTION)\n");
228 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
230 (void) fprintf(
STDOUT,
" napa_loop_option(0);\n");
231 (void) fprintf(
STDOUT,
"#endif\n");
234 (void) fprintf(
STDOUT,
"\n#if defined(NAPA_LOOP_OPTION)\n");
236 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
238 (void) fprintf(
STDOUT,
" napa_loop_option(1);\n");
239 (void) fprintf(
STDOUT,
"#endif\n");
242 (void) fprintf(
STDOUT,
"#if defined(NAPA_LOOP_OPTION)\n");
244 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
246 (void) fprintf(
STDOUT,
" napa_loop_option(2);\n");
247 (void) fprintf(
STDOUT,
"#endif\n\n");
250 (void) fprintf(
STDOUT,
"#if defined(NAPA_LOOP_OPTION)\n");
252 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
254 (void) fprintf(
STDOUT,
" napa_loop_option(3);\n");
255 (void) fprintf(
STDOUT,
"#endif\n\n");
271 char *str = (
char*) NULL;
286 (void) snprintf(buf, (
size_t) (
STRLENGTH-1L),
"(%2LdLL == ((I_TYPE) napa_abs_loop) %%%3LdLL) && (",
289 (void) snprintf(buf, (
size_t) (
STRLENGTH-1L),
" napa_segment_run_%-2ld && (", nseg-1L);
305 (void) snprintf(buf, (
size_t) (
STRLENGTH-1L),
"%s", tok);
312 (void) snprintf(buf, (
size_t) (
STRLENGTH-1L),
"%2LdLL == ((I_TYPE) napa_abs_loop) %%%3LdLL ",
319 for (n = 0L; n < nseg; n++) {
346 (void) fprintf(
STDOUT,
"\n /* block 0 (segment condition) */\n");
347 }
else if (1 < cnt) {
348 (void) fprintf(
STDOUT,
"\n /* block 0 (segments conditions) */\n");
363 int open_segment_flag;
364 char indent[3] = {
'\0'};
366 (void) fprintf(
STDOUT,
"\n /* block 1 (update variables) is empty */\n");
369 (void) fprintf(
STDOUT,
"\n /* block 1 (update variables) */\n");
370 open_segment_flag =
false;
375 if (
IO_List[i].segment != current_nseg) {
376 current_nseg =
IO_List[i].segment;
377 open_segment_flag =
true;
382 if ((
IO_List[i].segment != current_nseg) && (open_segment_flag)) {
384 open_segment_flag =
false;
387 if (open_segment_flag) {
389 open_segment_flag =
false;
392 current_nseg = -999L;
397 open_segment_flag =
true;
401 (void) strcpy(indent,
"");
405 (void) strcpy(indent,
" ");
406 (void) fprintf(
STDOUT,
" ");
409 (void) fprintf(
STDOUT,
" }\n");
412 if ((
Update_List[i].segment != current_nseg) && (open_segment_flag)) {
414 open_segment_flag =
false;
417 if (open_segment_flag) {
431 int open_segment_flag;
433 (void) fprintf(
STDOUT,
"\n /* block 2 (update nodes) */\n");
435 (void) fprintf(
STDOUT,
"\n /* block 2 (update nodes) is empty */\n");
438 open_segment_flag =
false;
445 open_segment_flag =
true;
451 if ((s != nseg) && (open_segment_flag)) {
453 open_segment_flag =
false;
456 if (open_segment_flag) {
468 (void) fprintf(
STDOUT,
"\n /* block 3 (time domain output) */\n");
470 (void) fprintf(
STDOUT,
"\n /* block 3 (output) is empty */\n");
495 len = fprintf(
STDOUT,
" if ( true ) {");
497 len = fprintf(
STDOUT,
" if ( napa_segment_run_%-2ld) {", nseg);
507 (void) fprintf(
STDOUT,
"\n");
509 (void) fprintf(
STDOUT,
" napa_segment = %ldL;\n", nseg);
511 len = fprintf(
STDOUT,
" if ( true ) {");
524 (void) fprintf(
STDOUT,
" }\n");
530 char *str = (
char*) NULL;
773 (void) fprintf(
STDERR,
" <%s>, this node kind is not yet implemented\n",
Node_List[out].tag);
786 char *str = (
char*) NULL;
791 (void) fprintf(
STDOUT,
"\n napa_segment = 0L;\n");
793 (void) fprintf(
STDOUT,
"\n");
803 (void) fprintf(
STDOUT,
");\n");
808 (void) fprintf(
STDERR,
" a node is not allowed to inject a signal\n");
810 (void) strcpy(v1,
Var_List[n].name1);
812 (void) fprintf(
STDOUT,
"%s", v1);
814 (void) fprintf(
STDOUT,
"%s", tok);
828 char *s = (
char*) NULL;
829 char *t = (
char*) NULL;
842 if (0 == strncmp(
Update_List[i].name,
"$call$", (
size_t) 6)) {
843 (void) fprintf(
STDOUT,
" ");
849 (void) fprintf(
STDOUT,
";\n");
855 (void) strcpy(v1,
Var_List[nv].name1);
858 (void) fprintf(
STDOUT,
"%s = ", v1);
861 (void) fprintf(
STDOUT,
"%s", v1);
867 (void) fprintf(
STDERR,
" <%s> a node cannot be updated using a function call\n", tok1);
870 (void) fprintf(
STDOUT,
"%s", v1);
874 if (0 == strcmp(tok1,
"void")) {
877 (void) fprintf(
STDOUT,
"%s = ", tok1);
879 (void) fprintf(
STDERR,
" <%s> is not a user's variable!\n", tok1);
883 (void) fprintf(
STDOUT,
"%s", tok1);
891 if (0 == strncmp(
Update_List[i].name,
"$restart$", (
size_t) 9)) {
893 (void) fprintf(
STDOUT,
" napa_reset_nodes();\n");
895 (void) fprintf(
STDOUT,
" napa_abs_loop++;\n");
900 (void) fprintf(
STDOUT,
" continue;\n");
905 if (0 == strncmp(
Update_List[i].name,
"$assert$", (
size_t) 8)) {
906 (void) fprintf(
STDOUT,
"#if !defined(NO_ASSERT)\n");
909 (void) strcpy(v2,
"");
916 (void) strcpy(v0, v2);
918 (void) snprintf(v2, (
size_t) (
LINLENGTH-1L),
"%s%s", v0, tok1);
923 (void) fprintf(
STDOUT,
"%s if ( !(", indent);
927 (void) fprintf(
STDOUT,
") ) {\n");
928 (void) fprintf(
STDOUT,
"%s if ( (!napa_assert_flag) && (0.0L < napa_abs_loop) ) {\n", indent);
929 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\nNAPA Run Time Exit:", indent);
930 (void) fprintf(
STDOUT,
" loop[%%Lg]\\n\", napa_abs_loop);\n");
932 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n -> Test at line %4lu of main netlist\\n\");\n",
938 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" -> Test at line %4lu of \\\"%s\\\"\\n\");\n",
942 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n ****\");\n", indent);
943 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n **** Assertion ' %s ' failed\");\n", indent, v2);
944 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n ****\\n\");\n", indent);
955 (void) strcpy(lst[p], tok2);
964 (void) strcpy(lst[p], tok2);
969 for (l = 0; l < p; l++) {
971 for (m = l + 1; m < p; m++) {
972 if (0 == strcmp(lst[l], lst[m])) {
979 (void) strcpy(tok2, lst[l]);
980 (void) strcpy(tok3, lst[l]);
982 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" <- %-*s = ", indent, (
int) len, tok2);
985 (void) fprintf(
STDOUT,
"%% 8e\\n\", %s);\n", tok3);
987 (void) fprintf(
STDOUT,
"%% lld\\n\", %s);\n", tok3);
992 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" <- %-*s = ", indent, (
int) len, tok2);
995 (void) fprintf(
STDOUT,
"%% 8e\\n\", %s);\n", tok3);
997 (void) fprintf(
STDOUT,
"%% lld\\n\", %s);\n", tok3);
1005 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" <- %-*s = ", indent, (
int) len, tok2);
1006 (void) fprintf(
STDOUT,
"%% 8e\\n\", %s);\n", tok2);
1010 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" <- %-*s = ", indent, (
int) len, tok2);
1011 (void) fprintf(
STDOUT,
"%% lld\\n\", %s);\n", tok2);
1015 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \" ****\");\n", indent );
1016 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n **** %s\");\n", indent, v1);
1017 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n ****\\n\");\n", indent );
1019 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n Exiting simulation now\\n\\n\");\n", indent );
1020 (void) fprintf(
STDOUT,
"%s napa_assert_flag = true;\n", indent );
1021 (void) fprintf(
STDOUT,
"%s break;\n", indent);
1023 (void) fprintf(
STDOUT,
"%s (void) fprintf(stderr, \"\\n\");\n", indent );
1024 (void) fprintf(
STDOUT,
"%s napa_assert_flag = true;\n", indent );
1026 (void) fprintf(
STDOUT,
"%s napa_dump_states();\n", indent);
1029 (void) fprintf(
STDOUT,
"%s }\n", indent);
1030 (void) fprintf(
STDOUT,
"%s }\n", indent);
1031 (void) fprintf(
STDOUT,
"#endif\n");
1035 (void) fprintf(
STDOUT,
"%s", tok1);
1041 if (0 == strncmp(
Update_List[i].name,
"$null$", (
size_t) 6)) {
1055 (void) fprintf(
STDERR,
" <%s> is not declared as a variable\n",
Update_List[i].name);
1060 (void) strcpy(v3, v2);
1062 (void) strcpy(v2, v4);
1066 (void) fprintf(
STDOUT,
"%s %s = ", indent, v2);
1070 (void) fprintf(
STDOUT,
";\n");
1074 (void) fprintf(
STDOUT,
"%s", v2);
1078 (void) fprintf(
STDOUT,
"%s %s = ", indent, v2);
1082 (void) fprintf(
STDOUT,
";\n");
1086 (void) fprintf(
STDOUT,
"%s", v2);
1089 (void) fprintf(
STDOUT,
"%s %s = (I_TYPE) (%s_old != %s_new);\n", indent, v3, v3, v3);
1090 (void) fprintf(
STDOUT,
"%s %s_old = %s_new;\n", indent, v3, v3);
1095 (void) fprintf(
STDOUT,
"%s (void) strcpy(%s, ", indent, v2);
1097 (void) fprintf(
STDOUT,
"\"%s\");\n", tok1);
1108 char *s = (
char*) NULL;
1123 (void) strcpy(v1,
Var_List[n].name1);
1128 (void) strcpy(v2,
"");
1129 (void) strcpy(v3,
"");
1130 (void) fprintf(
STDOUT,
" do {\n");
1131 (void) fprintf(
STDOUT,
" napa_input_pointer = fgets(napa_input_buffer, %ld, napa_fp_%ld);\n",
STRLENGTH, i);
1132 (void) fprintf(
STDOUT,
" } while ( '#' == napa_input_buffer[0] );\n");
1133 (void) fprintf(
STDOUT,
" if ( (char*) NULL == napa_input_pointer ) {\n");
1134 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Information: loop[%%lld] (input)\\n\", (I_TYPE) napa_abs_loop);\n");
1135 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" Simulation stopped at end of input file <\\\"%%s\\\">\\n\", %s);\n", v1);
1136 (void) fprintf(
STDOUT,
" break;\n");
1137 (void) fprintf(
STDOUT,
" }\n");
1143 (void) fprintf(
STDERR,
" only user's variables can be input at run-time\n");
1148 (void) strcpy(v4,
Var_List[nv].name1);
1150 (void) strcat(v2,
" &");
1151 (void) strcat(v2, v4);
1152 (void) strcat(v2,
",");
1157 (void) fprintf(
STDERR,
" initialization of ivar <%s> will be overwritten by run-time input\n",
Var_List[nv].name1);
1159 (void) strcat(v3,
"%lli ");
1164 (void) fprintf(
STDERR,
" initialization of dvar <%s> will be overwritten by run-time input\n",
Var_List[nv].name1);
1166 (void) strcat(v3,
"%lf ");
1170 (void) fprintf(
STDERR,
" <%s> cannot be a string variable\n", tok);
1178 (void) fprintf(
STDERR,
" <%s> is not a user's variable\n", tok);
1183 v2[
LENGTH(v2) - 1L] =
'\0';
1184 v3[
LENGTH(v3) - 1L] =
'\0';
1185 (void) fprintf(
STDOUT,
" napa_input_test = sscanf(napa_input_buffer, \"%s\",%s);\n", v3, v2);
1186 (void) fprintf(
STDOUT,
" if ( %ld != napa_input_test ) {\n", c);
1187 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (input)\\n\");\n");
1189 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of main netlist\\n\");\n",
IO_List[i].mline[0]);
1191 if (0UL ==
IO_List[i].mline[d]) {
1194 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" -> at line %3lu of \\\"%s\\\"\\n\");\n",
1198 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" unsuccessful input from <\\\"%%s\\\">\\n\", %s);\n", v1);
1199 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
1200 (void) fprintf(
STDOUT,
" }\n");
1221 static int first1 =
true;
1223 long i, k, l, oldl, len1, len2;
1226 char *c = (
char*) NULL;
1227 char *str = (
char*) NULL;
1228 char indent[3] = {
'\0'};
1236 char sgn[2] = {
'\0'};
1242 (void) fprintf(
STDOUT,
" napa_segment = 0L;\n");
1246 (void) fprintf(
STDOUT,
" ");
1247 (void) strcpy(indent,
"");
1250 (void) fprintf(
STDOUT,
" if ( true ) {\n");
1251 (void) strcpy(indent,
" ");
1253 (void) strcpy(v1,
"\"%.15Le\"");
1254 (void) fprintf(
STDOUT,
"#if !defined(NO_TIME_OUTPUT)\n");
1255 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, %s%s, %s);\n", o, indent, v1,
"napa_abs_time");
1256 (void) fprintf(
STDOUT,
"#endif\n");
1259 (void) strcpy(v1,
"\" ");
1260 (void) strcpy(v2,
"");
1261 (void) strcpy(v3,
"");
1262 (void) strcpy(v4,
"");
1265 if ((0 == strcmp(sgn,
"-")) || (0 == strcmp(sgn,
"+"))) {
1267 (void) fprintf(
STDERR,
" No sign expected in output instruction list: %s%s\n", sgn, tok);
1270 (void) strcat(v2,
", ");
1274 if (0 == strcmp(tok,
"napa_abs_loop")) {
1277 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1279 (void) strcat(v1,
" %15.0f");
1280 (void) strcat(v2, tok);
1283 if (0 == strcmp(tok,
"LOOP_INDEX")) {
1286 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1288 (void) strcat(v1,
" %15lld");
1289 (void) strcat(v2, tok);
1292 if (0 == strcmp(tok,
"ABS_LOOP_INDEX")) {
1295 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1297 (void) strcat(v1,
" %15lld");
1298 (void) strcat(v2, tok);
1301 if (0 == strcmp(tok,
"REL_LOOP_INDEX")) {
1304 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1306 (void) strcat(v1,
" %15lld");
1307 (void) strcat(v2, tok);
1310 if (0 == strcmp(tok,
"TOOL_INDEX")) {
1313 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1315 (void) strcat(v1,
" %15lld");
1316 (void) strcat(v2, tok);
1320 if (0 == strcmp(tok,
"TIME")) {
1323 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1325 (void) strcat(v1,
" %.15e");
1326 (void) strcat(v2, tok);
1329 if (0 == strcmp(tok,
"ABS_TIME")) {
1332 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1334 (void) strcat(v1,
" %.15e");
1335 (void) strcat(v2, tok);
1338 if (0 == strcmp(tok,
"REF_TIME")) {
1341 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1343 (void) strcat(v1,
" %.15e");
1344 (void) strcat(v2, tok);
1347 if (0 == strcmp(tok,
"REL_TIME")) {
1350 (void) fprintf(
STDERR,
" no scaling is allowed for <%s>\n", tok);
1352 (void) strcat(v1,
" %.15e");
1353 (void) strcat(v2, tok);
1369 (void) strcpy(v3,
"");
1371 if (0 == strncmp(scale,
"X", (
size_t) 1)) {
1373 c = strchr(v4,
'x');
1374 if ((
char*) NULL != c) {
1378 }
else if (0 == strncmp(scale,
"x", (
size_t) 1)) {
1380 c = strchr(v4,
'X');
1381 if ((
char*) NULL != c) {
1385 }
else if (0 == strncmp(scale,
"\0", (
size_t) 1)) {
1391 if (0 == strncmp(scale,
"_", (
size_t) 1)) {
1392 (void) fprintf(
STDERR,
" <%s>, no unit is expected for a digital output element\n", tok);
1394 (void) fprintf(
STDERR,
" a scaling letter ('%c') for a digital output element (<%s>) is not expected\n", scale[0],tok);
1397 (void) strcat(v1, v4);
1400 (void) strcpy(v3,
"");
1403 if (0 == strcmp (scale,
"\0")) { ok =
true; }
1404 if (0 == strncmp(scale,
"_", 1)) { ok =
true; }
1405 if (0 == strncmp(scale,
"y", 1)) { (void) strcpy(v3,
"*1.0e24" ); ok =
true; }
1406 if (0 == strncmp(scale,
"z", 1)) { (void) strcpy(v3,
"*1.0e21" ); ok =
true; }
1407 if (0 == strncmp(scale,
"a", 1)) { (void) strcpy(v3,
"*1.0e18" ); ok =
true; }
1408 if (0 == strncmp(scale,
"f", 1)) { (void) strcpy(v3,
"*1.0e15" ); ok =
true; }
1409 if (0 == strncmp(scale,
"p", 1)) { (void) strcpy(v3,
"*1.0e12" ); ok =
true; }
1410 if (0 == strncmp(scale,
"n", 1)) { (void) strcpy(v3,
"*1.0e9" ); ok =
true; }
1411 if (0 == strncmp(scale,
"u", 1)) { (void) strcpy(v3,
"*1.0e6" ); ok =
true; }
1412 if (0 == strncmp(scale,
"m", 1)) { (void) strcpy(v3,
"*1.0e3" ); ok =
true; }
1413 if (0 == strncmp(scale,
"k", 1)) { (void) strcpy(v3,
"*1.0e-3" ); ok =
true; }
1414 if (0 == strncmp(scale,
"M", 1)) { (void) strcpy(v3,
"*1.0e-6" ); ok =
true; }
1415 if (0 == strncmp(scale,
"G", 1)) { (void) strcpy(v3,
"*1.0e-9" ); ok =
true; }
1416 if (0 == strncmp(scale,
"T", 1)) { (void) strcpy(v3,
"*1.0e-12"); ok =
true; }
1417 if (0 == strncmp(scale,
"P", 1)) { (void) strcpy(v3,
"*1.0e-15"); ok =
true; }
1418 if (0 == strncmp(scale,
"E", 1)) { (void) strcpy(v3,
"*1.0e-18"); ok =
true; }
1419 if (0 == strncmp(scale,
"Z", 1)) { (void) strcpy(v3,
"*1.0e-21"); ok =
true; }
1420 if (0 == strncmp(scale,
"Y", 1)) { (void) strcpy(v3,
"*1.0e-24"); ok =
true; }
1421 if (0 == strncmp(scale,
"%", 1)) { (void) strcpy(v3,
"*1.0e2" ); ok =
true; }
1424 (void) fprintf(
STDERR,
" scaling suffix '%s' of analog output element <%s> is not valid\n", scale, tok);
1428 (void) strcpy(v3,
"");
1431 (void) fprintf(
STDERR,
" a node cannot be string type\n");
1434 if (0 == strcmp(
"Space",
Var_List[nv].name1)) {
1435 (void) strcat(v1,
" %s");
1445 (void) strcpy(tok,
Node_List[nn].name1);
1448 (void) strcpy(tok,
Var_List[nv].name1 );
1451 (void) strcat(v2, tok);
1452 (void) strcat(v2, v3);
1456 (void) fprintf(
STDERR,
" There is no node nor variable called <%s>\n", tok);
1463 if (100L > (len1 + len2)) {
1464 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld, %s%s\\n\", %s);\n", o, indent, v1, v2);
1466 (void) fprintf(
STDOUT,
" (void) fprintf(napa_fp_%ld,", o );
1468 (void) fprintf(
STDOUT,
" %s", v1 );
1469 (void) fprintf(
STDOUT,
"\\n\",\n" );
1470 (void) fprintf(
STDOUT,
" %s", indent );
1472 (void) fprintf(
STDOUT,
"\n" );
1473 (void) fprintf(
STDOUT,
"%s ", indent );
1476 l = (l / 2L) + (l % 2L);
1483 while (oldl <=
LENGTH(&(v1[k]))) {
1485 while (
'%' != v1[k+l]) {
1488 for (i = 0L; i < l; i++) {
1492 (void) fprintf(
STDOUT,
"\"%s\"\n", v5);
1493 (void) fprintf(
STDOUT,
" %s", indent );
1496 (void) strcpy(v5, &(v1[k]));
1497 (void) fprintf(
STDOUT,
"\"%s", v5);
1498 (void) fprintf(
STDOUT,
"\\n\",\n" );
1499 (void) fprintf(
STDOUT,
" %s", indent );
1502 (void) fprintf(
STDOUT,
"%s", v2);
1503 (void) fprintf(
STDOUT,
");\n" );
1507 l = (l / 2L) + (l % 2L);
1514 while (oldl <=
LENGTH(&(v2[k]))) {
1516 while (
' ' != v2[k+l]) {
1520 for (i = 0L; i < l; i++) {
1524 (void) fprintf(
STDOUT,
"%s\n", v5);
1525 (void) fprintf(
STDOUT,
" %s", indent );
1528 (void) strcpy(v5, &(v2[k]));
1529 (void) fprintf(
STDOUT,
"%s", v5);
1530 (void) fprintf(
STDOUT,
");\n" );
1533 (void) fprintf(
STDOUT,
" }\n");
1539 if (0 == strcmp(
Dump_List.condition,
"false")) {
1542 if (0 == strcmp(
Dump_List.condition,
"true")) {
1543 (void) fprintf(
STDOUT,
"\n /* (dump triggering) */\n");
1544 (void) fprintf(
STDOUT,
" napa_dump_flag = true;\n");
1546 (void) fprintf(
STDOUT,
"\n /* (dump triggering) */\n");
1547 (void) fprintf(
STDOUT,
" ");
1549 (void) fprintf(
STDOUT,
" napa_dump_flag = true;\n" );
1550 (void) fprintf(
STDOUT,
" }\n");
1560 if (0 == strcmp(
Dump_List.condition,
"false")) {
1563 (void) fprintf(
STDOUT,
"\n /* (dump) */\n" );
1565 (void) fprintf(
STDOUT,
" if ( (napa_dump_flag) || (napa_assert_flag) ) {\n");
1567 (void) fprintf(
STDOUT,
" if ( napa_dump_flag ) {\n");
1569 (void) fprintf(
STDOUT,
" napa_dump_states();\n");
1570 (void) fprintf(
STDOUT,
" napa_dump_flag = false;\n");
1571 (void) fprintf(
STDOUT,
" }\n");
1580 if (0 == strcmp(
Dump_List.condition,
"false")) {
1584 (void) fprintf(
STDOUT,
" if ( napa_assert_flag ) {\n");
1585 (void) fprintf(
STDOUT,
" napa_dump_states();\n" );
1586 (void) fprintf(
STDOUT,
" }\n");
1593 (void) fprintf(
STDOUT,
"\n /* (gateway) */\n");
1594 (void) fprintf(
STDOUT,
" #if !defined(NO_ASSERT)\n" );
1595 (void) fprintf(
STDOUT,
" if ( napa_assert_flag ) {\n");
1597 (void) fprintf(
STDOUT,
" if ( 0LL >= napa_gateway ) {\n" );
1599 (void) fprintf(
STDOUT,
" if ( 0LL >= napa_gateway1 ) {\n");
1601 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" ... gateway countdown %4lld\\n\\n\");\n", (
long long) 0);
1602 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" End of countdown, exiting simulation now\\n\\n\");\n");
1603 (void) fprintf(
STDOUT,
" break;\n");
1605 (void) fprintf(
STDOUT,
" }\n" );
1607 (void) fprintf(
STDOUT,
" } else {\n");
1609 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" ... gateway countdown %%4lld\\n\", napa_gateway);\n" );
1610 (void) fprintf(
STDOUT,
" napa_gateway--;\n");
1612 (void) fprintf(
STDOUT,
" if ( 0LL == (napa_gateway1 %% napa_gateway2) ) {\n");
1613 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" ... gateway countdown %%4lld\\n\", napa_gateway1);\n");
1614 (void) fprintf(
STDOUT,
" }\n");
1615 (void) fprintf(
STDOUT,
" napa_gateway1--;\n");
1617 (void) fprintf(
STDOUT,
" }\n" );
1619 (void) fprintf(
STDOUT,
" }\n" );
1620 (void) fprintf(
STDOUT,
" #endif\n" );
1638 (void) fprintf(
STDOUT,
"\n /* (update the mailbox of the tool) */\n");
1640 (void) fprintf(
STDOUT,
" if ( napa_msg->o >= napa_packet ) {\n");
1641 (void) fprintf(
STDOUT,
" napa_rel_loop = -1.0L;\n");
1642 (void) fprintf(
STDOUT,
" napa_tool_index = napa_packet;\n");
1643 (void) fprintf(
STDOUT,
" napa_msg->i = START;\n");
1644 (void) fprintf(
STDOUT,
" napa_packet++;\n");
1645 (void) fprintf(
STDOUT,
" }\n");
1647 (void) fprintf(
STDOUT,
" if ( napa_msg->o >= napa_packet ) {\n");
1648 (void) fprintf(
STDOUT,
" if ( 0LL >= napa_tool_start ) {\n");
1649 (void) fprintf(
STDOUT,
" if ( EOF == fflush((FILE*) NULL) ) {\n");
1650 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for tools)\\n\");\n");
1651 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" flushing data from buffer I/O was not successful\\n\" );\n");
1652 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
1653 (void) fprintf(
STDOUT,
" }\n");
1655 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL;\n", na);
1657 if ((0L == na) && (0L == nb)) {
1658 (void) fprintf(
STDOUT,
" napa_tool_start = 0LL);\n" );
1660 if ((0L != na) && (0L == nb)) {
1661 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL;\n", na);
1663 if ((0L == na) && (0L != nb)) {
1664 (void) fprintf(
STDOUT,
" napa_tool_start = napa_rand_integer(%ldLL);\n", nb);
1666 (void) fprintf(
STDOUT,
" napa_tool_start = (napa_tool_start / %ldLL) * %ldLL;\n", nc, nc);
1669 if ((0L != na) && (0L != nb)) {
1670 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL + napa_rand_integer(%ldLL);\n", na, nb);
1672 (void) fprintf(
STDOUT,
" napa_tool_start = (napa_tool_start / %ldLL) * %ldLL;\n", nc, nc);
1676 (void) fprintf(
STDOUT,
" napa_rel_loop = -1.0L;\n");
1677 (void) fprintf(
STDOUT,
" napa_tool_index = napa_packet;\n");
1678 (void) fprintf(
STDOUT,
" napa_msg->i = START;\n");
1679 (void) fprintf(
STDOUT,
" napa_packet++;\n");
1680 (void) fprintf(
STDOUT,
" } else {\n");
1681 (void) fprintf(
STDOUT,
" napa_tool_start--;\n");
1682 (void) fprintf(
STDOUT,
" }\n");
1683 (void) fprintf(
STDOUT,
" }\n");
1688 (void) fprintf(
STDOUT,
"\n /* (update the mailbox of the %ld tools) */\n",
Num_Tools);
1690 (void) fprintf(
STDOUT,
"\n /* (update the mailbox of the %2ld tools) */\n",
Num_Tools);
1708 (void) fprintf(
STDOUT,
" if ( (napa_mailbox[%ld].o >= napa_packet)", n);
1710 if (0L != (n % ncut)) {
1711 (void) fprintf(
STDOUT,
" && (napa_mailbox[%ld].o >= napa_packet)", n);
1713 (void) fprintf(
STDOUT,
"\n && (napa_mailbox[%ld].o >= napa_packet)", n);
1717 (void) fprintf(
STDOUT,
" ) {\n");
1718 (void) fprintf(
STDOUT,
" napa_rel_loop = -1.0L;\n");
1719 (void) fprintf(
STDOUT,
" napa_tool_index = napa_packet;\n");
1721 (void) fprintf(
STDOUT,
" napa_mailbox[%ld].i = START;\n", n );
1723 (void) fprintf(
STDOUT,
" napa_packet++;\n");
1724 (void) fprintf(
STDOUT,
" }\n");
1729 (void) fprintf(
STDOUT,
" if ( ((napa_mailbox[%ld].o >= napa_packet)", n);
1731 if (0L != (n % ncut)) {
1732 (void) fprintf(
STDOUT,
" && (napa_mailbox[%ld].o >= napa_packet)", n);
1734 (void) fprintf(
STDOUT,
"\n && (napa_mailbox[%ld].o >= napa_packet)", n);
1738 (void) fprintf(
STDOUT,
") ) {\n");
1739 (void) fprintf(
STDOUT,
" if ( 0LL >= napa_tool_start ) {\n");
1740 (void) fprintf(
STDOUT,
" if ( EOF == fflush((FILE*) NULL) ) {\n");
1741 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \"\\nNAPA Run Time Error: (I/O manager for tools)\\n\");\n");
1742 (void) fprintf(
STDOUT,
" (void) fprintf(stderr, \" flushing data from buffer I/O was not successful\\n\" );\n");
1743 (void) fprintf(
STDOUT,
" napa_exit(EXIT_FAILURE);\n");
1744 (void) fprintf(
STDOUT,
" }\n");
1746 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL;\n", na);
1748 if ((0L == na) && (0L == nb)) {
1749 (void) fprintf(
STDOUT,
" napa_tool_start = 0LL);\n" );
1751 if ((0L != na) && (0L == nb)) {
1752 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL;\n", na);
1754 if ((0L == na) && (0L != nb)) {
1755 (void) fprintf(
STDOUT,
" napa_tool_start = napa_rand_integer(%ldLL);\n", nb);
1757 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL * (napa_tool_start / %ldLL);\n", nc, nc);
1760 if ((0L != na) && (0L != nb)) {
1761 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL + napa_rand_integer(%ldLL);\n", na, nb);
1763 (void) fprintf(
STDOUT,
" napa_tool_start = %ldLL * (napa_tool_start / %ldLL);\n", nc, nc);
1767 (void) fprintf(
STDOUT,
" napa_rel_loop = -1.0L;\n");
1768 (void) fprintf(
STDOUT,
" napa_tool_index = napa_packet;\n");
1770 (void) fprintf(
STDOUT,
" napa_mailbox[%ld].i = START;\n", n);
1772 (void) fprintf(
STDOUT,
" napa_packet++;\n");
1773 (void) fprintf(
STDOUT,
" } else {\n");
1774 (void) fprintf(
STDOUT,
" napa_tool_start--;\n");
1775 (void) fprintf(
STDOUT,
" }\n");
1776 (void) fprintf(
STDOUT,
" }\n");
1785 (void) fprintf(
STDOUT,
"\n /* (force tool start) */\n");
1786 (void) fprintf(
STDOUT,
" napa_msg->i = START;\n");
1789 (void) fprintf(
STDOUT,
"\n /* (force tools start) */\n");
1791 (void) fprintf(
STDOUT,
" napa_mailbox[%ld].i = START;\n", n);
1796 (void) fprintf(
STDOUT,
"\n");
1804 (void) strcpy(v0,
Node_List[nod].name1);
1807 lltemp1 = 1LL << (
Node_List[nod].width - 1L);
1808 lltemp2 = (2LL*lltemp1) - 1LL;
1809 (void) fprintf(
STDOUT,
" %s = (%s & ( 0X%llXLL))\n", v0, v0, lltemp1);
1810 (void) fprintf(
STDOUT,
" %*s ? (%s | (-0X%llXLL))\n", (
int) strlen(v0),
" ", v0, lltemp1);
1811 (void) fprintf(
STDOUT,
" %*s : (%s & ( 0X%llXLL));\n", (
int) strlen(v0),
" ", v0, lltemp2);
1813 lltemp1 = (1LL << -
Node_List[nod].width) - 1LL;
1814 (void) fprintf(
STDOUT,
" %s &= 0X%llXLL;\n", v0, lltemp1);
1823 (void) strcpy(v0,
Var_List[var].name1);
1826 lltemp1 = 1LL << (
Var_List[var].width - 1L);
1827 lltemp2 = (2LL*lltemp1) - 1LL;
1828 (void) fprintf(
STDOUT,
" %s = (%s & ( 0X%llXLL))\n", v0, v0, lltemp1);
1829 (void) fprintf(
STDOUT,
" %*s ? (%s | (-0X%llXLL))\n", (
int) strlen(v0),
" ", v0, lltemp1);
1830 (void) fprintf(
STDOUT,
" %*s : (%s & ( 0X%llXLL));\n", (
int) strlen(v0),
" ", v0, lltemp2);
1831 }
else if (0L >
Var_List[var].width) {
1832 lltemp1 = (1LL << -
Var_List[var].width) - 1LL;
1833 (void) fprintf(
STDOUT,
" %s &= 0X%llXLL;\n", v0, lltemp1);
void build_main_loop_block1(void)
void print_node_width_postprocessing(long nod)
void build_main_loop_control2(void)
void build_main_loop_dump1(void)
void build_update(long i, const char *indent)
void build_main_loop_time(void)
void build_node(long out)
void build_main_loop_dump2(void)
void build_main_loop_block3(void)
void build_output(long o)
void print_var_width_postprocessing(long var)
void build_main_loop_gateway(void)
void build_main_loop_option(long opt)
void build_main_loop_segment_begin(long nseg)
void build_main_loop_inject(void)
void build_main_loop(void)
void build_main_loop_dump3(void)
void build_main_loop_synchro(void)
void build_main_loop_conditions(void)
void build_main_loop_segment_end(void)
void build_main_loop_block2(void)
void build_main_loop_control1(void)
void print_fzinv(char *str, long out)
void print_delay1(char *str, long out)
void print_toggle(char *str, long out)
void print_fzbuf(char *str, long out)
void print_triangle(char *str, long out)
void print_uadc(char *str, long out)
void print_offset(char *str, long out)
void print_muller(char *str, long out)
void print_algebra(char *str, long out)
void print_latch(char *str, long out)
void print_dyadic3(char *str, long out, long k)
void print_relay(char *str, long out)
void print_holdtrack(char *str, long out, long k)
void print_noise(char *str, long out)
void print_alu(char *str, long out)
void print_btoi(char *str, long out)
void print_osc(char *str, long out)
void print_mux(char *str, long out)
void print_square(char *str, long out)
void print_equal(char *str, long out)
void print_wsum(char *str, long out)
void print_dyadic5(char *str, long out, long k)
void print_change(char *str, long out)
void print_dyadic4(char *str, long out, long k)
void print_step(char *str, long out)
void print_itod(char *str, long out)
void print_average(char *str, long out)
void print_udac(char *str, long out)
void print_gain(char *str, long out)
void print_dac(char *str, long out)
void print_minmax(char *str, long out, long k)
void print_poly(char *str, long out)
void print_delay2(char *str, long out)
void print_rlshift(char *str, long out, long k)
void print_bwinv(char *str, long out)
void print_ram(char *str, long out)
void print_sincos(char *str, long out, long k)
void print_dyadic2(char *str, long out, long k)
void print_usertool(char *str, long out, long k)
void print_rip(char *str, long out)
void print_test(char *str, long out)
void print_trig(char *str, long out)
void print_quant(char *str, long out)
void print_differentiator(char *str, long out)
void print_integrator(char *str, long out)
void print_inv(char *str, long out)
void print_zero(char *str, long out)
void print_dyadic7(char *str, long out, long k)
void print_sign(char *str, long out)
void print_comp(char *str, long out)
void print_clock(char *str, long out)
void print_adc(char *str, long out)
void print_clip(char *str, long out)
void print_merge(char *str, long out)
void print_rect(char *str, long out)
void print_delay(char *str, long out)
void print_buf(char *str, long out)
void print_bshift(char *str, long out)
void print_dtoi(char *str, long out)
void print_dyadic0(char *str, long out, long k)
void print_rshift2(char *str, long out)
void print_rshift1(char *str, long out)
void print_delay3(char *str, long out)
void print_dyadic6(char *str, long out, long k)
void print_itob(char *str, long out)
void print_copy(char *str, long out)
void print_rom(char *str, long out)
void print_dyadic1(char *str, long out, long k)
void build_condition(char *cond, const unsigned long *mlin, const unsigned long *mfil)
void print_warning_location(const char *type, const unsigned long *mlin, const unsigned long *mfil)
void print_error_location(const char *type, const unsigned long *mlin, const unsigned long *mfil)
long constant_type(char *identifier)
long get_type(char *identifier)
int variable_update_block(void)
long directive_id(const char *identifier)
int time_output_block(void)
long node_id(const char *identifier)
long var_id(const char *identifier)
int node_update_block(void)
void process_node_error(const char *tok1)
void process_variable_error(const char *tok1)
#define DROP_SEGMENT_TYPE
EXTERN VAR_TYPE Var_List[2047L]
EXTERN char R_Format[2047L]
EXTERN NODE_TYPE Node_List[4095L]
#define DIFFERENTIATOR_KIND
EXTERN char S_String_Format[2047L]
EXTERN SAMPLING_TYPE Sampling_List
EXTERN char * Record_Cell_File_Table[511L]
EXTERN char X_Format[2047L]
EXTERN INJECT_TYPE Inject_List[63L]
EXTERN LOAD_TYPE Load_List
EXTERN INTERLUDE_TYPE Interlude_List
EXTERN int Interlude_Flag1
EXTERN char I_Format[2047L]
EXTERN double Simulation_Rate
EXTERN GATEWAY_TYPE Gateway_List
EXTERN char Segment_Condition[127L][2047L]
EXTERN TERMINATE_TYPE Terminate_List
EXTERN SEGMENT_TYPE Segment_List[127L]
#define NAPA_DIGITAL_TYPE
EXTERN DUMP_TYPE Dump_List
EXTERN IO_TYPE IO_List[63L]
#define DIGITAL_DATA_TYPE
EXTERN int Interlude_Flag2
EXTERN UPDATE_TYPE Update_List[2047L]
void call_user_functions(const char *indent, const char *type)
char * get_token(char *str, char *tok, long keep_quotes)
char * build_name(const char *sgn, char *tok, long lr_type)
void clean_parentheses(char *tok)
char * get_output_and_scaling(char *str, char *sgn, char *out, char *scl)
char * format_suffixed_number(double value, long places, const char *unit)