Vivado HLS AXI4接口 学习笔记(二)

1 端口级接口协议:AXI4接口

Vivado HLS支持的AXI4接口包括AXI4- stream (axis)和AXI4- lite(s_axilite)和AXI4 master (m_axi)接口

AXI4-Stream接口:只指定输入参数或输出参数,而不指定输入/输出参数。

AXI4-Lite接口:指定除数组以外的任何类型的参数。你可以在同一个AXI4-Lite接口中添加多个参数。

AXI4-master接口:仅在数组和指针(以及c++中的引用)上指定。你可以将多个参数分组到同一个AXI4接口中。

1.1 AXI4-Stream Interface

AXI4-Stream接口可以应用于任何输入参数和任何数组或指针输出参数。

1.2 AXI4-Lite Interface

使用AXI4-Lite接口来允许由CPU或微控制器控制设计。使用Vivado HLS AXI4-Lite接口,你可以:

1、将多个端口分组到同一个AXI4-Lite接口中。

2、输出C驱动程序文件,以便与运行在处理器上的代码一起使用。

Note:它提供了一组C应用程序编程接口(API)函数,它允许您从软件轻松地控制硬件。这在将设计导出到IP目录时非常有用。

Xilinx建议在AXI4-Lite接口中包含与返回端口相关联的块级I/O协议。

在一个AXI4-Lite接口中,Vivado HLS为块级I/O协议信号和中断控制保留0x0000到0x000C的地址。

1.3 AXI4-master Interface

对于单个数据传输,Vivado HLS读取或写入每个地址的单个数据元素。下面的示例显示了单个读和单个写操作。在本例中,Vivado HLS在AXI接口上生成一个地址来读取单个数据值,并生成一个地址来写入单个数据值。接口为每个地址传输一个数据值。

在突发模式传输中,Vivado HLS使用一个基址,后跟多个顺序数据样本来读取或写入数据,这使得这种模式能够实现更高的数据吞吐量。当您使用C memcpy函数或流水线for循环时,可以使用突发操作模式。

在突发模式中使用for循环,要注意

1、使用 pipeline

2、按递增顺序访问地址

3、不要在条件语句中放置访问

4、对于嵌套循环,不要扁平循环,因为这将抑制突发操作

5、在for循环中只允许一次读和一次写,除非端口被绑定在不同的AXI端口中(bundle)

要创建最佳的AXI4接口,接口指令中提供了以下选项来指定突发的行为并优化AXI4接口的效率。

1、latency:指定AXI4接口的预期延迟,允许设计在预期的读或写之前启动总线请求数个周期(延迟)。如果这个数字太低,设计就会准备得太早,可能会耽误公交车的等待。如果这个数字太高,总线访问可能被授予,但是总线可能会停止等待设计开始访问。

2、max_read_burst_length:指定在突发传输期间读取的数据值的最大数。

3、num_read_outstanding:指定在设计停止之前,在没有响应的情况下可以向AXI4总线发出多少读请求。

4、max_write_burst_length:指定在突发传输期间写入的数据值的最大数目。

5、num_write_outstanding:指定在设计停止之前,在没有响应的情况下可以向AXI4总线发出多少写请求。

在AXI4接口中控制地址偏移量

offset = < >

off:不应用偏移地址。这是默认的

direct:在设计中添加一个32位端口,用于应用地址偏移量

slave:在AXI4-Lite接口中添加一个32位寄存器,用于应用地址偏移量。

如果在AXI接口中使用slave选项,则必须在设计接口上使用AXI4-Lite端口。Xilinx建议使用以下pragma实现AXI4-Lite接口:

另外,如果使用slave选项并且使用了几个AXI4-Lite接口,则必须确保将AXI主端口偏移寄存器绑定到正确的AXI4-Lite接口中。在下面的示例中,端口a被实现为一个AXI主接口,带有一个名为AXI_Lite_1和AXI_Lite_2的偏移量和AXI4-Lite接口:

2 HLS Stream Library

Vivado HLS提供了一个c++模板类hls::stream< >来建模流数据结构。用hls::stream< >类实现的流具有以下属性:

1、在C代码中,一个hls::stream<>的行为类似于一个无限深度的FIFO。不需要定义hls::stream<>的大小。

2、按顺序读取和写入它们。也就是说,从hls::stream< >中读取数据后,将无法再次读取该数据。

3、默认情况下,顶级接口上的hls::stream< >是通过ap_fifo接口实现的。

4、设计内部的一个hls::stream< >被实现为一个深度为1的FIFO。优化指令流用于更改默认大小。

 

#include "hls_stream.h"

当流被传入和传出函数时,它们必须按引用传递,如下例所示:

阻塞方式

非阻塞方式

 

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值