HLS学习1:使用FPGA点灯

0、引言

本系列博客主要用于记录学习过程,如有错误欢迎指点。

芯片:xc7z020clg400-1;
开发板:小熊猫7020开发板;
开发环境:Vivado 18.3;
系统环境:Windows 11;
参考资料:小熊猫HLS文档、ug902、ug871、米联客HLS、黑金HLS等。

1、HLS

新建工程

名字随意取,路径要记住
在这里插入图片描述

添加文件

添加使用HLS语言编写的cpp文件,添加完成后,浏览该文件,提取Top Function文件(这里的文件名对应之后的IP名)
在这里插入图片描述
在这里插入图片描述
然后添加TestBench Files(用于测试和调用前者的CPP文件),你也可以不添加,一样可以综合打包完成

选择芯片

在这里插入图片描述

代码

#include "stdio.h"
#include "ap_int.h"
#define CLK_FREQ  1
void hls_01_fpga_led_stream_ip(ap_int<4> &led)
{
    
    
	#pragma HLS interface ap_none port=led
	#pragma HLS interface ap_ctrl_none port=return
	static int led_number=0;
	static long cnt_reg=0;
	if(cnt_reg<CLK_FREQ)cnt_reg++;
	else
	{
    
    
		cnt_reg=0;
		if(led_number<3)led_number++;
		else led_number=0;
	}
	if(led_number==0)
	{
    
    
		led=0x1;
	}
	else if(led_number==1)
	{
    
    
		led=0x2;
	}
	else if(led_number==2)
	{
    
    
		led=0x4;
	}
	else if(led_number==3)
	{
    
    
		led=0x8;
	}
}

进行综合(Synthesis)

选择顶部菜单栏的综合按钮(C Synthesis)默认第一个
在这里插入图片描述
综合完成后,如果没有问题,会自动跳转到
综合报告
界面,可以看到端口资源用量
在这里插入图片描述
在这里插入图片描述

打包IP(导出RTL)

点击菜单栏的这个图标,进行导出
在这里插入图片描述
弹出的对话框,默认即可
在这里插入图片描述
完成导出
在这里插入图片描述

进行测试/仿真(Simulation)

此步骤非必须,但对后期代码实际部署有明显优点,可以通过该手段对代码进行测试。
如果说IP代码是一个功能块/函数;那个tb文件则是调用IP的主函数。

#include "stdio.h"
#include "ap_int.h"

extern void  hls_01_fpga_led_stream_ip(ap_int<4> &led);
int main(void)
{
    
    
	int i=0;
	unsigned int tmp_print_data=0;
	ap_int<4> led=7;
	for(i=0;i<1000;i++)
	{
    
    
		hls_01_fpga_led_stream_ip(led);
		tmp_print_data=led&0xf;
		printf("i=%d,led=%d\r\n",i,tmp_print_data);
	}
	return 0;
}

然后点击该图标,进行仿真
在这里插入图片描述
通过查看log文件或console窗口的输出信息,判定程序是否正确运行。
在这里插入图片描述

2、Vivado

创建工程

一路Next,直到这里选择自己的芯片xc7z020clg400-1(这个错了,会导致IP无法正确加载,这个选择可以在软件中进行二次修改)
在这里插入图片描述

导入IP

点击左侧的Setting(这里可以修改芯片型号)
在这里插入图片描述
IP——>Repository——>添加——>选择HLS工程路径
在这里插入图片描述
点击OK,添加完成(这里需要注意,必须是IP名称前的图标必须是黄色的才行,如果是灰色,将无法进行后续工作,请检测是否芯片不匹配。
点击OK关闭界面。
在这里插入图片描述

创建 Block Design

在这里插入图片描述
点击右侧的加号,将刚刚导入的IP进行添加
在这里插入图片描述
添加完成
在这里插入图片描述

进行连线及配置

由于我们要实现的是简单的流水灯功能,所需要的时钟信号和复位信号都由外置引脚进行提供,LED也需要参考原理图进行了配置,所以在块设计中,我们需要将所有的端口进行配置。

选中对应管脚,使用Ctrl+T快捷键,快速生成端口。
在这里插入图片描述
连线完成后,我们需要要块设计转换为HDL Wrapper
在这里插入图片描述
在这里插入图片描述
创建完成
在这里插入图片描述

分配管脚

点击左侧选单中的Open Elaborated Design,弹出的对话框默认OK。
在这里插入图片描述
弹出该页面
在这里插入图片描述
按照下图进行引脚配置,然后Ctrl+S保存,并命名
在这里插入图片描述

生成Bit文件

在这里插入图片描述
这里的14指的电脑CPU核心数
在这里插入图片描述
可以选Open Hardware Manager打开该界面,然后选择Open target,选择Auto
在这里插入图片描述

烧录测试

选择Program device烧录。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/u014798590/article/details/126178484