Release Notes for MGEN/PARIS 1.6.1

The MGEN/PARIS release 1.6.1 is in general a bugfix and improvement release. It contains fixes for bugs 1583052 and 1532958. All patches published since the 1.6 release are obsoleted by this release. The library structure was changed to improve modularity and cycles in the internal library referencing were removed. Some minor additional; functionality was added. In summary the following changes and improvements were made in MGEN/PARIS 1.6.1 compared to MGEN/PARIS 1.6:

General

  1. Some code did not compile with gcc 4.1. This was changed. Now everything compiles with gcc 4.1. The FORTRAN compiler used is still g77.
  2. All makefiles were reorganized so that a make can be done directly from the source directory without a previous cd to the platform directory. In addition the top level Makefile was changed in a way that a build aborts in case of any build error. This only works with gnu make version >= 3.80. Older gnu make version can no longer be used to build mgen.

PARIS

  1. The static library libparis was splitted into 2 libraries libparis and libparisrpc. Both libraries were made shared. This breaks a cyclic dependency between libparis and libMgenTool. It is now possible to link an external program without having to specify several libraries 2 times in the link command.
  2. Fixed potential integer overflow in prsio.c in conjunction with memory allocation using the new safe malloc functions from smalloc.c.
  3. Eliminated a potential memory leak in prsio.c.

MGEN

  1. Added the class MgenEdge, which represents an edge defined by its 2 end points.
  2. Added missing INT generator parameter types in CDS driver. This fixes bug 1532958.
  3. The sign function was corrected.
  4. A memory leak in the CDS driver was fixed.
  5. The library libMgenProcess that contains classes to maintain technology information was made shared.
  6. Additional method MgenGrid::SnaptoPtr with a MgenPoint argument.
  7. New method MgenPointBuffer::DeleteRedundantPoints.
  8. Replaced insecure system/popen calls by calls of the secure Process class or the new [io]pstream classes.
  9. Moved modules tool.o, client.o, rpcclient.o and transport.o from library libMgenTool to libMgen2s.

MANIAC

  1. The data type of the coordinate clipping code was changed from float to double. This eliminates numerical problem in date diagrams.
  2. Use atomic reference counting for the reference counted objects Number and ManiacDB.

Libraries

Base Library

  1. DataTime::Cmp was made const.
  2. New functions the check file access permissions based on an open file descriptor in faccess.h. This improves the security compared the the usage of the access function.
  3. Fixed buf in TVarr::Adjust. This is the correction for bug 1583052.
  4. New class RefCnt, which uses atomic increment/decrement fo reference counting on Linux and Solaris systems. This is necessary for multi threaded applications.
  5. New Redirect functions in the class FileDescriptor.
  6. libNl was made shared.
  7. Improved functionality of TPoint. The functions IsAcuteAngle, Length, NormalVector and Normalize were added.
  8. New safe memory allocation functions in smalloc.c.
  9. New input-/output streams for reading or writing pipes. This is a safe replacement and a C++ solution for the C functions popen/pclose.
  10. Provide various gu_* functions with int instead of a short argument for the point count to be able to handle polygons with more than 32768 points.
  11. Use new thread safe reference counting in String_t and ByteString.
  12. New function Pathname::Glob to match a glob style pattern.

Tasks Library

  1. Fixed heavy load problem in MTAssocWorkQueue. The previous implementation was wrong, so the queue could run into an inconsistent state, which prevented several tasks from being executed.
  2. Fixed rounding errors in IOMultiplexer::Timeval. This problem was inserted by the replacement of select by poll. Poll uses milliseconds for the timeout value, not microseconds. By using struct timeval the timeout handling was incorrect and the handling of timers could end in a blocked system.
  3. The function MMappedFile::Map maps the entire file and not only the requested number of bytes,if the file is to be mapped with write permissions. This avoids program crashes when used in the derives class MMappedSortedArray.

Gds Library

  1. libGds was made shared.
  2. Eliminated potential buffer overflow in gds_read_file.
  3. Detect file access permissions in gds reader using the new FileAccess functions instead of access.

Release Notes for MGEN/PARIS 1.6

The following bugs reported at sourceforge.net were fixed: 1161423, 1161416, 1161413, 1161393, 1153743, 1153480, 1150879, 1095617, .

The following feature requests were implemented: 1233641 1080840.

The following changes and improvements were made in MGEN/PARIS 1.6 compared to MGEN/PARIS 1.5:

General

  1. Added support for Solaris 10. The new platform names for Solaris 10 are sparc-solaris2.10 and sparc-sun-solaris2.10.
  2. The C and C++ code can now be compiled with gcc 4. Gcc 4 was tested under Solaris 10. Nevertheless it is not the compiler used to create the official binaries. The reason is that some Modules of the MGEN projects and others not distributed in the open source part are written in FORTAN. gcc 4 comes with a new FORTRAN compiler that is in a very early state and our FORTRAN programs compiled with gcc 4 do not work at all. So we went back to the gcc 3.4.3 for the platform sparc-sun-solaris2.10.
  3. A lot of static read only data was made const. This helps to improve memory sharing.

PARIS

  1. Implementation of outline pattern according to feature request 1233641. This includes a new Widget named XgmDLabel in the Xgm library.
  2. Improved error message in case of syntax error in attribute format file.
  3. A bug in the construction of a Port object was fixed. The bug lead to failed substitutions of equivalent resistor/capacitor networks.
  4. Various security improvements consisting of
    • All temporary files are now placed in a temporary directory created with a random name in /tmp.
    • Temporary files in the command shell ash are created with mkstemp instead of tmpnam.
    • Elimination of potential buffer overflows
    • The call of getenv("HOME") was replaced by the safe function Pathname::Home().
  5. Fixed several potential problems detected by flexelint in prsio.c.

MGEN

  1. The number type in expression evaluation in expr.C was changed from int to double.
  2. A memory leak in Argv::operator= was removed.
  3. New int type generator parameter. This extension can cause compile errors, if the previous ArgTab_t constructor was called with a mixture of int and double arguments. The code>ArgTab_t constructor now creates a generator parameter of type double, if solely called with double arguments and a generator parameter of type int, if called solely with int arguments. The remaining behaviour of the generator argument classes is unchanged. Especially retrieval methods ArgTab_t::Value, ArgTab_t::Lower, ArgTab_t::Upper return the same result for both an int type and a double type generator parameter. Hence exisiting generators work as before and only eventual compile problems caused by argument ambiguities for the ArgTab_t constructor have to be resolved.
  4. A number converter to recognize Cadence floating point syntax was added. The default real converter for generator is the existing one that understands SPICE syntax. A different real converter can be registered globally by calling the new function ArgTab_t::SetRealConverter.
  5. The generator dialog now activates scrollbars if needed. This helps to write generators with many parameters.
  6. The GDSII input/output drivers were made more extensible concerning the handling of MGEN hardcoded properties. This is achieved by introducing the class MgenGdsOutput that defines an interface and implements the standard functionality of the output of MGEN hardcoded properties. MgenGdsOutput is now used in MgenGdsDB to output data in GDSII format. To write a different GDSII file with an own propery semantics, a user can derive his/her own gds output class from MgenGdsOutput and overload the virtual functions PutGeoProp and PutInstProp.
  7. The generator cache was enhanced by a new import callback. With the help of the import callback the generator cache can be integrated in any software. The generator cache integration in PARIS was adapted accordingly.
  8. Made the library libMgenProcess shared.

MANIAC

  1. Connection caching in ManiacClient was introduced. The MANIAC server was changed accordingly to handle permanent remote connections.
  2. Fixed crash in NumberIterator constructor, if called with undefined Number.
  3. Fixed potential crash in Number::Avg methods.
  4. New method ManiacDB::GetTable(tablename, title, date, time, analysis)
  5. Store signals in the MANIAC viewer and NamedVectors in the MANIAC library in a TSet to improve performance.
  6. Implementaion of a measurement bar for interactive measurements in a graph.
  7. Additional tabular view of signals. The tabular view corresponds to the graphical view in a regions. The measurement bar is viewed in both the graphical and the tabular view.
  8. Pool allocators of Number objects to improve performance and optimize memory allocation.
  9. New functionality to merge signals into existing signals.
  10. New functions Number::SimpleDrv, Number::Avg2, Number::ConstSeq, Number::EqSeq.
  11. New functionality ShiftBack and shiftback commands to allow for continuous monitoring of signals in a limited interval.

Libraries

Base Library

  1. incremented version of libaswbase.so to 1.2.
  2. New class ByteString
  3. New class RandName
  4. New class SigBlock
  5. New class ArgumentVector
  6. New classes TempDir and TempFile for secure handling of temporary files.
  7. String stream for binary output into a ByteString
  8. floating point converter for Cadence floating point syntax.
  9. Implementation of full functionality of UNIX sockets.
  10. The DateTime constructor can now understand date/time representations in the form yyyymmddhhmm[ss].
  11. New function StrFmt that acts like sprintf on an ostream.
  12. Const iterators for TSet, TPSet, TMap, TPMap.
  13. Improvements in StringPool to avoid unecessary memory allocation that improves the performance of the string pool significantly.
  14. New function GetHomeDir and Pathname::Home based an passwd lookup to be intended as a secure replacement for getenv("HOME").
  15. Extended GetOpt functions.
  16. Iterator for Netlist class
  17. Made the library libfftpack shared.
  18. Made the library libNl shared.
  19. Replaced select() calls by poll().
  20. Member function DateTime::Cmp was made const.

Tasks Library

  1. Block SIGCHLD, SIGTERM, SIGINT before the waitpid call in Process::Wait to avoid a failed waitpid.
  2. Do not call ftruncate in case of readonly memory mapped files.
  3. New template class MTAssocWorkQueue
  4. New class SimpleSem.
  5. Derive Thread from CondObj and synchronize thread startup in ThreadPool.
  6. New class FdSet with set operations to be intended as a safe replacement for the system's fd_set.
  7. Replaced select() calls by poll().

Release Notes for MGEN/PARIS 1.5

The following bugs reported at sourceforge.net were fixed: 1061988, 1059778, 1046578, 1042538, 1039044, 1038490, 1010627, 1001433, 988214, 964252.

The following feature requests were implemented: 647735, 652014, 1043017.

The following changes and improvements were made in MGEN/PARIS 1.5 compared to MGEN/PARIS 1.4:

General

  1. Added support for the Cygwin environment. MGEN/PARIS can be compiled and run under Cygwin and thus also under Windows. The platform name for cygwin is i686-pc-cygwin.
  2. There is no further need to patch the library of the GCC 3.x compiler to provide the file descriptor constructor for the fstream class. Instead new classes named fdstream were implemented that provide the required functionality.
  3. Moved all Tcl/Tk applications to Tcl/Tk 8.4 and Itcl/Itk 3.2.

PARIS

  1. The display of pinname has been changed. Compared to the previous version, where only view pinname on or off was possible, now there are three levels of pinname view. In level 0 no pinnames are drawn. In level 1 only pinnames of hierarchical cells are shown, but not the pinnames of leaf cells. In level 2 all pinnames are shown including the pinnames of leaf cells. The command parameters of the VIEW command and the menus have been changed accordingly.
  2. The EPSOUT command got a new OFFSET switch to achieve a margin on a paper, if the eps file is printed.
  3. The GDSII files written by PARIS are padded with 0 bytes to achieve a fixed record length in the GDSII file. The record length can be specified by a command argument to the GDSOUT command. The GDS export dialog was adapted accordingly.
  4. The display of net lines was decoupled from the presence of net information in a cell. In version 1.4 net line display was tightly coupled with the validity of net information. In version 1.5 the net information may exist in a cell, but the net line display may be switched off. For this purpose the boolean snetFlag was changed to an integer with 3 possible values. 0 means no net information, this is identical to the previous false case. 1 means net list information is valid, but net lines are not displayed. 2 means net list information is valid and net lines are to be displayed, this is identical with the previous true case. This change implies a new revision of the PARIS data format. Hence files written with version 1.5 can't be read with older versions. The NETLIST command and the menus were extended to provide the new functionality.
  5. Fixed null pointer access bug in the rpc server.
  6. Fixed potential buffer overflow problems in the RPC interface.
  7. Fixed memory leak and potential buffer overflow problems in createlist.C.
  8. Eliminated memory leaks of XmStrings in dialog.C.
  9. There should be no further endless loop of PARIS, if the terminal is stopped, in which the PARIS process runs. Especially there should be no zombie processes left after logout that use up lots of cpu resources.

MGEN

  1. The new version of the libMgen2s shared library is now 1.5.
  2. Complete flexelint check performed and eliminated all problems found by flexelint. This also includes 2 real bug fixes.
  3. The class to handle generator argument, ArgTab_t was completely rewritten, The new implementation uses a handle/representation approach with a polymorphic class tree instead of a union to implement the different argument types. The man page was updated accordingly.
  4. New argument types bool and enum. Boolean argument are presented as a check box in the generator dialog, enum arguments as an option menu. The generator protocol was extended to provide the new types.
  5. According to the changes of net list information in PARIS the type of MgenDef_t::snetFlag was changed to int.
  6. Similar to PARIS the GDSII write now pads the output file to fixed size records.
  7. Bone variant of basic CMOS transistor generator.

MANIAC

  1. The new version of the libmaniac library is now 4.3
  2. Documentation completed.
  3. Replaced NAG library by fftpack library for Fast Fourier Transformation subroutines. The usage of the NAG library is still possible and can be activated by compiler options.
  4. Adjustable date format in date regions. Button in Options menu and dialog box to change date format provided.
  5. Inserted magic string at the beginning of the binary file.
  6. New procedure Number::symbols detects the symbols references in compute expressions.
  7. Symbol detection in the maniac::compute command
  8. Human readable date/time output in the MANIAC ASCII format in tables with analysis type DATE.
  9. Functions and commands for the extraction of partial curves.
  10. X-only or y-only zoom with mouse possible
  11. Some minor bug fixes.

Libraries

Base Libraries

  1. Incremented version of libaswbase to 1.1.
  2. Inserted the usage of the macro INCLUDETEMPLATECODE in all template classes. If INCLUDETEMPLATECODE the template implementation code locate in a .C file is included additionally in the header file. This behaviour is required by some tools or compilers, that cannot find the template implementation files automatically.
  3. Fixed initialization bug in copy constructor of slist_t.
  4. New class StringSplitter. In constrast to StringTok StringSplitter does not overread multiple occurences of the specified delimiter character. This enables the user to tokenize a string containing empty fields.
  5. New method String_t::Replace with a character set argument instead of a single character.
  6. New function GetIpAddress, GetCanonicalHostname in the class SockIO.
  7. New methods ISockStream::Readln/OSockStream::Writeln for line oriented reading and writing from/to sockets.
  8. Additional constructor of ServerSocketIn that allows for creating a server socket allocating a port in a specified port range.
  9. New classes fdstream, ifdstream, ofdstream that provide the possibility to attach a C++ stream to a file descriptor. These classes are currently only required for the library coming with gcc 3, that does not have this functionality any more. All other supported libraries have this functionality and there the fdstream classes are implemented as a typedef.
  10. Fixed potential buffer overflow problem in operator(ISockStream&, String_t&).
  11. Fixed potential buffer overflow problems in the ash. This implies an interface change of some ash functions accessing shell variables.

Tasks Library

  1. New config file reader to read simple line oriented config file implemented by template classes.
  2. Doxygen documentation completed.
  3. New function Process::Exec(TVarr<String_t>&).
  4. New class MTWorkQueueReq, that requeues a task at the beginning of the queue, if a task is not runnable.

Release Notes for MGEN/PARIS 1.4

The following changes and improvements were made in MGEN/PARIS 1.4 compared to MGEN/PARIS 1.3:

General

  1. Eliminated const char* warnings and anachronism warnings related to C-C++ function pointers for SUN CC5.3.
  2. Quality improvement by eliminating all messages reporting by the static analysis tool flexelint in several files.
  3. Support for additional platforms i586-linux-libc6, i686-linux-libc6, i686-pc-linux-gnu, sparc-solaris2.8, sparc-sun-solaris2.8 and gcc 3.3.

PARIS

  1. New command EPSOUT to export a layout in EPS Format tp achieve exact scaling in the EPS output. Dialog Box for EPSOUT and menu button to open the EPSOUT dialog.
  2. Some minor bugs fixed in GDSII import and rework of cell name mapping in GDSII interface with improved performance.
  3. Support for additional platforms i586-linux-libc6, i686-linux-libc6, i686-pc-linux-gnu, sparc-solaris2.8, sparc-sun-solaris2.8 in startup script parisrc.

MGEN

  1. Create Properties for abutment facility of Cadence tools to CMOS generators
  2. Compound generators reworked according to changes resulting from abutment properties
  3. Name mapping of GDSII/PARIS cell names reworked
  4. Number factorization improved by using an extended table of small and prime numbers for array decomposition
  5. Extended functionality of MgenPoint

MANIAC

  1. Random number generator for equal and gaussian distribution
  2. Implementation of basic functionality for an automated analog circuit characterization system
  3. Regression test script
  4. Some minor bug fixes

Libraries

Base Libraries

  1. New template classes TPset (set of pointers to objects), TPMap (map of object pointers)
  2. Iterators for set- and map- templates
  3. Extended functionality of double linked list iterator
  4. Adapter classes for priority queue templates instead of hardcoded compare functions
  5. New template functions for array handling, binary search, etc...
  6. Full set of integer to string encode functions str_int2str
  7. Getline function for class String_t
  8. Use String_t::Getline in netlist library
  9. Introduction of base classes and macros for exception handling
  10. Merged libbase and libgeneric into one shared library libaswbase. This also solves the cyclic reference problem with the previously seperated libraries.
  11. Improved functionality of socket stream. The socket streams now transport long integers always as 64 bit. Errors are optionally handled by exceptions. New Readln, Writln for line oriented in-/output.
  12. Improved functionality of socket classes, Connect/Accept with timeout, binding of client sockets, improved safety against 0 strings.

Tasks Library

The tasks library was significantly extended and improved:
  1. Semapore and shared memory classes
  2. Process class for convenient handling for fork/exec calls
  3. read/write lock, RWLock
  4. Barrier for synchronization of thread pools
  5. Memory mapped file, MMappedFile and derived template classes for memory mapped array and memory mapped sorted arrays.
  6. Input/Output multiplexer for both single threaded and multi threaded operation IOMultiplexer, IOMultTask, IOMultThread