高层次综合器(Vivado HLS)的设计流程[原创www.cnblogs.com/helesheng]

最近在写一本Xilinx的FPGA方面的书,现将HLS部分内容在这里分享给大家,希望大家喜欢,也欢迎批评指正。以下原创内容欢迎网友转载,但请注明出处: https://www.cnblogs.com/helesheng

下面用一个简单实例来演示使用高层次综合器进行硬件设计的流程,带领读者以点带面的掌握Vivado HLS的设计方法。

有限冲击响应滤波器,简称FIR(Finite Impulse Response)滤波器,是数字信号处理系统中最常见的算法之一。相比无限冲激响应滤波器(IIR)滤波器而言,FIR滤波器虽然计算效能较低,但它具有以下两个明显优势:

(1)严格线性相位;

(2)冲击响应长度有限,永远稳定。

可编程逻辑器件的高并行性、计算速度快的优势,正好克服了FIR滤波器计算量大的劣势。下面以FIR滤波器的实现为例,介绍HLS的开发和优化流程。实验内容及步骤如下:

1、打开Vivado HLS(Vivado HLS是一个单独的应用程序,可以不依赖于Vivado打开),如图8.2.1所示,单击开始界面的Create New Project。

图8.2.1 新建Vivado HLS工程界面

2、如图8.2.2所示,输入新建的工程名称,指定路径,单击Next。

 图8.2.2 在指定目录创建工程

3、在如图8.2.3和8.2.4所示的界面,分别添加已有的设计文件和测试脚本。(初次创建工程,可以不添加任何文件或脚本,单击Next跳过) 

 

图8.2.3 添加已有的设计文件

 

图8.2.4 添加已有的测试脚本

4、在图8.2.5所示的方案配置界面中,设置默认的时钟周期为10ns,单击Part Select区域右侧的选择按钮,并在弹出的图8.2.6所示界面中筛选工程中使用的器件。返回方案配置界面,单击Finish完成新建工程。 

 图8.2.5 配置方案界面

 

图8.2.6 选择工程中使用的器件 

5、右键单击工程主界面左侧的Explorer栏的Source,选择New File,新建一个fir.h文件和一个fir.c文件。

头文件内容:

 1 #ifndef FIR_H_
 2 #define FIR_H_
 3 #define N    11
 4 typedef int    coef_t;
 5 typedef int    data_t;
 6 typedef int    acc_t;
 7 void fir (
 8   data_t *y,
 9   coef_t c[N+1],
10   data_t x
11   );
12 #endif
代码8.3

C语言源码:

 1 #include "fir.h"
 2 void fir(data_t *y,data_t x)
 3 {
 4       coef_t C[N] = {    53,0,-91,0,313,500,313,0,-91,0,53};
 5       data_t shift_reg[N];
 6       acc_t acc;
 7 int i;
 8   acc=0;
 9   Shift_Accum_Loop: 
10 for (i=N-1;i>=0;i--) {
11         if (i==0) {
12             shift_reg[0]=x;
13             data = x;
14       } 
15          else {
16             shift_reg[i]=shift_reg[i-1];
17             data = shift_reg[i];
18       }
19     acc+=data*c[i];;       
20   }
21   *y=acc;
22 }
代码8.4

此时Vivado HLS的界面如图8.2.7所示。

 

图8.2.7  Vivado HLS工作界面

6、单击上图界面中的Project菜单,选择Project Setting…,在弹出的图8.2.8界面左侧选择Synthesis,并在右侧的Synthesis Setting界面中配置本工程的顶层函数为fir.c文件中的fir函数,随后单击右下角的OK按钮,确认选择。 

 

 图8.2.8  配置工程的顶层函数

7、单击工程界面上方的运行C语言综合按钮(图8.2.7所示界面上方的绿色三角形按钮),Vivado HLS将对C语言源文件进行分析和综合,产生硬件描述语言的文件输出。

8、等待Vivado HLS完成综合,综合完成后会弹出图8.2.9所示的综合报告,其中显示了未做任何优化配置情况下,图8.2.7所示的C语言源码描述的有限冲击响应滤波器所占用的可编程逻辑器件资源、时钟、设计延迟、吞吐量等详细信息。

 

图8.2.9 综合报告

9、右键单击Explore栏的Test Bench,新建一个测脚本文件,命名为fir_test.c(该文件是图8.1.2所示的“C测试集文件”)。其源码如下。 

 1 #include <stdio.h>
 2 #include <math.h>
 3 #include "fir.h"
 4 int main () {
 5   const int    SAMPLES=600;
 6   FILE         *fp;
 7   data_t signal, output;
 8   coef_t taps[N] = {0,-10,-9,23,56,63,56,23,-9,-10,0,};
 9   int i, ramp_up;
10   signal = 0;
11   ramp_up = 1;  
12   fp=fopen("out.dat","w");
13   for (i=0;i<=SAMPLES;i++) {
14       if (ramp_up == 1) 
15           signal = signal + 1;
16       else 
17           signal = signal - 1;
18     // Execute the function with latest input
19     fir(&output,taps,signal);    
20     if ((ramp_up == 1) && (signal >= 75))
21         ramp_up = 0;
22     else if ((ramp_up == 0) && (signal <= -75))
23         ramp_up = 1;        
24         // Save the results.
25     fprintf(fp,"%i %d %d\n",i,signal,output);
26   }
27   fclose(fp);  
28   printf ("Comparing against output data \n");
29   if (system("diff -w out.dat out.gold.dat")) {
30          fprintf(stdout, "*******************************************\n");
31          fprintf(stdout, "FAIL: Output DOES NOT match the golden output\n");
32          fprintf(stdout, "*******************************************\n");
33      return 1;
34   } else {
35          fprintf(stdout, "*******************************************\n");
36          fprintf(stdout, "PASS: The output matches the golden output!\n");
37          fprintf(stdout, "*******************************************\n");
38      return 0;
39   }
40 }
代码8.5

10、将图8.1.3中所示的“黄金参考”(即算法计算产生的标准答案)out.gold.dat文件拷贝到工程文件中。并用单击Explore栏的Test Bench,将黄金参考添加到工程中。

11、单击工程界面上方的Run C Simulation按钮,进行代码测试。根据上面的fir_test.c测试代码,若代码的运行结果与黄金参考一致,界面下方的Console窗口中将打印出PASS: The output matches the golden output! 的字样。

 

图8.2.10 C语言测试

12、至此为止,编写的代码所实现的算法如果功能正确,且在占用资源、设计延迟、吞吐量等方面都已经达到了设计目标,则可以导出高层次高层次综合器产生的硬件描述语言代码,以供Vivado在工程中调用该算法。

在Solution菜单中选择Export RTL,在弹出的界面如图8.2.11所示,选择最常用的生成IP方式导出,单击OK,Vivado HLS将产生可供Vivado调用的IP。界面下方的Console窗口中输出Finished export RTL时,就可以在…\solution1\impl\ip文件夹下看到生成的IP.zip文件。 

 图8.2.11 输出硬件描述语言RTL配置界面

 [原创www.cnblogs.com/helesheng]

posted @ 2023-02-08 23:54  helesheng  阅读(293)  评论(0编辑  收藏  举报