本文所提供的信息和内容仅供参考。作者对本文内容的准确性、完整性、及时性或适用性不作任何明示或暗示的保证。在任何情况下,作者不对因使用本文内容而导致的任何直接或间接损失承担责任,包括但不限于数据丢失、业务中断或其他经济损失。
读者在使用本文信息时,应自行验证其准确性和适用性,并对其使用结果负责。本文内容不构成专业技术咨询或建议,具体的技术实现和应用应根据实际情况和需要进行详细分析和验证。
本文所涉及的任何商标、版权或其他知识产权均属于其各自的所有者。若本文中引用了第三方的资料或信息,引用仅为学术交流目的,不构成对第三方内容的认可或保证。
若有任何疑问或需进一步信息,请联系本文作者或相关专业人士。
前言
小编打算跟着 《正点原子》 入门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