1
0
Fork 0
mirror of https://git.rwth-aachen.de/acs/public/villas/node/ synced 2025-03-09 00:00:00 +01:00

added driver for HLS DFT implementation

This commit is contained in:
Steffen Vogel 2016-07-08 15:25:03 +02:00
parent a2824d1cf6
commit f9fc56aef9
10 changed files with 642 additions and 2 deletions

2
.gitignore vendored
View file

@ -8,5 +8,3 @@
/test
/signal
/fpga
thirdparty/

View file

@ -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

View file

@ -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

View file

@ -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

View file

@ -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"
}

View file

@ -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}

View file

@ -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);
}

View file

@ -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

View file

@ -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

View file

@ -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