![]() Click to enlarge |
This is the main tkgate window. Use the tabs at the top to select the major mode. While editing a module, seleting the "Interface" tab will allow you to edit the master interface definition for that module. |
![]()
|
This is a closeup of the hierarchical module list box. The hierarchy shows which modules are used by which. Magenta modules are user defined modules and the "chip" symbol is used for library modules. A "lock" on the edge of a user symbol indicates that the interface is protected and can not be edited (without turning of the protect flag). |
![]() Click to enlarge |
This is the "color options" page of the options dialog box. |
![]() Click to enlarge
|
This is the interface editor for standard modules. The ports can be edited either through the port list, or through the standard editing window with any modifications on one being immediately reflected in the other. An "Auto Generate" feature can be used to generate an initital interface using ports referenced in the module definition. |
![]() Click to enlarge
|
The interface editor for symbol modules. Symbol modules are user modules that use a user-defined bitmap symbol instead of a rectangle. |
![]() Click to enlarge
|
Modules can be defined as a "netlist" or as a "text hdl" module. For modules with a text HDL description a subset of Verilog is supported for writing module definitions. This screenshot shows a display of an HDL module while tkgate is in simulation mode. Text output from the simulation is shown in the window on the bottom. |
![]() Click to enlarge
|
This is the dialog box for setting circuit properties. Circuit properties are saved along with netlist and HDL data in the circuit file. |
![]() Click to enlarge
|
This is the details dialog box for a mux instance. Some built-in devices such as muxes have options to control the position of ports. For muxes, the user can specify left-to-right or right-to-left ordering of the input signals. Additionally, the user can select to have the select input on the left or right og the mux. |
![]() Click to enlarge ![]() Click to enlarge
|
Users can implement interactive emulated devices in Tcl/Tk which can
then interact with user circuits. TkGate 2.0 will come with a "coke
machine" as an example emulated device. An emulated device is
normally a combination of a tcl/tk module implementing the graphical
interface for the device, and a verilog module to make the device look
like a normal module. In the coke machine example, the interface to
the device will be provided, but it will be up to users to write a
controller. TkGate users are welcome to contribute additional emulated
devices.
Here is an excerpt from the Verilog side of the coke machine interface:
module cokemachine(..., CHGQ, ..., PRESS)
input CHGQ;
output [5:0] PRESS;
reg [5:0] PRESS;
...
// start up interface
initial $tkg$exec("CokeMachine::post %m");
// release a quarter in change
always @(posedge CHGQ)
#10 $tkg$exec("CokeMachine::releaseChange %m 25");
// Output the state of the drink selection buttons.
always
#10 PRESS = $tkg$read("%m.PRESS");
...
endmodule
The $tkg$exec() task is used to execute a Tcl/Tk proceedure.
The first call in the initial block is called when the
simulation starts and is what causes the GUI for the coke machine
interface to be created. The second call is made in response to a
positive edge on the CHGQ input signal. This calls the Tcl/Tk
proceedure CokeMachine::releaseChange which causes the coke
machine to release a quarter in change. The call to
$tkg$read is used to read data sent from the emulated device
to the circuit on a named channel and convert that data to an output
signal. The "%m" in each of these examples is a special code which
the simulator will replace with the name of the instance of the coke
machine module. This allows a circuit to contain multiple instances
of an interactive emulated device.
Emulated devices are not limited to graphical interfaces. One could in principle design an interface that would allow a tkgate circuit to interact with real work devices such as making a tkgate designed CPU accessable from the internet. |