ug871-vivado-high-level-synthesis-tutorial第4章lab1中文

给自己学习vivado-HLS留下痕迹

---朱磊

第四章接口综合

概述

接口综合是将RTL接口添加到C设计的过程。另外还把物理接口添加到RTL设计中,接口综合包括了相关联的I/O协议,容许数据通过接口传输并自动与内部优化的逻辑同步。

本教程由4实验练习组成涵盖的主要功能和接口综合

Lab1: 查看函数的返回和块级协议

Lab2: 理解默认端口的I/O协议,并学会怎么选择I/O协议

Lab3: 查看一下数组端口实现,可以进行分区。

Lab4: 为设计创建一个优化的实现并添加AXI4接口

教程设计描述

xilinx网站下载教程的设计文件,参考信息中获取教程设计。

本教程使用教程目录中的设计文件

Vivado_HLS_Tutorial\ Interface_Synthesis

关于实验

•使用前两个实验室在本教程中的示例的设计很简单,这有助于将焦点保持在接口。

•最后两个实验练习使用多通道累加器。

•本教程介绍如何实现采用高层次综合实现I/O端口和协议。

•在实验4中,创建一个在Lab3中使用最优实现的设计

 

接口综合 lab1:块级I/O协议

概述

这个实验解释了什么是块级I/O协议,并控制它们

重点:在本教程中的图片和命令假定了教程数据目录

Vivado_HLS_Tutorial 被解压并放置在c:\vivado_HLS_Tutorial

如果教程数据路径解压到不同的位置,或者在linux系统上,调整路径名称指向你选择放置Vivado_HLS_Tutorial目录位置。

步骤1:创建并打开工程

1.打开Vivado HLS 命令提示符

a.windows系统中,采用Start>AllPrograms>Xilinx Design Tools>Vivado2014.2>Vivado HLS>Vivado HLS2014.2 Command Prompt,如下图

b.linux系统下,打开新的shell,

                             

2. 用命令提示符窗口,如图55,把接口综合教程的路径变为lab1

 

3. 执行TCL并建立vivado HLS Project,采用的是vivado_hls –f run_hls.tcl 如图55所示

4. vivado HLS 完成,在用户界面里打开工程。用vivado_hls–p vivado_hls –p adders_prj 命令打开,如图56

 

步骤2:创建和查看默认的块级I/O协议

1.在源文件夹中双击adders.c,打开源代码,并查看如图57

这个例子用了一个简单的设计,把焦点集中在I/O实现上(在设计中没有逻辑)这段代码的重要点如下:

•编译格式的指令被添加到源代码中,为了防止任何I/O协议被综合成为一些数据结构(inAinB,和inC),I / O端口的协议将在接下来的实验练习中复习。。

•这个函数返回一个值并且从这个函数中只有唯一的输出。正如在后面的练习,不是所有的函数都返回一个值。在本实验练习中讨论该函数返回创建的端口。

2.用工具栏中的按钮执行Run C Synthesis命令,或Solution菜单

当综合完成,综合报告会自动打开

3.查看RTL接口,滚动到综合报告摘要的结尾处。接口摘要和Outline选项卡如图58

有三种类型的端口可以查看

•设计完成花费超过一个时钟周期,因此时钟和复位已经添加到设计中:ap_clkap_rst.这两个信号都是一位输入。

•块级I/O协议为了控制RTL设计已经添加端口:ap_start,ap_done,ap_idleap_ready。这些端口随后会被详细说明

•设计还有4个数据端口

       •输入端口In1,In2In3,都是32位输入,和指定I/O协议的ap_done(如在图58中指定的指令

       •该设计还具有对函数返回一个32位的输出端口,ap_return

块级I / O协议允许通过附加的端口、独立数据I / O端口对RTL设计进行控制。但此I / O协议是与函数本身相关联,不与任何数据端口相关联。默认的块级I/O协议被称为ap_ctrl_hs。图58显示了这个协议是与函数的返回值相关联(即使函数中的代码没有指定返回值这也可以)

1概括了用于块级I / O协议ap_ctrl_hs的信号的行为。

注:解释一下使用术语“交易”。在高层次综合的情况下,一个事务是相当于一个执行C函数(或在综合RTL设计中的等效操作)

 

应用

描述

ap_start

该信号控制模块执行,逻辑为1时设计开始运行。

它应保持逻辑1直到相应的输出握手ap_ready被置位。当ap_ready变高时,决定了是否继续保持ap_start置位并执行其他事物或设置ap_start为逻辑0,当前事务的结束时允许设计暂停,。

如果在ap_ready为逻辑1 之前ap_start被置为低,设计有可能没有把所有输入端口读完,并可能拖延下一个输入读取操作。

ap_ready

这个输出信号表明设计已经准备好接受新数据

当准备好接受新的输入时,ap_ready  信号设置为逻辑1。表明所有为这次事物的输入读已经完成。

如果设计不是流水线操作,直到下一次事物才开始执行新的读。

这个信号是用来决定何时在端口上用新的值,决定是否用一个ap_start输入信号来启动一个新的事务。

如果ap_start信号没有被设置为高,当设计在当前事务完成中所有的操作,这个信号变为低电平。

ap_done

这个信号表明设计在当前的事务中完成所有的操作。输出逻辑1表明设计已经完成了这个事务的所有操作。因为在事务结束时,该信号为逻辑1还表示ap_return端口上的数据是有效的。

不是所有的函数都有函数返回值,因此并非所有的RTL设计都有一个ap_return端口

ap_idle

这个信号表示设计正在操作或闲置状态(无操作)。

输出端口上用逻辑1表明是空闲状态。一旦设计开始运行,该信号为低电平。

该信号为高电平时,设计完成操作,未进行任何进一步的操作。

您可以通过查看由RTL协同仿真生成的跟踪文件,观察这些信号的行为。这是在教程的RTL验证所讨论的,但图59示出了用于当前合成的结果的波形。

59的波形图,表现了块级I/O信号的行为

•设计直到ap_start设置为逻辑1才开始启动。

•通过设置端口ap_idle为低,表明设计不再空闲

•展示了五个事务,首先3个输入值(1020,和30)被各自用在端口in1,in2in3.

•输出信号ap_ready变为高表明设计准备好在下个时钟下接受新输入。

•输出信号ap_done表明设计结束,输出端口ap_return的值是有效(首先输出值 60,是三个输入的和)

•因为ap_start保持高电平,下一次事务开始于下一个时钟周期。

 

注意:在RTL的协同仿真,所有的设计和端口输入控制信号始终处于启用状态。例如,在图59的信号ap_start始终是高的。

在第二个事务,观察ap_return端口,在这个端口上第一个输出的值是70,直到ap_done信号为高电平这个结果才有效。

步骤3:改变块级I/O协议

默认的块级I/O协议是ap_ctrl_hs协议(控制握手协议),在这一步中,您可以创建新的解决方案和改变这个协议。

1. 从工具栏或者工程菜单选择新解决方案(New Solution)来创建一个新的解决方案。

2. 保持所有新解决方案对话框所有设定,这些设定都是默认的,点击完成

3. 在信息窗口中选择C源代码标签(或如果C源代码关闭重新打开)

4. 激活指令选项卡(Directives tab),选择顶层函数,如图60所示

因为块级I/O协议与函数相关联,您必须通过选定顶层函数来指定他们。

5. 在指令选项卡中,鼠标移到顶层函数adders上,右键单击,然后选择插入指令Insert Directives

打开指令编辑器对话框。

61展示的对话框,对话框中的下拉菜单为了激活接口模式。

下来菜单为块级接口协议展示了三种选择

• ap_ctrl_none: 没有块级I/O控制协议

• ap_ctrl_hs: 块级I/O控制握手协议,我们已经采用的

• ap_ctrl_chain: 块级I/O协议的控制链。这个I/O协议主要是用于把流水线块链接在一起。

块级I/O协议ap_ctrl_chain不包含在这个教程中。这个协议与ap_ctrl_hs协议类似,但增加了额外的输入信号,ap_continue,它必须为高,当ap_done为了继续下次事务被置位时。这允许下游模块在系统上施加回压,并进一步停止处理,这是不能接受新的数据。

6. Directives Editor对话框中的Destination Editor部分中,选择Source File

   默认情况下,指令被放置在directives.tcl文件。在这个例子中,该指令被放置在现有的I / O指令的源文件中。

7. 从下拉菜单中选择ap_ctrl_none

8. 点击OK

源文件现在有新的指令,在源文件代码和指令选项卡中都是高亮的。如图62

新指令表示与函数参数/接口相关联被称为返回。所有接口指令与函数参数相连接。对于块级I/O协议,返回参数被用于具体的块级接口。如果函数在源代码里没有返回参数也是可能的。

 

Figure 62: Block-LevelInterface Directive ap_ctrl_none

 

9. 在工具栏里点击Run C Synthesis按钮,或者用菜单Solution>Run C Synthesis来综合设计。

在源文件中添加的指令改变的源文件。图62所示源文件名为*adders.c。这个标记表明文件已经更改,但没有保存。

10. 点击YES 来接受对源文件的更改。

 当报告打开时,接口概述出现,如图63

Figure 63: Interface summary for ap_ctrl_none

当接口协议ap_ctrl_none被采用时,没有块级接口协议被添加到设计中。仅有诸如clock、reset和data端口。

注意,也没有ap_done信号,consumer模块接收来自ap_return的数据,当数据有效时,ap_return端口现在不能表明

另外,RTL协同仿真的功能需要一个块级I/O协议,为了自动协同仿真安排测试平台和RTL设计。任何试图用RTL协同仿真的结果在下面的错误信息中,停止RTL协同仿真

(理解上有误差)

@E [SIM-345] Cosim only supports the following 'ap_ctrl_none'designs: (1) combinational designs; (2) pipelined design with task interval of1; (3) designs with array streaming or hls_stream ports.

@E [SIM-4] *** C/RTLco-simulation finished: FAIL ***

退出vivado HLS GUI返回命令提示框

你可能感兴趣的:(ug871-vivado-high-level-synthesis-tutorial第4章lab1中文)