当前位置:   article > 正文

【Vitis】Vitis HLS学习系列笔记 :第一个例程_vitis hls 23

vitis hls 23

在学习vitis的过程中一定要跑几个例程试试看,这中间遇到了几个小问题,记录下

有干货,请注意查收:作为新手,跑例程大概率会遇到问题,这里记录几个问题,如果刚好你也遇到,一定会帮到你。

笔者跑了好几个例程,精选了一个最全的。

我的vitis版本2023.2,学习还得看最新的笔记,软件更新太快。


【Vitis】Vitis HLS学习系列笔记 :第一个例程 

…………


目录

1 Vitis HLS是什么?

2 例程

3 很可能遇到的问题

3.1生成的verilog在哪?

3.2 运行C/RTL COSIMULATION不能自动打开open wave viewer窗口 


1 Vitis HLS是什么?

Vitis™ HLS是一款高级综合工具,允许 C、C++ 和OpenCL™函数硬连线(hardwired)到器件逻辑结构和 RAM/DSP 块上。Vitis HLS在Vitis应用加速开发流程中实现硬件内核(hardware kernel),并使用 C/C++ 代码为Vivado® Design Suite中的Xilinx®器件设计开发 RTL(寄存器传输设计级别)IP(功能块) 。

在Vitis应用程序加速流程中,Vitis HLS工具可自动执行大部分代码修改,以实现和优化可编程逻辑中的 C/C++ 代码并实现低延迟和高吞吐量。推导出需要的编译指示(pragmas),以为函数参数生成正确接口以及在代码中用pipeline优化循环和函数,这是Vitis HLS在应用程序加速流程中的基础。Vitis HLS还支持自定义您的代码以实现不同的接口标准或特定优化,从而实现您的设计目标。

Vitis HLS设计流程一般如下:

1.编译、仿真、调试C/C++代码;

2.观察report,以分析和优化设计;

3.将C代码综合(synthesize)成RTL设计;

4.用RTL协同仿真器验证RTL实现;

5.将RTL实现打包成编译后的目标文件(.xo),或者导出到RTL IP.


2 例程

        我查阅了一些资料,尝试了几个不同博主的例程,选出来一个最全的,供大家参考,这里直接给原文链接。

        有两个链接,是两位博主分别在2020年和2023年进行的创作,使用的同一个例程,但是最终的结论有些不同,这里出现不同的原因是xilinx Vitis™ HLS工具升级了,变得更加智能,很有意思。

2020年博文:HLS 开发学习(二)向量加法器_向量加法fpga-CSDN博客

2023年博文:课时3:Vitis HLS设计流程(实例演示)——Vitis HLS教程-CSDN博客

         共三小段程序,

头文件VectorAdd.h

  1. #define N 5
  2. typedef int data_t;
  3. void VectorAdd(data_t A[N],data_t t,data_t B[N]);

源文件VectorAdd.cpp

  1. #include "VectorAdd.h"
  2. void VectorAdd(data_t A[N],data_t t,data_t B[N])
  3. {
  4. unsigned int i;
  5. myloop:
  6. for(i=0;i<N;i++)
  7. {
  8. B[i] = A[i] + t;
  9. }
  10. }

testbench文件

  1. #include <iostream>
  2. #include <iomanip>
  3. #include "VectorAdd.h"
  4. using namespace std;
  5. int main(){
  6. data_t A[N] = {-4,-3,0,1,2};
  7. data_t c = 5;
  8. data_t B[N] = {0};
  9. data_t RefB[N] = {1,2,5,6,7};
  10. unsigned int i = 0;
  11. unsigned int errcnt = 0;
  12. VectorAdd(A,c,B);
  13. cout<<setfill('-')<<setw(30)<<'-'<<'\n';
  14. cout<<setfill(' ')<<setw(10)<<left<<"A";
  15. cout<<setfill(' ')<<setw(10)<<left<<"C";
  16. cout<<setfill(' ')<<setw(10)<<left<<"B"<<'\n';
  17. cout<<setfill('-')<<setw(30)<<left<<'\n';
  18. for ( i = 0;i<N;i++)
  19. {
  20. cout<<setfill(' ')<<setw(10)<<left<<A[i];
  21. cout<<setfill(' ')<<setw(10)<<left<<c;
  22. cout<<setfill(' ')<<setw(10)<<left<<B[i];
  23. if(B[i] == RefB[i])
  24. {
  25. cout<<'\n';
  26. }
  27. else
  28. {
  29. cout << "(" << RefB[i] << ")" << '\n';
  30. errcnt ++ ;
  31. }
  32. }
  33. cout << setfill('-') << setw(30) << '-' <<'\n';
  34. if(errcnt > 0)
  35. {
  36. cout << "Test Failed" << '\n';
  37. return 1;
  38. }
  39. else{
  40. cout<< "Test Passed" << '\n';
  41. return 0;
  42. }
  43. }

具体步骤,见原博客。


3 很可能遇到的问题

3.1生成的verilog在哪?

运行完程序后会在左侧Explorer下生成 solution 文件夹,syn-verilog目录下就是源码。

顶层的verilog部分源码:

3.2 运行C/RTL COSIMULATION不能自动打开open wave viewer窗口 

点击C/RTL COSIMULATION后,弹出窗口 CO-SIMULATION Dialog

注意DUMP Trace选择 PORT

此时工具栏中的open wave viewer才会变成彩色,然后自动打开vivado,出现波形

仿真波形

  

这个系列会出几篇Vitis HLS的入门笔记,注意收藏哦。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/464121
推荐阅读
相关标签
  

闽ICP备14008679号