The JAB Browser (deprecated)
Deprecated in favor of CVT
When you execute "java jab" you launch two windows:
1 - a console (CLI interpreter)
2 - a circuit browser, wires table, memory viewer, schematic viewer, waveform
viewer, and TBone
CVT, by default, similarly consists of:
The difference then, is that in CVT, the design is the focus, not the tool. Your testbench instantiates the tool,
not the other way around.
- wires table
- circuit browser
- waveform viwer
- memory viewer
- schematic viewer
JAB is the GUI tool developed to give users a friendly simulation and
debugging environment. The JAB environment offers a number of tools
to watch the behavior of your circuit. The most populair viewers in
JAB are the Browser Tree and Port Table, the Schematic Viewer, the
Waves Viewer, and the Memory Viewer. Each of these viewers has a menu
bar with menu options specific to it's function. There is also a
command line on the bottom of each viewer to enter commands you wish JAB to
After writing and compiling your JHDL files you can use Jab to view
and simmulate the designs. Jab is initialized by typing: java
jab, and when the JAB GUI appears you can load your circuit from
the command line typing load [classfile]. You could also
initialize jab with your circuit by passing in the class file for your
circuit as an argument to JAB on the command line like this: java
The first viewer to open will be the Circuit Browser. This is
divided into to parts the circuit tree structure is on the left and
the port table is on the right. The tree structure lists all the
cells in your schematic in a hierarcical way. When it is originally
opened only the top level cells will be listed, but those that have
children cells inside of them will have a + next to them.
Selecting the plus will expand the cell and allow you to see all the
children. There will now be a - next to that cell which
removes the children of the cell from the tree view.
The port table on the right lists all the ports of the selected cell
of the tree structure. As you cycle the design you will notice that
the port table updates the values that are on these ports.
All the Viewers in JAB share some common features. At the top of each
viewers there is a menu bar. The File Menu always has the option of
closing the window or exiting out of jab. The rest of the menu
options are specific to the viewers they are in. At the bottom of
each viewer there is a one line text box so you can enter text
commands for JAB. There is also a Cycle button that will run your
design for one clock cycle. There is also a step button on the bottom
that only runs your design to the next changing edge of the clock. If
your design has multiple clocks the step button runs the design to the
next edge of the fastest clock.
You can open other viewers from the Circuit Browser. To open a schematic
viewer select the cell you wish to view in the tree structure and in
the Browser menu select View Cell Schematic. Another way to
open a schematic viewer is to select a cell and hit Ctrl-V.
To open the Wire Waves Viewer you can select wires you want to watch
in the port table or select the Browser menu option View Waves
Wire or hit Ctrl-T.
You probably noticed a second Jab window open below the Circuit
Browser. This is the Jab console. Here is where you can see a
history of your commands to JAB and where you will see error
messages. If a command does not work it will report why it failed in
the console. It will also report errors in the simmulation of your
circuit. You should leave the console in a place where you can see it
so that should an error occur you will know it when it happens. The
console remembers the commands that you perform as you load and
simmulate a circuit. You can save a log of these commands as a script
file by selecting the File menu option Save Log of the console. This
will prompt you for a file name. After saving the script file you can
later run this script file by typing source [script
filename]. This will execute all the commands you saved in your
The Schematic Viewer provides a visual representation of the circuit.
It show you the insides of the cell you are viewing including all the
ports, cells and wires. The Schematic Viewer can be opened from the
Circuit Browser by selecting a cell in the tree view and hiting
Ctrl-V. Another way is to enter the command view [cell
name] in the cammand text box at the bottom of the viewers. You
can pop into cells from the schematic viewer by double clicking on
them. If a cell is a primitive unit and has nothing inside of it it
will not let you pop into it. In the Schematic Viewer you will notice
that the wires on the ports of each cell have values on them that are
drawn in blue. These value are the current values on the wires and
will stay updated as you simmulate your design. You can select cells
and wires by clicking on them. To select multiple items you must hold
down the control button. When a wire is selected it is high-lighted
red. This will make tracing wires a lot easier for complicated
designs. If you want to watch the values on wires over time you can
select the wires and then hit Ctrl-W to open a Waves Viewer
with them. There are also menu options to zoom in or out and print a
The Schematic Viewer has an info box that tells about the cells and
wires the mouse is over. Normally the info box tells you the name and
size of the objects. If you select the Schematic menu option View
Cell Properties or View Wire Properties then you will
also see the properties of the cells or wires in the info box. When
the schematic viewer is opened all the values are displayed in
hexidecimal format. This can be changed by using the Radix pulldown
box at the bottom of the Schematic Viewer. The options available are
Hex, Decimal, Signed Decimal, or Binary. Normally all the Schematic
Viewers that are open share the same Radix, but if you unselect the
check box Windows Share Radix then you can set different
Schematic Viewers to display the values in different Radixes.
The Waves Viewer is used to watch the values of specific wires over
time. The Waves Viewer can be opened by selecting wires Circuit
Browser's port table, or selecting wires in the Circuit Viewer and
hitting Ctrl-W, or from the command line typing watch
[wire name]. Wires can be added or removed from the waves
viewer as desired. When a wire is added to the waves viewer nothing
is known about the past values of the wire so the only values that
will chow up are current values and then as you run your design using
step or cycle new values will show up. The Waves Viewer is divided
into three parts. The left part contains the wire names.
The right part contains the values of the wire over a period of
time. In this table there is a red vertical marker that moves to
where you click or drag the mouse. The middle part shows the values
of the wire or the cycle that the marker is moved to.
Each wire in the waves viewer displays all its values in the same
radix. Originally the values are displayed in hexidecimal. You can
select a wire by clicking on the wire names. The selected wire will
appear red. After selecting a wire you can change the radix used to
display the values on the wire by making a selection from the pop down
menu box on top of the viewer. The choices are hex, decimal, signed
decimal, binary or the Custom Format.
There are also options to zoom in, zoom out, and to see the full
hierarchical name or the short name.
The last button in the Waves Viewer allows you to save the data in
the waves viewer as a text file. It saves the cycle names across the
top of the text file. Then each succeding line will have a wire name
and all the values of the wire for each cycle. Later after you have
closed down JAB you can open up just the Waves Viewer with this text
file. To do this type java waves [text file with waves
data]. The Waves Viewer will load up, but it will not have the
cycle and step buttons or the Commands bar. This is because the Waves
Viewer can not simmulate without the rest of JAB.
The Memory Viewer is used to watch a memory unit. In the tree view
in the Browser Main Frame the memory units can be identified because
they have the red memory symbol in front of them.
After you select one of these memory cells by clicking on it you
can load up the Memory Viewer by selecting the Browser View
Memory menu option or by hitting Ctrl-M. The Memory
Viewer contains the data of what is currently stored in that memory
unit. The addresses are in the left collumn. The data is in the next
four collumns such that there are four memory spots per row. The
values of the memory locations will be updated as you simmulate the
Originally the address and the data is displayed in hex. There is
a drop down menu for both the address and data display. These drop
down menus let you choose the radix the numbers are displayed in. The
address gives you options to display in hex or decimal. The data can
be displayed in hex, decimal, signed decimal, binary or the Custom Format. The Jump To
Address button will bring up a dialog box to enter jump to a
specified address in the Memory Viewer. You should enter in the
address in the same radix as you are currently displaying the address
in. For example if you are displaying the address in hex you could
enter in `c0' to jump the the hex address c0. The button Dump Range
lets you save a range of the memory unit as a text file. The dismiss
button closes the Memory Viewer. There is a menu option that lets you
view the memory cell as a histogram table. This pops up another
window with the histogram table.
The Layout Viewer currently only works with designs targeted to
the XC4000 architecture. This viewer lets you see the actual
placement of your cells of your design on an FPGA. The Layout Viewer
contains rows and collumns of CLBs. The ones that are highlighted are
in use by your circuit. Each CLB is is outlined witha yellow line.
Inside each CLB there are 3 LUTS, small red boxes, and two flip-flops
small blue boxes, and a small green box. The boxes that are
highlighted in the CLB are the boxes that are being used by your
design. In this example two of the LUTs and the carry logic are being
used in this CLB.
Notice that in this CLB the flip-flops and one LUT is not
highlighted. This is because they are not used in this CLB. There
are blue boxes drawn around the different components in your circuit
and the names of these components is writen in white. If you double
click on a component it will appear in its own Layout Viewer. When
you put your mouse over a CLB it will tell you what row and collumn
that CLB is in. This tool was created to help you in doing manual
placement of circuits targeting the XC4000 architecture. This viewerwill
not work if you have not used map and place commands in creating your design.
Custom Format of Wire Values
The custom format will bring up a dialog box that askes you how you
want the values on the wire formated. The format string is simmilair
to the C printf statement. Here are a couple examples:
To learn more about the BVFormat strings see the BVFormat Documentation.
- %u[7:4.3:0] - diplays a 4.4 fixed point number as in unsigned
decimal. Bits 7 to 4 represent the whole part and bits 3 to 0
represent the fractional part.
- %8d[15:8] - diplays bits 15 through 8 as a signed decimal
number. The resulting String will be at least 8 characters long.
- %h[*] - displays the value as a hex number. The * says to do this
with the whole width of the wire.
Available GUI Commands
Load Class... <Ctrl-A>
- Jab will load the entered class into the browser. Keyed on < return >
Step command, button, and field <Ctrl-S>
- The step command will cycle the system 1 time.
- The cycle command prompts for a count and steps the specified number
Reset System <Ctrl-R>
- Reset the system to its initial state.
- Selects between different types of waveform viewers. Default is Waves mode where wire values appear as high and low lines. The Table form places each wire value in a table or spreadsheet like form.
View Invisible Cells
- This option selects whether or not cells with a property marking them as invisible can be seen in the tree view.
View Child Wires
- Selects whether or not wires created in a parent cell will
be visible in that cell
Enable Behavioral Model <Ctrl+E>
- Enable behavioral modeling on the selected cell ( cell selected in tree view )
Disable Behavioral Model <Ctrl+D>
- Disable behavioral modeling on the selected cell ( cell selected in tree view )
View Wire Waves... <Ctrl+T>
- Start the wave viewer on selected wire
View Cell Schematic... <Ctrl+V>
- View schematic of selected cell
View Cell Layout... <Ctrl+L>
- View layout of selected cell (valid only for XC4000 netlisted circuits)
View Memory <Ctrl+M>
- View contents of selected cell ( cell must implement BrowserMemory interface )
Cell Info... <Ctrl+C>
- Invoke reflection viewer on selected cell
Wire Info... <Ctrl+W>
- Invoke reflection viewer on selected wire
Port Info... <Ctrl+P>
- Invoke reflection viewer on selected port
Delete Wire <Ctrl+D>
- Removes the selected wire from the waves viewer.
View All Cells
- Shows cells that do not effect output and would be optimized away. The schematic viewer draws all these cells in the top left corner.`
View Cell Properties
- When selected this changes the cell names to include the cell properties so you can see the properties on the cell in the info box.
View Port Wire Properties
- When selected this changes the wires on the ports names to include the wire properties so you can see the properties on the port wires in the info box.
Zoom In <Ctrl+I>
Zoom Out <Ctrl+O>
View All <Ctrl+F>
- Changes the size of the circuit to fit into the circuit view window.
Watch Selected Wire(s) <Ctrl+W>
- Adds the selected wire(s) to the waves viewer.
Unwatch Selected Wire(s) <Ctrl+U>
- Removes the selected wire(s) from the waves viewer.
View Histogram <Ctrl+H>
- Creates a histogram view of your memory unit.
Available Console Commands
These commands are available to be executed from the command line. One
of the features of JAB is that it is full scripted. There is no command
restricted to only GUI use. A more complete form of help is supplied in
JAB by typing help or help < command name > on the command line.
alias < alias name > < command >
font [ font size ]
- Changes font size to the specified size if entered and tells you the current font size.
help [ command ]
- Displays a list of commands if no command is specified, or if a command is specified it tells you how to use it.
- Prints up the history of the comamnds you have used.
log [ -a ][ start end ] < log file >
- Creates a log file of all successful commands. This can be run latter using the source command.
- Rehashes the class path for class name completions.
log [ -e ] < log file >
- Executes a log file that is basically a script file with recognized CLI commands.
unalias < alias name >
behav < cell name > < true / false >
- Sets the behavioral modeling on or off on the given cell
cd < cell name >
- Change console working directory (level of cell hierarchy) to < cell name >
cycle < cycles >
- Cycle the system < cycles > times
dumpram < cell name > [< file name >] [< start index > <
elements > < radix >]
- Write the specified ram contents to the specified file.
exit | quit
jout [jab | show | console | help | disable | file | list ]
Allows the manipilation of JHDLOutput objects. [-f] option forces the
creation of a stream if it doesn't exist.
- jab: Redirects a stream to the jab console
Usage: jout jab [-f] <JHDLOutput name> <stream>
- show: shows where each stream of a jhdl output is currently directed.
Usage: jout show
- console: Redirects a stream to the command line console
Usage: jout console [-f] <JHDLOutput name> <stream>
- help: Displays usefule information about jout.
Usage: jout help
- disable: Disables a stream within a specific JHDLOutput object.
Usage: jout disable [-f] <JHDLOutput name> <stream>
- file: Redirects a stream to a file
Usage: jout file [-f] <JHDLOutput name> <stream> <file>
- list: Lists all the currently available JHDLOutput objects.
Usage: jout jab [-f] <JHDLOutput name> <stream>
load < class name >
- Load the specified class into Jab. If the class is not a testbench, Tbone will be loaded which will then load the specified class.
loadmodule < module name >
- Load the specified module into JAB
ls | dir
- View information on the current cell
objectInfo < object name >
- Invoke reflection tool on provided object
- Display the current hierarchical level.
readstate < cycles >
- Read state from file saved after < cycles > clock cycles.
- Assert the simulator's reset
setwaves < boolean >
- Sets the wave type for a wire
step < steps >
- steps the system < steps > times
- Switches between wave and table modes in the waveform viewer.
unview < cell name >
- Removes the schematic viewer for < cell name >
unwatch < wire name >
- Stop watching < wire name > in waveform viewer
updatecellinfo < boolean >
- Records of the behavioral children are reported with cellInfo when this field is true
- Returns the currently used version of JHDL.
view < cell name >
- View schematic of < cell name >
viewlayout < cell name >
- View the layout of < cell name >. This currently only works for XC4000 archetecture.
viewram < cell name >
- View contents of selected ram cell < cell name >
watch < wire name >
- Watch < wire name > in waveform viewer.
win < true | false >
- When true, this option will bring up each tool in its own view. When false the tool windows will appear as panels in the original Browser window.
- Write the state to a file. It will be unique to the current cycle count.
Copyright (c) 1998-2003 Brigham Young University. All rights reserved.
Last updated on September 11, 2003