xic-3.2.22 5/26/2011 Changes and New Features ------------------------ * User interface changes. - DOTS button moved. The dots command button in the electrical side menu is gone, the same function now resides in the new Connection Dots button in the Attributes Menu (in Xic only). This enables access to the command button when not in electrical mode, but sub-windows may be showing electrical data. - New SPCMD button in its place. The side menu dots button is now the "spcmd" button. The function is identical to the !spcmd command (which still exists). Pressing the button will prompt on the prompt line for a command to send to WRspice. A connection will be established if one does not exist. The command should be known to WRspice, however commands that require a response (such as "setplot") won't do the right thing as there will not be a response prompt. The line is not interactive. - Saved Analysis strings, and command checking. When using the run command from the side menu, when prompting for an analysis command, the last six unique analysis commands entered are now available and can be cycled through with the up and down arrow keys. Furthermore, the first word in the analysis string is now checked, and only words from the following list will be accepted: ac loop run tran check noise send dc op sens disto pz tf The "send" keyword is new. If given, the circuit will be sent to WRspice and sourced, but no analysis is run. Other commands can be sent to WRspice with the spcmd button. * Update to Device Menu and device.lib file. There are now three styles of Device Menu from which to choose. The new default style contains a menu bar with four entries: Devices, Sources, Macros, and Terminals. Each brings up a sub-menu containing names of library "devices", that fall in each category. A button on the menu allows cycling through the other styles: the alphabetized drop-down menus and pictorial menu of previous releases. The PictorialDevs variable is no longer recognized. The replacement is the DevMenuStyle variable, which can be set to an integer 0-2. If 0 or unset, the new layout is used. If 1, the alphabetized variation is used, and 2 specifies the pictorial menu. This variable tracks the style of the menu, and resets the style when set. Device Library changes The following new devices were added: tblk This is a new terminal device that behaves identically to the existing terminal device. The only difference is appearance. gnde This is a new ground terminal that is functionally identical to the existing ground terminal. The only difference is appearance. vp This is a tiny dummy voltage source intended for use as a current meter. The following devices have had their names changed: vcc -> tbar The 'vcc' terminal device is now called 'tbar'. It is functionally identical to the 'tblk' terminal but visually uses a "bar" instead of a "block" in the reprsentation. vbus -> tbus The bus terminal name now begins with 't' for consistency with the other terminals. So how can we change terminal names without breaking all existing designs? New library keyword: Alias alias_name existing_name The Alias keyword will map an alias name to one of the existing name keywords in the library. The present device.lib file contains Alias vcc tbar Alias vbus tbus Thus, existing designs will find the correct terminals in the library. NEW DESIGNS WILL NOT BE BACKWARDS COMPATIBLE, however it would not be hard to read them into an old release. One can hand edit an old device.lib file: copy the vcc device block, and change "vcc" to "tbar" in the copied text. Xic no longer hard-codes device names expected to be found in the device library. The one exception is for the Source command, where Xic will place ground and terminal devices, and needs to know their names. Xic will guess "gnd" for ground, and "tbar" or "vcc" for the terminals (whichever is found in the library). The user can specify these names with two new variables: SourceTermDevName SourceGndDevName These variables can be assigned by the user to specify the names of terminal devices to use in the Source command. The names must be found in the device library and have appropriate properties. These properties are: Any library device with no name property and exactly one node property will be taken as a ground terminal. A terminal device must have a name property, with a name that begins with the '@' character. It must also contain a single node property. A bus terminal has a name property with a name that begins with '#', and must have a param property. It must not have a node property. * Update to the logo (side menu) command. Elements were added to the Logo Font Setup pop-up which allows the user to specify a fixed "pixel" size for fonts and images. In this mode, the arrow keys pan the display windows and do not alter "pixel" size. This is tied to a new variable LogoPixelSize (positive real <= 100.0) which, when set, fixes the pixel size at the given value. The "pixelization" works better on anti-aliased fonts now. * Technology file updates Provided technology files now have an optional white-background theme for schematics. This tends to look better when images are exported for figures in presentations, and some users may prefer this style generally. To enable, the "Define WhiteSchem" line can be uncommented in the file. Bugs Fixed ---------- * The Swap With Main feature in sub windows would erase the saved plot strings in electrical cells. E.g. plot something, press Swap With Main twice in an electrical sub-window to swap and put back, then the plot command would display an empty plot line. * The Clear(0) script function now updates sub-window displays. * Repaired save logic. Load a GDSII file, and modify a subcell. Load in a native cell file that overwrites the top-level cell from the GDSII file. Then exit the program, there would be no prompt to save the modified subcell. Modified archive cells that are no longer in an archive hierarchy now get saved as native cells by default. * Native cell files could get their internal save path fouled up, causing an error when attempting to save them. E.g., load a GDSII file from another directory, then load a native cell from the current directory whose name conflicts with a cell from the GDSII file in memory. Elect to overwrite. The native cell would have a bogus save path, consisting of the path to the GDSII file with a directory separator and the cell name appended. * The logic used for PARAM properties of subcells was too "smart". For subcells, instance and cell PARAM properties are logically distinct, and changing one should not affect the other. Previously, if a cell with a PARAM property was placed, each new instance would have a copy of that property applied. This is no longer true for subcircuits, but remains true for library devices. Previously, if a master PARAM property was added, modified, or deleted, the change was reflected to all instances of the master. Adding a cell PARAM property would cause the property to be copied to all instances, deleteing a cell PARAM property would cause deletion of instance PARAM properties. Modifying a cell PARAM property would modify all instance properties with text that matches the old cell property. Now, subcircuit instance properties are untouched, library device PARAM properties are updated as described. * Fixed some problems with electrical subcell terminal logic. It was possible for these terminals to lose their connection to a subcircuit wire, causing the circuit connectivity to fail for no visually obvious reason. example 1: Create a horizontal wire, and place a subcircuit terminal (with the side menu subct function) at the right end of the wire. Now make another wire, starting at the terminal location, horizontally extending to the right. The two wires would merge, losing the vertex under the terminal, disconnecting the terminal. example 2: Create a horizontal wire. Create a vertical wire with one endpoint on the horizontal wire, but not on a horizintal wire endpoint. Add a subcircuit terminal to the other end of the vertical wire. Move the terminal to the other end of the vertical wire (over the horizontal wire). Delete the vertical wire. This would remove the vertex under the terminal, leaving the terminal disconnected. These and similar cases should no longer disconnect terminals. When a new cell is read, terminals will now automatically create vertices if needed, repairing old cells that might have this problem. * When creating electrical wires, it was possible to create spurious vertices in other wires at vertices of the new wire, if new wire creation was aborted with Esc or the wire command otherwise terminated. The extra vertices would generally do no harm. * Tweeks and fixes for the PostScript print formatting from the Print pop-up in Help viewer windows. May give better looking results now. * Stipple patterns read through the Lisp parser (when reading a Cadence DRF file) were getting munged. * Modified the WRspice interface to not freeze Xic while WRspice is dumping copious debugging messages to the console. * Additional fixes in electrical mode to maintain connectivity and dot placement when subcell terminals are added or moved, in particular while editing a subcell using Push. * The iplot button in the electrical mode side menu is now unset after switching to physical mode and back. * The area readout for Josephson junctions in the Hypres technology file was updated to the current process, the readout was being normalized for an older process and was incorrect. * The "pretty font" feature of the logo side-menu command was corrupting the graphical interface (X-windows only). * A new message now informs the user when a specified XPM file can not be found while in the logo command. ------------------------------------------------------------------------------- xic-3.2.21 4/13/2011 Changes and New Features ------------------------ * New feature: redirect files. Redirect files are a new adjunct to the search path mechanism for finding files from Xic. These are files, created by the user, that tell Xic about additional locations to search for files. These files must be named "xt_redirect", and are text files with the following format and properties: - Lines that start with '#' or contain only white space are ignored. - Each line otherwise contains one or more directory paths, separated by white space. If a directory path contains white space or other problematic characters, it should be double-quoted (i.e., with '"'). - Multiple directories can be provided on a single line, or in different lines. - Paths that are not rooted are taken as relative to the directory containing the redirect file. - Paths that do not point to an actual directory are silently ignored. When searching a directory, the directories found in a redirect file are also searched, in order, after the current directory. The search is recursive, so that arbitrarily deep hierarchies can be searched. With redirect files, only the top directory of a hierarchy needs to be included in the search path (or given explicitly). This can be very convenient for organizing collections of native cell files, for example. The Path Files Listing panel from the File Menu will list files found in the redirect files, as well as from the search path. * Enhancements to CHD and CGD listing panels (from File Menu). In the CHD and CGD listings, the full path to the source file is no longer shown, only the terminal file name. This leaves room for some additional useful information. The full file path can be obtained with a button press. The new middle column in the CHD listing will show the name of a linked CGD, if any. The right column lists the source file name and default top-level cell. There is a new button in the top button row labeled "?". This provides "quick info" about the CHD, including the full path to the source file. The same information can be obtained from the Info button, but this is much more extensive and may take some time to compute. The quick info is instantaneous. The CGD listing now contains a middle column labeled "Type, Linked". This column will contain "Mem", "File", or "Rem" indicating the geometry storage type of the CGD. This will be followed by "yes" if the CGD is linked to a CHD. An asterisk '*' will follow "yes" if the CGD will be destroyed when unlinked from its CHD. The Info button will provide more info about the CGD, including the full path to the source file (if any). * Enhancement of general-purpose text windows. The general-purpose text windows used to display errors, messages, and content listings now contain a "Save Text" button. When pressed, the user will be queried for a file name, and the text shown in the window will be saved in that file. The same applies to the Cells Listing panel from the Cells Menu. * Enhancement of erase command. The erase command, from the side menu, has been enhanced, and changed to avoid a logic flaw. The enhancememt is that, like the Copy command in the Modify Menu, the Yank mode of the erase command now works from "foreign" drawing windows. These are sub-windows that are displaying a different cell than the main window, but both windows must be in physical mode. The foreign window is never erased, but the structure that would be erased is added to the yank buffer. Thus, one can quickly copy a rectangular area of geometry from another cell into the current cell, by yanking with erase and placing with the put command (below erase in the side menu). The logic flaw was that the Ctrl key was used for two conflicting functions: 1) Holding the Ctrl key would enable "clip" mode, where the erase is done outside of the specified rectangle, rather than inside. 2) Holding the Ctrl key while clicking on a subcell would indicate to use the subcell boundary as the erase boundary. The function 1) above no longer applies. Instead, the SpaceBar now toggles between "erase mode" (erase inside rectangle) and "clip mode" (erase outside the rectangle). This applies when yanking: the geometry that would be erased is added to the yank buffer. Holding the Shift key enables yanking only, as before. The function 2) still applies, and the cell bounding box will "erase" or "clip" according to the current mode. Previously, one could "clip" only. * Key mapping improvements. The key mapping functionality from the Key Map button in the Attributes Menu had some issues. This command generates a file, which is intended to specify the key mapping in future runs. The host name is part of the file name, and if the host name changes, the file can't be found. On my MacBook Pro, when connected to a network, the hostname is "macbook.local", but when not connected to a network, it is "macbook.localdomain", thus the problem. Additionally, when running Xic remotely via ssh with X forwarding, the hostname would always be "localhost" which is not very useful. The hostname part of the file name is now generated in a manner appropriate for ssh, and if there is a final component that begins with ".local", it is stripped off. When attempting to read the file, if no file under the new name is found, a file with the old name will be used, so this shouldn't break exsiting setups. * Label command enhancements. The math that controls the label text size has been improved. It should now always be possible to exactly match existing label font sizes when creating new labels, with the arrow keys. Using the arrow keys to change label size is now exactly reversible. Previously, label sizes were basically unconstrained, and size matching could only be approximate. When editing text in the prompt line, when applicable, clicking on an existing text label in a drawing window will load the label text into the prompt line at the cursor position. Hypertext entries in the label will be preserved. If the existing label is a "long text" label, the long text attribute will be lost, unless the prompt line is empty before clicking on the label. * New feature involving box creation and erase. The box, erase, and xor side menu commands participate in a new protocol that is handy on occasion. Suppose that you want to erase an area, and you have zoomed in and clicked to define the anchor, then zoomed out or panned and clicked to finish the operation. Oops, the box command was active, not erase. Previously, one would press Tab to undo the unwanted new box, press the erase button, then repeat the operations that define the rectangle. Now, the anchor point is remembered, when switching directly between these three commands, and the command being exited is in the state where the anchor point is defined, and the ghost box is being displayed. In the example above, undo the unwanted box, press the erase button, and the erase command will have the same anchor point and will be showing the ghost box, so clicking once will finish the erase operation. Note that one needs to press the command button to switch commands. If Esc is pressed, or a non-participating command is entered, the anchor point will be lost. * Polygon and wire vertex editor enhancement. While in the poly or wire command (side menu), with no object in the process of being created, it is now possible to change the selected state of poly or wire objects, thus displaying vertices and allowing vertex editing. With the command active and no object being constructed, pressing the Enter key will cause the next button 1 operation to select/deselect poly or wire objects. This can be repeated arbitrarily. When one of these objects is selected, the vertices are marked, and vertex editing is possible. Previously, one would have to exit the command, change the selected state, then reenter the command in order to edit the vertices of another object. Bugs Fixed ---------- * The Copy command from the Modify Menu now creates an internal cell structure when entered, and the current cell has none. This allows copying objects from a another cell into an "empty" cell. * In the Layer Editor pop-up (from the Attributes Menu), the text entry now has the initial focus. * It was impossible to add a layer to the layer table with the Layer Editor panel if the layer table is empty. * In the Select Group/Node function from Net Selections in the Extract Menu, clicking in an electrical window with No Top Symbolic set wasn't working. Now, clicking on a wire or terminal will select that node, and the corresponding physical conductor group. * The Path Files Listing panel (from the File Menu) would initially appear blank, until the window was resized or otherwise redrawn. * In electrical mode, dots will now be created in the master when a new subcircuit is added and dots are being shown. * Fixed a bug that could crash the program when overwriting the current cell while reading input from a file. * Fixed a sort-of bug. When using the file open/save commands that pop-up a version of the file selector above the prompt line, one would find in some cases entering a space would terminate the string, as if Enter were pressed. What happens is that the file selector takes the focus, but echos characters to the main window, so one doesn't notice that the main window has lost focus. However a space is not echoed, instead it "presses" the load button of the pop-up, which terminates input. The file selector now reverts focus to the main window when it pops up. * Duplicate entries in the model.lib file would cause a memory warning (or worse). * Fixed some issues with the xic_keymap file, which is generated by the Key Map command in the Attributes Menu, and is used to map keyboard keys to basic Xic functions. The actual file name is constructed using the user's display host name, which could change due to variations in networking environment. The file name is now created understanding ssh connections, and any final host name component that starts with ".local" is stripped off. This helps avoid situations where Xic won't read the mapping file due to a change in network status, which effectively changes the host name, and allows mapping more effectively when using ssh. * Erasing electrical mode plot marks was sometimes difficult unless zoomed in. This should work better now. * The interprocess communication channel to WRspice would hang Xic on certain errors, one of which was having an empty plot command string. * Having a backslash character as the last character in a command sent to WRspice would cause trouble in WRspice. If found in a plot command line, Xic might fault. This has been fixed in the latest WRspice. A backslash character is syntatically incorrect in this context. * Previously, the Create Cell command in the Edit Menu would allow bound property labels to be copied into the new cell, and if the cell replaces selected geometry, the existing labels would be deleted. This is not desirable. Now, bound property labels will not be included unless the owning object is included, and all bound labels of an owning object will be included, whether selected or not. * The Creaate Cell command now updates the listing in the Cells Listing and Tree listing from the Cells Menu. * When an electrical terminal is added to a cell, a vertex is now automatically added to wires in cells that contain an instance of the cell and contact the terminal location. * If dots were visible in an electrical cell, and the cell name is changed (for example, with the Rename button in the Cells Listing panel), the dots would not go away unless the renamed cell is saved and reopened. * When copying objects from a foreign drawing window, the copy would fail if the source and destination coordinates in the respective cells were the same. * Inline vertex detection in non-Manhattan polygon edges was improved. ------------------------------------------------------------------------------- xic-3.2.20 2/22/2011 Changes and New Features ------------------------ * New command: !ssh [hostname] This command will pop up a terminal window that will contain an ssh login process to a remote host. If the hostname is not given with the command, it will be prompted for. The "hostname" can actually contain additional ssh options if needed, and the name of the host can be in the form user@host, which allows logging in as user. The ssh process will establish X forwarding to the remote system, and will automatically set the SpiceHostDisplay variable if authentication is achieved before a time out. This facilitates using WRspice on the remote system to perform simulations in electrical mode, from the run button. The remote system must have a wrspiced daemon running, and the SpiceHost variable should be set to the remote host name. The X forwarding provided by the !ssh shell takes care of display string setting and permissions. The !ssh shell must remain active while WRspice is in use, as exiting the shell will break the connection to WRspice graphics. See the description of the SpiceHostDisplay variable for more information. This command will work under Windows, if Cygwin is installed, along with the Cygwin OpenSSH package. The ssh program will be found if it resides in /bin or /cygwin/bin on the current disk, or if the CYGWIN_BIN environment variable is set to the path to the directory that contains the ssh.exe binary. This is the Windows path, not the path within Cygwin. Xic is not a Cygwin program, and knows nothing about Cygwin mount points or symbolic links. * Shell command update A new command, !shell [command], duplicates the functionality of the '!' shell command, i.e., !shell command is the same as !command provided that !command is not the same as an Xic command. The use of !shell removes the ambiguity. If there is no command, i.e., just giving "!" or "!shell" brings up an interactive shell window. Under Windows, it is possible to open a Cygwin bash shell window instead of a brain-dead "DOS box", if Cygwin is installed. If the Shell variable or SHELL environment variable (in that precedence) contains the Windows path to the bash.exe file, a bash window will be used. If neither is given, and bash.exe resides in /bin or /cygwin/bin on the durrent disk drive, or the CYGWIN_BIN environment variable is set to the Windows path to the directory containing bash.exe, a bash shell will be used. Only if bash.exe is not found, or one of the variables specifically invokes "cmd", will a DOS box be used. * New variable: SpiceHostDisplay This variable can be set to the X display string to use on a remote host for running WRspice from a wrspiced daemon, from Xic in electrical mode. It is intended to facilitate use of ssh X forwarding to take care of setting up permission for the remote host to draw on the local display. The variable is set automatically from the !ssh command. When using a remote host, this specifies the X display string to use, which is needed for running graphics. If not set, a display name will be created as follows: If the local DISPLAY variable is something like ":0.0", the remote display name will be "localhostname:0.0". If the local DISPLAY variable is already in the form "localhostname:0.0", this is passed verbatim. One can use ssh transport for the X connection on the remote system as follows. Use "ssh -X" to open a shell on the remote machine. Type "echo $DISPLAY" into this window, it will print something like "localhost:10.0". Use this value for SpiceHostDisplay. The !ssh command will set the variable automatically. The shell must remain open while running WRspice, exiting the shell will close the X connection. This will work under Windows, if Cygwin is installed, along with the OpenSSH package (for the ssh command) and the Cygwin X server. One weirdness: use "ssh -Y" instead of "ssh -X". The -Y option, which applies to recent ssh versions, is similar to -X, but overcomes stronger security checks included in recent ssh implementations. This seems to be necessary when using the Cygwin X server. Background In legacy X-window systems, the display name would typically be in the form hostname:0.0, where the hostname could be (and usually is) missing. A remote system will draw to the local display if the local hostname was used in the display name, and the local X server permissions were set (with xauth/xhost) to allow access. Typically, the user would log in to a remote system with telnet or ssh, set the DISPLAY variable, perhaps give "xhost +" on the local machine, then run X programs. This method has been largely superseded by use of "X forwarding" in ssh. This is often automatic, or may require the '-X' or '-Y' option in the ssh command line. In this case, after using ssh to log in to the remote machine, the DISPLAY variable is automatically set to display on the local machine. X applications "just work", with no need to fool with the DISPLAY variable, or permissions. The present Xic remote access code does not know about the ssh protocol, so we have to fake it in some cases. In most cases the older method will still work. The ssh protocol works by setting up a dummy display, with a name something like "localhost:10.0", which in actuality connects back to the local display. Depending on how many ssh connections are currently in force, the "10" could be "11", "12", etc. In the present case, if we want to use ssh for X transmission, the display name must match an existing ssh display name on the remote system that maps back to the local display. If there is an existing ssh connection to the remote machine, the associated DISPLAY can be used. If there is no existing ssh connection, one can be established, and that used. E.g., from the ssh window, type "echo $DISPLAY" and use the value printed. The display name provided by the SpiceHostDisplay variable will override the assumed display name created internally with the local host name. * Updates to the WRspice interprocess-communication interface. 1) The input/output channel is now asynchronous, which means that console output generated by WRspice that is not expected by Xic will be printed in the Xic console window immediately. Consider the Print button in the Vectors tool. Previously, selecting a vector and pressing Print would appear to do nothing, however the output would appear the next time Xic issued a read request to WRspice for some other purpose. With the asynchronous interface, the print text appears immediately, as one would expect. 2) The interface can now specify a display name to use on the remote host, through the SpiceHostDisplay variable. This allows the use of ssh X forwarding. 3) The interface should be more robust with respect to unexpected connection loss. 4) Numerous small bug fixes and improvements. * The wrspiced program was updated (from WRspice-3.2.11). Killing the wrspiced daemon will now kill all wrspice process being managed by the daemon. This will clear any "zombie" wrspice processes, that are not in use due to some failure, but are still using system resources. * Some notes on using wrspiced and firewall issues. The wrspiced program uses port 6114 to establish a connection, and a temporary (machine assigned) port for other communication. If either port is blocked by a firewall, it is not possible to use wrspiced. Future versions may use ssh tunneling to avoid this problem, but for now, a firewall must be disabled, or the ports enabled. In Red Hat 5, this is simple, but requires a root password. The Red Hat 5 procedure is: 1) Press the System/Administration/Security Level and Firewall menu button. 2) Give the root password if asked. 3) Click on the triangle by "Other Ports" in the pop-up that appears. 4) Using the Add button, add the following entries: 6114 32768-61000 5) Press Apply and confirm. This should be done on both the local and wrspiced host systems, if both are using the firewall. The wrspiced program should now operate correctly. Red Hat 3 is not so nice. There is a similar "Security Level" pop-up, but it doesn't allow ports to be entered. It looks like the iptables config file needs to be modified by hand. If the machines are connected via ethernet, make sure that the ethernet device is "trusted" (check the box), or wrspiced won't work, even with the firewall disabled. * The device.lib file was modified slightly. The default model for the Josephson junction device is now "jj3", consistent with the current Hypres foundry process. Bugs Fixed ---------- * Fixed a non-initialization bug in SPICE IPC init function. This caused faults in the WRspice ipc demo, but apparently was innocuous in Xic. * The Print button in the WRspice Vectors tool was not working when WRspice was running from Xic. In general, text emitted from WRspice that was not requested from Xic would not appear until Xic actually requested text from WRspice (i.e., the interface was synchronous). * Fixed a bug in SPICE IPC: Too much text data from !spcmd (e.g., a large ascii plot) would freeze the interface. * When Xic was run from WRspice, the simulation interface wasn't working right. Xic would start its own WRspice instead of using the parent WRspice. Other releases would not establish a connection to any simulator. * The Box, Polygon, etc. script functions no longer fail when attempting to write into an empty cell that has not yet been instantiated. * Fixed some GTK warnings issued from the Modified Cells pop-up. * Fixed the spiral.scr and spiralform.scr scripts to work in XicII. They were failing due to function calls to the nonexistant (in Gen-3) DRC subsystem. ------------------------------------------------------------------------------- See the xic3.2-0-19 file in the installation docs directory for earlier release notes.