• F-I-L
  • 文档
  • 联系
  • 接口

    更新于 2015.05.11

    F-I-L内所有的IP的接口中,都包含一套共有的基础端口,以及在此接口之上添加的扩展端口。基础端口,也就是所有模块的接口中,至少包含的一些端口,而由于每个模块自身的独特性,基础端口提供的功能往往不足以满足模块的实现,这时候就需要加入扩展端口。不但如此,由于每个模块基本都存在两种工作模式,所以需要两套不同的协议来满足需求。


    基础端口

    基础端口,也就是所有模块的接口中,至少包含的一些端口,这些端口被设计为如下形式:

    1. clk: 时钟信号,用于提供同步时钟。
    2. rst_n: 全局复位信号,用于复位和初始化。
    3. in_enable: 输入数据使能,用于控制输入数据流。
    4. in_data: 输入数据流,提供处理的数据源。
    5. out_ready: 输出数据有效,作为操作结束的标志。
    6. out_data: 输出数据流,送出处理后的数据。

    这些端口保证了每个模块的基本功能,如图:
    基础接口示意
    模块的运作方式如下:
    首先进行全局的复位,对模块进行初始化,而后输入数据随着输入数据使能信号输入模块,在同步时钟的若干个周期后准备好输出数据,使能输出数据有效信号,通知外部电路取出数据。

    扩展端口

    由于每个模块自身的独特性,基础端口提供的功能往往不足以满足模块的实现,所以这时候需要加入扩展端口来满足需求,扩展端口一般被设计为以下形式:

    1. x: 不定端口,取决于模块自身的要求,比如对于阈值化模块,这个参数就是阈值。
    2. in_count_x: 输入坐标的x分量,通常用于几何变换。
    3. in_count_y: 输入坐标的y分量,通常用于几何变换。
    4. out_count_x: 输出坐标的x分量,通常用于几何变换。
    5. out_count_y: 输出坐标的y分量,通常用于几何变换。
    6. frame_addr: 通常用于帧控制,提供某一个输出数据的地址。

    这些端口和基础端口合并起来,便可以满足每一个模块的需求,如图:
    完整接口示意
    至此,接口的硬件部分便设计完毕。

    接口协议

    接口的硬件部分定义结束后,还必须定义其协议部分。由于每一个模块同时存在流水线模式和请求响应模式,同时为了兼容已有的接口标准,达到最简化的设计目的,我让两种模式遵循了同一套接口标准,不同的仅仅是在两种模式下接口的行为方式。

    流水线模式

    流水线模式时,在输入使能in_enable有效的情况下,从第一次输出数据有效标志out_ready有效开始,输出数据out_data便会源源不断地送出,每一个周期都会送出一个有效数据。在这种模式下,从第一个数据有效开始,输出便是连贯的,如图: 流水线模式时序
    这种模式一般用于需要连续数据流的应用中,由于采用了流水线做缓冲,所以一开始的若干个周期延迟在实际运用中是不需要关心的,也故理论上可以插入任意级流水来达到最高的Fmax(工作频率)。

    请求响应模式

    在这个模式下,in_enable和out_ready两个标志信号被当做请求信号req和响应信号ack,输入数据in_data随着每一次in_enable的上升沿被送入模块进行处理,处理完成后out_ready有效来通知外部电路取走数据,直到下次in_enable的上升沿到来为止,输出数据的状态都不会发生改变,如图:
    请求响应模式时序
    这种模式一般用于一些特殊的模块,比如直方图操作下的模块,对于这些模块,流水化的操作是没有意义的。此外,这种模式还可以被用于和软件的交互中,因为软件很难做到同步数据流的模式。