home *** CD-ROM | disk | FTP | other *** search
- /*
- /N Create a netlist (instead of a pinlist)
- /P Output pin numbers (instead of pin names)
- /M Assign SIG* attributes to module ports
- /K Create CON* symbols for module ports
- /V Assign FutureNet power attributes to power objects
- /L Do not append sheet number to label names
- */
-
- /* VERSION="1.10 14-OCT-91"
- * - Removed checking of legal characters and node name length
- * (to make compatible with SDT/III)
- * - Added Version message
- *
- * Capacities:
- * - Part Names are limited to 16 characters
- * - Module Names are not checked for length
- * - Reference Strings are limited to 6 characters
- * - Node Names are not checked for length
- * - Node Numbers are limited to 6 digits (plus the leading '***')
- * - Pin Numbers are not checked for length
- *
- * Characters:
- * - Legal characters are not checked
- */
-
- int sw_K;
- int sw_L;
- int sw_M;
- int sw_N;
- int sw_P;
- int sw_V;
-
- int type;
- int len;
- int sym_cnt;
-
- /*-----------------------*/
-
- Initialize()
- {
- WriteString(0, "Creating Netlist...");
- WriteCrLf(0);
-
- /* OrCAD pin attributes to FutureNet attributes */
- SetPinMap(0, "23");
- SetPinMap(1, "22");
- SetPinMap(2, "21");
- SetPinMap(3, "20");
- SetPinMap(4, "23");
- SetPinMap(5, "20");
- SetPinMap(6, "27");
- SetPinMap(7, "23");
-
- sw_K = SwitchIsSet("K");
- sw_M = SwitchIsSet("M");
- sw_N = SwitchIsSet("N");
- sw_P = SwitchIsSet("P");
- sw_V = SwitchIsSet("V");
- sw_L = SwitchIsSet("L");
-
- if (sw_N == 1)
- {
- WriteString(1, "NETLIST,2");
- WriteCrLf(1);
- WriteString(1, "(DRAWING,ORCAD.NET,1-1");
- WriteCrLf(1);
- WriteString(1, "DATA,50,");
- WriteSymbol(1, TitleString);
- WriteCrLf(1);
- WriteString(1, "DATA,51,");
- WriteSymbol(1, DocumentNumber);
- WriteCrLf(1);
- WriteString(1, "DATA,52,");
- WriteSymbol(1, Revision);
- WriteCrLf(1);
- WriteString(1, "DATA,54,");
- WriteSymbol(1, DateString);
- WriteCrLf(1);
- WriteString(1, ")");
- }
- else
- {
- WriteString(1, "PINLIST,2");
- WriteCrLf(1);
- WriteString(1, "(DRAWING,ORCAD.PIN,1-1");
- }
- WriteCrLf(1);
-
- AddSymbol("Error");
- SetSymbol(Error, "E");
-
- AddSymbol("PartNameStr");
- AddSymbol("PinNameStr");
- AddSymbol("ReferenceStr");
- AddSymbol("SignalNameStr");
- AddSymbol("Str");
-
- SetNumberWidth(6);
- }
-
- /*-----------------------*/
-
- WriteHeader()
- {
- /* needed for Netlists and Pinlists */
- CreatePartDataBase();
-
- /* review the Part Names and Reference strings for errors */
- while (LoadInstance())
- {
- len = SymbolLength(PartName);
- if (len > 16)
- {
- CopySymbol(PartName, PartNameStr);
- PadSpaces(PartNameStr, 16);
-
- WriteString(0, "ERROR: Name is too long '");
- WriteSymbol(0, PartName);
- WriteString(0, "', truncated to ");
- WriteSymbol(0, PartNameStr);
- WriteCrLf(0);
-
- SetSymbol(ExitType, "E");
- }
-
- len = SymbolLength(ReferenceString);
- if (len > 6)
- {
- CopySymbol(ReferenceString, ReferenceStr);
- PadSpaces(ReferenceStr, 6);
-
- WriteString(0, "ERROR: Reference is too long '");
- WriteSymbol(0, ReferenceString);
- WriteString(0, "', truncated to ");
- WriteSymbol(0, ReferenceStr);
- WriteCrLf(0);
-
- SetSymbol(ExitType, "E");
- }
- }
- }
-
- /*-----------------------*/
-
- ValidateNodeInfo()
- {
- /* globals type, legal, and len are set */
- type = GetStandardSymbol(TypeCode);
-
- CopySymbol(SignalNameString, SignalNameStr);
-
- if (type == 'L')
- {
- if (sw_L == 0)
- {
- SetNumberWidth(1);
- MakeLocalSignal("_");
- SetNumberWidth(6);
- CopySymbol(LocalSignal, SignalNameStr);
- }
- }
- }
-
- /*-----------------------*/
-
- WriteNodeInfo()
- {
- if (type == 'L')
- {
- WriteSymbol(3, SignalNameStr);
- }
- if (type == 'P')
- {
- WriteSymbol(3, SignalNameStr);
- }
- if (type == 'S')
- {
- WriteSymbol(3, SignalNameStr);
- }
- if (type == 'N')
- {
- WriteString(3, "***");
- WriteSymbol(3, NetNumber);
- }
- if (type == 'U')
- {
- WriteString(3, "***");
- WriteSymbol(3, NetNumber);
- }
- }
-
- /*-----------------------*/
-
- SwitchM()
- {
- int i;
-
- if (sw_M == 1)
- {
- if (type == 'P')
- {
- i = GetStandardSymbol(SignalType);
- if (i == 0) { WriteString(3, "5"); }
- if (i == 1) { WriteString(3, "11"); }
- if (i == 2) { WriteString(3, "10"); }
- if (i == 3) { WriteString(3, "12"); }
- }
- else
- {
- WriteString(3, "5");
- }
- }
- else
- {
- WriteString(3, "5");
- }
- }
-
- /*-----------------------*/
-
- HandleNodeName()
- {
- int i;
-
- /* check the node name */
- ValidateNodeInfo();
-
- if (sw_N == 1)
- {
-
- WriteString(3, "(SIG,,");
- WriteNodeInfo();
-
- WriteString(3, ",1-1,");
- SwitchM();
- WriteString(3, ",");
- WriteNodeInfo();
-
- WriteCrLf(3);
- }
- else
- {
- /* write out any net that originally had a label. Illegal */
- /* characters or length may alter its type. */
- if (type == 'L')
- {
- WriteString(3, "SIG,");
- WriteNodeInfo();
- WriteString(3, ",1-1,5,");
- WriteNodeInfo();
- WriteCrLf(3);
- }
- if (type == 'P')
- {
- WriteString(3, "SIG,");
- WriteNodeInfo();
- WriteString(3, ",1-1,");
- SwitchM();
- WriteString(3, ",");
- WriteNodeInfo();
- WriteCrLf(3);
- }
- if (type == 'S')
- {
- WriteString(3, "SIG,");
- WriteNodeInfo();
- WriteString(3, ",1-1,5,");
- WriteNodeInfo();
- WriteCrLf(3);
- }
- }
-
- /* needed for Netlists and Pinlists */
- AddSignalName();
- }
-
- /*-----------------------*/
-
- WriteNet()
- {
- int i;
-
- RecordNode();
-
- if (sw_N == 1)
- {
- WriteString(3, "PIN,1-1,");
-
- /* sets PartIndex to be the array index of this Reference */
- CopySymbol(ReferenceString, ReferenceStr);
- SetIndexByRef(ReferenceStr);
- SetNumberWidth(1);
- WriteSymbol(3, PartIndex);
- SetNumberWidth(6);
- WriteString(3, ",");
-
- WriteSymbol(3, ReferenceStr);
- WriteString(3, ",");
-
- i = GetStandardSymbol(PinType);
- WriteMap(3, i);
- WriteString(3, ",");
-
- if (sw_P == 1)
- { WriteSymbol(3, PinNumberString); }
- else
- { WriteSymbol(3, PinNameString); }
-
- WriteCrLf(3);
- }
- }
-
- /*-----------------------*/
-
- WriteNetEnding()
- {
- if (sw_N == 1)
- {
- WriteString(3, ")");
- WriteCrLf(3);
- }
- }
-
- /*-----------------------*/
-
- ProcessFieldStrings()
- {
- }
-
- /*-----------------------*/
-
- SwitchK()
- {
- int i;
-
- if (sw_K == 1)
- {
- SetFirst(SIGNALS);
- do {
- i = GetStandardSymbol(SignalType);
- if (i != 0)
- {
- ValidateNodeInfo();
-
- if (type == 'P')
- {
- sym_cnt = sym_cnt + 1;
- WriteString(1, "(SYM,");
- SetNumberWidth(1);
- WriteInteger(1, sym_cnt);
- SetNumberWidth(6);
- WriteCrLf(1);
-
- WriteString(1, "DATA,2,");
- if (i == 1) { WriteString(1, "CONO"); }
- if (i == 2) { WriteString(1, "CONI"); }
- if (i == 3) { WriteString(1, "CONB"); }
- WriteCrLf(1);
-
- WriteString(1, "PIN,,");
- WriteSymbol(1, SignalNameString);
- WriteString(1, ",1-1,");
-
- /* for writing the correct module port attributes */
- if (sw_M == 1)
- {
- if (i == 0) { WriteString(1, "5"); }
- if (i == 1) { WriteString(1, "11"); }
- if (i == 2) { WriteString(1, "10"); }
- if (i == 3) { WriteString(1, "12"); }
- }
- else
- {
- WriteString(1, "5");
- }
-
- if (i == 1) { WriteString(1, ",25"); }
- if (i == 2) { WriteString(1, ",24"); }
- if (i == 3) { WriteString(1, ",26"); }
-
- if (i == 1) { WriteString(1, ",OUT"); }
- if (i == 2) { WriteString(1, ",IN"); }
- if (i == 3) { WriteString(1, ",IO"); }
- WriteCrLf(1);
- WriteString(1, ")");
- WriteCrLf(1);
- }
- }
- } while (SetNext(SIGNALS));
- }
- }
-
- /*-----------------------*/
-
- WriteNetListEnd()
- {
- int i;
- int j;
- int ok;
- int net;
-
- net = 0;
-
- if (sw_N == 0)
- {
- WriteString(3, ")");
- WriteCrLf(3);
- }
-
- sym_cnt = 0;
- SetFirst(ALL);
- do {
- CopySymbol(ReferenceString, Str);
- LoadFieldString(Str);
-
- SetNumberWidth(1);
- if (sw_N == 1)
- {
- WriteString(1, "(SYM,1-1,");
- WriteSymbol(1, PartIndex);
- }
- else
- {
- WriteString(1, "(SYM,");
- WriteSymbol(1, PartIndex);
- }
- SetNumberWidth(6);
- WriteCrLf(1);
-
- /* for numbering CON* symbols if sw_K is set */
- i = GetStandardSymbol(PartIndex);
- if (i > sym_cnt) { sym_cnt = i; }
-
- WriteString(1, "DATA,2,");
- CopySymbol(ReferenceString, ReferenceStr);
- len = SymbolLength(ReferenceString);
- if (len > 6)
- {
- PadSpaces(ReferenceStr, 6);
- }
- WriteSymbol(1, ReferenceStr);
- WriteCrLf(1);
-
- WriteString(1, "DATA,3,");
- CopySymbol(PartName, PartNameStr);
- len = SymbolLength(PartNameStr);
- if (len > 16)
- {
- PadSpaces(PartNameStr, 16);
- }
- WriteSymbol(1, PartNameStr);
- WriteCrLf(1);
-
- WriteString(1, "DATA,4,");
- len = SymbolLength(ModuleName);
- if (len > 0)
- { WriteSymbol(1, ModuleName); }
- else
- { WriteSymbol(1, PartName); }
- WriteCrLf(1);
-
- do {
- if (sw_N == 1)
- {
- WriteString(1, "DATA,");
-
- i = GetStandardSymbol(PinType);
- WriteMap(1, i);
- WriteString(1, ",");
- }
- else
- {
- WriteString(1, "PIN,,");
-
- ValidateNodeInfo();
- if (type == 'L')
- {
- WriteSymbol(1, SignalNameStr);
- }
- if (type == 'P')
- {
- WriteSymbol(1, SignalNameStr);
- }
- if (type == 'S')
- {
- WriteSymbol(1, SignalNameStr);
- }
- if (type == 'N')
- {
- WriteString(1, "***");
- WriteSymbol(1, NetNumber);
- }
- if (type == 'U')
- {
- WriteString(1, "UN");
- net = net + 1;
- WriteInteger(1, net);
- }
-
- WriteString(1, ",1-1,");
- if (sw_M == 1)
- {
- if (type == 'L') { WriteString(1, "5"); }
- if (type == 'P')
- {
- i = GetStandardSymbol(SignalType);
- if (i == 0) { WriteString(1, "5"); }
- if (i == 1) { WriteString(1, "11"); }
- if (i == 2) { WriteString(1, "10"); }
- if (i == 3) { WriteString(1, "12"); }
- }
- if (type == 'S') { WriteString(1, "5"); }
- if (type == 'N') { WriteString(1, "5"); }
- if (type == 'U') { WriteString(1, "5"); }
- }
- else
- {
- WriteString(1, "5");
- }
- WriteString(1, ",");
-
- i = GetStandardSymbol(PinType);
- if (sw_V == 1)
- {
- if (type == 'S')
- {
- j = 0;
- ok = 0;
-
- SetSymbol(PinNameStr, "GND");
- j = CompareSymbol(PinNameString, PinNameStr);
- if (j == 0) { WriteString(1, "100"); ok = 1; }
- SetSymbol(PinNameStr, "+5V");
- j = CompareSymbol(PinNameString, PinNameStr);
- if (j == 0) { WriteString(1, "101"); ok = 1; }
- SetSymbol(PinNameStr, "+12V");
- j = CompareSymbol(PinNameString, PinNameStr);
- if (j == 0) { WriteString(1, "105"); ok = 1; }
- SetSymbol(PinNameStr, "-12V");
- j = CompareSymbol(PinNameString, PinNameStr);
- if (j == 0) { WriteString(1, "106"); ok = 1; }
- SetSymbol(PinNameStr, "VEE");
- j = CompareSymbol(PinNameString, PinNameStr);
- if (j == 0) { WriteString(1, "107"); ok = 1; }
-
- if (ok == 0) { WriteMap(1, i); }
- }
- else
- {
- WriteMap(1, i);
- }
- }
- else
- {
- WriteMap(1, i);
- }
-
- WriteString(1, ",");
- }
-
- if (sw_P == 1)
- { WriteSymbol(1, PinNumberString); }
- else
- { WriteSymbol(1, PinNameString); }
-
- WriteCrLf(1);
- } while (SetNext(NODES));
-
- WriteString(1, ")");
- WriteCrLf(1);
-
- } while (SetNext(ALL));
-
- /* for creating the CON* objects -- if necessary */
- SwitchK();
-
- /* add the net oriented info to the end of the part */
- /* oriented info for Netlist formats. */
- ConcatFile(1, 3);
-
- WriteString(0, "Done");
- WriteCrLf(0);
- }
-