Visible to Intel only — GUID: ewa1466524088069
Ixiasoft
Visible to Intel only — GUID: ewa1466524088069
Ixiasoft
4.5.1. Control and Status Register (CSR) Agent
Any parameters that are labeled as hls_avalon_agent_register_argument are located in this memory space. The resulting memory map is described in the automatically generated header file <results>.prj/components/<component_name>_csr.h. This file also provides the C macros for a host component to interact with the agent component. Examples of host components include Nios® II soft processors and Intel® Acceleration Stack host applications.
The control and status registers (that is, function call and return) of a component with the hls_avalon_agent_component attribute are implemented in the CSR agent interface.
You do not need to use the hls_avalon_agent_component attribute to use the hls_avalon_agent_register_argument attribute.
To learn more, review the tutorial: <quartus_installdir>/hls/examples/tutorials/interfaces/mm_agents
Example code of a component with a CSR agent:
#include "HLS/hls.h"
struct MyStruct {
int f;
double j;
short k;
};
hls_avalon_agent_component
component MyStruct mycomp_xyz (hls_avalon_agent_register_argument int y,
hls_avalon_agent_register_argument MyStruct struct_argument,
hls_avalon_agent_register_argument unsigned long long mylong,
hls_avalon_agent_register_argument char char_arg
) {
return struct_argument;
}
Generated C header file for the component mycomp_xyz:
/* This header file describes the CSR Agent for the mycomp_xyz component */ #ifndef __MYCOMP_XYZ_CSR_REGS_H__ #define __MYCOMP_XYZ_CSR_REGS_H__ /******************************************************************************/ /* Memory Map Summary */ /******************************************************************************/ /* Register | Access | Register Contents | Description Address | | (64-bits) | ------------|---------|--------------------------|----------------------------- 0x0 | R | {reserved[62:0], | Read the busy status of | | busy[0:0]} | the component | | | 0 - the component is ready | | | to accept a new start | | | 1 - the component cannot | | | accept a new start ------------|---------|--------------------------|----------------------------- 0x8 | W | {reserved[62:0], | Write 1 to signal start to | | start[0:0]} | the component ------------|---------|--------------------------|----------------------------- 0x10 | R/W | {reserved[62:0], | 0 - Disable interrupt, | | interrupt_enable[0:0]} | 1 - Enable interrupt ------------|---------|--------------------------|----------------------------- 0x18 | R/Wclr | {reserved[61:0], | Signals component completion | | done[0:0], | done is read-only and | | interrupt_status[0:0]} | interrupt_status is write 1 | | | to clear ------------|---------|--------------------------|----------------------------- 0x20 | R | {returndata[63:0]} | Return data (0 of 3) ------------|---------|--------------------------|----------------------------- 0x28 | R | {returndata[127:64]} | Return data (1 of 3) ------------|---------|--------------------------|----------------------------- 0x30 | R | {returndata[191:128]} | Return data (2 of 3) ------------|---------|--------------------------|----------------------------- 0x38 | R/W | {reserved[31:0], | Argument y | | y[31:0]} | ------------|---------|--------------------------|----------------------------- 0x40 | R/W | {struct_argument[63:0]} | Argument struct_argument (0 of 3) ------------|---------|--------------------------|----------------------------- 0x48 | R/W | {struct_argument[127:64]} | Argument struct_argument (1 of 3) ------------|---------|--------------------------|----------------------------- 0x50 | R/W | {struct_argument[191:128]} | Argument struct_argument (2 of 3) ------------|---------|--------------------------|----------------------------- 0x58 | R/W | {mylong[63:0]} | Argument mylong ------------|---------|--------------------------|----------------------------- 0x60 | R/W | {reserved[55:0], | Argument char_arg | | char_arg[7:0]} | NOTE: Writes to reserved bits will be ignored and reads from reserved bits will return undefined values. */ /******************************************************************************/ /* Register Address Macros */ /******************************************************************************/ /* Byte Addresses */ #define MYCOMP_XYZ_CSR_BUSY_REG (0x0) #define MYCOMP_XYZ_CSR_START_REG (0x8) #define MYCOMP_XYZ_CSR_INTERRUPT_ENABLE_REG (0x10) #define MYCOMP_XYZ_CSR_INTERRUPT_STATUS_REG (0x18) #define MYCOMP_XYZ_CSR_RETURNDATA_0_REG (0x20) #define MYCOMP_XYZ_CSR_RETURNDATA_1_REG (0x28) #define MYCOMP_XYZ_CSR_RETURNDATA_2_REG (0x30) #define MYCOMP_XYZ_CSR_ARG_Y_REG (0x38) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_0_REG (0x40) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_1_REG (0x48) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_2_REG (0x50) #define MYCOMP_XYZ_CSR_ARG_MYLONG_REG (0x58) #define MYCOMP_XYZ_CSR_ARG_CHAR_ARG_REG (0x60) /* Argument Sizes (bytes) */ #define MYCOMP_XYZ_CSR_RETURNDATA_0_SIZE (8) #define MYCOMP_XYZ_CSR_RETURNDATA_1_SIZE (8) #define MYCOMP_XYZ_CSR_RETURNDATA_2_SIZE (8) #define MYCOMP_XYZ_CSR_ARG_Y_SIZE (4) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_0_SIZE (8) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_1_SIZE (8) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_2_SIZE (8) #define MYCOMP_XYZ_CSR_ARG_MYLONG_SIZE (8) #define MYCOMP_XYZ_CSR_ARG_CHAR_ARG_SIZE (1) /* Argument Masks */ #define MYCOMP_XYZ_CSR_RETURNDATA_0_MASK (0xffffffffffffffffULL) #define MYCOMP_XYZ_CSR_RETURNDATA_1_MASK (0xffffffffffffffffULL) #define MYCOMP_XYZ_CSR_RETURNDATA_2_MASK (0xffffffffffffffffULL) #define MYCOMP_XYZ_CSR_ARG_Y_MASK (0xffffffff) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_0_MASK (0xffffffffffffffffULL) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_1_MASK (0xffffffffffffffffULL) #define MYCOMP_XYZ_CSR_ARG_STRUCT_ARGUMENT_2_MASK (0xffffffffffffffffULL) #define MYCOMP_XYZ_CSR_ARG_MYLONG_MASK (0xffffffffffffffffULL) #define MYCOMP_XYZ_CSR_ARG_CHAR_ARG_MASK (0xff) /* Status/Control Masks */ #define MYCOMP_XYZ_CSR_BUSY_MASK (1<<0) #define MYCOMP_XYZ_CSR_BUSY_OFFSET (0) #define MYCOMP_XYZ_CSR_START_MASK (1<<0) #define MYCOMP_XYZ_CSR_START_OFFSET (0) #define MYCOMP_XYZ_CSR_INTERRUPT_ENABLE_MASK (1<<0) #define MYCOMP_XYZ_CSR_INTERRUPT_ENABLE_OFFSET (0) #define MYCOMP_XYZ_CSR_INTERRUPT_STATUS_MASK (1<<0) #define MYCOMP_XYZ_CSR_INTERRUPT_STATUS_OFFSET (0) #define MYCOMP_XYZ_CSR_DONE_MASK (1<<1) #define MYCOMP_XYZ_CSR_DONE_OFFSET (1) #endif /* __MYCOMP_XYZ_CSR_REGS_H__ */