You can use the AMD Direct
Digital Synthesizer (DDS) IP block within a C++ design using the hls_dds.h
library. This section explains how to
configure DDS IP in your C++ code.
none
mode for Phase_Offset, but it does not support programmable
and streaming
modes for
these parameters.To use the DDS in the C++ code:
- Include the
hls_dds.h
library in the code. - Set the default parameters using the pre-defined struct
hls::ip_dds::params_t
. - Call the DDS function.
First, include the DDS library in the source code. This header file resides in the include directory in the Vitis HLS installation area, which is automatically searched when Vitis HLS executes.
#include "hls_dds.h"
Define the static parameters of the DDS. For example, define the
phase width, clock rate, and phase and increment offsets. The DDS C library includes
a parameterization struct hls::ip_dds::params_t
,
which is used to initialize all static parameters with default values. By redefining
any of the values in this struct, you can customize the implementation.
The following example shows how to override the default values for
the phase width, clock rate, phase offset, and the number of channels using a
user-defined struct param1
, which is based on the
existing predefined struct hls::ip_dds::params_t
:
struct param1 : hls::ip_dds::params_t {
static const unsigned Phase_Width = PHASEWIDTH;
static const double DDS_Clock_Rate = 25.0;
static const double PINC[16];
static const double POFF[16];
};
Create an instance of the DDS function using the HLS namespace with
the defined static parameters (for example, param1
). Then, call the function with the run method to execute the
function. Following are the data and phase function arguments shown in order:
static hls::DDS<config1> dds1;
dds1.run(data_channel, phase_channel);