Releases: pcardaba/TimeIt
Release list
Release v2.5.0
[v2.5.0] - 2026-09-13
Signals can now be computed from other signals instead of only being drawn
from a list of edges. Nothing breaks: v2.4.0 scripts load unchanged.
Added
create_logic -op and|or|xor|nand|nor|not -inputs {sig ...}. Combines
any number of signals, or inverts one, into a new waveform. The operands
are merged in the time domain rather than snapped to a clock grid, so
signals launched by different or unrelated clocks combine correctly.
Unknown propagates through the operator except where a controlling value
masks it (0 AND xis0,1 OR xis1), and the min/max transition
windows of the operands count as unknown, so the result shows the real
uncertainty. A hi-Z operand resolves to1when it was created
-pulled_upand to unknown otherwise.-tpd_max/-tpd_mindelay the
result and their spread widens every transition window, like the delays of
an I/O signal. Clocks, buses and PWL signals are rejected as operands, and
so is any definition that would close a dependency loop.create_sampled -source <signal> -clock <clock> [-edge rising|falling].
Resamples a signal the way a flip-flop does, holding each captured value
until the next sampling edge. At every edge the source is examined over
the half-open aperture[t - setup, t + hold): anything other than one
stable value across the whole aperture captures as unknown and stays
unknown until the next edge, which is how a setup or hold violation
appears on the diagram.-setup,-hold,-tco_maxand-tco_minare
Tcl expressions defaulting to 0. Sampling on a gated clock holds through
the suppressed pulses, a bus source may be resampled, and the source may
itself be a derived signal.- Derived signals compose. Their waveform is expressed exactly like a
basic signal's, so one can be measured by a timing marker, be annotated,
or feed another derived signal. - Removing a signal a derived signal reads is refused (
remove -signal
and the Delete Signal menu), with a message naming the derived signals to
remove or edit first. The same rule refuses re-creating such a signal
under another class. Themove_signalrules now cover operands as well:
a derived signal stays below what it reads, so a saved script always
reloads intact. set_attributeunderstands the derived signals.op,inputs,
tpd_max/tpd_minof a logic signal andsource,clock,edge,
setup/hold/tco_max/tco_minof a sampled signal are resolved and
validated exactly like the correspondingcreate_*options, so a typo is
refused instead of dropping the signal at the next redraw.- Both are available from the GUI under New Signal → Logic… and
New Signal → Sampled…, with the input or source pre-filled from the
right-clicked signal, and reopen for editing through Edit Signal like
any other signal. The pickers only offer choices the command would accept. - See How to create logic and sampled signals and
thelogic_example.tclexample.
Changed
- Double-clicking a signal name opens its edit dialog, the same one the
context menu reaches, for every signal type. Previously a double-click on a
name did nothing and editing was only reachable through the right-click
menu. Double-clicking a waveform element still opens its annotation dialog.
Notes
- Derived signals are omitted from
write_sdc: they model internal nodes,
not I/O pins. They can not gate a clock (-enabled_bystill takes an input
or output only).
Release v2.4.0
[v2.4.0] - 2026-09-10
Analog waveforms come to TimeIt: the new create_pwl command overlays
piece-wise-linear traces (voltage, current, temperature...) in a single
waveform slot, each with oscilloscope-style scale and offset knobs, and value
markers read back a trace's interpolated value at any point. PWL signals are
documentation only — write_sdc ignores them.
Nothing breaks: v2.3.0 scripts load unchanged.
Added
- PWL (analog) signals.
create_pwl -names {...} -files {...}draws one
or more piece-wise linear waveforms (voltage, current, temperature...) in a
single waveform slot, read from two-column text files (time, value) that
accept time units, engineering notation and SPICE-style SI prefixes
(10mV,400e-3,5MEG). Every trace is normalized to the slot and has
its owncolor,lstyle,lwidth,scale,offsetandvisible
attributes (set withset_attributeon the trace name), scale and offset
acting like the vertical knobs of an oscilloscope. New Signal → PWL (analog)
... is the dialog
counterpart (up to 5 traces per slot). PWL signals are documentation
signals:write_sdcignores them. Seedocs/20_pwl_signals.md. - Value markers on PWL traces: right-click a trace and Add Value
Marker to read its interpolated value there (1.2V,120mA). The label
can be dragged (a thin line keeps it tied to the marked point) and its text
edited with a double-click. Saved ascreate_value_marker, removed with
remove -vmarker. - Ovals (the colored dots of PWL labels and value markers) are now exported
in every format.
Changed
- PWL dialog and value-marker refinements. The New Signal → PWL
(analog)... form was simplified, and value-marker rendering and their
set_attributehandling were tightened up.
v2.3.0
What's new
Import VCDs (File → Import VCDs)
- Import Value Change Dump (
.vcd) waveform files and convert them into TimeIt timing diagrams. - VCD parsing, signal analysis, and a clock-characterization dialog to map imported signals onto the diagram model.
- User-guide documentation for the import workflow.
Release v2.2.0
[v2.2.0] - 2026-07-25
Generated clocks can now be gated and inverted, and diagrams can bootstrap their
own SDC I/O constraints with the new write_sdc command. Several editing and
data-safety rough edges are also smoothed out: timing markers open their edit
dialog on a double-click, unsaved sessions warn before they are discarded, and
your own Tcl variables survive a round trip through File → Write Script....
Nothing breaks: v2.1.0 scripts load unchanged.
Added
write_sdc -file {path}. Generates a partial SDC (Synopsys Design
Constraints) file from the diagram's input and output signals:
set_input_delay/set_output_delaystatements (converting internal
delays to their external equivalent, and taking the worst case of data and
output-enable delays for tri-stated outputs), plusset_multicycle_path
statements whenever a signal's launch and capture clocks differ. Diagram
timing variables are re-declared so the statements stay symbolic, and
diagram clocks are sketched as commented-outcreate_clock/
create_generated_clocktemplates. Signals clocked by a gated clock are
constrained from the free-running waveform, as STA assumes. This is what
File → Write SDC... now runs; the generated file is a bootstrap aid,
not a ready-to-use constraint deck — see
Writing an SDC constraint file.- Generated clocks can be gated.
create_clock -enabled_by <enable_signal> [-enable_active high|low]gates a generated clock with an
existing input/output signal, the same way a latch-based ICG does: a pulse
is only emitted when the enable is at its active level at the pulse's
leading edge, and the clock parks at its idle level while disabled. Edge
numbering counts only the visible (drawn) edges, so signals referencing the
gated clock track the enabled burst. Gating can also be set or cleared on
an existing clock withset_attribute -name enabled_by. - Generated clocks can be inverted.
create_clock -invertcomplements a
generated clock — it falls where the direct clock would rise and vice
versa — with the same semantics as SDC'screate_generated_clock -invert.
Combines with either-edgesor-divide_by. redraw. Forces a full repaint of every signal, timing marker, split
and annotation on both canvases. Only needed after driving the diagram
from plain Tclsetcommands that bypass the app's own change tracking.- Timing markers open their edit dialog on double-click, matching every
other editable diagram element. - Unsaved-session warnings. Loading a script or exiting the application
while the diagram differs from its last saved/loaded state now asks
whether to save first, with the load/exit cancellable from the prompt.
View-only changes (window resize, zoom) do not count as modifications. - User Tcl variables survive Write Script. Plain
setvariables you
define yourself (in the console or a sourced script) are now re-emitted by
File → Write Script... in a# --- User variables ---section ahead of
anything that could reference them, soremove -allat the top of the
reloaded script no longer drops them.
Release v2.1.0
A command for every GUI action
The console log pane was never really doing its job: it only showed what you typed. Now every GUI action that changes the diagram runs its
equivalent TCL command, and that command is logged in the pane, exactly as if you had typed it.
That makes the pane a trace of the session. You can read back how something was done, press ↑ to recall and re-run a past action,
and recover after a crash: the log is also written to classes/timeit_commands.log without the % prefix, so that file is a valid script
that rebuilds the diagram.
% create_clock -name clk -topology source -period {10} -rise_at {0} -fall_at {5} -visible -show 4
% create_waveform_split -at 25.0
% create_timing_marker -from start:uid_0_0 -to end:uid_0_1
% move_signal -name {dout} -direction up
% remove -signal {1}Most of this release is the command language catching up with the GUI, so that no action is left without a command.
v2.0.0 scripts load unchanged — there is nothing to migrate.
New commands
help—helplists every command TimeIt adds to the interpreter;help <command>prints its help notice (the same as<command> -h elp).export_canvas— exports the canvas from a script or the console, in the same six formats as the menu:This is what File → Export Canvas… now runs.export_canvas -file {diagram.svg} export_canvas -file {diagram.png} -dpi 600 -background {#f0f0f0} export_canvas -file {report/fig3} -format pdfmove_signal— reorders a signal, which previously could only be done from the context menu:A move that would put a signal above the clocks it refers to is refused, in the GUI and in the console alike.move_signal -name clk -direction down
remove -annotation/remove -timing_var— the two objectsremovecould not delete:remove -annotation {uid_2_11} ;# by the waveform element it annotates remove -timing_var {tSU tHO} ;# by name; also unset in the interpreter
Timing markers and waveform splits can be updated
create_timing_marker and create_waveform_split now accept -use_uid. When a marker or a split already carries that uid it is updated
in place instead of a second one being created, and the options you do not give keep their current value:
create_timing_marker -use_uid 0 -style outer ;# restyle it
create_timing_marker -use_uid 0 -anchor from -at 30 ;# re-anchor and move it
create_waveform_split -use_uid 0 -at 75 ;# move it, keep its lookThis is what lets a restyle, a re-anchor, a rename or a drag be expressed — and logged — as a command.
Behaviour change worth knowing
remove -all now also clears the timing variables and the measured values of the named timing markers. Every saved script starts with remove -all, so loading a diagram no longer inherits either from the diagram it replaces, and no longer saves them back into it.
If you have a hand-written script that sets its timing variables before a remove -all, move them after it. Generated scripts already do
the right thing.
Fixed
- The Settings dialog changed a setting in the model without setting the corresponding TCL variable, so the two could disagree.
- The Remove button of the User Timings window crashed on a row that had been added but never given a value.
set_canvas_scale -helpandset_window_size -helpdid not print their help.- The Input/Output signal dialogs printed the command they built to the terminal's stdout, where nobody launching the app from a desktop ent
ry would ever see it. It goes to the log pane now, like every other command. - Every command TimeIt registers now has a
-helpnotice (puts,set_window_sizeandset_canvas_scalehad none).
Documentation
The user guide covers the command log, move_signal, remove by uid, marker update and removal, annotation removal and timing-variable rem
oval. Two stale claims are gone: that remove could not delete signals individually, and that deletion was not undoable.
Full changelog: CHANGELOG.md · v2.0.0…v2.1.0
Release v2.0.0
[v2.0.0] - 2026-07-13
Major release. The clock model of the I/O signals changed: a data path is now
described by the clock that launches it and the clock that captures it,
instead of by a single reference clock. Diagrams written for v1.x do not load
until they are migrated (see Migration below).
Breaking
create_input/create_output: the-refclockoption is removed and
replaced by-launch_clockand-capture_clock. Both clocks must be related
(they must share the same source clock); giving only one of them means the
same clock launches and captures the data, which is the v1.x behaviour.
Added
- Generated clocks.
create_clocknow creates either a source clock
(topologiessource,clockin, waveform given explicitly) or a generated
clock (topologiesclockout,clockinout, waveform derived from a master
clock):-master: the source clock the clock derives from.-edges {rise fall cycle_end}: master clock edges generating this clock,
with the same semantics as the SDCcreate_generated_clock -edgesoption.-divide_by divisor: shorthand for-edges {1 divisor+1 2*divisor+1}.-output_dly: delay the clock takes to come out of the interface.-input_dly:clockinoutonly, delay of the clock fed back in.
- Launch/capture rendering. The capturing edge of a data path is now
resolved against the capture clock waveform instead of being assumed to be
half a period (or a period) away on the reference clock. The edge lists
(-data_edges, ...) still always name launch clock edges. removeby uid.removenow accepts-signal {uids},-split {uids}
and-tmarker {uids}, which may be combined in a single command. Removing a
signal still removes everything depending on it (its timing markers, and the
clocks/signals derived from it).- Delete Split. A waveform split can be deleted from the canvas context
menu, by right-clicking on it. remove -helpandset_app_var -help, with theirdata/*.help.txtreference
pages (neither command had one).- Documentation: How to use timing variables (
docs/17_timing_vars.md).
Fixed
- Input signals specified with internal delays, and output signals specified
with external delays, used the uncertainty of the wrong clock edge when the
data was launched on one polarity and captured on the other. - Output signals specified with internal delays subtracted the falling clock
uncertainty twice from the min delay of data launched on a falling edge. - A timing marker anchored on a signal that could not be drawn crashed the tool
with an empty Tcl error. The marker is now skipped and the cause is reported in
the console. set_app_varcleared the description of a timing variable when its value was
set again without-desc. The description is now kept; pass-desc {}to
clear it.
Changed
- The Input/Output signal dialogs are more compact and let the launch and the
capture clock be selected. - The clock, I/O signal and timing variable documentation was rewritten for the
new model. - The example scripts in
scripts/were migrated to the new options.
Migration from v1.x
Replace the -refclock option of every create_input / create_output by
-launch_clock, which preserves the v1.x behaviour exactly:
# v1.x
create_input -name data_i -refclock clk ...
# v2.0.0 (same behaviour: clk both launches and captures)
create_input -name data_i -launch_clock clk ...Give -capture_clock as well when the data is captured by a different (related)
clock.
Release v1.1.0
[feat] Adding Help entry menu to give TimeIt basic information
[bug] Properly clearing Hidden signals dynamic cascade ctx menu
[feat] Undo/Redo capability.
[gui] canvas y-scrolling shall not go negative
[doc] Install clarifications.