May 28, 2024

vitis_hls_learning

Vitis HLS 学习笔记

1 第一个Vitis HLS工程

1
2
3
4
5
6
7
#ifndef __LED_CONTROL_H__
#define __LED_CONTROL_H__

#include "ap_int.h"

#endif

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include "led_control.h"

#define SYS_CLK_FREQ 500

void led_control(ap_uint<1> &led) // Arbitary Precision 任意精度
{
unsigned int i = 0;
led = (ap_uint<1>)0;

for (i = 0; i < SYS_CLK_FREQ - 1; i ++)
{
led = (i < SYS_CLK_FREQ / 2) ? (~led) : (ap_uint<1>)0;
// 如果写成下面的形式,时钟信号ap_clk会直接被优化掉
// led = (i < SYS_CLK_FREQ / 2) ? (ap_uint<1>)1 : (ap_uint<1>)0;
}
}

综合,导出RTL IP,创建一个Vivado工程,IP仓库选择Vitis HLS项目的存放路径,Vivado会自动识别到导出的IP。

image-20240528214514634

如果在Vitis中更新了文件,不需要在Vivado中重新添加路径。综合、RTL导出后直接在Vivado中选择刷新和升级即可。

image-20240528215241833
image-20240528215308042

之后的操作,写仿真文件,行为仿真,综合,布线,烧录和之前的开发流程没有区别。

2 Vitis HLS C/C++ 可综合规则

在Vitis HLS C/C++中,可综合的语句分为如下几种:

About this Post

This post is written by Yun Zhang, licensed under CC BY-NC 4.0.