home *** CD-ROM | disk | FTP | other *** search
- /*
- /L Do not append sheet number to labels
- /P Output pin numbers (instead of pin names)
- */
-
- /* VERSION="1.10 14-OCT-91"
- * - Altered PostFile to handle sheets with zero parts
- * - Moved comment in the cell definition after the cellType
- * - Added handling for 0 parts and/or 0 nets in a design
- * - Added code to strip path information from sheet filenames
- * - Added Version message
- * - Corrected int to unsigned comparison
- *
- * Capacities:
- * - Part Names are not checked for length
- * - Module Names are not checked for length
- * - Reference Strings are not checked for length
- * - Node Names are not checked for length
- * - Node Numbers are limited to 5 digits (plus the leading 'N')
- * - Pin Numbers are not checked for length
- *
- * Characters:
- * - Legal characters are { '_', '0-9', 'a-z', 'A-Z' }
- * - Remember that case is not significant in EDIF
- *
- * - Names with illegal characters will be handled as follows:
- * 1 A WARNING will be issued
- * 2 '-' -> 'MINUS' '+' -> 'PLUS' '\', '/' -> 'BAR' all others -> '_'
- * 3 The original name will be RENAMEd to the new
- *
- */
-
- int sw_L;
- int sw_P;
-
- int legal;
- int len;
- int ch;
- int ok;
- int first;
-
- /*-----------------------*/
-
- Initialize()
- {
- WriteString(0, "Creating Netlist...");
- WriteCrLf(0);
-
- MakeInstanceFile();
- SetTraversal("LEAF");
-
- AddSymbol("SignalNameStr");
- AddSymbol("TempStr");
- AddSymbol("Str");
- AddSymbol("DesignStr");
-
- sw_L = SwitchIsSet("L");
- sw_P = SwitchIsSet("P");
-
- SetCharSet("_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
- SetNumberWidth(5);
-
- first = 1;
- }
-
- /*-----------------------*/
-
- PreFile()
- {
- }
-
- /*-----------------------*/
-
- PostFile()
- {
- int i;
-
- if (first == 1)
- {
- /* write the schematic library */
- WriteString(3, " (library MAIN_LIB");
- WriteCrLf(3);
- WriteString(3, " (edifLevel 0)");
- WriteCrLf(3);
- WriteString(3, " (technology");
- WriteCrLf(3);
- WriteString(3, " (numberDefinition");
- WriteCrLf(3);
- WriteString(3, " (scale 1 1 (unit distance))))");
- }
- WriteCrLf(3);
-
- ok = LastFile();
- if (ok == 1)
- {
- /* this is the root sheet -- no pins upward in the hierarchy */
- WriteString(1, "(edif ");
- CopySymbol(FileName, Str);
- CopySymbol(FileName, DesignStr);
- ToUpper(Str);
- StripPath(Str);
- StripExt();
- EdifName1();
- WriteCrLf(1);
-
- WriteString(1, " (edifVersion 2 0 0)");
- WriteCrLf(1);
- WriteString(1, " (edifLevel 0)");
- WriteCrLf(1);
- WriteString(1, " (keywordMap (keywordLevel 0))");
- WriteCrLf(1);
- WriteString(1, " (status");
- WriteCrLf(1);
- WriteString(1, " (written");
- WriteCrLf(1);
- WriteString(1, " (timeStamp 0 0 0 0 0 0)");
- WriteCrLf(1);
- WriteString(1, " (program \"HFORM.EXE\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"Original data from OrCAD/SDT schematic\"))");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, TitleString);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, DateString);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, DocumentNumber);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, Revision);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, Organization);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, AddressLine1);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, AddressLine2);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, AddressLine3);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (comment \"");
- WriteSymbol(1, AddressLine4);
- WriteString(1, "\"))");
- WriteCrLf(1);
- }
-
- WriteString(3, " (cell ");
- CopySymbol(FileName, Str);
- ToUpper(Str);
- StripPath(Str);
- StripExt();
- EdifName3();
- WriteCrLf(3);
- WriteString(3, " (cellType generic)");
- WriteCrLf(3);
- WriteString(3, " (view NetlistView");
- WriteCrLf(3);
- WriteString(3, " (viewType netlist)");
- WriteCrLf(3);
- WriteString(3, " (interface");
-
- /* write out the ports */
- ok = FirstChild();
- if (ok == 1)
- {
- ok = FirstChild();
-
- CopySymbol(FileName, Str);
- StripExt();
- CopySymbol(Str, TempStr);
-
- CopySymbol(PartName, Str);
- StripExt();
-
- /* if the same, then these are the module ports for this sheet */
- ok = CompareSymbol(TempStr, Str);
- if (ok == 0)
- {
- /* the map for pin types */
- SetPinMap(0, "INOUT");
- SetPinMap(1, "OUTPUT");
- SetPinMap(2, "INPUT");
- SetPinMap(3, "INOUT");
- SetPinMap(4, "OUTPUT");
- SetPinMap(5, "INOUT");
- SetPinMap(6, "OUTPUT");
- SetPinMap(7, "INPUT");
-
- FirstChildPin();
- do {
- WriteCrLf(3);
- WriteString(3, " (port ");
-
- if (sw_P == 0)
- { CopySymbol(PinNameString, Str); }
- else
- { CopySymbol(PinNumberString, Str); }
- EdifName3();
-
- WriteString(3, " (direction ");
- i = GetStandardSymbol(PinType);
- WriteMap(3, i);
- WriteString(3, "))");
- } while (NextChildPin());
- }
- }
- WriteString(3, ")");
- WriteCrLf(3);
-
- /* write out the instances of library parts */
- SetPinMap(0, "INOUT");
- SetPinMap(1, "OUTPUT");
- SetPinMap(2, "INPUT");
- SetPinMap(3, "INOUT");
-
- WriteString(3, " (contents");
-
- ok = FirstPart();
- if (ok == 1) {
- do {
- CopySymbol(ReferenceString, Str);
- LoadFieldString(Str);
-
- WriteCrLf(3);
- WriteString(3, " (instance ");
- EdifName3();
- WriteCrLf(3);
-
- WriteString(3, " (viewRef NetlistView");
- WriteCrLf(3);
-
- WriteString(3, " (cellRef ");
- CopySymbol(LookupNameString, Str);
- EdifName3();
- WriteCrLf(3);
-
- WriteString(3, " (libraryRef OrCAD_LIB)))");
- WriteCrLf(3);
-
- WriteString(3, " (property PartValue (string \"");
- WriteSymbol(3, PartName);
- WriteString(3, "\"))");
- WriteCrLf(3);
-
- WriteString(3, " (property ModuleValue (string \"");
- len = SymbolLength(ModuleName);
- if (len > 0)
- { WriteSymbol(3, ModuleName); }
- else
- { WriteSymbol(3, PartName); }
- WriteString(3, "\")))");
- } while (NextPart());
- }
-
- /* write out the instances of sheets */
- ok = FirstChild();
- if (ok == 1)
- {
- CopySymbol(FileName, Str);
- StripExt();
- CopySymbol(Str, TempStr);
-
- CopySymbol(PartName, Str);
- StripExt();
-
- /* skip if this is the module ports for the current sheet */
- ok = CompareSymbol(Str, TempStr);
- if (ok == 0)
- { ok = NextChild(); }
- else
- { ok = 1; }
-
- while (ok == 1)
- {
- WriteCrLf(3);
- WriteString(3, " (instance ");
- CopySymbol(ReferenceString, Str);
- EdifName3();
- WriteCrLf(3);
-
- WriteString(3, " (viewRef NetlistView");
- WriteCrLf(3);
-
- WriteString(3, " (cellRef ");
- CopySymbol(PartName, Str);
- ToUpper(Str);
- StripPath(Str);
- StripExt();
- EdifName3();
- WriteString(3, ")))");
-
- ok = NextChild();
- }
- }
-
- /* write out the nets */
- ok = FirstNet();
- if (ok == 1) {
- do {
- WriteCrLf(3);
- WriteString(3, " (net ");
-
- CopySymbol(NetNameString, Str);
-
- i = GetStandardSymbol(NetCode);
- if (i == 'L')
- {
- if (sw_L == 0)
- {
- SetNumberWidth(1);
- MakeLocalSignal("_");
- SetNumberWidth(5);
- CopySymbol(LocalSignal, Str);
- }
- EdifName3();
- }
- if (i == 'P')
- {
- EdifName3();
- }
- if (i == 'S')
- {
- EdifName3();
- }
- if (i == 'N')
- {
- WriteString(3, "N");
- WriteSymbol(3, NetNumber);
- }
- if (i == 'U')
- {
- WriteString(3, "N");
- WriteSymbol(3, NetNumber);
- }
- WriteCrLf(3);
- WriteString(3, " (joined");
-
- if (i == 'P')
- {
- /* tie this net to its port -- if it is a port */
- WriteCrLf(3);
- WriteString(3, " (portRef ");
- EdifName3();
- WriteString(3, ")");
- }
-
- ok = FirstNode();
- if (ok == 1)
- {
- do {
- i = GetStandardSymbol(TypeCode);
- if (i == 'N')
- {
- WriteCrLf(3);
- WriteString(3, " (portRef ");
-
- if (sw_P == 0)
- { CopySymbol(PinNameString, Str); }
- else
- { CopySymbol(PinNumberString, Str); }
- EdifName3();
-
- WriteString(3, " (instanceRef ");
- CopySymbol(ReferenceString, Str);
- EdifName3();
- WriteString(3, "))");
- }
- if (i == 'U')
- {
- WriteCrLf(3);
- WriteString(3, " (portRef ");
-
- if (sw_P == 0)
- { CopySymbol(PinNameString, Str); }
- else
- { CopySymbol(PinNumberString, Str); }
- EdifName3();
-
- WriteString(3, " (instanceRef ");
- CopySymbol(ReferenceString, Str);
- EdifName3();
- WriteString(3, "))");
- }
- } while (NextNode());
- }
-
- WriteString(3, "))");
- } while (NextNet());
- }
- WriteString(3, ")))");
-
- first = 0;
- }
-
- /*-----------------------*/
-
- PostProcess()
- {
- int i;
-
- WriteString(3, ")");
- WriteCrLf(3);
-
- /* tell EDIF what cell makes up the design */
- WriteString(3, " (design ");
- CopySymbol(DesignStr, Str);
- ToUpper(Str);
- StripPath(Str);
- StripExt();
- EdifName3();
- WriteCrLf(3);
- WriteString(3, " (cellRef ");
- EdifName3();
- WriteCrLf(3);
- WriteString(3, " (libraryRef MAIN_LIB))))");
- WriteCrLf(3);
-
- /* write the external library */
- WriteString(1, " (external OrCAD_LIB");
- WriteCrLf(1);
- WriteString(1, " (edifLevel 0)");
- WriteCrLf(1);
- WriteString(1, " (technology");
- WriteCrLf(1);
- WriteString(1, " (numberDefinition");
- WriteCrLf(1);
- WriteString(1, " (scale 1 1 (unit distance))))");
-
- /* the map for pin types */
- SetPinMap(0, "INPUT");
- SetPinMap(1, "INOUT");
- SetPinMap(2, "OUTPUT");
- SetPinMap(3, "OUTPUT");
- SetPinMap(4, "INOUT");
- SetPinMap(5, "OUTPUT");
- SetPinMap(6, "OUTPUT");
- SetPinMap(7, "INPUT");
-
- SetAccessType("LOOKUP");
- do {
- i = SymbolLength(LookupNameString);
- if (i > 0) {
-
- WriteCrLf(1);
- WriteString(1, " (cell ");
-
- CopySymbol(LookupNameString, Str);
- EdifName1();
- WriteCrLf(1);
-
- WriteString(1, " (cellType generic)");
- WriteCrLf(1);
- WriteString(1, " (comment \"From OrCAD library ");
- WriteSymbol(1, LibraryNameString);
- WriteString(1, "\")");
- WriteCrLf(1);
- WriteString(1, " (view NetlistView");
- WriteCrLf(1);
- WriteString(1, " (viewType netlist)");
- WriteCrLf(1);
- WriteString(1, " (interface");
-
- LoadFirstPin();
- do {
- WriteCrLf(1);
- WriteString(1, " (port ");
-
- if (sw_P == 0)
- { CopySymbol(PinNameString, Str); }
- else
- { CopySymbol(PinNumberString, Str); }
- EdifName1();
-
- WriteString(1, " (direction ");
- i = GetStandardSymbol(PinType);
- WriteMap(1, i);
- WriteString(1, "))");
- } while (LoadPin());
-
- WriteString(1, ")))");
- }
- } while (NextAccessType());
- WriteString(1, ")");
- WriteCrLf(1);
-
- ConcatFile(1, 3);
-
- WriteString(0, "Done");
- WriteCrLf(0);
- }
-
- /*-----------------------*/
-
- StripExt()
- {
- int pos;
-
- ch = 46;
- pos = FindSymbolChar(ch, Str);
- if (pos != -1) { ch = 0; PutSymbolChar(pos, ch, Str); }
- }
-
- /*-----------------------*/
-
- EdifName1()
- {
- legal = SymbolInCharSet(Str);
- if (legal == 1)
- {
- WriteString(1, "&");
- WriteSymbol(1, Str);
- }
- else
- {
- CopySymbol(Str, TempStr);
- ExceptionsFor("EDIF", TempStr);
-
- WriteString(0, "WARNING: Name contains illegal characters '");
- WriteSymbol(0, Str);
- WriteString(0, "', changed to ");
- WriteSymbol(0, TempStr);
- WriteCrLf(0);
-
- SetSymbol(ExitType, "W");
-
- WriteString(1, "(rename &");
- WriteSymbol(1, TempStr);
- WriteString(1, " \"");
- WriteSymbol(1, Str);
- WriteString(1, "\")");
- }
- }
-
- /*-----------------------*/
-
- EdifName3()
- {
- legal = SymbolInCharSet(Str);
- if (legal == 1)
- {
- WriteString(3, "&");
- WriteSymbol(3, Str);
- }
- else
- {
- CopySymbol(Str, TempStr);
- ExceptionsFor("EDIF", TempStr);
-
- WriteString(0, "WARNING: Name contains illegal characters '");
- WriteSymbol(0, Str);
- WriteString(0, "', changed to ");
- WriteSymbol(0, TempStr);
- WriteCrLf(0);
-
- SetSymbol(ExitType, "W");
-
- WriteString(3, "(rename &");
- WriteSymbol(3, TempStr);
- WriteString(3, " \"");
- WriteSymbol(3, Str);
- WriteString(3, "\")");
- }
- }