// ==============================================================
// Vitis HLS - High-Level Synthesis from C, C++ and OpenCL v2023.1 (64-bit)
// Tool Version Limit: 2023.05
// Copyright 1986-2022 Xilinx, Inc. All Rights Reserved.
// Copyright 2022-2023 Advanced Micro Devices, Inc. All Rights Reserved.
//
// ==============================================================
/***************************** Include Files *********************************/
#include "xcanny_accel.h"
/************************** Function Implementation *************************/
#ifndef __linux__
int XCanny_accel_CfgInitialize(XCanny_accel *InstancePtr, XCanny_accel_Config *ConfigPtr) {
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(ConfigPtr != NULL);
InstancePtr->Control_BaseAddress = ConfigPtr->Control_BaseAddress;
InstancePtr->IsReady = XIL_COMPONENT_IS_READY;
return XST_SUCCESS;
}
#endif
void XCanny_accel_Start(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_AP_CTRL) & 0x80;
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_AP_CTRL, Data | 0x01);
}
u32 XCanny_accel_IsDone(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_AP_CTRL);
return (Data >> 1) & 0x1;
}
u32 XCanny_accel_IsIdle(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_AP_CTRL);
return (Data >> 2) & 0x1;
}
u32 XCanny_accel_IsReady(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_AP_CTRL);
// check ap_start to see if the pcore is ready for next input
return !(Data & 0x1);
}
void XCanny_accel_EnableAutoRestart(XCanny_accel *InstancePtr) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_AP_CTRL, 0x80);
}
void XCanny_accel_DisableAutoRestart(XCanny_accel *InstancePtr) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_AP_CTRL, 0);
}
void XCanny_accel_Set_img_inp(XCanny_accel *InstancePtr, u64 Data) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_INP_DATA, (u32)(Data));
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_INP_DATA + 4, (u32)(Data >> 32));
}
u64 XCanny_accel_Get_img_inp(XCanny_accel *InstancePtr) {
u64 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_INP_DATA);
Data += (u64)XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_INP_DATA + 4) << 32;
return Data;
}
void XCanny_accel_Set_img_out(XCanny_accel *InstancePtr, u64 Data) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_OUT_DATA, (u32)(Data));
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_OUT_DATA + 4, (u32)(Data >> 32));
}
u64 XCanny_accel_Get_img_out(XCanny_accel *InstancePtr) {
u64 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_OUT_DATA);
Data += (u64)XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_IMG_OUT_DATA + 4) << 32;
return Data;
}
void XCanny_accel_Set_rows(XCanny_accel *InstancePtr, u32 Data) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_ROWS_DATA, Data);
}
u32 XCanny_accel_Get_rows(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_ROWS_DATA);
return Data;
}
void XCanny_accel_Set_cols(XCanny_accel *InstancePtr, u32 Data) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_COLS_DATA, Data);
}
u32 XCanny_accel_Get_cols(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_COLS_DATA);
return Data;
}
void XCanny_accel_Set_low_threshold(XCanny_accel *InstancePtr, u32 Data) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_LOW_THRESHOLD_DATA, Data);
}
u32 XCanny_accel_Get_low_threshold(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_LOW_THRESHOLD_DATA);
return Data;
}
void XCanny_accel_Set_high_threshold(XCanny_accel *InstancePtr, u32 Data) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_HIGH_THRESHOLD_DATA, Data);
}
u32 XCanny_accel_Get_high_threshold(XCanny_accel *InstancePtr) {
u32 Data;
Xil_AssertNonvoid(InstancePtr != NULL);
Xil_AssertNonvoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
Data = XCanny_accel_ReadReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_HIGH_THRESHOLD_DATA);
return Data;
}
void XCanny_accel_InterruptGlobalEnable(XCanny_accel *InstancePtr) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_GIE, 1);
}
void XCanny_accel_InterruptGlobalDisable(XCanny_accel *InstancePtr) {
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONENT_IS_READY);
XCanny_accel_WriteReg(InstancePtr->Control_BaseAddress, XCANNY_ACCEL_CONTROL_ADDR_GIE, 0);
}
void XCanny_accel_InterruptEnable(XCanny_accel *InstancePtr, u32 Mask) {
u32 Register;
Xil_AssertVoid(InstancePtr != NULL);
Xil_AssertVoid(InstancePtr->IsReady == XIL_COMPONEN
没有合适的资源?快使用搜索试试~ 我知道了~
vitis-HLS canny算法实现图像边缘检测
共2000个文件
xml:406个
vhd:330个
v:261个
需积分: 5 4 下载量 194 浏览量
2023-12-23
16:03:41
上传
评论
收藏 29.41MB ZIP 举报
温馨提示
canny边缘检测主要用于提取图像的边缘,是最常用且有效的边缘检测算法。在AMD赛灵思提供的库函数中,使用xf::cv::Canny和xf::cv::EdgeTracing两个函数实现canny边缘提取。本文举例说明如何在vitis HLS 2023.1中实现canny算法。
资源推荐
资源详情
资源评论
收起资源包目录
vitis-HLS canny算法实现图像边缘检测 (2000个子文件)
xFSobel3x3_Pipeline_Col_Loop.adb 2MB
xFSobel3x3_Pipeline_Col_Loop.bind.adb 1.51MB
xFAverageGaussianMask3x3_0_0_512_512_0_8_2_2_24_64_Pipeline_Col_Loop.adb 1.4MB
xFSobel3x3_Pipeline_Col_Loop.sched.adb 1.27MB
xFAngleKernel_3_0_512_512_4_0_8_2_2_32_24_64_192_Pipeline_colLoop.adb 1.18MB
xFAverageGaussianMask3x3_0_0_512_512_0_8_2_2_24_64_Pipeline_Col_Loop.bind.adb 1.07MB
xFSuppression3x3_Pipeline_colLoop1.adb 1019KB
xFAverageGaussianMask3x3_0_0_512_512_0_8_2_2_24_64_Pipeline_Col_Loop.sched.adb 945KB
xFAngleKernel_3_0_512_512_4_0_8_2_2_32_24_64_192_Pipeline_colLoop.bind.adb 869KB
xFSuppression3x3_Pipeline_colLoop1.bind.adb 797KB
xFAngleKernel_3_0_512_512_4_0_8_2_2_32_24_64_192_Pipeline_colLoop.sched.adb 734KB
xFSuppression3x3_Pipeline_colLoop1.sched.adb 672KB
AxiStream2MatStream_2_Pipeline_MMIterInLoopRow.adb 554KB
xFSuppression3x3_3_0_11_512_512_4_0_13_8_2_32_24_6_64_192_2_s.adb 541KB
xFAverageGaussianMask3x3_0_0_512_512_0_8_2_2_24_64_s.adb 477KB
xFMagnitudeKernel_3_3_512_512_4_4_8_2_2_2_32_32_64_Pipeline_colLoop.adb 412KB
AxiStream2MatStream_2_Pipeline_MMIterInLoopRow.bind.adb 395KB
xFSuppression3x3_3_0_11_512_512_4_0_13_8_2_32_24_6_64_192_2_s.bind.adb 385KB
xFSobel3x3_0_3_512_512_0_4_8_2_2_2_24_32_65_3_9_false_s.adb 363KB
xFAverageGaussianMask3x3_0_0_512_512_0_8_2_2_24_64_s.bind.adb 346KB
AxiStream2MatStream_2_Pipeline_MMIterInLoopRow.sched.adb 322KB
xFSuppression3x3_3_0_11_512_512_4_0_13_8_2_32_24_6_64_192_2_s.sched.adb 309KB
MatStream2AxiStream_2_Pipeline_MMIterOutRow_MMIterOutCol.adb 304KB
xFMagnitudeKernel_3_3_512_512_4_4_8_2_2_2_32_32_64_Pipeline_colLoop.bind.adb 301KB
xFCannyKernel.adb 296KB
xFAverageGaussianMask3x3_0_0_512_512_0_8_2_2_24_64_s.sched.adb 284KB
xFPackNMS_11_11_512_512_13_13_8_32_2_2_6_24_Pipeline_colLoop.adb 272KB
xFSobel3x3_0_3_512_512_0_4_8_2_2_2_24_32_65_3_9_false_s.bind.adb 259KB
xFMagnitudeKernel_3_3_512_512_4_4_8_2_2_2_32_32_64_Pipeline_colLoop.sched.adb 254KB
xFFindmax3x3_4_0_13_s.adb 244KB
MatStream2AxiStream_2_Pipeline_MMIterOutRow_MMIterOutCol.bind.adb 220KB
xFSobel3x3_0_3_512_512_0_4_8_2_2_2_24_32_65_3_9_false_s.sched.adb 209KB
xFCannyKernel.bind.adb 199KB
xFPackNMS_11_11_512_512_13_13_8_32_2_2_6_24_Pipeline_colLoop.bind.adb 198KB
canny_accel.adb 195KB
MatStream2AxiStream_2_Pipeline_MMIterOutRow_MMIterOutCol.sched.adb 180KB
xFFindmax3x3_4_0_13_s.bind.adb 174KB
xFPackNMS_11_11_512_512_13_13_8_32_2_2_6_24_Pipeline_colLoop.sched.adb 169KB
xFCannyKernel.sched.adb 154KB
xFFindmax3x3_4_0_13_s.sched.adb 143KB
Axi2AxiStream.adb 135KB
xFPackNMS_11_11_512_512_13_13_8_32_2_2_6_24_s.adb 134KB
xFSobel3x3_Pipeline_VITIS_LOOP_468_2.adb 129KB
canny_accel.bind.adb 126KB
xFSobel3x3_Pipeline_VITIS_LOOP_456_1.adb 118KB
xFDuplicate_rows_3_512_512_4_8_2_2_2_2_2_2_32_64_s.adb 113KB
xFSobel3x3_Pipeline_VITIS_LOOP_479_3.adb 110KB
xFSuppression3x3_Pipeline_bufColLoop.adb 110KB
xFAngleKernel_3_0_512_512_4_0_8_2_2_32_24_64_192_s.adb 103KB
Mat2AxiStream.adb 102KB
xFDuplicate_rows_3_512_512_4_8_2_2_2_2_2_2_32_64_Pipeline_Col_Loop.adb 102KB
Mat2Axi.adb 100KB
xFSobel3x3_Pipeline_VITIS_LOOP_468_2.bind.adb 99KB
MatStream2AxiStream_2_s.adb 99KB
xFPackNMS_11_11_512_512_13_13_8_32_2_2_6_24_s.bind.adb 99KB
AxiStream2Mat.adb 98KB
canny_accel.sched.adb 97KB
Axi2AxiStream.bind.adb 95KB
xFSobel3x3_Pipeline_VITIS_LOOP_456_1.bind.adb 93KB
xFAverageGaussianMask3x3_Pipeline_Clear_Row_Loop.adb 93KB
Axi2AxiStream_Pipeline_VITIS_LOOP_1023_1.adb 90KB
xfExtractPixels_8_24_0_2.adb 89KB
xfExtractPixels_8_24_0_1.adb 89KB
AxiStream2Axi_Pipeline_MMIterOutLoop2.adb 89KB
xfExtractPixels_8_32_4_s.adb 89KB
xfExtractPixels_8_24_0_s.adb 89KB
xFMagnitudeKernel_3_3_512_512_4_4_8_2_2_2_32_32_64_s.adb 86KB
xFSobel3x3_Pipeline_VITIS_LOOP_468_2.sched.adb 84KB
xFSobel3x3_Pipeline_VITIS_LOOP_479_3.bind.adb 84KB
xFSuppression3x3_Pipeline_bufColLoop.bind.adb 82KB
xFDuplicate_rows_3_512_512_4_8_2_2_2_2_2_2_32_64_s.bind.adb 82KB
xFPackNMS_11_11_512_512_13_13_8_32_2_2_6_24_s.sched.adb 82KB
xFSobel3x3_Pipeline_VITIS_LOOP_456_1.sched.adb 80KB
AxiStream2Axi.adb 78KB
AxiStream2MatStream_2_s.adb 76KB
xFAngleKernel_3_0_512_512_4_0_8_2_2_32_24_64_192_s.bind.adb 76KB
xFDuplicate_rows_3_512_512_4_8_2_2_2_2_2_2_32_64_Pipeline_Col_Loop.bind.adb 74KB
xfExtractPixels_8_24_0_2.bind.adb 73KB
xfExtractPixels_8_24_0_1.bind.adb 73KB
xfExtractPixels_8_32_4_s.bind.adb 73KB
xfExtractPixels_8_24_0_s.bind.adb 73KB
Axi2Mat.adb 71KB
MatStream2AxiStream_2_s.bind.adb 71KB
Axi2AxiStream.sched.adb 71KB
xFAverageGaussianMask3x3_Pipeline_Clear_Row_Loop.bind.adb 69KB
Block_entry11_proc.adb 69KB
xFSuppression3x3_Pipeline_bufColLoop.sched.adb 68KB
xFSobel3x3_Pipeline_VITIS_LOOP_479_3.sched.adb 68KB
Mat2Axi.bind.adb 68KB
Canny_3_0_0_11_512_512_8_32_false_2_2_s.adb 67KB
Mat2AxiStream.bind.adb 66KB
xFDuplicate_rows_3_512_512_4_8_2_2_2_2_2_2_32_64_s.sched.adb 66KB
xfExtractPixels_8_24_0_2.sched.adb 64KB
xfExtractPixels_8_24_0_1.sched.adb 64KB
xfExtractPixels_8_32_4_s.sched.adb 64KB
xfExtractPixels_8_24_0_s.sched.adb 64KB
Axi2AxiStream_Pipeline_VITIS_LOOP_1023_1.bind.adb 64KB
xFMagnitudeKernel_3_3_512_512_4_4_8_2_2_2_32_32_64_s.bind.adb 64KB
AxiStream2Axi_Pipeline_MMIterOutLoop2.bind.adb 63KB
xFAngleKernel_3_0_512_512_4_0_8_2_2_32_24_64_192_s.sched.adb 63KB
共 2000 条
- 1
- 2
- 3
- 4
- 5
- 6
- 20
资源评论
希言自然也
- 粉丝: 960
- 资源: 8
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- pta题库答案c语言之排序4统计工龄.zip
- pta题库答案c语言之树结构7堆中的路径.zip
- pta题库答案c语言之树结构3TreeTraversalsAgain.zip
- pta题库答案c语言之树结构2ListLeaves.zip
- pta题库答案c语言之树结构1树的同构.zip
- 基于C++实现民航飞行与地图简易管理系统可执行程序+说明+详细注释.zip
- pta题库答案c语言之复杂度1最大子列和问题.zip
- 三维装箱问题(Three-Dimensional Bin Packing Problem,3D-BPP)是一个经典的组合优化问题
- 以下是一些关于Linux线程同步的基本概念和方法.txt
- 以下是一个简化的示例,它使用pygame库来模拟烟花动画的框架.txt
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功