当设计在等待访问总线时,从不会在最优化 AXI4 接口上停滞,授予总线访问后,总线等待设计执行读/写时从不停滞。为创建最优化 AXI4 接口,在 INTERFACE 编译指示或指令中提供了以下选项以指定突发访问行为,并最优化 AXI4 接口的效率。如需了解有关突发传输的更多信息,请参阅 AXI 突发传输。
在某些情况下,如果自动突发访问失败,那么有效的解决方案是重写代码或者使用手动突发,如 使用手动突发 中所述。如果这些方法无效,那么另一个解决方案可能是在 AXI4 接口中通过 CACHE 编译指示或指令来使用高速缓存存储器。
重要: 变量上的
volatile
限定符会阻止突发访问对其进行读取或写入。其中部分选项使用内部存储空间来缓冲数据,并且可能影响面积和资源:
-
latency
:指定 AXI4 接口的期望时延,允许设计发起总线请求的时间比执行期望的读取或写入操作早数个周期(时延)。如果该值太低,设计将过早达成就绪状态,可能停滞并等待总线;如果该值太高,则可能授予总线访问权时,总线仍处于停滞状态并等待设计发起访问。 -
max_read_burst_length
:指定突发传输期间读取的数据值的最大数量。 -
num_read_outstanding
:指定在设计停滞前可对 AXI4 总线发出的读取请求的数量(无响应)。此操作暗示设计中的内部存储空间,即 FIFO 大小为:num_read_outstanding
*max_read_burst_length
*word_size
。 -
max_write_burst_length
:指定突发传输期间写入的数据值的最大数量。 -
num_write_outstanding
:指定在设计停滞前可对 AXI4 总线发出的写入请求的数量(无响应)。此操作暗示设计中的内部存储空间,即 FIFO 大小为:num_write_outstanding
*max_write_burst_length
*word_size
以下示例可用于帮助解释这些选项:
#pragma HLS interface mode=m_axi port=input offset=slave bundle=gmem0
depth=1024*1024*16/(512/8)
latency=100
num_read_outstanding=32
num_write_outstanding=32
max_read_burst_length=16
max_write_burst_length=16
接口时延指定为 100。Vitis HLS 希望将突发访问请求发生时间调度为比设计准备好访问 AXI4 总线的时间早 100 个时钟周期。为了进一步提高总线效率,num_write_outstanding
和 num_read_outstanding
选项可用于确保设计所含缓冲足以存储最多 32 次读写突发。这样即可允许设计持续处理,直至处理总线请求为止。最后,max_read_burst_length
和 max_write_burst_length
选项可确保最大突发量为 16,并且 AXI4 接口暂存总线的时间不超过该设置。
这些选项允许对 AXI4 接口行为进行最优化以满足运行该接口的系统的要求。操作效率取决于是否准确设置这些值。