- 0.25 | 2008-02-12 - License now GPLv3+ (see COPYING) - Bugfixes for `dumpvars' - Regression THUD 0.24 (2004-08-08) broke `dumpvars': Output contained only the module declarations and initial dump; the rest was omitted. Now fixed. - Values only dumped when changed Prior versions of THUD (except 0.24) would dump all signals requested on all cycles. Now, it dumps only those signals whose values changed between the previous cycle and the current one. VCD (Value Change Dump) is the format name, after all. :-/ - Enhancements to `dumpvars' - Timescale now 1ns - Aliases excluded - Tested w/ Dinotrace 9.3e - New thud command-line option: --out FILE When given this option (or "-o FILE" for short), thud adds the .th files as usual, then does "compile-to FILE", then exits. See examples/lfsr/go, for instance. - Maintenance uses GNU Autoconf 2.61 - 0.24 | 2005-08-08 - Installation changes - Configuration no longer checks Guile version Instead, it checks for features directly (for example, availability of the procedure `make-hash-table'). Additionally, the configure script errors out if required modules (listed in modules.af.m4) are not found to be installed. - Compiled modules support removed The `--enable-compiled-modules' will probably return later, after THUD's design (in the absence of compilation) stabilizes somewhat. - HTML documentation not installed The distribution includes HTML documentation but does not install it anywhere. - Linking performance more scalable One part of the linking process is the static scheduling of evaluation nodes, which used to be done w/ a (hacky home-grown) insertion sort. Now we use a topological sort. (No worries, most of the rest of THUD is still as hacky and home-grown as it ever was.) - THUD HDL changes - Replacement: `say' dropped, `fln' introduced - Face (user interface) changes - Improvements to `deposit' command This command now handles invalid signal or missing arg (syntax) errors by displaying an error message. For other errors, if the signal to be changed is valid, but the expression is not, THUD displays a warning, deposits `x' and displays the old value (before the deposit). To purposefully deposit `x', use #f. Additionally, if the expression's value is wider (has bit-width greater) than the signal to be changed, THUD displays a warning and truncates the value to fit. This command now respects the `scope' user variable for the signal to be deposited (but not for the expression). - Changes to installed program `thgen' and module (thud impl thgen) A "device generator" is now composed of three pieces of information: the list of configuration variables specific to the device (if any); the template of THUD HDL forms with specially indicated subtitution locations; and the var-alist callback procedure that computes what values to substitute, taking an lookup procedure `get' and returning the settings as a list of variable/value pairs (an alist). Generators can now inherit templates. For an example, see generators `mox' and `mix' in src/thud/qa/parts/thgen.scm. - 0.23 | 2001-09-13 - Configuration looks for guile-1.5.x or later This is primarily for module system improvements (in fact, it was THUD that originally motivated these changes). Unfortunately, Hobbit development has not kept up w/ that of Guile, so "./configure --disable-compiled-modules" is highly recommended for now. - Flop update happens at the beginning of the cycle. To simulate parallel flops, THUD keeps two values for the flop, the value-to-be, and the current value. Copying the value-to-be into the current value now happens at the beginning of the cycle instead of at the end. - 0.22 | 2000-02-21 - Configuration changes - Configuration takes option `--disable-compiled-modules'; see README. - A small configuration bug was fixed. - More parts of THUD are compiled by Hobbit, if available. - Executables are now built in subdir bin instead of at top-level. - 0.21 | 1999-11-14 - Installation changes - Install bug fixed. A bug was fixed in the installation procedure in the case where Hobbit is not installed on the system, that caused installation to look for non-existent library files and thus fail. - Shared-object libraries are installed in a new place. They used to be installed under PREFIX/share/thud by default, but are now installed under PREFIX/lib/thud. PREFIX/share is supposed to be for machine-independent files only. Also, we now use libtool for installation. This change is only relevant if guile-hobbit-1.3.4 is installed. - Configuration changes - Configuration looks for guile-1.3.x. Because the author is experimenting w/ hobbit-1.3.4, this dependency makes sense. It will probably go away in the future. - THUD configuration info is now better encapsulated. The previous approach of using environment variables is dropped in favor of having ./configure create src/thud/config-info.scm, which adds to (and exports from) `the-root-module' the procedure `%thud-config-info', taking one arg, a symbol, and returns a string associated w/ that symbol. Also, appropriate directories are prepended to `%load-path'. The shell-command option "--info" now also understands these symbols. Do "thud --info help" to see a full list. The generated file is also installed in PREFIX/thud. Loading it is sufficient to recreate THUD configuration and set up GUILE for loading further THUD modules. The command `compile-to' now does exactly this. Likewise for executables "thud" and "thgen". - 0.20 | 1999-10-02 - Configuration detects Hobbit and uses it to compile parts of THUD. Hobbit compiles R4RS Scheme to shared libraries using libtool. At this time, only the simulation-math runtime procedures are compiled. Still, cursory benchmarking shows the permutation of the example adder going from 220cps for THUD-0.19 to 345cps for THUD-0.20. Compilation is optional, but if you do want go that way, make sure you install guile-hobbit-1.3.4.tar.gz or later. - Miscellaneous - old names gone (see THUD-0.16 below, "function name changes") - 0.19 | 1999-09-21 - Synch w/ latest GUILE This release is to synch w/ latest GUILE, which has changed the hook interface (again). Also, "bad define placement" errors have been fixed. You will need to install CVS GUILE 1.3.4 post 1999-09-13. - Experimental interface change for procedure `thgen' The procedure `thgen' now takes an optional arg listing files to be loaded before starting generation. This is not documented elsewhere because its usefulness is still being evaluated. - 0.18 | 1999-09-17 - A new module `(thud thgen)' allows programmed HDL generation. You can now generate external HDL representation suitable for building a library. There is a command line interface as well. See manual for more info; see examples/thgen for examples; type "./thgen" at the command line with no args (after doing "make") to see internal documentation. - Minor bugfixes and enhancements - `display-vob' now prints values as bit-strings. - inf-thud.el cleanup, plus now works w/ xemacs - html docs now processed by texi2html 1.52 - 0.17 | 1999-08-04 - You can use THUD from within Emacs via `emacs-face'. Using THUD in an Emacs buffer is possible with the `emacs-face'. This requires cooperation from Emacs by loading inf-thud.el and typing `M-x inf-thud'. A prefix arg allows you to edit the command (default "thud --face emacs"). The buffer is placed into inferior-thud mode, which actually has two submodes, "THUD:Comint" and "THUD:Emacs", depending on the inclusion of "--face emacs" in the command line. The first is a normal comint-based session. The latter uses single keystrokes for quickness, and also accepts terse commands. See manual for details. - Documentation changes - Terse Command Face section now includes complete command table - Emacs Face section fleshed out - Administrative changes - mailing lists - new page http://www.glug.org/people/ttn/software/thud/lists.html providing easy subscription to THUD-related mailing lists - README now has section describing mailing lists - installation - elisp files are now installed in PREFIX/share/emacs/site-lisp - html and texi files are now installed in PREFIX/share/thud/doc - 0.16 | 1999-07-26 - A syntax error was fixed in the docstring for procedure `compile-to'. (Author hangs head in shame.) This error caused `compile-to' to be completely unusable. The regression suite invoked by "make check" has been updated to include a test for this (bug 018). - Function name changes. The old names are still recognized for this release but will go away in a release or two. Here is a table listing the changes: new old -------- ------------ add include add-only include-only next spin The rationale for the change is to support `terse-cmd-face' (the replacement for `hide-parens-face', see immediately below). - Default `hide-parens-face' replaced by `terse-cmd-face'. This new interactive face uses `terse-cmd-table' (see face.scm) to recognize commands that need not be the same name as the underlying Scheme procedures called. In addition to obviating parentheses (as did `hide-parens-face'), `terse-cmd-face' accepts abbreviations when unambiguous. (For example, the command "info blocks" can be entered as "i b", and "help info blocks" as "h i b".) Because the names can be different from that of the procedure, we now call these "terse commands" to distinguish them from Scheme procedures. For a list of accepted terse commands, type "help" at the command prompt. As required by all faces, entering "!CMD" runs CMD using `system'. A lone "!" drops you into a subshell (after exiting, you are returned to THUD). THUD uses the shell specified by environment variable `SHELL'. You can evaluate and print the value of Scheme expressions by entering ",EXPR" (note comma). For example ",(* 3 7 2)" prints out 42. - Some procedures obey the new `scope' variable. The variable `scope' holds the current scope, defined as one of the instance names in the design, or "/", which indicates global scope. You can view all the scopes using the terse commands "info scope" or "info instances", and set the scope using "set scope". When a procedure obeys the `scope' variable, that means that it selects only those signals that are at that scope or "lower" in the hierarchy. In the future, there may be another variable to restrict these procedures from recursing (the author requests feedback on this). Here are the procedures that obey `scope' (and their terse command name): display-todo-list-reps (info todolist) display-scheduled-values (info schedvals) display-vob (info vob) eval-print (print) A notable exception is `deposit'. Type "help deposit" for more information. Also, `eval-print' only obeys `scope' for atoms, not parenthesized Scheme expressions. - Command prompts now expanded using `format-prompt'. The variable `thud-prompt' holds the command prompt. When displayed, "%c" is replaced by the cycle number, and "%s" is replaced by the scope. You can set the prompt using the terse command "set prompt". The new internal procedure `format-prompt' is what does the expansion. Use `(format-prompt)' where you would normally use `thud-prompt'. See face.scm. - Changes to the functionality of procedure `die'. The procedure `die' no longer prints out its args. Instead, it concats them, separated by a space and uses that composition as an argument to an `scm-error' call. The key for the call is `thud-error'. It is up to the calling repl to do something with the resultant re-throw by `scm-error'. NOTE: This change is experimental, and may change further. - New macro `defvar' makes wrapping state easier. This macro defines the variable as well as three access procedures: getter, setter and write-line. All of these are then exported from the current module. You can call `defvar' like so: (defvar NAME INITIAL-VALUE DOCSTRING [SETTER-BODY]) NAME is a symbol. INITIAL-VALUE is an expression. DOCSTRING is a string. The optional arg SETTER-BODY is a lambda form that overrides the default setter. SETTER-BODY must take one arg, the new value of the variable. Because Guile Scheme variables do not have a standard place to hang documentation, we use the docstrings for setter, getter and writeln procedures for that purpose. This also provides a way to (eventually) restrict the mutability of those variables to their access functions (encapsulation). To see the docstring for a variable, use the terse commands "help set VAR" or "help show VAR" (they may be different). This facility is experimental, and may change subsequently if we find a better way to represent a variable's documentation. - Miscellaneous enhancements and bug fixes. - `pwd' is gone (use `cd .' instead) - bugs 012, 013 and 016 marked as fixed - config info is included in comments in the `thud' executable file - var `thud-show-cc' has been removed - ChangeLog files are now included in the distribution. - 0.15 | 1999-06-06 - You can "compile" a bunch of design files into a Scheme file. You can then "execute" it using guile: `guile -s COMPILED-FILE'. This file includes information on how to access the THUD runtime environment, which is required for its operation. This implies that THUD must be fully installed before compilation so that the information is up to date. NOTE: This compilation process is not yet in its final form. The goal is to hook into hobbit (or gcc?) and produce native code. The author is interested in feedback on this. See directory examples/compilation for an example. - An upper bound on simulation can be defined by setting `max-cycle'. If `max-cycle' is #f, simulation is unhindered as before. You can set it to a number to control `spin' and `SIM:run-forever': When used interactively, the command `spin' stops after that many cycles, even if the cycle count argument to `spin' is larger. For compiled designs, the function `SIM:run-forever' throws `done-sim' when `max-cycle' is reached. Currently, `max-cycle' can have a non-numeric value in this context, e.g., a quoted expression. See examples/compilation/compile-adder.scm for details. This variable will probably change in the future with respect to name and access method. We need it at this time for compilation support. - The module `(thud readline-proxy)' is now always silent. Guile no longer is linked against libreadline by default, implying that this module will always fake readline support. Because it's unconditional, there is no need to warn you. - Minor bugfixes. - Documentation and source comment cleanup. - 0.14 | 1999-05-20 - The hooks `pre-cycle-hook' and `post-cycle-hook' are better handled. As of 1998-11-26 (CVS snapshot), hooks in Guile are first-class. The hooks `pre-cycle-hook' and `post-cycle-hook' are now in complianace w/ this new scheme. - Help now shows arglists. When doing "help CMD1 ...", each CMD's argument list is displayed as well as its documentation string. - This NEWS file has been reformatted w/ more whitespace. - 0.13 | 1998-11-23 - A new module `(thud readline-proxy)' replaces `(ice-9 readline)'. This checks to see if the primitive procedure `readline' is available, and if so, pulls in `(ice-9 readline)'. Otherwise, some substitute procedures are defined. This module is needed because `(ice-9 readline)' does not do the necessary safety check. If readline is not available you will see a warning message that can be safely ignored. - Native Scheme procedures like `+' and `-' are now left alone. They used to be redefined to match HDL semantics. THUD transforms TH expressions to use thud variants. This change is to enable compilation of the simulation object by hobbit. - The Makefile command to install files is now "install -c". - 0.12 | 1998-11-13 - Towards more modular design, types and state are now in their own modules. - The command line option "--version" is available. It prints out a version and then thud exits. "-V" is synonymous. - Evaluation scheduling is now completely static. Evaluation is implemented using a defined procedure rather than granular calls to `eval2'. This results in a speedup of between 4x and 5x. As a result, the procedure `display-eform-stats' is no longer available, since it used to report scheduling efficiency in terms of forms skipped (no forms are skipped now). - The TODO file now explains the goals and tasks for a 1.0 release. - 0.11 | 1998-10-31 - THUD no longer works with Guile 1.2. - For convenience, the commands `cd' and `pwd' are now builtin. The normal thud interface (hide-parens-face) also understands shell-escape sequences of the form "!CMD ARG...", running "CMD ARG..." in a subshell. You can use plain "!" to invoke an interactive subshell. In that case, when you exit the subshell you will return to thud. - The module `(thud boot)' is replaced w/ `(thud invoker)'. It now contains only the procedure `invoke-thud'. Things that used to be in `(thud boot)' are now in `(thud com)'. The top-level system executable file `thud' can now be loaded w/ only `thud' being defined. This may prove useful for the compiled simulator to access. - 0.10 | 1998-10-22 - A bug was fixed in the scanner. It was causing fullpath signal names to be additionally modified, instead of being left alone. - The `n!' construct is introduced. In a behavioral construct (right hand side of some `a.' or `n.'), the form (n! signal value) overrides whatever the normal `n.' construct has set up for `signal'. On next rising edge, signal gets `value'; this occurs for one cycle only. See scheme/thud/qa/directed/mutf-stim.th for an example where this is used for stimulus generation. - The ONEWS file is renamed to NEWS and latest news is included here. - The "samples" directory is renamed "examples". Also, subdir organization is now along session lines rather than "drivers" and "rtl". See the README file in that directory for more info. - The QA procedure `qa-do-test' is now polymorphic. It now handles a procedure as its `msg' argument by calling that procedure `with-output-to-string' and using the resulting string for the message. The old behavior (using a string for the `msg' argument) is still supported. - Regressions for BUGS are now included, although it is somewhat incomplete. There are also various other small improvements in the QA environment. - The default name for the vcd output file is now "thud.dump". You can change this at any time with the command `set-dump-file!'. - The source files for the internals doc now are named "thudint*". They used to be named "internals*". Also, the automatic documentation elisp is undergoing major revision, so for this release, the internals document really is just the skeleton file (and not very useful). - 0.9 | 1998-08-07 - Add file THANKS to the distribution. - Three new commands to examine workspace structures are now available. These are `display-blks', `display-blks-summary' and `display-instances-summary'. The "*-summary" commands show one block or one instance per line, while `display-blks' is more comprehensive. - Two new commands dealing with translation are now available. These are `translate' and `display-translation-formats'. The first one translates blocks to different HDLs, writing the output to a specified file. The second one shows the different formats supported (currently only Verilog). - A minor bug in the command-line processing is now fixed. - There is now support for backward compatibility with GUILE 1.2. As a side effect, the GNU readline library is not supported. You will see warning messages that can be safely ignored. - 0.8 | 1998-08-03 - The help facility is much more coherent. It now offers one-liner style command summaries as well as full documentation for individual commands. The source is also filling out more (docstrings and comments). - Dumping support is now available. A script can call `set-dump-file!' to specify an output file where VCD (value change dump) information is to be written. VCD is a standard format used by many waveform viewers. To specify which signals are to be dumped, use `dumpvars'. With no arguments, all signals in the workspace are dumped. Otherwise, the arguments are taken as the list of signals to dump. - A major bug in `permute' is now fixed. This bug caused benchmarks to be artificially optimistic by making some of the simulation work go away. The `go' script now takes three times as long as before (45 sec on the development platform). - Executing user scripts now maintains module state. This is done primarily by `save-module-excursion' and allows user scripts to adopt modular style w/ little fuss. - A new command `wisecrack' is available for those wanting humor. - Hide-parens face now uses the GNU readline library for its input. It no longer requires a hacked version of Guile. Unfortunately, the history mechanism still doesn't work at this time. - The default prompt is now "(thud)" rather than "". - The source file svc1.scm is gone. Most things have been moved around somewhat but are getting more stable. - The regression environment continues to evolve. New useful procedures include `@', inspired incidentally by the Guile discussion list. - The debugging environment now includes the `dbg' macro. This and some flags encourage stylized coding of "debug blocks". - The package directory structure is now deeper. This fixes a bug that did not allow `make check' to complete. - The distribution is clean of the old Guile-ism `#/some/list'. These have been converted to `(some list)'. - Old news is now in the file ONEWS rather than this README file. - A bug was fixed in the install procedure. It now places info files in PREFIX/info. (They were not being installed before.) - 0.7 | 1998-07-07 - The THUD Manual doc source is now in Texinfo format. Internals doc source is still SGML (although that will be converted to texi at some point). - There is a new mechanism for including a design. The way now to include a .th file in the simulation environment is to use the command `include'; `thud-load-one-file' and `thud-load-many-files' are no longer available. - The source file svc1.scm contains new "service level 1" procedures. The aim is to have level 1 be session management. New commands in svc1.scm include: - include-only -- include only the files listed, then prepare for simulation - permute -- run specified instance w/ permuted input ports - display-eform-stats -- see evaluation form statistics - display-todo-list-reps -- see the evaluation form templates, in order - The internal procedure `thud-module-claim-syms' is now polymorphic. This procedure, which exports symbols (as its own) from the current module, takes a module in addition to taking a list of symbols. Use it like this: (thud-module-claim-syms (resolve-module '(thud face))) Note that `(thud face)' is a module expressed in list notation and needs to be quoted. - The user-command `display-event-log' now handles optional header messages. Use it like this: `(display-event-log "here is the event log so far")'. Other commands that are similarly instrumented are: `display-thud-options', `display-system-info', `display-eform-stats' and `display-todo-list-reps'. - Optimization for flops had a major bug that is now fixed. This bug caused flops to not be simulated if they were thought to alias with other nets and flops. The fix resulted in some redesign with the realization that flops can never alias since they represent actual state. - TH now includes keywords "eq?", "cond", "else", "not", "begin" and "(cc)". The first five are normal Scheme keywords, and "(cc)" returns the current cycle number. Forms which are not specially recognized in a .th file are now evaluated as if in the simulation module. This will most likely change in the future as namespace issues become resolved (ie, each blk defined should be in its own module -- this way we can have blk-specific functions). - The user execution environment is now module `(thud user)'. This applies to scripts run with either the "-x" command line option or the "x" interactive command. - Source modules now export their symbols explicitly. The Guile macro `export' is used instead of `define-public' and `defmacro-public'. - 0.6 | 1998-05-16 - Added file BUGS. - Hide-parens face now no longer requires argument quoting. Before, you had to use "x 'go". Now you can use "x go" and the input is automatically translated. - The command line option `--info warranty' is available It tells you that THUD comes with ABSOLUTELY NO WARRANTY. - The default directory where THUD is installed has changed. Before, it used to be /usr/local/share/guile/app/thud, a subdirectory of GUILE's `datadir'. Now the default directory is /usr/local/share/thud. To be safe, you should arrange for those files in the previous place to be removed. As a side effect, the configure option ``--datadir'' is not honored. This may be fixed in the future. - The installation instructions (below) have changed. It now requires the environment variable `THUD_PREINSTALL' to be set if you want to test THUD before installing. - Debugging with option "--debug" no longer catches `misc-error'. Instead, GUILE's exception handlers are allowed to do their thing. Additionally, the catch (when active) now handles all errors, not just `misc-error'. - Module usage has been redone. Each scheme source file considers itself its own module. This is more correct than before. - A bug was fixed with hide-parens face. It did not properly recognize `#t' and `#f' literal tokens. - Current THUD version is now available from THUD-VERSION. This is a /bin/sh script. This information used to be available in text file VERSION. - 0.5 | 1998-??-?? - New command-line options: --help, --info, --face and --init. The option `--verbose' is now a default; to turn it off use new option `--silent'. - THUD HDL now handles elided declaration/definition. For example, whereas before you had to do: `(wire sig) (a. sig expression)', you can now use a single form: `(wire sig expression)'. - THUD HDL now understands bit-extraction syntax. For example, the expression signal[13] indicates extraction of bit 13 from `signal'. Such expressions can be assigned to as well as referenced. - A standard configure/make/make-install procedure is now in place. - Add face support. A face is a mode of interactive behavior. THUD has the following faces: full (thin layer over GUILE), hide-parens (terse command syntax for non-hacker users), and emacs (for emacs to talk to -- still experimental). - Use modules. All sources consider themselves part of module `(app thud)'. **NOTE** Do not depend on this arrangement -- it may change in the future. - Add support for operators `<<' and `>>'. Operator `ash' no longer supported. Add support for keywords: case, and, or, if, die, say. - 0.4 | 1998-??-?? - Add shell-command entry point (#! file). - Implement evaluation skipping (perf). - Event log now has microsecond resolution. - Much more internals documentation. - 0.3 | 1998-??-?? - Nodes are collapsed in `settled-todo-list' (perf). - Evaluation re-implemented using `eval2' (perf). Value nodes are now symbols with property lists rather than records. - Runtime now handles #f (display representation is "x"). - Add some event log facility. - Add internals doc autogen elisp. - Add rudimentary Verilog translation. - 0.1 and 0.2 | records have not been kept Local Variables: mode: outline outline-regexp: "\\([ ][ ]\\)*- " fill-column: 72 fill-prefix: "\t" End: