HLS入门之点灯大师

发布于:2025-04-04 ⋅ 阅读:(36) ⋅ 点赞:(0)

本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。

读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。

本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。

若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。


前言

小编打算跟着 《正点原子》 入门HLS,有兴趣的朋友可以跟一下;第一课是LED闪烁。


1.更换主题

默认是黑色的,小编实在是看不习惯,因此就换了。

 在window中找到Preference,在Appearance中可以找到Theme

2.新建工程

注意:工程以及路径都不能带中文

Top Function 设置设计的顶层函数为 LED_m

不添加测试文件,跳过

Period为时钟周期(ns),Uncertainty为时钟不确定性,更改并选择FPGA型号

3.新建文件

在工程文件中新建一个src文件夹,方便文件管理

创建源文件,后缀名为.cpp

4.植入源代码

#include<ap_int.h>
#define DELAY 100000000//100M

void main(ap_uint<2> *led){
	int i = 0;
	for(i = 0; i < DELAY; i++){
		  if(i < DELAY/2)
		       *led = 1;
		  else
			   *led = 2;

	}

}

ap_uint<2>:2位无符号整数。 

为什么不用char、int、float等? 位宽大了浪费资源。

    main实现了两个LED间隔0.5s交替闪烁

5.综合

Uncertainty默认为目标时钟的27%

综合报错,由于小编没注意直接把main当成了顶层函数,而真正的顶层函数是之前定义的LED_m,替换后即可正常综合。

6.综合报告

重点关注时序:Timing Estimate

Estimated:预估最坏路径下的时钟周期

Estimated  < Target - Uncertainty  才不会出现时序违例

7.端口协议修改

led信号就2bit,无需要其他的控制信号,因此选择ap_none协议合适,模块级端口可选择ap_ctrl_none

void LED_m(ap_uint<2> *led){
#pragma HLS INTERFACE mode=ap_none port=led
#pragma HLS INTERFACE mode=ap_ctrl_none port=return
	int i = 0;
	for(i = 0; i < DELAY; i++){
		  if(i < DELAY/2)
		       *led = 1;
		  else
			   *led = 2;

	}

}

8.导出RTL

填写输出路径即可

9.导入工程验证

解压

源码在HDL中

在vivado中添加IP



网站公告

今日签到

点亮在社区的每一天
去签到