Core hardware resources

The user must declare and initialise relevant hardware resources (globally) and pass them to the relevant function of lib_xua.

As an absolute minimum the following resources are required:

  • A 1-bit port for audio master clock input

  • A clock-block, which will be clocked from the master clock input port

When using the default asynchronous mode of operation an additional port is required:

  • A n-bit port for internal feedback calculation (typically a free, unused port is used e.g. XS1_PORT_16B)

Example declaration of these resources might look as follows:

in port p_mclk_in        = PORT_MCLK_IN;
in port p_for_mclk_count = PORT_MCLK_COUNT;   /* Extra port for counting master clock ticks */
clock clk_audio_mclk     = on tile[0]: XS1_CLKBLK_5;   /* Master clock */

Note

The PORT_MCLK_IN and PORT_MCLK_COUNT definitions are derived from the projects XN file

The XUA_AudioHub() function typically requires an audio master clock input to clock the physical audio I/O such as S/PDIF transmit and I²S [1] . Less obvious is the reasoning for the XUA_Buffer() task having the same requirement when running in asynchronous mode - it is used for the USB feedback system and packet sizing.

Due to the above, if the XUD_AudioHub() and XUA_Buffer() cores must reside on separate tiles a separate master clock input port must be provided to each, for example:

/* Master clock for the audio IO tile */
in port p_mclk_in                   = PORT_MCLK_IN;

/* Resources for USB feedback */
in port p_mclk_in_usb               = PORT_MCLK_IN_USB;  /* Extra master clock input for the USB tile */

Whilst the hardware resources described in this section satisfy the basic requirements for the operation (or build) of lib_xua, projects typically also need some additional audio I/O, I²S or S/PDIF for example.

These should be passed into the various task functions as required - see API reference.