9. TkGate Library Components

The TkGate distribution includes four libraries that can be loaded through the library manager. Components from these libraries can be used to add additional functionality to your designs. To use one of the libraries, open the library manager with the toolbar button and select the library you wish to load. You can then locate the module you wish to use in the module hierarchy and drag it onto the main window canvas to create an instance of it. The libraries that are available with TkGate are described in the following sections.

9.1 TTY


(Click to Enlarge)


Figure 9.2: TTY Device Window
The TTY library, tty provides a Virtual Peripheral Device (VPD) modeling a TTY device. The TTY supports input and output and models an interactive TTY terminal. You can use it in your design to provide textual interaction with the user. When you start the simulator, one TTY window will appear for each instance of a TTY VPD in your design. Your design can send characters to and receive characters from the TTY device.



Figure 9.1:
TTY Device


To use the TTY device, open the library manager with the toolbar button and load the "tty" library. You can then locate the module in the module list or module hierarchy and drag it onto the main window canvas to create an instance of it. Figure 9.1 shows the external view of the TTY instance which is defined with a symbolic module interface.

When a design containing the TTY device is simulated, it will open a window such as the one shown in Figure 9.2 (after the design has been running for a while). The text shown in this window was transmitted from the "Menagerie CPU" example. Keys pressed while the window has focus will be transmitted back to the controlling design.



Figure 9.3:
Transmit Character
To send a character to a TTY device, use the following protocol (see Figure 9.3):



Figure 9.4:
Receive Character
To receive a character from the TTY device, use the following protocol(see Figure 9.4):

Note that transmitting a character to the TTY uses "RD" and receiving a character from the TTY uses "TD" because the RD and TD are named from the perspective of the TTY device.

9.1.1 Forcing TTY Characters from Simulation Scripts

You can use a simulation script to force input into a TTY device. This is done by using a special named channel "instaname.FORCE" where "instaname" is the fully instantiated instance name of the TTY. You can use the
$tkg$send system task to send the string to be forced. For example, to force the input "Hello World" into the TTY named "main.memory.tty0", you could use the simulation script:
  initial
    begin
      # 10000 ;
      $tkg$send("main.memory.tty0.FORCE","Hello World");
  end

9.2 Drink Vending Machine



Figure 9.5: Drink Machine Device


(Click to Enlarge)


Figure 9.6: Drink Machine GUI
The drink vending machine library, "coke", provides a Virtual Peripheral Device (VPD) modeling a drink vending machine. The device provides input and output signals for the actuators and sensors in the virtual vending machine. You can use this device to design a vending machine circuit that controls an interactive model of a vending machine.

To use the drink machine device, open the library manager with the toolbar button and load the "coke" library. You can then locate the cokemachine module in the module hierarchy and drag it onto the main window canvas to create an instance of it. Figure 9.5 shows the external view of the cokemachine instance.

The virtual drink vending window that appears when you start the simulation is shown in Figure 9.6. It is comprised of an external view (left side) and an internal view (right side). The external view includes buttons that can be pressed to make a drink selection, a coin slot, and a bill reader.

The following interactions can be made through the drink machine GUI:

The internal view shows the columns of drinks that are available in the machine, the status of the bill scanner, the coins that have been inserted (but not used for a purchase), the coins that have been committed to a purchase, and coins that are available to make change.

The input signals on the drink machine and their function are as follows:

SignalDescription

DISP Dispense - Each of the six bits dispenses a drink from one of the six columns. Drinks are dispensed on the rising edge of the signal. Only one bit should be asserted at a time, and only after ensuring the the DISPACK (Dispense Acknowledge) signal is low. The asserted bit should remain high until the DISPACK signal goes high.
ELIGHT Empty Light - Each bit corresponds to the empty light on each of the six buttons. If a bit is asserted, then the corresponding empty light will be illuminated.
CHGQ
CHGD
CHGN
Dispense Change - Drop a quarter (CHGQ), dime (CHGD) or nickel (CHGN) from the "Change" bin. Only one of these signals (or the CHGCOM or RETINS signals) may be asserted at a time. Change is dropped on the rising edge of the signal. The signal should not be raised unless the CHGACK (Change Acknowledge) signals is low. The Dispense Change signal should be held high until the CHGACK signal goes high.
NOCHG No Change - If asserted, illuminates the "No Change" light on the vending machine to indicate that change can not be made.
BILLIN Bill In - Drives the bill motor to feed the inserted bill into the bill tester. Bills in the bill tester will be dropped into the "Collected" bin. The motor is activated on a positive edge of this signal. This signal should not be raised unless the BILLACK (Bill Acknowledge) signal is low. The Bill In signal should be held high until the BILLACK signal goes high.
BILLLTBill Light - This signal illuminates the light on the bill reader.
BILLOUT Bill Out - Drives the bill motor to feed out the bill currently in the bill tester. The motor is activated on a positive edge of this signal. This signal should not be raised unless the BILLACK (Bill Acknowledge) signal is low. The Bill Out signal should be held high until the BILLACK signal goes high.
CHGCOMChange Commit - This signal commits any change in the "Inserted" area to the "Collected" area. Change is committed on the rising edge of this signal. The signal should not be raised unless the CHGACK (Change Acknowledge) signals is low. The Dispense Change signal should be held high until the CHGACK signal goes high.
RETINSCoin Return - This signal returns any change in the "Inserted" area back to the user. Change is returned on the rising edge of this signal. The signal should not be raised unless the CHGACK (Change Acknowledge) signals is low. The Dispense Change signal should be held high until the CHGACK signal goes high.
INSACKInsert Acknowledge - This signal should be raised after seeing a positive edge on the INSQ, INSD or INSN signals indicating that a coin was inserted.
COSTDrink Cost - This signal drives the drink cost displayed on the external view of the vending machine. It should be the cost in nickels.
RESETReset - Resets the drink machine. This is an active low signal. It should be driven low to reset the machine, then kept high while using the device.

The output signals on the drink machine and their function are as follows:

SignalDescription

PRESSButton Pressed - Each bit is for one of the six buttons on the drink machine and is asserted while the corresponding button is pressed.
EMPTYEmpty Sensor - Each bit corresponds to one of the drink columns and is asserted when the sensor indicates that there are no more drinks in a column.
INSQ
INSD
INSN
Coin Inserted - These signals indicate that a quarter (INSQ), dime (INSD) or nickel (INSN) have been inserted. A rising edge indicates the insertion. The controlling circuit should assert the INSACK signal to acknowledge the insertion.
NUMQ
NUMD
NUMN
Change Available - Indicates the number of quarters (NUMQ), dimes (NUMD) and nickels (NUMN) available for making change (up to 7). If there are more than 7 coins of a type available, then the signal will indicate 7.
BILLSNSBill Sense - A high value indicates that a bill is sensed in the bill insertion slot. The controlling circuit should assert BILLIN to feed the bill into the bill tester
BILLOKBill OK - A high value indicates that the bill in the bill tester is a valid bill.
CNRETCoin Return Request - A high value indicates that the user is pressing the coin return lever.
BILLACKBill Acknowledge - This signal is asserted to acknowledge a BILLIN or BILLOUT signal.
CHGACKChange Acknowledge - This signal is asserted to acknowledge a CHGQ, CHGD, CHGN, CHGCOM or RETINS signal.
DISPACKDispense Acknowledge - This signal is asserted to acknowledge a DISP signal.
BILLNGBill No Good - This signal is asserted to indicate that a fake bill is in the bill tester.

9.3 Timers and One-Shots

Timers and one-shots are devices that operate in real time. To use a timer or one-shot device, open the library manager with the toolbar button and load the "timer" library. You can then locate the desired device in the module list or module hierarchy and drag it onto the main window canvas to create an instance of it.

9.3.1 OSCILLATOR Device


Figure 9.7:
Oscillator
The OSCILLATOR device provides a signal that oscillates at a set frequency in real-world time. You can use it to design circuits such as digital clocks using the LED gates. The default frequency is one hertz. To change the frequency, double click on the OSCILLATOR module to open the
Gate Properties dialog box and select the "Parameters" tab. Set the "HZ" parameter to the desired period in milliseconds.

9.3.2 ONESHOT Device


Figure 9.8:
One Shot
A one-shot device asserts its output a set time period after being reset by the input. The ONESHOT is triggered by an active low signal. You can connect the input to ground, to cause the ONESHOT device to assert its output after a set amount of real-world time after the simulation begins. Raising the input and lowering it again resets the one-shot. The default delay is one second. To change the time delay of the ONESHOT, double click on it to open the Gate Properties dialog box and select the "Parameters" tab. Set the "HZ" parameter to the desired delay in milliseconds.

9.4 TTL Devices

The TTL device library provides access to a small number of commonly used 7400 series TTL modules. To use this library, open the library manager with the toolbar button and load the "74xx" library. You can then locate the desired device in the module list or module hierarchy and drag it onto the main window canvas to create an instance of it. The supported devices are:

DeviceDescription

7400Quad 2-input NAND gates
7402Quad 2-input NOR gates
7404Hex Inverters
7408Quad 2-input AND gates
7410Tri 3-input NAND gates
74308-input NAND gate
7432Quad 2-input OR gate
7474Dual D-Latch, edge triggered with clear and preset
7486Quad 2-input XOR gates
741544-16 Decoder
74157Quad 2-1 Mux
741634-bit Synchronous Counter
74175Quad D-Latch, edge triggered with clear

Please see standard TTL data sheets for a description of these devices.