实验平台
Vitis HLS 2021.2
Windows 10
实验内容
本实验展示了如何创建高级综合项目、验证 C 代码、将设计综合到 RTL 以及验证 RTL。
实验步骤
Step 1:创建一个新的工程
- 点击Vitis HLS的图标
- 在HLS界面上点击Create Project
- 输入项目名字为fir_prj
- 将项目目录修改为E:\FPGA\UG871\Lab1
- 点击Next
- 指定C设计文件
- 点击New Files
- 在Lab1文件夹下添加src文件夹
- 然后将fir.cpp文件添加到src文件下
- 同样的方式添加fir.hpp头文件
- 点击Next
- 添加测试文件
- 点击New Files
- 然后将fir_test.cpp文件添加到src文件下
- 点击Next
- 解决方案配置
- 点击Part Selection
- 将Family选中zynq,Sub-Family选中Zynq-7000
- 然后选中xc7z020clg400-2
- 点击OK
- 点击Finish
Step 2:验证C源代码
- 从官网上下载对应源码,然后将其复制到文件中。需要注意的是HLS 2021版本只支持C++,而下载的源码是C源码,需要自己手动调整部分内容。
- 需要在源码的基础上添加#include <stdlib.h>,system函数定义在了该头文件中。
- 将out.gold.dat添加到out.gold.dat文件中。
- 添加Top函数
- 点击Project
- 点击Project Settings
- 点击Synthesis
- 点击Browse,选中fir.cpp
- 点击OK
- 点击Run C Simulation
Step 3:高级综述
- 点击Run C Synthesis,结果如下图所示:
- Vivado HLS的时钟周期为时钟目标减去时钟不确定性,应是图片中的10.00 - 2.70 = 7.30ns
- 时钟不确定性有利于留出时序用于布局或布线导致的未知网络延迟。
- 最坏的延迟为7.050ns,小于HLS的时钟周期7.30ns,因此满足时序要求。
- fir函数的具有26个周期延迟,也就是说函数26个时钟周期后才能输出结果。
- fir函数读取下一组数据需要27个时钟周期。
- fir函数的Shift_Accoum_Loop部分一共执行11次,每一次的延迟是5个时钟周期,累计55个时钟周期,而实际只有24个时钟周期的延迟,说明启动了流水线。
- fir相较于Shift_Accoum_Loop部分多了两个时钟周期,而ug871中讲到一个时钟用于进入循环,而另一个时钟周期不知道怎么来的?
- 该设计使用了3个DSP,247个FF和223个LUT,这些资源只是估算值。
- 进行RTL合成时可能进行一些优化,因此估计并不准确。
Step 4:RTL验证
- 点击Run CoSimulation
- 点击OK
- Status为Pass才是通过RTL验证。
Step 5:生成IP核
- 点击Export RTL
- 点击OK
- 生成的IP核在对应solution1\impl\ip文件夹下。