Modelsim simulation progress in batch/command line mode?

Put something like the following in a TCL script: proc printsimstate {} { global now global UserTimeUnit echo "Simulator time is $now, timescale is $UserTimeUnit" after 5000 printsimstate } after 5000 printsimstate

I haven't tested it much since I just wrote it, but it seems to work fairly ok.

/Andreas

Reply to
Andreas Ehliar
Loading thread data ...

Is there a way I can get ModelSim to display the time progress of the simulation when it's running in command line/batch mode similar to what it would do at the bottom of the GUI window?

Thank you.

Reply to
M. Hamed

Andreas,

nice, but be aware that it will leave an "after" action lying around; if you pause the sim (or it reaches a breakpoint) you will continue to get "Simulator time is..." messages spitting out of the console every five seconds.

This seems to be closer to a robust solution, although you might also want to provide a new timed version of the "continue" command too. Just source this Tcl script into ModelSim before running the sim, and then use "trun" instead of "run" to start the simulation.

# Smarter version of "run" that displays timings as it runs proc trun {args} { # Start the periodic runtime display after 2000 printSimTime # Do the usual run command eval run $args } # # Periodic time display, stops itself when the # run is stopped or interrupted proc printSimTime {} { echo "time = $::now" if { [string equal running [runStatus]] } { after 2000 printSimTime } }

In my own experiments I've found that the value of "now" that this code reports is not very reliable - presumably, thanks to the very heavy CPU loading caused by a busy simulation, things don't always get updated as promptly as you might hope. Even so, it's better than nothing.

--
Jonathan Bromley, Consultant

DOULOS - Developing Design Know-how
VHDL * Verilog * SystemC * e * Perl * Tcl/Tk * Project Services

Doulos Ltd., 22 Market Place, Ringwood, BH24 1AW, UK
jonathan.bromley@MYCOMPANY.com
http://www.MYCOMPANY.com

The contents of this message may contain personal views which 
are not the views of Doulos Ltd., unless specifically stated.
Reply to
Jonathan Bromley

Is there a reason people don't suggest just using an always block in the test bench?

For example, I use:

//this is a status heartbeat for batch mode operation integer microseconds; reg heartbeat; always #10000 microseconds = microseconds + 10; always @ (microseconds) if (heartbeat) $display("%d us",microseconds);

This has the advantage on not requiring tcl (and the scripting is an enhanced, pay for it option), and is portable to other simulators.

Terry Brown Tyzx, Inc.

Reply to
Terry Brown

ModelSim SE and Questa users can use the JobSpy tool to monitor and interact with batch jobs, including those running under LSF and Grid Engine load sharing software.

One of the available JobSpy commands is 'now', which prints the current simulation time.

Have a look at the 'Monitoring Simulations with JobSpy' chapter in the User's Manual

- Nigel

Reply to
NigelE

Thank you. This seems to work well. I was wondering if it's possible to format the time display to display in a certain unit like us or ns.

Reply to
M. Hamed

ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here. All logos and trade names are the property of their respective owners.