用于实现总线连接的方法及系统
技术领域
本发明涉及用于实现总线连接的方法及系统。
背景技术
随着集成技术的发展和应用领域的不断扩大,不同类型的集成电路相互镶嵌,形成了各种嵌入式系统(Embedded System,ES)和片上系统(System On Chip,SOC)。其中,SOC指的是在单个芯片上集成一个完整的系统,对所有或部分必要的电子电路进行包分组的技术。所谓完整的系统一般包括中央处理器(CPU)、存储器、以及外围电路等。
SOC之间的互联对于总线要求也相应的较高,由于先进可扩展接口(Advanced eXtensible Interface,AXI)总线是一种读写分开,地址和数据分开的效率非常高的高级总线互联技术,因此,一般SOC之间的互联会采用AXI总线。然而,有时需要在芯片之间或者芯片与现场可编程门阵列(Field-Programmable Gate Array,FPGA)之间采用AXI总线进行连接,由于芯片的可编程模拟器件(Programmable Analog Device,PAD)和FPGA的PAD本身的延迟就比较大,在这种情况下,采用AXI总线连接的时候,其运行的频率不可能很高,时序不能满足高频率运行的要求。
发明内容
本发明的目的在于提供用于实现总线连接的方法及系统,克服总线连接时的时序问题,正确实现数据交互。
本发明提供用于实现总线连接的方法,该方法包括:
主模块缓冲器接收主模块发起的先进可扩展接口总线的传输请求;
所述主模块缓冲器根据所述传输请求写入信息;
当所述主模块缓冲器中有信息时,所述主模块缓冲器向从模块缓冲器发送所述信息;
之后,所述信息被所述从模块缓冲器发送给从模块。
进一步的,所述主模块缓冲器向从模块缓冲器发送所述信息包括:
当所述从模块缓冲器的空位大于预定值时,所述主模块缓冲器向所述从模块缓冲器写入所述信息。
进一步的,所述主模块缓冲器向从模块缓冲器发送所述信息包括:
所述主模块缓冲器向所述从模块缓冲器发送有效的握手信号;
同时,所述主模块缓冲器将所述信息发送出去。
进一步的,所述主模块缓冲器向从模块缓冲器发送所述信息还包括:
所述从模块缓冲器向所述主模块缓冲器反馈握手信号。
进一步的,所述主模块缓冲器向从模块缓冲器发送所述信息还包括:
所述主模块缓冲器将发送的有效的握手信号和所述从模块缓冲器反馈的握手信号进行逻辑与,得到新的握手信号;
所述主模块缓冲器将所述新的握手信号发送给所述从模块缓冲器。
本发明还提供用于实现总线连接的系统,该系统的各模块之间采用先进可扩展接口总线连接,该系统包括:
主模块,用于发起先进可扩展接口总线的传输请求;
主模块缓冲器,用于所述接收主模块发起的先进可扩展接口总线的传输请求,写入信息;
从模块缓冲器,用于接收所述主模块缓冲器发送的所述信息;
从模块,用于接收所述从模块缓冲器发送的所述信息。
进一步的,所述主模块缓冲器包括:
写入单元,用于根据所述传输请求写入信息;
发送单元,用于向所述从模块缓冲器发送所述信息。
进一步的,所述主模块缓冲器还包括:
判断单元,用于判断所述从模块缓冲器的空位是否大于预定值;
所述发送单元,还用于当所述从模块缓冲器的空位大于预定值时,向所述从模块缓冲器写入所述信息。
进一步的,所述主模块缓冲器还包括:
握手单元,用于向所述从模块缓冲器发送有效的握手信号。
进一步的,所述主模块缓冲器还包括:
反馈单元,用于接收所述从模块缓冲器的反馈握手信号。
进一步的,所述主模块缓冲器还包括:
计算单元,用于将所述握手单元的握手信号和所述反馈单元接收的反馈握手信号进行逻辑与运算,作为新的握手信号,发送给所述从模块缓冲器。
采用本发明提供的用于实现总线连接的方法及系统,在主模块和从模块之间采用了主模块缓冲器和从模块缓冲器,使得主模块和从模块之间的信号输入/输出都是寄存器相连,从而最大程度的保证总线连接的时序优化。
进一步的,采用了预发机制,当从模块缓冲器的空位大于预定值时,才可以接收数据,即,在从模块缓冲器还有部分空位的时候就停止接收数据,从而避免由于延时造成的时序问题,实现数据的正确交互。
更进一步的,采用了携带反馈机制,主模块缓冲器发出的握手信号不仅仅是由主模块缓冲器发出,还与从模块缓冲器反馈的握手信号进行了逻辑与运算,从而根据反馈的信号对于主模块缓冲器发出的握手信号进行修正,保证数据的正确传输。
附图说明
图1示出普通AXI总线连接方式;
图2示出普通AXI总线在时序路径过长时候的错误交互;
图3示出本发明实施例中实现总线连接方法的流程示意图;
图4示出本发明实施例中带先入先出队列(First Input First Output,FIFO)缓冲的AXI总线连接;
图5示出本发明实施例中带FIFO缓冲的AXI总线连接的出错情况;
图6示出本发明实施例中带FIFO缓冲和预发模式的非标准AXI总线连接;
图7示出本发明实施例中非标准AXI总线的时序;
图8示出本发明实施例中FIFO的预发模式;
图9示出本发明实施例中实现总线连接系统的结构示意图。
具体实施方式
下面结合附图对本发明的具体实施方式做详细阐述。图1所示是现有的AXI总线的连接方式。其主模块(AXI MASTER)和从模块(AXI SLAVE)直接相连接,在这种连接情况下。如果两个芯片或者两个FPGA以及芯片与FPGA之间需要用AXI总线来进行连接,那么PAD以及走线的延迟(delay)加起来可能会造成超过一个周期的delay。如果主模块和从模块之间的时序路径超过一个周期,就会出现图2中出现的错误情况。由于连接上出现超过一个周期的delay,在主模块端有效的valid信号在第一个周期发出,到从模块端,要到第二个周期才会被采集到。从模块端接收到valid有效信号,将ready信号置为高,然后反馈到主模块端,需要到第三个周期才能被主模块接收到。在主模块端,valid信号就会一直维持到第三个周期才会结束,而在从模块端,valid信号会维持到第四个周期才会结束。这样,从模块端会多接收到两个周期的valid信号,这两个信号可能造成错误的交互操作。为了克服以上在高频情况下,芯片之间或者芯片与FPGA之间以及FPGA之间采用AXI总线连接时候的时序问题,本发明提出用于实现总线连接的方法,是一种基于AXI协议但不同于AXI协议的总线连接方法,适用于高频接口上使用。实现本发明的总线连接的方法,采用以下四个模块:分别是AXI的主模块(MASTER)、从模块(SLAVE)、主模块FIFO缓冲器和从模块FIFO缓冲器。其中主模块主要用于发起AXI的传输请求,包括读请求和写请求。从模块为接受方,受理读请求和写请求。
具体的,请参见图3,该方法提出FIFO缓冲机制,包括:
301、主模块缓冲器接收主模块发起的AXI的传输请求;
302、主模块缓冲器根据传输请求写入信息;
303、当主模块缓冲器中有信息时,主模块缓冲器向从模块缓冲器发送信息;
304、信息被从模块缓冲器发送给从模块。
其中,采用的主模块FIFO缓冲器和从模块FIFO缓冲器都是总线缓冲单元,这两个缓冲单元主要目的是为了保证片间的信号的输入和输出都是寄存器相连,从而保证最大程度的时序优化。
进一步的,本方法还提出预发机制,当从模块缓冲器的空位大于预定值时,主模块缓冲器向从模块缓冲器写入信息。预定值可以根据具体的总线连接情况而定,可以设置为两个。具体实现可以包括:在正常情况下,AXI总线的每个通道的握手是通过两个信号VALID和READY来进行。VALID是由主动方发出,READY是由从动方反馈,当两者都为高的时候,表示一次传输完成。对于从模块FIFO而言,只要其内部有空位,就意味着它可以接受数据,它就会一直把READY信号拉高,告诉主动方其可以接受数据。直到从模块FIFO里面填满,它就把反馈的READY信号拉低,这就相当于告诉主动方,现在不能接受数据,需要主动方等待。直到从模块FIFO的数据被取走,留下了FIFO空位,READY才会再次拉高。而预发模式下,READY信号的拉低机制是不同的,当FIFO的空位大于两个的时候,READY信号一直拉高,从模块FIFO可以接受数据,但是FIFO空位只剩下两个的时候,READY信号立即拉低。在从模块缓冲器还有部分空位的时候就停止接收数据,从而避免由于延时造成的时序问题,实现数据的正确交互。
进一步的,本方法还提出携带反馈机制,主模块缓冲器向从模块缓冲器发送有效的握手信号,从模块缓冲器向主模块缓冲器反馈握手信号,主模块缓冲器将发送的有效的握手信号和从模块缓冲器反馈的握手信号进行逻辑与,得到新的握手信号;主模块缓冲器将新的握手信号发送给从模块缓冲器。在正常情况下,主动方FIFO握手信号VALID是完全由主动方发出的。在本发明中,需要把主动方FIFO发出的VALID信号与从动方FIFO反馈的READY信号做逻辑与运算,再送给从动方FIFO。根据反馈的信号对于主模块缓冲器发出的握手信号进行修正,保证数据的正确传输。
图4示出缓冲机制的具体应用。在本应用中,约定把主动发出VALID端的FIFO称为主FIFO,另外一边的FIFO则是从FIFO。这样主模块端的AR,AW,W三个通道的FIFO,还有从模块端的B,R两个通道的FIFO都是主FIFO,其他5个FIFO则是从FIFO。
对于主FIFO,当主动模块的VALID有效,而且主FIFO有空位置的时候,就会向主FIFO写入信息。当主FIFO有信息,就会向从FIFO发出有效的VALID,同时将信息发送出去,一旦从FIFO端的READY信号有效,就完成一次传输。
对于从FIFO,当VALID有效,从FIFO有空位置的时候,就向从FIFO写入信息。当从FIFO有数据,就从其中取出信息发送往从模块,同时拉高与从模块连接的VALID信号,直到从模块端READY信号有效,发送成功。
通过在AXI总线上插入两级FIFO机制,可以有效的提高AXI的时序。但是仅仅用FIFO缓冲的机制,可能还是会有时序的违例存在,尤其是在芯片(FPGA)与芯片(FPGA)之间连接的时候,如果PAD和走线的延迟比较大,这种办法依然解决不了功能正确性的问题。
如图5所示,如果PAD和走线的延迟超过一个周期,使用FIFO缓冲机制就会出现图5中所示的时序违例,主模块端会多发数次VALID有效的传输信号,也就是会多传输几次信号。
图6示出缓冲机制与预发机制的应用。在正常情况下,当VALID信号和READY信号都为高的时候,数据传输成功,完成一次正常握手,图1,图4两种情况都是如此,这是标准的AXI接口方式。在预发模式下,从FIFO端的接口VALID和READY信号不再遵循这个关系。当从模块的FIFO还有空位的时候,而且VALID信号为高电平的时候,就会向从模块的FIFO写入数据,而这个时候从模块发出的VALID信号不一定为高电平。如图8所示,在正常模式下,从模块端的READY信号是在FIFO有空位的时候一直拉高从而保证可以接受数据,而FIFO一旦满就立即拉低,使得数据不能写入。但是在预发模式下,从模块端的READY信号在FIFO还有空位的时候就预先拉低,这样数据还在写入,但是READY已经不是高电平,这是一种非标准的AXI交互模式。
预发模式除了预先拉低从FIFO,如图6所示,还需要在主动FIFO的端口将READY信号与发出的VALID信号与一下再发送出去,才能保证功能的正确性,仅仅是在预发模式拉低READY信号会导致数据传输出错。因为在主FIFO端,预先拉低的READY到达之后,主FIFO端认为从FIFO没有再接收数据,因此会一直把VALID拉高,这个一直拉高的VALID到达从FIFO端之后会被从FIFO认为是有效的写入,从而将信息写入FIFO之中,造成错误传输。
而在主动FIFO的端口将发出的VALID与取过来的READY信号与一下之后,从FIFO接受到的VALID信号就会拉低,如图7所示,这种情况下的传输就是正确的。
通过本发明所提供的实现总线连接的方法,当主FIFO与从FIFO之间的时序路径超过一个周期的时候,信息依然能够有效的在主FIFO和从FIFO之间传输。而且这种方式是一种流水线的方式,不会降低多少系统的效率。这样可以保证总线运行在较高的频率下,尤其适用于在片见的AXI总线连接的情况。
相应的,本发明还提供用于实现总线连接的系统,该系统的各模块之间采用先进可扩展接口总线连接,请参阅图9,该系统包括:
主模块901,用于发起先进可扩展接口总线的传输请求;
主模块缓冲器902,用于接收主模块发起的先进可扩展接口总线的传输请求,写入信息;
从模块缓冲器903,用于接收主模块缓冲器发送的信息;
从模块904,用于接收从模块缓冲器发送的信息。
进一步的,主模块缓冲器902可以包括:
写入单元902-1,用于根据传输请求写入信息;
发送单元902-2,用于向从模块缓冲器发送信息。
进一步的,主模块缓冲器还可以包括:
判断单元902-3,用于判断从模块缓冲器的空位是否大于预定值;
发送单元,还用于当从模块缓冲器的空位大于预定值时,向从模块缓冲器写入信息。
进一步的,主模块缓冲器还可以包括:
握手单元902-4,用于向从模块缓冲器发送有效的握手信号。
进一步的,主模块缓冲器还可以包括:
反馈单元902-5,用于接收从模块缓冲器的反馈握手信号。
进一步的,主模块缓冲器还可以包括:
计算单元902-6,用于将握手单元的握手信号和反馈单元接收的反馈握手信号进行逻辑与运算,作为新的握手信号,发送给从模块缓冲器。
以上所述仅是本发明的具体实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。