ug871 Lab3

2023-12-18 22:21:57

实验平台

????????Vitis?HLS 2021.2

? ? ? ? Windows 10

实验内容

????????对Lab1的设计进行优化,优化目标如下:

  • 吞吐量最高
  • 能够处理输入信号提供的有效数据
  • 产生输出数据并伴随一个有效的输出信号
  • 滤波器系数将存储在FIR设计外的单端口RAM中

实验步骤

Step 1:创建一个新的工程

  1. 打开HLS命令行
  2. 将Lab2的run_hls.tcl和src文件夹移动到Lab3文件夹。
  3. cd到Lab3文件夹下,然后执行vitis_hls -f run_hls.tcl生成项目文件
  4. 执行vitis_hls -p?fir_prj打开Vivado的HLS GUI。

Step 2:优化I/O接口

  1. 端口设置的要求:
    1. 端口C必须有一个单独的RAM访问权限。
    2. 端口X必须有一个输入数据有效信号。
    3. 端口Y必须有一个输出数据有效信号。
  2. 创建solution2
    1. 点击Project
    2. 点击New Solution
    3. 点击Finish
  3. 将solution2设置为激活状态,就是solution2字体加深即可
  4. 添加优化指定定义所需的I/O接口
    1. 点开fir.cpp文件
    2. 点击左侧的Directive选项卡
    3. 实现 port c
      1. 双击该选项卡的中c
      2. 选中Destination中的Source File
      3. 在Directive下拉选项卡中选中BIND_STORAGE
      4. UG871需要选择RAM_1P_BRAM,而21版本的HLS中没有这个,用了以下的方法
        1. impl的选项卡中bram
        2. type的选项卡中选中ram_1p
      5. 点击OK
    4. 实现port x
      1. 双击x
      2. 在Directive下拉选项卡中选中INTERFACE
      3. 选中Destination中的Source File
      4. 选中mode选项卡中的ap_vld
      5. 点击OK
    5. 实现port y
      1. 同port x。
    6. 点击Run C Sythesis

Step 3:结果分析

  1. 点击Schedule Viewer
  2. 点开Shift_Accum_Loop

Step 4:优化最高吞吐量

  1. 限制吞吐量的因素有
    1. for循环使得前后按顺序执行,可以全部展开以允许所有操作并行。
    2. 块RAM被用于shift_reg。因为该变量是数组,因此,它被默认实现为一个块RAM。因此,可以将这个块RAM划分为单独的寄存器。
  2. 新建一个solution3
  3. 点击fir.c
    1. 双击Shift_Accum_Loop部分
    2. 选中Unroll
    3. 点击OK
    4. 双击shift_reg
    5. 选中Array_Partition
    6. 点击OK
  4. 点击solution3
    1. 点击constraints
    2. 点击directives.tcl
  5. 点击run C Synthesis
  6. 多个solution之间进行比较
    1. 点击Project选项卡
    2. 点击Compare Reports
    3. 添加solution1、solution2、solution3

文章来源:https://blog.csdn.net/qq_43209828/article/details/132693932
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。