一、HLS简介
HLS是高层综合(High level Synthesis)
是将C或者c++语言编译为FPGA能够读懂和运行的RTL级别的语言
与VHDL或者verilog的比较
优点:用高级语言完成期望在硬件电路上实现的功能,更加抽象和容易实现。
缺点:尽管是用高级语言描述实现在硬件电路上实现功能,但会有很多限制,例如动态分配内存等函数或定义的禁用,也有很多不足,例如循环的优化始终是个大难题。
HLS关键技术
1、将高级语言转化为RTL电路
2、循环优化,并行处理
二、入门级HLS程序(点亮led灯)
(一)仿真
环境:xilinx20.2
板子: Z7-Lite7020
1、新建工程
选择定成函数 这里直接next
添加c仿真文件,testbench文件,next
这里选择xc7z020clg400-2,对应Z7-Lite7020
新建工程完成页面
2、添加源文件
同样方法添加头文件
led.h代码
#ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_
#define CNT_MAX 100000000
//#define CNT_MAX 100
#define FLASH_FLAG CNT_MAX-2
typedef int led_t;
typedef int cnt_t;
void flash_led(led_t *led_o , led_t led_i);
#endif
其中计数最大值 CNT_MAX 100000000
是在 100M 时钟频率下计数一秒钟所需要的计数次数
FLASH_FLAG
是 LED 闪烁的标志,当计数到该值
时,LED 发生变化
flash_led
是该工程需要设计的定成函数
后续优化代码
led.h
#ifndef _SHIFT_LED_H_
#define _SHIFT_LED_H_
#include "ap_int.h"
#define CNT_MAX 100000000
//#define CNT_MAX 100
#define FLASH_FLAG CNT_MAX-2
//typedef int led_t;
//typedef int cnt_t;
typedef ap_int<1>led_t;
typedef ap_int<32>cnt_t;
void flash_led(led_t *led_o , led_t led_i);
#endif
led.h代码
#include "led.h"
void flash_led(led_t *led_o