Screenshots:


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.