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

  1. /*
  2.     /L Do not append sheet number to labels
  3.     /P Output pin numbers (instead of pin names)
  4.  */
  5.  
  6. /*  VERSION="1.10   14-OCT-91"
  7.  *      - Moved comment in the cell definition after the cellType
  8.  *      - Added Version message
  9.  *      - Corrected int to unsigned comparison
  10.  *
  11.  *  Capacities:
  12.  *      - Part Names are not checked for length
  13.  *      - Module Names are not checked for length
  14.  *      - Reference Strings are not checked for length
  15.  *      - Node Names are not checked for length
  16.  *      - Node Numbers are limited to 5 digits (plus the leading 'N')
  17.  *      - Pin Numbers are not checked for length
  18.  *
  19.  *  Characters:
  20.  *      - Legal characters are { '_', '0-9', 'a-z', 'A-Z' }
  21.  *      - Remember that case is not significant in EDIF
  22.  *
  23.  *      - Names with illegal characters will be handled as follows:
  24.  *          1  A WARNING will be issued
  25.  *          2  '-' -> 'MINUS'   '+' -> 'PLUS'   '\', '/' -> 'BAR'  all others -> '_'
  26.  *          3  The original name will be RENAMEd to the new
  27.  *
  28.  */
  29.  
  30. int sw_L;
  31. int sw_P;
  32.  
  33. int temp;
  34. int legal;
  35. int ch;
  36. int net;
  37.  
  38. /*-----------------------*/
  39.  
  40. Initialize()
  41. {
  42.     WriteString(0, "Creating Netlist...");
  43.     WriteCrLf(0);
  44.  
  45.     SetCharSet("_0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ");
  46.     SetNumberWidth(5);
  47.  
  48.     AddSymbol("Str");
  49.     AddSymbol("TempStr");
  50.  
  51.     sw_L = SwitchIsSet("L");
  52.     sw_P = SwitchIsSet("P");
  53.  
  54.     WriteString(1, "(edif ");
  55.     CopySymbol(FileName, Str);
  56.     ToUpper(Str);
  57.     StripExt();
  58.     EdifName1();
  59.     WriteCrLf(1);
  60.  
  61.     WriteString(1, " (edifVersion 2 0 0)");
  62.     WriteCrLf(1);
  63.     WriteString(1, " (edifLevel 0)");
  64.     WriteCrLf(1);
  65.     WriteString(1, " (keywordMap (keywordLevel 0))");
  66.     WriteCrLf(1);
  67.     WriteString(1, " (status");
  68.     WriteCrLf(1);
  69.     WriteString(1, "  (written");
  70.     WriteCrLf(1);
  71.     WriteString(1, "   (timeStamp 0 0 0 0 0 0)");
  72.     WriteCrLf(1);
  73.     WriteString(1, "   (program \"IFORM.EXE\")");
  74.     WriteCrLf(1);
  75.     WriteString(1, "   (comment \"Original data from OrCAD/SDT schematic\"))");
  76.     WriteCrLf(1);
  77.     WriteString(1, "  (comment \"");
  78.     WriteSymbol(1, TitleString);
  79.     WriteString(1, "\")");
  80.     WriteCrLf(1);
  81.     WriteString(1, "  (comment \"");
  82.     WriteSymbol(1, DateString);
  83.     WriteString(1, "\")");
  84.     WriteCrLf(1);
  85.     WriteString(1, "  (comment \"");
  86.     WriteSymbol(1, DocumentNumber);
  87.     WriteString(1, "\")");
  88.     WriteCrLf(1);
  89.     WriteString(1, "  (comment \"");
  90.     WriteSymbol(1, Revision);
  91.     WriteString(1, "\")");
  92.     WriteCrLf(1);
  93.     WriteString(1, "  (comment \"");
  94.     WriteSymbol(1, Organization);
  95.     WriteString(1, "\")");
  96.     WriteCrLf(1);
  97.     WriteString(1, "  (comment \"");
  98.     WriteSymbol(1, AddressLine1);
  99.     WriteString(1, "\")");
  100.     WriteCrLf(1);
  101.     WriteString(1, "  (comment \"");
  102.     WriteSymbol(1, AddressLine2);
  103.     WriteString(1, "\")");
  104.     WriteCrLf(1);
  105.     WriteString(1, "  (comment \"");
  106.     WriteSymbol(1, AddressLine3);
  107.     WriteString(1, "\")");
  108.     WriteCrLf(1);
  109.     WriteString(1, "  (comment \"");
  110.     WriteSymbol(1, AddressLine4);
  111.     WriteString(1, "\"))");
  112.     WriteCrLf(1);
  113.  
  114.     net = 0;
  115. }
  116.  
  117. /*-----------------------*/
  118.  
  119. StripExt()
  120. {
  121.     int pos;
  122.  
  123.     ch = 46;
  124.     pos = FindSymbolChar(ch, Str);
  125.     if (pos != -1) { ch = 0; PutSymbolChar(pos, ch, Str); }
  126. }
  127.  
  128. /*-----------------------*/
  129.  
  130. WriteHeader()
  131. {
  132.     CreatePartDataBase();
  133. }
  134.  
  135. /*-----------------------*/
  136.  
  137. HandleNodeName()
  138. {
  139.     int i;
  140.  
  141.     if (net != 0) { WriteCrLf(3); }
  142.     net = 1;
  143.  
  144.     WriteString(3, "     (net ");
  145.  
  146.     CopySymbol(SignalNameString, Str);
  147.  
  148.     i = GetStandardSymbol(TypeCode);
  149.     if (i == 'L')
  150.     {
  151.         if (sw_L == 0)
  152.         {
  153.             SetNumberWidth(1);
  154.             MakeLocalSignal("_");
  155.             SetNumberWidth(5);
  156.             CopySymbol(LocalSignal, Str);
  157.         }
  158.         EdifName3();
  159.     }
  160.     if (i == 'P')
  161.     {
  162.         EdifName3();
  163.     }
  164.     if (i == 'S')
  165.     {
  166.         EdifName3();
  167.     }
  168.     if (i == 'N')
  169.     {
  170.         WriteString(3, "N");
  171.         WriteSymbol(3, NetNumber);
  172.     }
  173.     if (i == 'U')
  174.     {
  175.         WriteString(3, "N");
  176.         WriteSymbol(3, NetNumber);
  177.     }
  178.     WriteCrLf(3);
  179.     WriteString(3, "      (joined");
  180.  
  181.     if (i == 'P')
  182.     {
  183.         /* tie this net to its port -- if it is a port */
  184.         WriteCrLf(3);
  185.         WriteString(3, "       (portRef ");
  186.         EdifName3();
  187.         WriteString(3, ")");
  188.     }
  189.  
  190.     AddSignalName();
  191. }
  192.  
  193. /*-----------------------*/
  194.  
  195. WriteNet()
  196. {
  197.     WriteCrLf(3);
  198.     WriteString(3, "       (portRef ");
  199.     if (sw_P == 0)
  200.         { CopySymbol(PinNameString, Str); }
  201.     else
  202.         { CopySymbol(PinNumberString, Str); }
  203.     EdifName3();
  204.  
  205.     WriteString(3, " (instanceRef ");
  206.     CopySymbol(ReferenceString, Str);
  207.     EdifName3();
  208.     WriteString(3, "))");
  209.     
  210.     RecordNode();
  211. }
  212.  
  213. /*-----------------------*/
  214.  
  215. WriteNetEnding()
  216. {
  217.     WriteString(3, "))");
  218. }
  219.  
  220. /*-----------------------*/
  221.  
  222. ProcessFieldStrings()
  223. {
  224. }
  225.  
  226. /*-----------------------*/
  227.  
  228. EdifName1()
  229. {
  230.     legal = SymbolInCharSet(Str);
  231.     if (legal == 1)
  232.     {
  233.         WriteString(1, "&");
  234.         WriteSymbol(1, Str);
  235.     }
  236.     else
  237.     {
  238.         CopySymbol(Str, TempStr);
  239.         ExceptionsFor("EDIF", TempStr);
  240.  
  241.         WriteString(0, "WARNING: Name contains illegal characters '");
  242.         WriteSymbol(0, Str);
  243.         WriteString(0, "', changed to ");
  244.         WriteSymbol(0, TempStr);
  245.         WriteCrLf(0);
  246.  
  247.         SetSymbol(ExitType, "W");
  248.  
  249.         WriteString(1, "(rename &");
  250.         WriteSymbol(1, TempStr);
  251.         WriteString(1, " \"");
  252.         WriteSymbol(1, Str);
  253.         WriteString(1, "\")");
  254.     }
  255. }
  256.  
  257. /*-----------------------*/
  258.  
  259. EdifName3()
  260. {
  261.     legal = SymbolInCharSet(Str);
  262.     if (legal == 1)
  263.     {
  264.         WriteString(3, "&");
  265.         WriteSymbol(3, Str);
  266.     }
  267.     else
  268.     {
  269.         CopySymbol(Str, TempStr);
  270.         ExceptionsFor("EDIF", TempStr);
  271.  
  272.         WriteString(0, "WARNING: Name contains illegal characters '");
  273.         WriteSymbol(0, Str);
  274.         WriteString(0, "', changed to ");
  275.         WriteSymbol(0, TempStr);
  276.         WriteCrLf(0);
  277.  
  278.         SetSymbol(ExitType, "W");
  279.  
  280.         WriteString(3, "(rename &");
  281.         WriteSymbol(3, TempStr);
  282.         WriteString(3, " \"");
  283.         WriteSymbol(3, Str);
  284.         WriteString(3, "\")");
  285.     }
  286. }
  287.  
  288. /*-----------------------*/
  289.  
  290. WriteNetListEnd()
  291. {
  292.     int i;
  293.     int len;
  294.  
  295.     WriteString(3, "))))");
  296.     WriteCrLf(3);
  297.  
  298.     /* tell EDIF what cell makes up the design */
  299.     WriteString(3, " (design ");
  300.     CopySymbol(FileName, Str);
  301.     ToUpper(Str);
  302.     StripExt();
  303.     EdifName3();
  304.     WriteCrLf(3);
  305.     WriteString(3, "  (cellRef ");
  306.     EdifName3();
  307.     WriteCrLf(3);
  308.     WriteString(3, "   (libraryRef MAIN_LIB))))");
  309.     WriteCrLf(3);
  310.  
  311.     /* write the external library */
  312.     WriteString(1, " (external OrCAD_LIB");
  313.     WriteCrLf(1);
  314.     WriteString(1, "  (edifLevel 0)");
  315.     WriteCrLf(1);
  316.     WriteString(1, "  (technology");
  317.     WriteCrLf(1);
  318.     WriteString(1, "   (numberDefinition");
  319.     WriteCrLf(1);
  320.     WriteString(1, "    (scale 1 1 (unit distance))))");
  321.  
  322.     /* the map for pin types */
  323.     SetPinMap(0, "INPUT");
  324.     SetPinMap(1, "INOUT");
  325.     SetPinMap(2, "OUTPUT");
  326.     SetPinMap(3, "OUTPUT");
  327.     SetPinMap(4, "INOUT");
  328.     SetPinMap(5, "OUTPUT");
  329.     SetPinMap(6, "OUTPUT");
  330.     SetPinMap(7, "INPUT");
  331.  
  332.     SetAccessType("LOOKUP");
  333.     do {
  334.         WriteCrLf(1);
  335.         WriteString(1, "  (cell ");
  336.  
  337.         CopySymbol(LookupNameString, Str);
  338.         EdifName1();
  339.         WriteCrLf(1);
  340.  
  341.         WriteString(1, "   (cellType generic)");
  342.         WriteCrLf(1);
  343.         WriteString(1, "   (comment \"From OrCAD library ");
  344.         WriteSymbol(1, LibraryNameString);
  345.         WriteString(1, "\")");
  346.         WriteCrLf(1);
  347.         WriteString(1, "   (view NetlistView");
  348.         WriteCrLf(1);
  349.         WriteString(1, "    (viewType netlist)");
  350.         WriteCrLf(1);
  351.         WriteString(1, "    (interface");
  352.  
  353.         LoadFirstPin();
  354.         do {
  355.             WriteCrLf(1);
  356.             WriteString(1, "     (port ");
  357.  
  358.             if (sw_P == 0)
  359.                 { CopySymbol(PinNameString, Str); }
  360.             else
  361.                 { CopySymbol(PinNumberString, Str); }
  362.             EdifName1();
  363.  
  364.             WriteString(1, " (direction ");
  365.             i = GetStandardSymbol(PinType);
  366.             WriteMap(1, i);
  367.             WriteString(1, "))");
  368.         } while (LoadPin());
  369.  
  370.         WriteString(1, ")))");
  371.     } while (NextAccessType());
  372.     WriteString(1, ")");
  373.     WriteCrLf(1);
  374.  
  375.     /* write the schematic library */
  376.     WriteString(1, " (library MAIN_LIB");
  377.     WriteCrLf(1);
  378.     WriteString(1, "  (edifLevel 0)");
  379.     WriteCrLf(1);
  380.     WriteString(1, "  (technology");
  381.     WriteCrLf(1);
  382.     WriteString(1, "   (numberDefinition");
  383.     WriteCrLf(1);
  384.     WriteString(1, "    (scale 1 1 (unit distance))))");
  385.     WriteCrLf(1);
  386.  
  387.     WriteString(1, "  (cell ");
  388.     CopySymbol(FileName, Str);
  389.     ToUpper(Str);
  390.     StripExt();
  391.     EdifName1();
  392.     WriteCrLf(1);
  393.     WriteString(1, "   (cellType generic)");
  394.     WriteCrLf(1);
  395.     WriteString(1, "   (view NetlistView");
  396.     WriteCrLf(1);
  397.     WriteString(1, "    (viewType netlist)");
  398.     WriteCrLf(1);
  399.     WriteString(1, "    (interface");
  400.  
  401.     /* the map for signal types */
  402.     SetPinMap(0, "INOUT");
  403.     SetPinMap(1, "OUTPUT");
  404.     SetPinMap(2, "INPUT");
  405.     SetPinMap(3, "INOUT");
  406.  
  407.     /* list all of the module ports as part of the interface */
  408.     SetFirst(SIGNALS);
  409.     do {
  410.         i = GetStandardSymbol(TypeCode);
  411.         if (i == 'P')
  412.         {
  413.             WriteCrLf(1);
  414.             WriteString(1, "     (port ");
  415.  
  416.             CopySymbol(SignalNameString, Str);
  417.             legal = SymbolInCharSet(Str);
  418.             if (legal == 0) { ExceptionsFor("EDIF", Str); }
  419.             EdifName1();
  420.  
  421.             WriteString(1, " (direction ");
  422.             i = GetStandardSymbol(SignalType);
  423.             WriteMap(1, i);
  424.             WriteString(1, "))");
  425.         }
  426.     } while (SetNext(SIGNALS));
  427.     WriteString(1, ")");
  428.     WriteCrLf(1);
  429.  
  430.     WriteString(1, "    (contents");
  431.     WriteCrLf(1);
  432.  
  433.     /* list all of the instances in the design */
  434.     RewindInstanceFile();
  435.     while (LoadInstance())
  436.     {
  437.         WriteString(1, "     (instance ");
  438.         CopySymbol(ReferenceString, Str);
  439.         EdifName1();
  440.         WriteCrLf(1);
  441.  
  442.         WriteString(1, "      (viewRef NetlistView");
  443.         WriteCrLf(1);
  444.  
  445.         WriteString(1, "       (cellRef ");
  446.         CopySymbol(LookupNameString, Str);
  447.         EdifName1();
  448.         WriteCrLf(1);
  449.  
  450.         WriteString(1, "        (libraryRef OrCAD_LIB)))");
  451.         WriteCrLf(1);
  452.  
  453.         WriteString(1, "      (property PartValue (string \"");
  454.         WriteSymbol(1, PartName);
  455.         WriteString(1, "\"))");
  456.         WriteCrLf(1);
  457.  
  458.         WriteString(1, "      (property ModuleValue (string \"");
  459.         len = SymbolLength(ModuleName);
  460.         if (len > 0)
  461.             { WriteSymbol(1, ModuleName); }
  462.         else
  463.             { WriteSymbol(1, PartName); }
  464.         WriteString(1, "\")))");
  465.  
  466.         WriteCrLf(1);
  467.     }
  468.  
  469.     /* append the nets to the end of this file */
  470.     ConcatFile(1, 3);
  471.  
  472.     WriteString(0, "Done");
  473.     WriteCrLf(0);
  474. }
  475.