XRM(2)-DAC-D4/1G User Guide
V2.2 - Mar 8, 2018
generation is performed at the FABRCLK rate, with appropriate synchronisation of control signals from the local
clock domain.
The FPGA data generation drives a 4:1 OSERDES, so must generate four samples of data for each cycle of
FABRCLK. This is achieved by operating four identical data sources in parallel. For sine waves, four DDS
generators are used, each offset in phase by the required amount to correctly interleave the data. The ramp
generator produces four offset data streams in the same way and this signal is used as the basis of triangle and
square wave generation. User-implemented data sources must implement the same mechanisms.
3.2.3 Local bus interface
3.2.3.1 Virtex4, Virtex5
The local bus interface consists of two components plus a small number of related processes and is based on
the parallel-bus architecture on these FPGA cards.
Address decoding is performed here to enable read or write access by the host. This decoding is used to qualify
read and write operations.
For writes, address-qualified write-enables are used within processes to implement the registers required to
control the various elements in the design. For reads, address-qualified output-enables are used to enable
retrieval of register settings and access to read-only registers.
PLXDSSM is a standard component from the Alpha-Data SDK which implements the interfacing and decoding
required for the local bus signals.
XRC_CONFIG implements a number of the glue-logic functions associated with the local bus which require
coding specific to the type of FPGA board being targeted. The latter is identified by including the appropriate
configuration file in the project list.
3.2.3.2 Virtex6, Virtex7, Kintex7
Virtex6, Virtex7, Kintex7 boards use a serial-bus-based OCP interface for communications with the host via the
bridge. The ocpbus_if.vhd component is a wrapper for adb3_ocp_simple_bus_if.vhd and the associated files
from the SDK. This isolates the main XRM code from any SDK modifications by preserving a standard interface.
This component also supplies the clock interfaces for the local bus and the 200 MHz reference clock. By default
the local bus is run at 80 MHz although this can be run at up to 200 MHz if required.
Address decoding and register reads and writes are performed in much the same way as for the parallel local
bus with a few noteworthy exceptions. Read decoding does not use an output enable signal and register
addresses are aligned on 128-bit addresses instead of the 32-bit addresses used for the parallel bus. This is
required in order to ensure that the bursting ( four 32-bit reads or writes per access) inherent in the OCP bus
operation does not cause inadvertent register accesses which might affect volatile data e.g. FIFOs.
3.2.4 Serial Control
The serial interface code (sampck_synth.vhd) is common to both synthesiser and DAC serial control and is
implemented using a simple state machine which includes a programmable update clock rate to accommodate
various bit-rates.
Read and write operations are initiated by generating a rising edge on the appropriate strobe port. An
initialisation sequence can also be run from a single strobe signal.
The strobe signal triggers the transfer of data and address values via a state machine , with handshaking bits to
synchronise with the host application.
For writes, the register address byte and write data byte specified on the external ports are used to form the
serial stream sent to the device. For reads, only the address is used - any value present on the write port is
Page 19
VHDL Structure
xrm-dac-d4-1g-manual_v2_2.pdf