# Input and Output

The MCC design, as defined in the Entity wrapper, has four 16-bit inputs and four 16-bit outputs (InputA-D and OutputA-D respectively). These signals can be routed to come to/from physical ADC/DAC channels on the hardware, Digital I/O where supported, or from other instruments in the Multi-instrument configuration.

# Clk and Reset

Moku:Go Moku:Pro
Clk 31.25MHz 312.5MHz
Reset Active-High Active-High

# Inputs and Outputs

Input and Output ports on the wrapper can either be:

  • Connected to other ports through the Moku Application's block diagram
  • Permanently connected to particular ADCs or DACs, or
  • Not connected
Moku:Go Moku:Pro
InputA Block Diagram Block Diagram
InputB Block Diagram Block Diagram
InputC ADC In 1 Not Connected
InputD ADC In 2 Not Connected
OutputA Block Diagram Block Diagram
OutputB Block Diagram Block Diagram
OutputC Block Diagram Not Connected
OutputD Not Connected Not Connected

All Inputs and Outputs are 16-bit signed values. When the port is externally connected to Digital I/O, the signed 16-bit values should be interpreted simply as a 16-bit standard logic vector.

# Analog I/O Scaling

The bits-to-volts scaling of ADCs, DACs and between instruments is as follows. This table assumes no ADC attenuation and no DAC gain is configured.

Source/Sink Moku:Go bits/volt Moku:Pro bits/volt
ADC 409.4 2270.02
DAC (50R) - 29925.0
DAC (High-Z) 6550.4 14962.5
Inter-instrument 13100.8 29925.0

Pass-through

Note that scaling is different depending on source. This can lead to a number of unexpected effects, for example the trivial "passthrough" instrument OutputA <= InputA actually scales the signal down by 16x if passed from ADC to DAC (High-Z) on Moku:Go (6550.4 / 409.4). This also means that the apparent signal amplitude changes depending whether the MCC design uses an ADC or another instrument as its source.

# Using Digital I/O

On Moku:Go, a slot Input, Output or both may be routed to the Digital I/O block. In this case, the Input or Output signal should be interpretted as a 16-bit std_logic_vector or equivalent. Each bit of this vector corresponds to a digital I/O pin in the obvious way, i.e. InputX(0) contains the current logical value of DIO Pin 1, driving DIO Pin 16 is done by assigning a value to OutputX(15) (where Input/OutputX are the slot signals you've routed to the DIO block in the Multi-instrument Mode builder).

The Digital I/O block does not have automatic detection of driving sources, the I/O direction for each pin must be manually configured. On the MiM Configuration screen, click the Digital I/O block and set each pin's desired driving direction.

Driving an Input

If you attempt to drive a value to a pin configured as an input, that action is silently ignored. If you read in from a pin that's configured as an output, the operation succeeds and simply gives you the current logical value of the pin.

There is an example available for more information. Digital I/O is also used to drive the sync signals in the VGA Example