From f9fc56aef97d07a7ee209d1fd870c98fb75bb544 Mon Sep 17 00:00:00 2001 From: Steffen Vogel Date: Fri, 8 Jul 2016 15:25:03 +0200 Subject: [PATCH] added driver for HLS DFT implementation --- .gitignore | 2 - thirdparty/xilinx/include/xilinx/xhls_dft.h | 77 ++++++ .../xilinx/include/xilinx/xhls_dft_hw.h | 52 ++++ .../xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd | 19 ++ .../xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl | 24 ++ .../xilinx/orig/hls_dft_v1_0/src/Makefile | 35 +++ .../xilinx/orig/hls_dft_v1_0/src/xhls_dft.c | 260 ++++++++++++++++++ .../xilinx/orig/hls_dft_v1_0/src/xhls_dft.h | 77 ++++++ .../orig/hls_dft_v1_0/src/xhls_dft_hw.h | 52 ++++ .../orig/hls_dft_v1_0/src/xhls_dft_sinit.c | 46 ++++ 10 files changed, 642 insertions(+), 2 deletions(-) create mode 100644 thirdparty/xilinx/include/xilinx/xhls_dft.h create mode 100644 thirdparty/xilinx/include/xilinx/xhls_dft_hw.h create mode 100644 thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd create mode 100644 thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl create mode 100644 thirdparty/xilinx/orig/hls_dft_v1_0/src/Makefile create mode 100644 thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.c create mode 100644 thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.h create mode 100644 thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_hw.h create mode 100644 thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_sinit.c diff --git a/.gitignore b/.gitignore index d171861e8..4da12b0f2 100644 --- a/.gitignore +++ b/.gitignore @@ -8,5 +8,3 @@ /test /signal /fpga - -thirdparty/ diff --git a/thirdparty/xilinx/include/xilinx/xhls_dft.h b/thirdparty/xilinx/include/xilinx/xhls_dft.h new file mode 100644 index 000000000..42f6ae241 --- /dev/null +++ b/thirdparty/xilinx/include/xilinx/xhls_dft.h @@ -0,0 +1,77 @@ +// ============================================================== +// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +// Version: 2016.1 +// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +// +// ============================================================== + +#ifndef XHLS_DFT_H +#define XHLS_DFT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************** Include Files *********************************/ +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" +#include "xil_io.h" +#include "xhls_dft_hw.h" + +/**************************** Type Definitions ******************************/ +typedef struct { + u16 DeviceId; + u32 Ctrl_BaseAddress; +} XHls_dft_Config; + +typedef struct { + u32 Ctrl_BaseAddress; + u32 IsReady; +} XHls_dft; + +/***************** Macros (Inline Functions) Definitions *********************/ +#define XHls_dft_WriteReg(BaseAddress, RegOffset, Data) \ + Xil_Out32((BaseAddress) + (RegOffset), (u32)(Data)) +#define XHls_dft_ReadReg(BaseAddress, RegOffset) \ + Xil_In32((BaseAddress) + (RegOffset)) + +/************************** Function Prototypes *****************************/ +int XHls_dft_Initialize(XHls_dft *InstancePtr, u16 DeviceId); +XHls_dft_Config* XHls_dft_LookupConfig(u16 DeviceId); +int XHls_dft_CfgInitialize(XHls_dft *InstancePtr, XHls_dft_Config *ConfigPtr); + +void XHls_dft_Start(XHls_dft *InstancePtr); +u32 XHls_dft_IsDone(XHls_dft *InstancePtr); +u32 XHls_dft_IsIdle(XHls_dft *InstancePtr); +u32 XHls_dft_IsReady(XHls_dft *InstancePtr); +void XHls_dft_EnableAutoRestart(XHls_dft *InstancePtr); +void XHls_dft_DisableAutoRestart(XHls_dft *InstancePtr); + +void XHls_dft_Set_num_harmonics_V(XHls_dft *InstancePtr, u32 Data); +u32 XHls_dft_Get_num_harmonics_V(XHls_dft *InstancePtr); +void XHls_dft_Set_decimation_V(XHls_dft *InstancePtr, u32 Data); +u32 XHls_dft_Get_decimation_V(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_BaseAddress(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_HighAddress(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_TotalBytes(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_BitWidth(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_Depth(XHls_dft *InstancePtr); +u32 XHls_dft_Write_fharmonics_Words(XHls_dft *InstancePtr, int offset, int *data, int length); +u32 XHls_dft_Read_fharmonics_Words(XHls_dft *InstancePtr, int offset, int *data, int length); +u32 XHls_dft_Write_fharmonics_Bytes(XHls_dft *InstancePtr, int offset, char *data, int length); +u32 XHls_dft_Read_fharmonics_Bytes(XHls_dft *InstancePtr, int offset, char *data, int length); + +void XHls_dft_InterruptGlobalEnable(XHls_dft *InstancePtr); +void XHls_dft_InterruptGlobalDisable(XHls_dft *InstancePtr); +void XHls_dft_InterruptEnable(XHls_dft *InstancePtr, u32 Mask); +void XHls_dft_InterruptDisable(XHls_dft *InstancePtr, u32 Mask); +void XHls_dft_InterruptClear(XHls_dft *InstancePtr, u32 Mask); +u32 XHls_dft_InterruptGetEnabled(XHls_dft *InstancePtr); +u32 XHls_dft_InterruptGetStatus(XHls_dft *InstancePtr); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/xilinx/include/xilinx/xhls_dft_hw.h b/thirdparty/xilinx/include/xilinx/xhls_dft_hw.h new file mode 100644 index 000000000..ff3cedc18 --- /dev/null +++ b/thirdparty/xilinx/include/xilinx/xhls_dft_hw.h @@ -0,0 +1,52 @@ +// ============================================================== +// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +// Version: 2016.1 +// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +// +// ============================================================== + +// ctrl +// 0x00 : Control signals +// bit 0 - ap_start (Read/Write/COH) +// bit 1 - ap_done (Read/COR) +// bit 2 - ap_idle (Read) +// bit 3 - ap_ready (Read) +// bit 7 - auto_restart (Read/Write) +// others - reserved +// 0x04 : Global Interrupt Enable Register +// bit 0 - Global Interrupt Enable (Read/Write) +// others - reserved +// 0x08 : IP Interrupt Enable Register (Read/Write) +// bit 0 - Channel 0 (ap_done) +// bit 1 - Channel 1 (ap_ready) +// others - reserved +// 0x0c : IP Interrupt Status Register (Read/TOW) +// bit 0 - Channel 0 (ap_done) +// bit 1 - Channel 1 (ap_ready) +// others - reserved +// 0x80 : Data signal of num_harmonics_V +// bit 7~0 - num_harmonics_V[7:0] (Read/Write) +// others - reserved +// 0x84 : reserved +// 0x88 : Data signal of decimation_V +// bit 7~0 - decimation_V[7:0] (Read/Write) +// others - reserved +// 0x8c : reserved +// 0x40 ~ +// 0x7f : Memory 'fharmonics' (16 * 32b) +// Word n : bit [31:0] - fharmonics[n] +// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake) + +#define XHLS_DFT_CTRL_ADDR_AP_CTRL 0x00 +#define XHLS_DFT_CTRL_ADDR_GIE 0x04 +#define XHLS_DFT_CTRL_ADDR_IER 0x08 +#define XHLS_DFT_CTRL_ADDR_ISR 0x0c +#define XHLS_DFT_CTRL_ADDR_NUM_HARMONICS_V_DATA 0x80 +#define XHLS_DFT_CTRL_BITS_NUM_HARMONICS_V_DATA 8 +#define XHLS_DFT_CTRL_ADDR_DECIMATION_V_DATA 0x88 +#define XHLS_DFT_CTRL_BITS_DECIMATION_V_DATA 8 +#define XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE 0x40 +#define XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH 0x7f +#define XHLS_DFT_CTRL_WIDTH_FHARMONICS 32 +#define XHLS_DFT_CTRL_DEPTH_FHARMONICS 16 + diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd b/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd new file mode 100644 index 000000000..d4eb5af41 --- /dev/null +++ b/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.mdd @@ -0,0 +1,19 @@ +# ============================================================== +# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +# Version: 2016.1 +# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +# +# ============================================================== + +OPTION psf_version = 2.1; + +BEGIN driver hls_dft + + OPTION supported_peripherals = (hls_dft_v1_0 ); + OPTION driver_state = ACTIVE; + OPTION copyfiles = all; + OPTION name = hls_dft; + OPTION version = 1.0; + +END driver + diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl b/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl new file mode 100644 index 000000000..37f287491 --- /dev/null +++ b/thirdparty/xilinx/orig/hls_dft_v1_0/data/hls_dft.tcl @@ -0,0 +1,24 @@ +# ============================================================== +# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +# Version: 2016.1 +# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +# +# ============================================================== + +proc generate {drv_handle} { + xdefine_include_file $drv_handle "xparameters.h" "XHls_dft" \ + "NUM_INSTANCES" \ + "DEVICE_ID" \ + "C_S_AXI_CTRL_BASEADDR" \ + "C_S_AXI_CTRL_HIGHADDR" + + xdefine_config_file $drv_handle "xhls_dft_g.c" "XHls_dft" \ + "DEVICE_ID" \ + "C_S_AXI_CTRL_BASEADDR" + + xdefine_canonical_xpars $drv_handle "xparameters.h" "XHls_dft" \ + "DEVICE_ID" \ + "C_S_AXI_CTRL_BASEADDR" \ + "C_S_AXI_CTRL_HIGHADDR" +} + diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/Makefile b/thirdparty/xilinx/orig/hls_dft_v1_0/src/Makefile new file mode 100644 index 000000000..ebbaf9c59 --- /dev/null +++ b/thirdparty/xilinx/orig/hls_dft_v1_0/src/Makefile @@ -0,0 +1,35 @@ +# ============================================================== +# File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +# Version: 2016.1 +# Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +# +# ============================================================== + +COMPILER= +ARCHIVER= +CP=cp +COMPILER_FLAGS= +EXTRA_COMPILER_FLAGS= +LIB=libxil.a + +RELEASEDIR=../../../lib +INCLUDEDIR=../../../include +INCLUDES=-I./. -I${INCLUDEDIR} + +INCLUDEFILES=*.h +LIBSOURCES=*.c +OUTS = *.o + + +libs: + echo "Compiling hls_dft" + $(COMPILER) $(COMPILER_FLAGS) $(EXTRA_COMPILER_FLAGS) $(INCLUDES) $(LIBSOURCES) + $(ARCHIVER) -r ${RELEASEDIR}/${LIB} $(OUTS) + make clean + +include: + ${CP} $(INCLUDEFILES) $(INCLUDEDIR) + +clean: + rm -rf ${OUTS} + diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.c b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.c new file mode 100644 index 000000000..093ba6f82 --- /dev/null +++ b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.c @@ -0,0 +1,260 @@ +// ============================================================== +// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +// Version: 2016.1 +// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +// +// ============================================================== + +/***************************** Include Files *********************************/ +#include "xhls_dft.h" + +/************************** Function Implementation *************************/ +int XHls_dft_CfgInitialize(XHls_dft *InstancePtr, XHls_dft_Config *ConfigPtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(ConfigPtr != NULL); + + InstancePtr->Ctrl_BaseAddress = ConfigPtr->Ctrl_BaseAddress; + InstancePtr->IsReady = XIL_COMPONENT_IS_READY; + + return XST_SUCCESS; +} + +void XHls_dft_Start(XHls_dft *InstancePtr) { + u32 Data; + + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Data = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_AP_CTRL) & 0x80; + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_AP_CTRL, Data | 0x01); +} + +u32 XHls_dft_IsDone(XHls_dft *InstancePtr) { + u32 Data; + + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Data = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_AP_CTRL); + return (Data >> 1) & 0x1; +} + +u32 XHls_dft_IsIdle(XHls_dft *InstancePtr) { + u32 Data; + + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Data = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_AP_CTRL); + return (Data >> 2) & 0x1; +} + +u32 XHls_dft_IsReady(XHls_dft *InstancePtr) { + u32 Data; + + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Data = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_AP_CTRL); + // check ap_start to see if the pcore is ready for next input + return !(Data & 0x1); +} + +void XHls_dft_EnableAutoRestart(XHls_dft *InstancePtr) { + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_AP_CTRL, 0x80); +} + +void XHls_dft_DisableAutoRestart(XHls_dft *InstancePtr) { + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_AP_CTRL, 0); +} + +void XHls_dft_Set_num_harmonics_V(XHls_dft *InstancePtr, u32 Data) { + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_NUM_HARMONICS_V_DATA, Data); +} + +u32 XHls_dft_Get_num_harmonics_V(XHls_dft *InstancePtr) { + u32 Data; + + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Data = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_NUM_HARMONICS_V_DATA); + return Data; +} + +void XHls_dft_Set_decimation_V(XHls_dft *InstancePtr, u32 Data) { + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_DECIMATION_V_DATA, Data); +} + +u32 XHls_dft_Get_decimation_V(XHls_dft *InstancePtr) { + u32 Data; + + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Data = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_DECIMATION_V_DATA); + return Data; +} + +u32 XHls_dft_Get_fharmonics_BaseAddress(XHls_dft *InstancePtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + return (InstancePtr->Ctrl_BaseAddress + XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE); +} + +u32 XHls_dft_Get_fharmonics_HighAddress(XHls_dft *InstancePtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + return (InstancePtr->Ctrl_BaseAddress + XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH); +} + +u32 XHls_dft_Get_fharmonics_TotalBytes(XHls_dft *InstancePtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + return (XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH - XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + 1); +} + +u32 XHls_dft_Get_fharmonics_BitWidth(XHls_dft *InstancePtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + return XHLS_DFT_CTRL_WIDTH_FHARMONICS; +} + +u32 XHls_dft_Get_fharmonics_Depth(XHls_dft *InstancePtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + return XHLS_DFT_CTRL_DEPTH_FHARMONICS; +} + +u32 XHls_dft_Write_fharmonics_Words(XHls_dft *InstancePtr, int offset, int *data, int length) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr -> IsReady == XIL_COMPONENT_IS_READY); + + int i; + + if ((offset + length)*4 > (XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH - XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + 1)) + return 0; + + for (i = 0; i < length; i++) { + *(int *)(InstancePtr->Ctrl_BaseAddress + XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + (offset + i)*4) = *(data + i); + } + return length; +} + +u32 XHls_dft_Read_fharmonics_Words(XHls_dft *InstancePtr, int offset, int *data, int length) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr -> IsReady == XIL_COMPONENT_IS_READY); + + int i; + + if ((offset + length)*4 > (XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH - XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + 1)) + return 0; + + for (i = 0; i < length; i++) { + *(data + i) = *(int *)(InstancePtr->Ctrl_BaseAddress + XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + (offset + i)*4); + } + return length; +} + +u32 XHls_dft_Write_fharmonics_Bytes(XHls_dft *InstancePtr, int offset, char *data, int length) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr -> IsReady == XIL_COMPONENT_IS_READY); + + int i; + + if ((offset + length) > (XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH - XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + 1)) + return 0; + + for (i = 0; i < length; i++) { + *(char *)(InstancePtr->Ctrl_BaseAddress + XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + offset + i) = *(data + i); + } + return length; +} + +u32 XHls_dft_Read_fharmonics_Bytes(XHls_dft *InstancePtr, int offset, char *data, int length) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr -> IsReady == XIL_COMPONENT_IS_READY); + + int i; + + if ((offset + length) > (XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH - XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + 1)) + return 0; + + for (i = 0; i < length; i++) { + *(data + i) = *(char *)(InstancePtr->Ctrl_BaseAddress + XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE + offset + i); + } + return length; +} + +void XHls_dft_InterruptGlobalEnable(XHls_dft *InstancePtr) { + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_GIE, 1); +} + +void XHls_dft_InterruptGlobalDisable(XHls_dft *InstancePtr) { + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_GIE, 0); +} + +void XHls_dft_InterruptEnable(XHls_dft *InstancePtr, u32 Mask) { + u32 Register; + + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Register = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_IER); + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_IER, Register | Mask); +} + +void XHls_dft_InterruptDisable(XHls_dft *InstancePtr, u32 Mask) { + u32 Register; + + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + Register = XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_IER); + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_IER, Register & (~Mask)); +} + +void XHls_dft_InterruptClear(XHls_dft *InstancePtr, u32 Mask) { + Xil_AssertVoid(InstancePtr != NULL); + Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + XHls_dft_WriteReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_ISR, Mask); +} + +u32 XHls_dft_InterruptGetEnabled(XHls_dft *InstancePtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + return XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_IER); +} + +u32 XHls_dft_InterruptGetStatus(XHls_dft *InstancePtr) { + Xil_AssertNonvoid(InstancePtr != NULL); + Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY); + + return XHls_dft_ReadReg(InstancePtr->Ctrl_BaseAddress, XHLS_DFT_CTRL_ADDR_ISR); +} + diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.h b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.h new file mode 100644 index 000000000..42f6ae241 --- /dev/null +++ b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft.h @@ -0,0 +1,77 @@ +// ============================================================== +// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +// Version: 2016.1 +// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +// +// ============================================================== + +#ifndef XHLS_DFT_H +#define XHLS_DFT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/***************************** Include Files *********************************/ +#include "xil_types.h" +#include "xil_assert.h" +#include "xstatus.h" +#include "xil_io.h" +#include "xhls_dft_hw.h" + +/**************************** Type Definitions ******************************/ +typedef struct { + u16 DeviceId; + u32 Ctrl_BaseAddress; +} XHls_dft_Config; + +typedef struct { + u32 Ctrl_BaseAddress; + u32 IsReady; +} XHls_dft; + +/***************** Macros (Inline Functions) Definitions *********************/ +#define XHls_dft_WriteReg(BaseAddress, RegOffset, Data) \ + Xil_Out32((BaseAddress) + (RegOffset), (u32)(Data)) +#define XHls_dft_ReadReg(BaseAddress, RegOffset) \ + Xil_In32((BaseAddress) + (RegOffset)) + +/************************** Function Prototypes *****************************/ +int XHls_dft_Initialize(XHls_dft *InstancePtr, u16 DeviceId); +XHls_dft_Config* XHls_dft_LookupConfig(u16 DeviceId); +int XHls_dft_CfgInitialize(XHls_dft *InstancePtr, XHls_dft_Config *ConfigPtr); + +void XHls_dft_Start(XHls_dft *InstancePtr); +u32 XHls_dft_IsDone(XHls_dft *InstancePtr); +u32 XHls_dft_IsIdle(XHls_dft *InstancePtr); +u32 XHls_dft_IsReady(XHls_dft *InstancePtr); +void XHls_dft_EnableAutoRestart(XHls_dft *InstancePtr); +void XHls_dft_DisableAutoRestart(XHls_dft *InstancePtr); + +void XHls_dft_Set_num_harmonics_V(XHls_dft *InstancePtr, u32 Data); +u32 XHls_dft_Get_num_harmonics_V(XHls_dft *InstancePtr); +void XHls_dft_Set_decimation_V(XHls_dft *InstancePtr, u32 Data); +u32 XHls_dft_Get_decimation_V(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_BaseAddress(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_HighAddress(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_TotalBytes(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_BitWidth(XHls_dft *InstancePtr); +u32 XHls_dft_Get_fharmonics_Depth(XHls_dft *InstancePtr); +u32 XHls_dft_Write_fharmonics_Words(XHls_dft *InstancePtr, int offset, int *data, int length); +u32 XHls_dft_Read_fharmonics_Words(XHls_dft *InstancePtr, int offset, int *data, int length); +u32 XHls_dft_Write_fharmonics_Bytes(XHls_dft *InstancePtr, int offset, char *data, int length); +u32 XHls_dft_Read_fharmonics_Bytes(XHls_dft *InstancePtr, int offset, char *data, int length); + +void XHls_dft_InterruptGlobalEnable(XHls_dft *InstancePtr); +void XHls_dft_InterruptGlobalDisable(XHls_dft *InstancePtr); +void XHls_dft_InterruptEnable(XHls_dft *InstancePtr, u32 Mask); +void XHls_dft_InterruptDisable(XHls_dft *InstancePtr, u32 Mask); +void XHls_dft_InterruptClear(XHls_dft *InstancePtr, u32 Mask); +u32 XHls_dft_InterruptGetEnabled(XHls_dft *InstancePtr); +u32 XHls_dft_InterruptGetStatus(XHls_dft *InstancePtr); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_hw.h b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_hw.h new file mode 100644 index 000000000..4c92389d5 --- /dev/null +++ b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_hw.h @@ -0,0 +1,52 @@ +// ============================================================== +// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +// Version: 2016.1 +// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +// +// ============================================================== + +// ctrl +// 0x00 : Control signals +// bit 0 - ap_start (Read/Write/COH) +// bit 1 - ap_done (Read/COR) +// bit 2 - ap_idle (Read) +// bit 3 - ap_ready (Read) +// bit 7 - auto_restart (Read/Write) +// others - reserved +// 0x04 : Global Interrupt Enable Register +// bit 0 - Global Interrupt Enable (Read/Write) +// others - reserved +// 0x08 : IP Interrupt Enable Register (Read/Write) +// bit 0 - Channel 0 (ap_done) +// bit 1 - Channel 1 (ap_ready) +// others - reserved +// 0x0c : IP Interrupt Status Register (Read/TOW) +// bit 0 - Channel 0 (ap_done) +// bit 1 - Channel 1 (ap_ready) +// others - reserved +// 0x80 : Data signal of num_harmonics_V +// bit 7~0 - num_harmonics_V[7:0] (Read/Write) +// others - reserved +// 0x84 : reserved +// 0x88 : Data signal of decimation_V +// bit 7~0 - decimation_V[7:0] (Read/Write) +// others - reserved +// 0x8c : reserved +// 0x40 ~ +// 0x7f : Memory 'fharmonics' (16 * 32b) +// Word n : bit [31:0] - fharmonics[n] +// (SC = Self Clear, COR = Clear on Read, TOW = Toggle on Write, COH = Clear on Handshake) + +#define XHLS_DFT_CTRL_ADDR_AP_CTRL 0x00 +#define XHLS_DFT_CTRL_ADDR_GIE 0x04 +#define XHLS_DFT_CTRL_ADDR_IER 0x08 +#define XHLS_DFT_CTRL_ADDR_ISR 0x0c +#define XHLS_DFT_CTRL_ADDR_NUM_HARMONICS_V_DATA 0x80 +#define XHLS_DFT_CTRL_BITS_NUM_HARMONICS_V_DATA 8 +#define XHLS_DFT_CTRL_ADDR_DECIMATION_V_DATA 0x88 +#define XHLS_DFT_CTRL_BITS_DECIMATION_V_DATA 8 +#define XHLS_DFT_CTRL_ADDR_FHARMONICS_BASE 0x40 +#define XHLS_DFT_CTRL_ADDR_FHARMONICS_HIGH 0x7f +#define XHLS_DFT_CTRL_WIDTH_FHARMONICS 32 +#define XHLS_DFT_CTRL_DEPTH_FHARMONICS 16 + diff --git a/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_sinit.c b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_sinit.c new file mode 100644 index 000000000..e657d35f9 --- /dev/null +++ b/thirdparty/xilinx/orig/hls_dft_v1_0/src/xhls_dft_sinit.c @@ -0,0 +1,46 @@ +// ============================================================== +// File generated by Vivado(TM) HLS - High-Level Synthesis from C, C++ and SystemC +// Version: 2016.1 +// Copyright (C) 1986-2016 Xilinx, Inc. All Rights Reserved. +// +// ============================================================== + +#ifndef __linux__ + +#include "xstatus.h" +#include "xparameters.h" +#include "xhls_dft.h" + +extern XHls_dft_Config XHls_dft_ConfigTable[]; + +XHls_dft_Config *XHls_dft_LookupConfig(u16 DeviceId) { + XHls_dft_Config *ConfigPtr = NULL; + + int Index; + + for (Index = 0; Index < XPAR_XHLS_DFT_NUM_INSTANCES; Index++) { + if (XHls_dft_ConfigTable[Index].DeviceId == DeviceId) { + ConfigPtr = &XHls_dft_ConfigTable[Index]; + break; + } + } + + return ConfigPtr; +} + +int XHls_dft_Initialize(XHls_dft *InstancePtr, u16 DeviceId) { + XHls_dft_Config *ConfigPtr; + + Xil_AssertNonvoid(InstancePtr != NULL); + + ConfigPtr = XHls_dft_LookupConfig(DeviceId); + if (ConfigPtr == NULL) { + InstancePtr->IsReady = 0; + return (XST_DEVICE_NOT_FOUND); + } + + return XHls_dft_CfgInitialize(InstancePtr, ConfigPtr); +} + +#endif +