FPGA基础知识(三)UG902 接口综合

本文是我在学习FPGA时学到的相关知识与总结,希望可以帮助同行理解和掌握相关的FPGA知识。可以将本文档当作相应FPGA教程文档UG902的辅助文档学习。主要内容为文档中关于接口的部分。转载请注明出处。

Xilinx原版教程文档参见Xilinx Documentation navigator 中对应UG902:Vivado Design Suite User Guide High-Level Synthesis中的Manage Interface部分。

目录

Manage Interface

vivado HLS在RTL设计中创建了三个类型的管脚

时钟与复位管脚

block-level的接口协议

port-level的接口协议

管脚综合与OpenCL

block-level的接口协议


Manage Interface

在c语言的设计中,所有的输入输出操作都直接通过函数的参数(argument)来传递;在RTL设计中这些操作的进行都必须通过具体的I/O协议来完成。

vivado HLS通过两种方法来创建相应的IO 协议

Interface Synthesis:通过标准的工业接口来实现管脚创建。

手动确定接口:可以在源码中进行描述,这可以实现任意的IO协议。

当最高层级的函数被综合时,相应的参数就会被综合为RTL管脚,这个过程叫做接口综合。

例子:

FPGA基础知识(三)UG902 接口综合_第1张图片

  • 这个程序里面包含两个输入,in1和in2
  • 指针sum,对指针指向的位置行了读和写
  • 函数return和temp值

这个函数被综合为下面 图1-37这个RTL块:

FPGA基础知识(三)UG902 接口综合_第2张图片

vivado HLS在RTL设计中创建了三个类型的管脚

  • 时钟和复位管脚ap_clk和ap_rst
  • block level的接口协议,这些在图1-37中显示:ap_start、ap_done、ap_ready、ap_idle
  • port level的接口协议,这些接口为顶层函数中的参数创建,in1、in2、sum_i、sum_o、sum_o_ap_vld、ap_return

时钟与复位管脚

若是设计需要大于一个时钟周期才能结束,则需要一个时钟管脚和复位管脚,添加板子enable管脚可以在Solution > Solution Settings > General and config_interface configuration. 更多相关信息在clock,reset,RTL output这一章中。我们暂不讨论。

block-level的接口协议

默认情况下,block-level的接口协议会被加入设计之中,这些信号会控制相应的block。ap_start:block可以处理数据,ap_ready:块可以接受数据   ap_idle:块空闲  ap_done:块已完成操作

port-level的接口协议

最终确认的一系列管脚是数据管脚,IO协议创建了一系列基于c语言参数的管脚。所有的IO协议如图1-39所示。port-level的IO协议用于将数据送入和送出block。

D:default

I:输入,只能read

O:输出,只能written to

IO:输入输出参数,能被read和witten。

FPGA基础知识(三)UG902 接口综合_第3张图片

default模式下,参数值和指针的port是简单的线连接,并不需要handshaking signal,例如上面的程序例子中输入端口就没有相应的IO协议,如果port没有IO协议,则输入数据必须保持稳定直到它被接受。

default模式下,输出的信号必须连带一个output valid signal来说明输出数据是有意义的。上面的例子中,输出的port就是连带一个output valid signal:sum_o_ap_vld。 如果没有IO协议的话,很难知道输出端口什么时候会输出数据,因此尽量要在output上运用IO协议。

如果函数有一个返回值,则ap_return就被用于提供返回值,当block-level的协议用ap_done说明函数被执行完毕,同时说明ap_return是有效的并且可以被读取。(注意,返回值不能是指针)。

FPGA基础知识(三)UG902 接口综合_第4张图片

可以根据图1-38理解一下相应管脚的意思。

  • ap_start高位的时候,函数开始
  • ap_idle低位的时候表示程序正在运行
  • 输入数据会在第一个时钟之后的时钟读取,ap_ready信号在所有数据读取完之后会高位。
  • 输出sum被计算出之后,output handshake : sum_o_ap_vld高位表明数据可读。
  • ap_idle高位表明程序可以再次开始。

管脚综合与OpenCL

  • 在综合过程中,vivado HLS会把OpenCL的API C综合为下面这些:
  • 所有scalar的接口和block level的接口会被综合为单个AXI4-Lite接口
  • 所有数组和指针会被综合为单个AXI4接口(关于AXI4-lite与AXI4协议有何区别)

block-level的接口协议

block-level的接口协议是ap_ctrl_none和ap_ctrl_hls和ap_ctrl_chain. 这些只能在函数和函数返回时用。即使函数没有返回值,block-level的协议依然可以被当作函数返回来用。

ap_ctrl_hs

未完 UG 902 的 P91附近

你可能感兴趣的:(FPGA,FPGA基础知识)