home *** CD-ROM | disk | FTP | other *** search
/ Liren Large Software Subsidy 13 / 13.iso / p / p078 / 3.img / NETFORMS.PLB / VSTMODEL.CF < prev    next >
Encoding:
Text File  |  1991-10-14  |  14.4 KB  |  637 lines

  1. /*
  2.     /N Suppress comments
  3. */
  4.  
  5. /*  VERSION="1.10   14-OCT-91"
  6.  *      - Corrected netlist creation for ROMs and RAMs
  7.  *        Corrected extraneous semicolons in part delays
  8.  *      - Added additional legal prefixes for module port and label names
  9.  *      - Added ZERO and ONE as legal signal names
  10.  *      - Added Version message
  11.  *
  12.  *  Capacities:
  13.  *      - Part Names are not checked for length
  14.  *      - Module Names are not checked for length
  15.  *      - Reference Strings are not checked for length
  16.  *      - Node Names are not checked for length
  17.  *      - Pin Numbers are not checked for length
  18.  *
  19.  *  Characters:
  20.  *      - All ASCII keyboard characters are legal
  21.  */
  22.  
  23. int sw_N;
  24.  
  25. int ok;
  26. int len;
  27. int line;
  28. int temp;
  29. int ch;
  30. int err;
  31.  
  32. /*-----------------------*/
  33.  
  34. Initialize()
  35. {
  36.     WriteString(0, "Creating Netlist...");
  37.     WriteCrLf(0);
  38.  
  39.     /* sort the parts by reference number */
  40.     SortByNumber();
  41.  
  42.     AddSymbol("FieldStr");
  43.     AddSymbol("Str");
  44.     AddSymbol("PartNameStr");
  45.     AddSymbol("ReferenceStr");
  46.  
  47.     AddSymbol("IPHStr");
  48.     SetSymbol(IPHStr, "IPH");
  49.  
  50.     AddSymbol("IPLStr");
  51.     SetSymbol(IPLStr, "IPL");
  52.  
  53.     AddSymbol("ONEStr");
  54.     SetSymbol(ONEStr, "ONE");
  55.  
  56.     AddSymbol("ZEROStr");
  57.     SetSymbol(ZEROStr, "ZERO");
  58.  
  59.     /* set to one when an illegal module port */
  60.     /* or label prefix is encountered.        */
  61.     err = 0;
  62.  
  63.     SetNumberWidth(5);
  64.  
  65.     sw_N = SwitchIsSet("N");
  66. }
  67.  
  68. /*-----------------------*/
  69.  
  70. WriteHeader()
  71. {
  72.     CreatePartDataBase();
  73. }
  74.  
  75. /*-----------------------*/
  76.  
  77. HandleNodeName()
  78. {
  79.     AddSignalName();
  80. }
  81.  
  82. /*-----------------------*/
  83.  
  84. WriteNet()
  85. {
  86.     RecordNode();
  87. }
  88.  
  89. /*-----------------------*/
  90.  
  91. WriteNetEnding()
  92. {
  93. }
  94.  
  95. /*-----------------------*/
  96.  
  97. ProcessFieldStrings()
  98. {
  99. }
  100.  
  101. /*-----------------------*/
  102.  
  103. PipeVST()
  104. {
  105.     ok = NextPipe();
  106.     if (ok == 1)
  107.     {
  108.         ok = IsKeyWord();
  109.         ok = 1 - ok;
  110.     }
  111.  
  112.     while (ok == 1)
  113.     {
  114.         WriteSymbol(1, PipeLine);
  115.         WriteCrLf(1);
  116.  
  117.         ok = NextPipe();
  118.         if (ok == 1)
  119.         {
  120.             ok = IsKeyWord();
  121.             ok = 1 - ok;
  122.         }
  123.     }
  124. }
  125.  
  126. /*-----------------------*/
  127.  
  128. HandleFieldCommands()
  129. {
  130.     int i;
  131.     int ch;
  132.  
  133.     i = 0;
  134.  
  135.     len = SymbolLength(FieldString1);
  136.     if (len > 0)
  137.     {
  138.         CopySymbol(FieldString1, FieldStr);
  139.         ch = GetSymbolChar(i, FieldStr);
  140.         if (ch == 124)
  141.         {
  142.             len = len - 1;
  143.             PackString(1, len, FieldStr, Str);
  144.             WriteSymbol(1, Str);
  145.             WriteCrLf(1);
  146.         }
  147.     }
  148.  
  149.     len = SymbolLength(FieldString2);
  150.     if (len > 0)
  151.     {
  152.         CopySymbol(FieldString2, FieldStr);
  153.         ch = GetSymbolChar(i, FieldStr);
  154.         if (ch == 124)
  155.         {
  156.             len = len - 1;
  157.             i = PackString(1, len, FieldStr, Str);
  158.             WriteSymbol(1, Str);
  159.             WriteCrLf(1);
  160.         }
  161.     }
  162.  
  163.     len = SymbolLength(FieldString3);
  164.     if (len > 0)
  165.     {
  166.         CopySymbol(FieldString3, FieldStr);
  167.         ch = GetSymbolChar(i, FieldStr);
  168.         if (ch == 124)
  169.         {
  170.             len = len - 1;
  171.             PackString(1, len, FieldStr, Str);
  172.             WriteSymbol(1, Str);
  173.             WriteCrLf(1);
  174.         }
  175.     }
  176.  
  177.     len = SymbolLength(FieldString4);
  178.     if (len > 0)
  179.     {
  180.         CopySymbol(FieldString4, FieldStr);
  181.         ch = GetSymbolChar(i, FieldStr);
  182.         if (ch == 124)
  183.         {
  184.             len = len - 1;
  185.             PackString(1, len, FieldStr, Str);
  186.             WriteSymbol(1, Str);
  187.             WriteCrLf(1);
  188.         }
  189.     }
  190.  
  191.     len = SymbolLength(FieldString5);
  192.     if (len > 0)
  193.     {
  194.         CopySymbol(FieldString5, FieldStr);
  195.         ch = GetSymbolChar(i, FieldStr);
  196.         if (ch == 124)
  197.         {
  198.             len = len - 1;
  199.             PackString(1, len, FieldStr, Str);
  200.             WriteSymbol(1, Str);
  201.             WriteCrLf(1);
  202.         }
  203.     }
  204.  
  205.     len = SymbolLength(FieldString6);
  206.     if (len > 0)
  207.     {
  208.         CopySymbol(FieldString6, FieldStr);
  209.         ch = GetSymbolChar(i, FieldStr);
  210.         if (ch == 124)
  211.         {
  212.             len = len - 1;
  213.             PackString(1, len, FieldStr, Str);
  214.             WriteSymbol(1, Str);
  215.             WriteCrLf(1);
  216.         }
  217.     }
  218.  
  219.     len = SymbolLength(FieldString7);
  220.     if (len > 0)
  221.     {
  222.         CopySymbol(FieldString7, FieldStr);
  223.         ch = GetSymbolChar(i, FieldStr);
  224.         if (ch == 124)
  225.         {
  226.             len = len - 1;
  227.             PackString(1, len, FieldStr, Str);
  228.             WriteSymbol(1, Str);
  229.             WriteCrLf(1);
  230.         }
  231.     }
  232.  
  233.     len = SymbolLength(FieldString8);
  234.     if (len > 0)
  235.     {
  236.         CopySymbol(FieldString8, FieldStr);
  237.         ch = GetSymbolChar(i, FieldStr);
  238.         if (ch == 124)
  239.         {
  240.             len = len - 1;
  241.             PackString(1, len, FieldStr, Str);
  242.             WriteSymbol(1, Str);
  243.             WriteCrLf(1);
  244.         }
  245.     }
  246. }
  247.  
  248. /*-----------------------*/
  249.  
  250. HandleFieldDelays()
  251. {
  252.     int i;
  253.     int len;
  254.     int ch;
  255.     int semi;
  256.  
  257.     i = 0;
  258.     semi = 0;
  259.  
  260.     len = SymbolLength(FieldString1);
  261.     if (len > 0)
  262.     {
  263.         CopySymbol(FieldString1, FieldStr);
  264.         ch = GetSymbolChar(i, FieldStr);
  265.         if (ch != 124)
  266.         {
  267.             WriteString(1, ";");
  268.             semi = 1;
  269.  
  270.             WriteSymbol(1, FieldString1);
  271.         }
  272.     }
  273.  
  274.     len = SymbolLength(FieldString2);
  275.     if (len > 0)
  276.     {
  277.         CopySymbol(FieldString2, FieldStr);
  278.         ch = GetSymbolChar(i, FieldStr);
  279.         if (ch != 124)
  280.         { 
  281.             if (semi == 1) { WriteString(1, ","); }
  282.             else           { WriteString(1, ";"); semi = 1; }
  283.             WriteSymbol(1, FieldString2);
  284.         }
  285.     }
  286.  
  287.     len = SymbolLength(FieldString3);
  288.     if (len > 0)
  289.     {
  290.         CopySymbol(FieldString3, FieldStr);
  291.         ch = GetSymbolChar(i, FieldStr);
  292.         if (ch != 124)
  293.         { 
  294.             if (semi == 1) { WriteString(1, ","); }
  295.             else           { WriteString(1, ";"); semi = 1; }
  296.             WriteSymbol(1, FieldString3);
  297.         }
  298.     }
  299.  
  300.     len = SymbolLength(FieldString4);
  301.     if (len > 0)
  302.     {
  303.         CopySymbol(FieldString4, FieldStr);
  304.         ch = GetSymbolChar(i, FieldStr);
  305.         if (ch != 124)
  306.         { 
  307.             if (semi == 1) { WriteString(1, ","); }
  308.             else           { WriteString(1, ";"); semi = 1; }
  309.             WriteSymbol(1, FieldString4);
  310.         }
  311.     }
  312.  
  313.     len = SymbolLength(FieldString5);
  314.     if (len > 0)
  315.     {
  316.         CopySymbol(FieldString5, FieldStr);
  317.         ch = GetSymbolChar(i, FieldStr);
  318.         if (ch != 124)
  319.         { 
  320.             if (semi == 1) { WriteString(1, ","); }
  321.             else           { WriteString(1, ";"); semi = 1; }
  322.             WriteSymbol(1, FieldString5);
  323.         }
  324.     }
  325.  
  326.     len = SymbolLength(FieldString6);
  327.     if (len > 0)
  328.     {
  329.         CopySymbol(FieldString6, FieldStr);
  330.         ch = GetSymbolChar(i, FieldStr);
  331.         if (ch != 124)
  332.         { 
  333.             if (semi == 1) { WriteString(1, ","); }
  334.             else           { WriteString(1, ";"); semi = 1; }
  335.             WriteSymbol(1, FieldString6);
  336.         }
  337.     }
  338.  
  339.     len = SymbolLength(FieldString7);
  340.     if (len > 0)
  341.     {
  342.         CopySymbol(FieldString7, FieldStr);
  343.         ch = GetSymbolChar(i, FieldStr);
  344.         if (ch != 124)
  345.         { 
  346.             if (semi == 1) { WriteString(1, ","); }
  347.             else           { WriteString(1, ";"); semi = 1; }
  348.             WriteSymbol(1, FieldString7);
  349.         }
  350.     }
  351.  
  352.     len = SymbolLength(FieldString8);
  353.     if (len > 0)
  354.     {
  355.         CopySymbol(FieldString8, FieldStr);
  356.         ch = GetSymbolChar(i, FieldStr);
  357.         if (ch != 124)
  358.         { 
  359.             if (semi == 1) { WriteString(1, ","); }
  360.             else           { WriteString(1, ";"); semi = 1; }
  361.             WriteSymbol(1, FieldString8);
  362.         }
  363.     }
  364. }
  365.  
  366. /*-----------------------*/
  367.  
  368. CheckSignal()
  369. {
  370.     int c;
  371.  
  372.     CopySymbol(SignalNameString, Str);
  373.     ToUpper(Str);
  374.  
  375.     temp = 0;
  376.     ch = GetSymbolChar(temp, Str);
  377.     if (ch == 'P') { ok = 1; }
  378.     if (ch == 'L') { ok = 1; }
  379.     if (ch == 'N') { ok = 1; }
  380.  
  381.     if (ch == '*')
  382.     {
  383.         temp = 1;
  384.         c = GetSymbolChar(temp, Str);
  385.  
  386.         if (c == 'P') { ok = 1; }
  387.         if (c == 'L') { ok = 1; }
  388.         if (c == 'N') { ok = 1; }
  389.     }
  390.  
  391.     if (ch == '~')
  392.     {
  393.         temp = 1;
  394.         c = GetSymbolChar(temp, Str);
  395.  
  396.         if (c == 'P') { ok = 1; }
  397.         if (c == 'L') { ok = 1; }
  398.         if (c == 'N') { ok = 1; }
  399.     }
  400.  
  401.     if (ch == 'I')
  402.     {
  403.         temp = CompareSymbol(Str, IPLStr);
  404.         if (temp == 0) { ok = 1; };
  405.  
  406.         temp = CompareSymbol(Str, IPHStr);
  407.         if (temp == 0) { ok = 1; };
  408.     }
  409.  
  410.     if (ch == 'Z')
  411.     {
  412.         ok = 1 - CompareSymbol(Str, ZEROStr);
  413.     }
  414.  
  415.     if (ch == 'O')
  416.     {
  417.         ok = 1 - CompareSymbol(Str, ONEStr);
  418.     }
  419. }
  420.  
  421. /*-----------------------*/
  422.  
  423. WriteNodeInfo()
  424. {
  425.     int i;
  426.  
  427.     /* Str must begin with 'P', 'L', 'N', '*P', '*L', '*N', '~P', */
  428.     /* '~L', '~N', or be named 'IPL', 'IPH', 'ONE', or 'ZERO'.    */
  429.     ok = 0;
  430.     CheckSignal();
  431.     
  432.     i = GetStandardSymbol(TypeCode);
  433.     if (i == 'L')
  434.     {
  435.         if (ok == 0)
  436.         {
  437.             if (err == 0)
  438.             {
  439.                 err = 1;
  440.  
  441.                 /* put out legal prefixes */
  442.                 WriteString(0, "Signal names must begin with one of the following prefixes:");
  443.                 WriteCrLf(0);
  444.                 WriteString(0, "     'P',  'L',  'N',");
  445.                 WriteCrLf(0);
  446.                 WriteString(0, "    '*P', '*L', '*N',");
  447.                 WriteCrLf(0);
  448.                 WriteString(0, "    '~P', '~L', '~N',");
  449.                 WriteCrLf(0);
  450.                 WriteString(0, "or have the name:");
  451.                 WriteCrLf(0);
  452.                 WriteString(0, "    'IPL', 'IPH', 'ONE' or 'ZERO'");
  453.                 WriteCrLf(0);
  454.             }
  455.  
  456.             WriteString(0, "ERROR: Illegal signal name '");
  457.             WriteSymbol(0, SignalNameString);
  458.             WriteString(0, "'");
  459.             WriteCrLf(0);
  460.  
  461.             SetSymbol(ExitType, "E");
  462.         }
  463.  
  464.         len = SymbolLength(SignalNameString);
  465.         line = line + len;
  466.  
  467.         WriteSymbol(1, SignalNameString);
  468.     }
  469.     if (i == 'P')
  470.     {
  471.         if (ok == 0)
  472.         {
  473.             if (err == 0)
  474.             {
  475.                 err = 1;
  476.  
  477.                 /* put out legal prefixes */
  478.                 WriteString(0, "Signal names must begin with one of the following prefixes:");
  479.                 WriteCrLf(0);
  480.                 WriteString(0, "     'P',  'L',  'N',");
  481.                 WriteCrLf(0);
  482.                 WriteString(0, "    '*P', '*L', '*N',");
  483.                 WriteCrLf(0);
  484.                 WriteString(0, "    '~P', '~L', '~N',");
  485.                 WriteCrLf(0);
  486.                 WriteString(0, "or have the name:");
  487.                 WriteCrLf(0);
  488.                 WriteString(0, "    'IPL', 'IPH', 'ONE' or 'ZERO'");
  489.                 WriteCrLf(0);
  490.             }
  491.  
  492.             WriteString(0, "ERROR: Illegal signal name '");
  493.             WriteSymbol(0, SignalNameString);
  494.             WriteString(0, "'");
  495.             WriteCrLf(0);
  496.  
  497.             SetSymbol(ExitType, "E");
  498.         }
  499.  
  500.         len = SymbolLength(SignalNameString);
  501.         line = line + len;
  502.  
  503.         WriteSymbol(1, SignalNameString);
  504.     }
  505.     if (i == 'S')
  506.     {
  507.         WriteString(0, "ERROR: Signal '");
  508.         WriteSymbol(0, SignalNameString);
  509.         WriteString(0, "' is a power net");
  510.         WriteCrLf(0);
  511.  
  512.         SetSymbol(ExitType, "E");
  513.  
  514.         len = SymbolLength(SignalNameString);
  515.         line = line + len;
  516.  
  517.         WriteSymbol(1, SignalNameString);
  518.     }
  519.     if (i == 'N')
  520.     {
  521.         WriteString(0, "ERROR: Pin ");
  522.         WriteSymbol(0, PinNumberString);
  523.         WriteString(0, " on Reference '");
  524.         WriteSymbol(0, ReferenceString);
  525.         WriteString(0, "' is connected to an unnamed net");
  526.         WriteCrLf(0);
  527.  
  528.         SetSymbol(ExitType, "E");
  529.         
  530.         line = line + 6;
  531.  
  532.         WriteString(1, "?");
  533.         WriteSymbol(1, NetNumber);
  534.     }
  535.     if (i == 'U')
  536.     {
  537.         WriteString(0, "ERROR: Pin ");
  538.         WriteSymbol(0, PinNumberString);
  539.         WriteString(0, " on Reference '");
  540.         WriteSymbol(0, ReferenceString);
  541.         WriteString(0, "' is unconnected");
  542.         WriteCrLf(0);
  543.  
  544.         SetSymbol(ExitType, "E");
  545.         
  546.         line = line + 2;
  547.  
  548.         WriteString(1, "??");
  549.     }
  550. }
  551.  
  552. /*-----------------------*/
  553.  
  554. WriteNetListEnd()
  555. {
  556.     int i;
  557.     int first;
  558.     int ch;
  559.     int ptype;
  560.  
  561.     /* write any header info in pipe commands */
  562.     FirstPipe();
  563.     ok = AccessKeyWord("VST_MODEL");
  564.     while (ok == 1) {
  565.         PipeVST();
  566.         ok = AccessKeyWord("VST_MODEL");
  567.     }
  568.  
  569.     RewindInstanceFile();
  570.     while (LoadInstance())
  571.     {
  572.         CopySymbol(ReferenceString, ReferenceStr);
  573.         SetIndexByRef(ReferenceStr);
  574.  
  575.         /* check for any commands in the Part Fields */
  576.         HandleFieldCommands();
  577.  
  578.         CopySymbol(PartName, PartNameStr);
  579.         ExceptionsFor("MOD", PartNameStr);
  580.         WriteSymbol(1, PartNameStr);
  581.         WriteString(1, "(");
  582.  
  583.         line = SymbolLength(PartNameStr);
  584.         line = line + 1;
  585.  
  586.         first = 1;
  587.         SetFirst(NODES);
  588.         do {
  589.             i = GetStandardSymbol(PinType);
  590.  
  591.             if (first != 1)
  592.             {
  593.                 if (i != ptype)
  594.                     { ptype = i; WriteString(1, ";"); }
  595.                 else
  596.                     { WriteString(1, ","); }
  597.             }
  598.             else
  599.             {
  600.                 ptype = i;
  601.             }
  602.  
  603.             if (line > 70)
  604.             {
  605.                 line = 10;
  606.                 WriteCrLf(1);
  607.                 WriteString(1, "          ");
  608.             }
  609.  
  610.             WriteNodeInfo();
  611.             first = 0;
  612.         } while (SetNext(NODES));
  613.  
  614.         /* if not a logical device, then set delays */
  615.         i = 0;
  616.         ch = GetSymbolChar(i, PartNameStr);
  617.         if (ch != 'L')
  618.         {
  619.             HandleFieldDelays();
  620.         }
  621.         WriteString(1, ");");
  622.  
  623.         if (sw_N == 0)
  624.         {
  625.             WriteSymbol(1, ReferenceString);
  626.         }
  627.         WriteCrLf(1);
  628.     }
  629.  
  630.     WriteString(1, "%");
  631.     WriteCrLf(1);
  632.  
  633.     WriteString(0, "Done");
  634.     WriteCrLf(0);
  635. }
  636.  
  637.