所谓接口(Interface),从硬件角度而言,可理解为电路的输入、输出端口;从软件角度而言,可理解为函数的参数列表也就是形参,进一步分为输入参数和输出参数。如果没有输出参数,而有返回值,那么return的对象可理解为输出参数。这样,两者就对应起来,但并不是简单的对应。如前所述,Vivado HLS需要提取控制逻辑构成状态机,因此会形成一些握手信号,比如ap_start,ap_done,ap_idle,ap_ready等。事实上,Vivado HLS还提供了其他的接口原型供选择,但ap_ctrl_hs(会生成前述4个端口)较为常用。
在接口综合方面,数组较为特殊。因为数组未必会直接映射为Memory(对应FPGA内的存储单元,如Regisers, LUTRAM,BRAM等)。倘若数组在带综合函数的顶层,那么会生成相应的控制端口,例如:读/写使能;读/写地址等。
更为深入的介绍可以阅读以下文档:
ug902(v2018.1) High-Level Synthesis User Guide page 84 - page 107
ug871(v2018.1) High-level Synthesis Tutorial Ch4: Interface Synthesis Lab 1, Lab 2