一种流量控制的电路和方法与流程

文档序号:33191683发布日期:2023-02-04 08:45阅读:24来源:国知局
一种流量控制的电路和方法与流程

1.本发明涉及通信技术领域,具体涉及一种流量控制的电路和方法。


背景技术:

2.在通信技术领域,设备之间通常需要进行数据交互,交互的过程中可以采用pcie(peripheral component interconnect express,pci express)协议,在pcie协议的传输层通过流量控制来控制数据包的传输。具体的,所述pcie协议适用于设备与设备之间的数据包传输。在两个设备进行数据交互之前,需要通过特殊的初始化过程将两个设备的缓冲寄存器容量的最大值通知对方,但是上述pcie协议不适用于在同一芯片上两个不同晶粒之间的数据传输。
3.综上所述,如何实现同一芯片上两个不同晶粒之间的数据传输时的流量控制是目前需要解决的问题。


技术实现要素:

4.有鉴于此,本发明实施例提供了一种流量控制的电路和方法,可以实现同一芯片上两个不同晶粒之间的数据传输时的流量控制。
5.第一方面,本发明实施例提供了一种流量控制的电路,该电路包括:远端电路和近端电路;所述远端电路包括流量控制发射组件、请求缓冲区;所述流量控制发射组件用于收集所述请求缓冲区的流量控制信息,生成并发送流量控制数据包;所述请求缓冲区用于存储请求数据包;所述近端电路包括流量控制接收组件、信用检查组件、缓存检查组件、应答缓冲区;其中,所述流量控制接收组件用于,接收所述流量控制数据包;所述信用检查组件用于,根据流量信息确定所述请求缓冲区的第一信号,以及判断所述请求缓冲区的第一信号的状态;其中,所述流量信息包括所述流量控制接收组件接收的流量控制数据包,以及所述请求缓冲区的写入操作信息;所述缓存检查组件用于,判断所述应答缓冲区的将第二信号的状态,以及用于将所述请求数据包发送至所述请求缓冲区;所述应答缓冲区用于,存储所述请求数据包对应的应答数据包。
6.可选的,响应于所述信用检查组件判断所述远端电路的请求缓冲区的第一信号为第一状态,所述信用检查组件具体用于发送所述请求数据包至缓存检查组件,其中,所述第一状态表示所述请求缓冲区还能接收所述请求数据包。
7.可选的,响应于所述缓存检查组件判断所述近端电路的应答缓冲区的第二信号为第三状态,所述缓存检查组件具体用于发送所述请求数据包至所述请求缓冲区,其中,所述第三状态表示所述应答缓冲区还能接收所述应答数据包。
8.可选的,所述写入操作信息至少包括所述请求缓冲区的写指针,流量控制数据包中至少包括所述请求缓冲区的读指针;
9.所述信用检查组件具体用于获取本地维护的所述请求缓冲区的写指针,以及从所述远端设备获取所述请求缓冲区的读指针,根据所述请求缓冲区的写指针以及所述请求缓
冲区的读指针确定所述请求缓冲区的第一信号。
10.可选的,响应于所述请求缓冲区的写标志位不等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针时;或者,所述请求缓冲区的写标志位等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针等于所述请求缓冲区的读指针时;或者,所述请求缓冲区的写标志位等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针时,所述信用检查组件确定所述第一信号为第一状态;
11.响应于所述请求缓冲区的写标志位不等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针等于所述请求缓冲区的读指针时,所述信用检查组件确定所述第一信号为第二状态,其中,所述第二状态表示所述请求缓冲区已满,不能接收所述请求数据包。
12.可选的,所述缓存检查组件具体用于获取所述应答缓冲区的写指针以及所述应答缓冲区的读指针,根据所述应答缓冲区的写指针以及所述应答缓冲区的读指针确定所述应答缓冲区的第二信号的状态。
13.可选的,响应于所述应答缓冲区的距离小于或等于第一数值时,所述缓存检查组件确定所述第二信号为第三状态,其中,所述第一数值等于应答缓冲区的最大容量与所述应答数据包的最大数据长度的差值;所述距离用于表征所述应答缓冲区的已用容量;
14.响应于所述应答缓冲区的距离大于所述第一数值时,所述缓存检查组件确定所述第二信号为第四状态,其中,所述第四状态表示所述应答缓冲区不接收所述应答数据包,所述第一数值等于应答缓冲区的最大容量与所述应答数据包的最大数据长度的差值。
15.可选的,响应于所述应答缓冲区的写标志位等于所述请求缓冲区的读标志位,所述距离等于所述请求缓冲区的写指针与所述请求缓冲区的读指针的差值;
16.响应于所述应答缓冲区的写标志位不等于所述请求缓冲区的读标志位,所述距离等于第一和值与所述请求缓冲区的读指针的差值,其中,所述第一和值等于所述请求缓冲区的写指针与所述应答缓冲区的最大容量的和。
17.可选的,所述请求缓冲区的容量根据延时时间确定。
18.可选的,所述流量控制发射组件还包括定时器,所述流量控制发射组件生成的所述流量控制数据包中包括所述请求缓冲区的读标志位以及所述请求缓冲区的读指针。
19.可选的,所述流量控制接收组件还用于解析所述流量控制数据包,获取所述请求缓冲区的读标志位以及所述请求缓冲区的读指针。
20.可选的,所述远端电路与所述近端电路分别为芯片中的晶粒。
21.第二方面,本发明实施例提供了一种流量控制的方法,该方法包括:
22.确定近端电路有待发送请求数据包,获取远端电路的请求缓冲区的第一信号,以及所述近端电路的应答缓冲区的第二信号;
23.响应于所述第一信号为第一状态时,且所述第二信号为第三状态时,所述近端电路将所述请求数据包发送至所述远端电路,以写入所述请求缓冲区。
24.可选的,该方法还包括:
25.获取本地维护的所述远端电路的所述请求缓冲区的写指针,以及从所述远端设备获取所述请求缓冲区的读指针;
26.根据所述请求缓冲区的写指针以及所述请求缓冲区的读指针,确定所述请求缓冲
区的第一信号。
27.可选的,该方法还包括:
28.获取所述应答缓冲区的写指针以及所述应答缓冲区的读指针;
29.根据所述应答缓冲区的写指针以及所述应答缓冲区的读指针,确定所述应答缓冲区的第二信号。
30.第三方面,本发明实施例提供了一种芯片,包括晶粒,所述晶粒包括所述第一方面或第一方面任一种可能所述的电路。
31.第四方面,本发明实施例提供了一种板卡,所述板卡上包括所述第三方面的芯片。
32.第五方面,本发明实施例提供了一种服务器,所述服务器上包括所述第四方面的板卡。
33.本发明实施例中,所述远端电路包括流量控制发射组件、请求缓冲区;所述流量控制发射组件用于收集所述请求缓冲区的流量控制信息,生成并发送流量控制数据包;所述请求缓冲区用于存储请求数据包;所述近端电路包括流量控制接收组件、信用检查组件、缓存检查组件、应答缓冲区;其中,所述流量控制接收组件用于,接收所述流量控制数据包;所述信用检查组件用于,根据流量信息确定所述请求缓冲区的第一信号,以及判断所述请求缓冲区的第一信号的状态;其中,所述流量信息包括所述流量控制接收组件接收的流量控制数据包,以及所述请求缓冲区的写入操作信息;所述缓存检查组件用于,判断所述应答缓冲区的将第二信号的状态,以及用于将所述请求数据包发送至所述请求缓冲区;所述应答缓冲区用于,存储所述请求数据包对应的应答数据包。通过上述电路可以实现同一芯片上两个不同晶粒之间进行数据传输时的流量控制。
附图说明
34.通过以下参照附图对本发明实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:
35.图1是本发明实施例的一种流量控制电路示意图;
36.图2是本发明实施例的一种请求数据包的处理流程图;
37.图3是本发明实施例的一种第一信号状态的处理流程图;
38.图4是本发明实施例的一种缓冲寄存器示意图;
39.图5是本发明实施例的一种第二信号状态的处理流程图;
40.图6是本发明实施例的一种流量控制电路示意图。
具体实施方式
41.以下基于实施例对本发明公开进行描述,但是本发明公开并不仅仅限于这些实施例。在下文对本发明公开的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明公开。为了避免混淆本发明公开的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。
42.此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。
43.除非上下文明确要求,否则整个申请文件中的“包括”、“包含”等类似词语应当解
释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。
44.在本发明公开的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明公开的描述中,除非另有说明,“多个”的含义是两个或两个以上。
45.通常在现有技术中,设备与设备之间进行数据包传输时,通常会采用pcie协议,在pcie协议的传输层通过流量控制来控制数据包的传输。具体的,在两个设备进行数据交互之前,需要通过特殊的初始化过程将两个设备的缓冲寄存器容量的最大值通知对方,避免数据包再传输时出现溢出的情况,但是上述pcie协议不适用于在同一芯片上两个不同晶粒之间的数据传输,在系统初始化时,或者链路状态发生变化时需要需要进行特殊的初始化过程,数据传输流畅较为复杂。
46.本发明实施例中,假设两个晶粒分别为上游晶粒和下游晶粒,所述上游晶粒向下游晶粒发送请求数据包,所述请求数据包存储在下游晶粒的请求缓冲区中;所述下游晶粒向上游晶粒发送应答数据包,所述应答数据包存储在上游晶粒的应答缓冲区中;为了保证在数据包传输过程中,所述请求缓冲区和所述应答缓冲区不溢出,设计了一种单独进行流量控制的电路,以实现同一芯片上两个不同晶粒之间进行数据传输时的流量控制。
47.本发明实施例中,所述上游晶粒还可以称为上游、近端或近端电路,所述下游晶粒还可以称为下游、远端或远端电路,本发明实施例对其不做限定,只要表示同一个芯片中的两个晶粒即可。
48.本发明实施例中,图1是本发明第一实施例的一种流量控制的电路示意图,该电路包括:近端电路101和远端电路102。
49.具体的,所述近端电路101用于发送请求数据包,接收流量控制数据包和应答数据包,所述近端电路101包括信用检查组件1011、缓存检查组件1012、流量控制接收组件1013、应答缓冲区1014;所述信用检查组件1011根据流量信息确定所述请求缓冲区的第一信号,以及判断所述请求缓冲区的第一信号的状态,其中,所述流量信息包括所述流量控制接收组件接收的流量控制数据包,以及所述请求缓冲区的写入操作信息;具体的,上述确定可以为直接获取、产生或更新,本发明实施例对具体的确定方式不做限定。所述缓存检查组件1012用于判断所述应答缓冲区1014的第二信号的状态以及用于将所述请求数据包发送至所述请求缓冲区;所述流量控制接收组件1013用于接收流量控制数据包,所述应答缓冲区1014用于存储所述请求数据包对应的应答数据包;所述远端电路102用于接收所述请求数据包,发送所述流量控制数据包和所述应答数据包,所述远端电路102包括流量控制发射组件1021、请求缓冲区1022;所述流量控制发射组件1021用于收集流量控制信息,生成并发送所述流量控制数据包;所述请求缓冲区1022用于存储请求数据包。
50.本发明实施例中,所述写入操作信息至少包括所述请求缓冲区的写指针,流量控制数据包中至少包括所述请求缓冲区的读指针。
51.本发明实施例中,所述第一信号用于表征请求缓冲区的存储状态,即是否还可写入数据。具体的,该第一信号可为full信号。其中,full信号为0,可表示该请求缓冲区还可写入数据,full信号为1,可表示该请求缓冲区已满,不可再写入数据。第二信号表征请求缓冲区的存储状态,即是否还可针对发送的请求写入对应的应答数据。具体的,该第二信号可为almost_full信号。其中,almost_full信号为0,可表示该应答缓冲区还可写入待发送请
求的应答数据,almost_full信号为1,可表示应答缓冲区无法写入待发送请求的应答数据。
52.在一种可能的实现方式中,所述请求数据包中包含自身的数据长度信息以及针对所述请求数据包返回的应答数据包的长度信息;所述近端电路101发送请求数据包至远端电路102,所述远端电路102发送所述请求数据包对应的应答数据包至近端电路101。
53.本发明实施例中,该电路还包括传输电路103,所述传输电路103用于传输请求数据包、所述应答数据包以及所述流量控制数据包,即实现近端电路与远端电路之间的数据传输。进一步,两个晶粒之间的所述传输电路103还可以称为非恒定延时传输系统,不同的数据包在通过传输电路传输的过程中传输的时间可能不同。
54.下面通过一个具体实施例对近端电路发送请求数据包的处理过程进行详细说明,具体如图2所示:
55.步骤s200、确定近端电路有待发送的请求数据包,信用检查组件接收到所述请求数据包后,判断所述请求缓冲区的第一信号的状态。
56.具体的,所述近端电路发送请求(require)数据包时,首先需要判断请求缓冲区(require buffer)接收到所述请求数据包后是否会溢出,具体的,通过所述信用检查组件(credit checker)判断所述请求缓冲区的第一信号(full)的状态,当所述信用检查组件判断所述请求缓冲区的第一信号为第一状态时,所述信用检查组件发送所述请求数据包至缓存检查组件(buffer check),其中,所述第一状态表示所述请求缓冲区还能接收所述请求数据包,所述第一状态可以用full为0表示。
57.步骤s201、在所述请求缓冲区的第一信号为第一状态时,所述信用检查组件发送所述请求数据包至缓存检查组件(buffer check)。
58.步骤s202、所述缓存检查组件判断所述应答缓冲区的第二信号状态。
59.步骤s203、在所述应答缓冲区的第二信号为第三状态时,所述缓存检查组件发送所述请求数据包至所述请求缓冲区。
60.具体的,所述缓存检查组件发送所述请求数据包至传输电路,由所述传输电路再发送至所述请求缓冲区。
61.本发明实施例中,由于近端发送的请求数据包中携带了对应的应答数据包的长度信息,因此,在确定出所述请求缓冲区的第一信号为第一状态后,还需要确定缓存检查组件判断所述应答缓冲区的第二信号状态,当所述缓存检查组件判断所述应答缓冲区的第二信号为第三状态时,所述缓存检查组件发送所述请求数据包至所述请求缓冲区,其中,所述第三状态表示所述应答缓冲区还能接收所述应答数据包。
62.在一种可能的实现方式中,所述信用检查组件具体用于获取所述请求缓冲区(require buffer)的写指针(require_write_pointer)以及所述请求缓冲区的读指针(require_read_pointer),根据所述请求缓冲区的写指针以及所述请求缓冲区的读指针确定所述请求缓冲区的第一信号的状态,其中,所述请求缓冲区的写指针是近端电路维护的,不是从远端电路读取的;所述请求缓冲区的读指针是远端电路维护的,即远端电路的流量控制发射组件搜集到该请求缓冲区的读指针后发送至流量控制接收组件,是所述信用检查组件从所述流量控制接收组件中读取的。
63.具体的,信用检查组件在近端电路维护远端电路的请求缓冲区的写指针,即在向该远端电路发送请求数据包时,产生或更新该请求缓冲区的写指针,并将该写指针存入信
用检查组件。通过该方式维护的写指针,可避免由于传输延时导致的请求已发出但还未写入请求缓冲区导致的使用容量统计不准确的问题。
64.本发明实施例中,所述在近端电路维护远端电路的请求缓冲区的写指针并非所述请求缓冲区在实际意义上的写指针,即实际将数据写入请求缓冲区后,远端电路维护的写指针。但是由于本发明的目的在于防止缓冲区的溢出,获取所述请求缓冲区在实际意义上的写指针不能实现这一目的,因此,本发明实施例中,请求缓冲区的写指针都是指在近端电路维护远端电路的请求缓冲区的写指针,即在近端电路将请求数据包通过传输电路发送至远端电路后,在本地针对该远端电路的请求缓冲区维护的写指针。
65.所述请求缓冲区的读指针是远端电路维护的,即在该请求缓冲区有数据读出时,产生或更新该请求缓冲区的读指针。产生该读指针后,通过流量控制发射组件即时或者定时将该读指针发送至近端电路的流量控制接收组件。通过比较所述请求缓冲区的写指针以及所述请求缓冲区的读指针,得到请求缓冲区的第一信号full,通过该第一信号反压前级请求,即控制请求数据包传输的速率,保证请求缓冲区不溢出。
66.具体的,所述第一信号为第一状态时,即所述第一信号为0时,表示所述请求缓冲区还能接收所述请求数据包,所述第一信号为第二状态时,即所述第一信号为1时,表示所述请求缓冲区不能接收所述请求数据包。
67.具体的,所述信用检查组件在本地维护以1自增的远端电路的所述请求缓冲区(require buffer)的写指针(require_write_pointer),即所述信用检查组件每发送一个请求则所述请求缓冲区的写指针增加1。
68.所述require_write_pointer的产生逻辑包括:
69.电路系统复位时require_write_pointer置0;当发送的请求数据包有效,并且所述require_write_pointer小于(请求缓冲区的最大值require_buffer_depth

1)时,所述require_write_pointer自增1;当发送的请求数据包有效,并且所述require_write_pointer等于(请求缓冲区的最大值require_buffer_depth

1)时,所述require_write_pointer置0,并翻转所述请求缓冲区的写标志位require_write_flag。
70.本发明实施例中,所述请求数据包有效即请求require有效,在实际的电路系统中,通过valid和ready的握手信号来表示有效,valid表示发送方准备好了数据,ready代表接收方可以接受数据,两个信号同时有效就完成一次传输。
71.本发明实施例中,翻转所述请求缓冲区的写标志位表示所述请求缓冲区进入下一轮写操作,其中,所述请求缓冲区的写标志位用0或1表示。例如,请求缓冲区的写标志位初始值为0,请求缓冲区的require_buffer_depth为5,当require_write_pointer由0增至4时,说明请求缓冲区完成一轮的写操作。再次有请求数据包发出后,则从请求缓冲区的0位重新写入,即开始请求缓冲区下一轮的写操作,则请求缓冲区的写标志位初始值由0翻转为1。以此类推,再下一轮写操作时,请求缓冲区的写标志位初始值由1翻转为0。
72.所述require_read_pointer的产生逻辑包括:
73.电路系统复位时require_read_pointer置0;当请求缓冲区require buffer的读有效,即在require buffer中读取数据成功,并且require_read_pointer小于(require_buffer_depth

1)时,require_read_pointer自增1;当请求缓冲区require buffer的读有效,并且require_read_pointer等于(请求缓冲区的最大值require_buffer_depth

1)时,
require_read_pointer置0,并翻转所述请求缓冲区的读标志位require_read_flag;本发明实施例中,翻转所述请求缓冲区的读标志位表示所述请求缓冲区进入下一轮读操作,其中,所述请求缓冲区的读标志位用0或1表示。
74.本发明实施例中,响应于所述请求缓冲区的写标志位不等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针时;或者所述请求缓冲区的写标志位等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针等于所述请求缓冲区的读指针时;或者所述请求缓冲区的写标志位等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针时,所述第一信号为第一状态。即require_write_flag不等于require_read_flag,并且require_write_pointer不等于require_read_pointer时,所述第一信号为0;或者require_write_flag等于require_read_flag,并且require_write_pointer不等于require_read_pointer时所述第一信号为0;或者require_write_flag等于require_read_flag,并且require_write_pointer等于require_read_pointer,所述第一信号为0。
75.在实际应用中,对于所述请求缓冲区的写标志位不等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针的情况,请求缓冲区的读写操作不处于同一轮,由于写操作是快于读操作的,所以该请求缓冲区的写指针会小于所述请求缓冲区的读指针。相应的,对于所述请求缓冲区的写标志位等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针的情况,请求缓冲区的读写操作处于同一轮,该请求缓冲区的写指针会大于所述请求缓冲区的读指针。
76.其中,require_write_flag不等于require_read_flag包括require_write_flag==0,require_read_flag==1;require_write_flag==1,require_read_flag==0)两种情况。
77.本发明实施例中,响应于所述请求缓冲区的写标志位不等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针等于所述请求缓冲区的读指针时,所述第一信号为第二状态,其中,所述第二状态表示所述请求缓冲区已满,不能接收所述请求数据包。即require_write_flag不等于require_read_flag,并且require_write_pointer等于require_read_pointer时所述第一信号为1,其中,require_write_flag不等于require_read_flag包括require_write_flag==0,require_read_flag==1;require_write_flag==1,require_read_flag==0)两种情况。
78.具体的,判断所述第一信号状态的处理流程如图3所示,包括如下步骤:
79.步骤s300、获取请求缓冲区的写标志位、所述请求缓冲区的读标志位、所述请求缓冲区的写指针以及所述请求缓冲区的读指针。
80.步骤s301、响应于所述请求缓冲区的写标志位不等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针时;或者,所述请求缓冲区的写标志位等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针等于所述请求缓冲区的读指针时,或者所述请求缓冲区的写标志位等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针不等于所述请求缓冲区的读指针时,所述第一信号为第一状态。
81.响应具体可以例如为:
82.判断所述请求缓冲区的写标志位与所述请求缓冲区的读标志位之间的关系;以及
判断所述请求缓冲区的写指针与所述请求缓冲区的读指针之间的关系。
83.步骤s302、响应于所述请求缓冲区的写标志位不等于所述请求缓冲区的读标志位,且所述请求缓冲区的写指针等于所述请求缓冲区的读指针时,所述第一信号为第二状态。
84.假设远端电路中require buffer的长度(require_buffer_depth)为7,其内存地址分别为0,1,2,3,4,5,6,数据顺序循环写入到所述require buffer中,并从所述require buffer中顺序循环读取。在向所述远端电路发送请求时,需要近端电路的信用检查组件判断require buffer可用容量是否足够,具体的通过请求缓冲区(require buffer)的第一(full)信号来判断是否可发送,当require buffer full信号为1时,说明不能发送require,如果发送请求,则require buffer会溢出;require buffer full信号为0,说明可以发送require,然后通过缓存检查组件进行下一步的判断,具体的判断过程在后续进行详细说明。
85.举例说明,require buffer full信号的生成过程,具体包括:
86.1、写指针、写标志位
87.近端电路发送请求数据包require至远端电路,在发送后更新保存在信用检查组件中的请求缓冲区的写指针。假如当前写指针require_write_pointer为3(说明0-3的内存地址已写入数据),require_buffer_depth等于7,3小于6(即require_buffer_depth

1),说明将所述请求数据包require发送至远端后,可写入请求缓冲区的内存地址4中具体请求缓冲区中内存的示意图如图4所示。
88.进一步,将该请求数据包发送至远端后,该写指针require_write_pointer增加1,更新为4。
89.假如当前指针require_write_pointer为6,等于require_buffer_depth

1,再写入数据时需要再次从地址0开始写入,写指针require_write_pointer重置为0,并翻转所述请求缓冲区的写标志位require_write_flag,若所述请求缓冲区的写标志位require_write_flag原来为1则翻转为0,若所述请求缓冲区的写标志位require_write_flag原来为0则翻转为1。
90.2、读指针、读标志位
91.当远端电路require buffer有数据读出,则在数据读出后更新请求缓冲区的读指针require_read_pointer;假如当前读指针为4(表示内存地址0-4数据已写读出),4小于6,则表示此次将从内存地址5中读出数据,数据读出后读指针增加1,更新为5。
92.假如当前读指针为6,其等于require_buffer_depth

1,再读数据时需要再次从地址0开始读取,此时将读指针require_read_pointer置0,并翻转请求缓冲区的读标志位require_read_flag,若所述请求缓冲区的读标志位require_read_flag原来为1则翻转为0,若所述请求缓冲区的读标志位require_read_flag原来为0则翻转为1。
93.3、require buffer full信号的生成
94.当信用检查组件中的请求缓冲区的写指针发生变更,或者抓取到读指针时,更新require buffer full信号:判断require_write_flag不等于require_read_flag,并且require_write_pointer等于require_read_pointer,require buffer full为1,否则为0。
95.初始状态下,第一轮写数据和第一轮读数据时,所述require_write_flag和
require_read_flag都为0(或者都为1);当内存地址0-6都已写满,需要再次从0开始写入时,require_write_flag翻转为1(初始为1的话则翻转为0),所以require_write_flag不等于require_read_flag时,说明写和读不是在同一轮(即写比读大了一圈)。假如require_write_flag为0,require_read_flag为1,require_write_pointer为4,require_read_pointer为4,说明写操作比读操作快一圈,0-4中数据虽然被读出但又一轮写操作已将数据写入0-4,而5-6中已写入的数据还未被读出,此时require buffer已满,require buffer full信号为1。除此之外,require buffer full信号均为0,表示可以请求缓冲区可以写入。
96.在一种可能的实现方式中,若一个数据包中包括多个请求,则每个请求占用请求缓冲区的一个内存地址,针对每个请求依次累加所述请求缓冲区的写指针,也可以根据所述请求数据包的长度信息直接增加到所述请求缓冲区的写指针上。
97.在一种可能的实现方式中,所述缓存检查组件用于获取所述应答缓冲区的写指针以及所述应答缓冲区的读指针,根据所述应答缓冲区的写指针以及所述应答缓冲区的读指针确定所述应答缓冲区的第二信号的状态。
98.其中,由于一个请求数据包对应的应答数据可能为多个,且所述缓存检查组件在近端电路本地维护应答缓冲区的写指针response_write_pointer,所述写指针以应答数据包的长度信息(response_length)自增,即所述缓存检查组件接收多个应答数据包时,则所述应答缓冲区的写指针response_write_pointer对应增加多个,而不是以1自增。通过应答缓冲区的第二信号判断是否可发送请求数据包,该第二信号可表征应答缓冲区的几乎满的状态,即可用容量较小,表示无法接收多个应答数据。
99.所述缓存检查组件从近端电路的应答缓冲区中读取读指针response_read_pointer;根据所述应答缓冲区的写指针与所述应答缓冲区的读指针的距离确定所述应答缓冲区的第二信号的状态,通过该第二信号反压前级请求,即控制应答数据包传输的速率,保证应答缓冲区不溢出。
100.具体的,所述第二信号为第三状态时,即所述第二信号为0时,表示所述应答缓冲区还能接收所述应答数据包,也就是说所述缓存检查组件可以发送请求数据包;当所述第二信号为第四状态时,即所述第二信号为1时,表示所述应答缓冲区不能接收所述应答数据包,就是说所述缓存检查组件不可以发送请求数据包。
101.具体的,所述近端电路的应答缓冲区中写指针response_write_pointer的产生逻辑包括:
102.当发送的请求数据包有效,并且所述response_write_pointer大于或等于(应答缓冲区的最大值response_buffer_depth

response_length)时,response_write_pointer置为response_write_pointer+response_length-response_buffer_depth,并翻转所述应答缓冲区的标志位response_write_flag;当发送的请求数据包有效,并且所述response_write_pointer小于(response_buffer_depth

response_length)时,response_write_pointer自增response_length。其中,电路系统复位时response_write_pointer置0。
103.所述近端电路的应答缓冲区中读指针response_read_pointer的产生逻辑为:
104.当应答缓冲区response buffer的读有效,即成功读取应答数据包,并且response_read_pointer等于(response_buffer_depth-1)时,response_read_pointer置0,并翻转所述应答缓冲区的标志位response_read_flag;当response buffer的读有效,并
且response_read_pointer小于(response_buffer_depth-1)时,response_read_pointer自增1。其中,电路系统复位时response_read_pointer置0。
105.本发明实施例中,响应于所述应答缓冲区的距离distance小于或等于第一数值时,所述第二信号为第三状态,即所述第二信号为0;所述距离用于表征所述应答缓冲区的已用容量;响应于所述应答缓冲区的距离大于所述第一数值时,所述第二信号为第四状态,即所述第二信号为1,其中,所述第四状态表示所述应答缓冲区不接收所述应答数据包。其中,所述距离用于表征所述应答缓冲区的已用容量,所述第一数值等于应答缓冲区的最大容量response_buffer_depth与所述应答数据包的最大数据长度max_response_length的差值。其中,最大数据长度max_response_length可设为一个常量,该常量表示请求数据包对应的应答数据包可能的最大数据长度,由于最大容量response_buffer_depth为常量,对应的,所以第一数值也为常量。所述max_response_length可以是系统约定,或者协议规定。若存在超过约定长度的数据包,则首先被实现逻辑切分成多个小于该长度的数据包,然后再进入下级系统,所以实际发送的请求数据包对应的应答数据包不会大于该max_response_length,则通过该max_response_length判断应答缓冲区是否可接收待发送的请求数据包对应的应答数据包,可确保应答缓冲区不会溢出。可选的,该最大数据长度max_response_length也可设为变量,即为每次发送请求对应的响应数据包的数据长度,对应的,第一数值也为变量。该情况下,在有待发送的请求数据包时,需要每次将请求数据包对应的应答数据包的长度确定为max_response_length,以进一步确定第一数值,然后根据该第一数据确定应答缓冲区是否可接收待发送的请求数据包对应的应答数据包。
106.具体的,判断所述第二信号状态的处理流程如图5所示,包括如下步骤:
107.步骤s500、获取应答缓冲区的距离以及第一数值。
108.其中,所述第一数值等于应答缓冲区的最大容量response_buffer_depth与所述最大数据长度max_response_length的差值。
109.步骤s501、响应于所述应答缓冲区的距离小于或等于第一数值时,所述第二信号为第三状态。
110.步骤s502、响应于所述应答缓冲区的距离大于所述第一数值时,所述第二信号为第四状态。
111.本发明实施例中,当所述应答缓冲区的写标志位response_write_flag等于所述应答缓冲区的读标志位response_read_flag时,所述距离表示为所述应答缓冲区的写指针response_write_pointer与所述应答缓冲区的读指针response_read_pointer的差值;或,响应于所述应答缓冲区的写标志位不等于所述应答缓冲区的读标志位,所述距离等于第一和值与所述应答缓冲区的读指针的差值,其中,所述第一和值等于所述应答缓冲区的写指针response_write_pointer与所述应答缓冲区的最大容量response_buffer_depth的和。
112.假设应答缓冲区的最大容量response_buffer_depth为10,最大数据长度max_response_length为6,则第一数值为4(即10-6)。若应答缓冲区的写标志位response_write_flag等于应答缓冲区的读标志位response_read_flag时,说明应答缓冲区的写操作和读操作处于同一轮,当前应答缓冲区的写指针response_write_pointer为5,读指针response_read_pointer为2,则读写指针之间的距离distance为3(即5-2),此时应答缓冲区的3个内存地址被写入数据,即缓冲寄存器的已用容量为3。其中第一数值为应答缓冲区
的最大容量response_buffer_depth与最大数据长度max_response_length差值,此时,distance 3小于第一数值4,说明已用容量3加上最大数据长度max_response_length 6会小于应答缓冲区的最大容量10,表示应答缓冲区的可用容量足以存储待发送请求数据包对应的应答数据。若应答缓冲区的写标志位response_write_flag不等于应答缓冲区的读标志位response_read_flag时,说明应答缓冲区的写操作比读操作快一圈,当前应答缓冲区的写指针response_write_pointer为3,读指针response_read_pointer为4,则距离distance为9(即3+10-4),此时应答缓冲区的9个内存地址被写入数据,即缓冲寄存器的已用容量为9。其中第一数值为应答缓冲区的最大容量response_buffer_depth与最大数据长度max_response_length差值,此时,distance 9大于第一数值4,说明已用容量9加上最大数据长度max_response_length 6会大于应答缓冲区的最大容量10,表示应答缓冲区的读写指针距离较远,即可用容量较小,整个应答缓冲区为几乎满的状态,可用容量不足以存储待发送请求数据包对应的应答数据。
113.本发明实施例实现同一芯片上两个不同晶粒die之间的数据传输时的流量控制,由于在同一芯片上,每个晶粒可预先知道对方的缓冲寄存器的最大容量信息,即require_buffer_depth和response_buffer_depth,则在更新读写指针以及读写指针的标志位时,可知道读写指针到什么位置时该翻转标志位。并且,根据请求缓冲区和应答缓冲区的读写指针、读写指针的标志位,可分别确定请求缓冲区和应答缓冲区的第一信号和第二信号。则在发送请求数据包时,不需要对寄存器具体的容量大小、发送数据包的长度等进行计算,只需要根据上述请求缓冲区的第一信号以及应答缓冲区的第二信号,即可判断是否可发送数据,提高了传输效率,也简化了电路,通用性较强。
114.在一种可能的实现方式中,流量控制发射组件用于收集流量控制(flow control)信息,基于所述流量控制信息生成流量控制数据包,将所述流量控制数据包发送至近端电路的流量控制接收组件,其中,所述流量控制信息即请求缓冲区的读操作信息,包括请求缓冲区的读标志位require_read_flag和所述请求缓冲区的读指针require_read_pointer;所述流量控制发射组件收集流量控制信息可以是定时收集,也可以是不定时收集,不定时收集的情况包括请求缓冲区的读指针更新时或者非恒定延时传输系统不忙时;所述流量控制发射组件还包括定时器,当定时时间达到,并且流量控制信息更新,则valid信号为高,此时流量控制发射组件必须发送该流量控制数据包;其中,所述定时器可根据系统带宽、请求数据包、应答数据包以及flow control数据包所占位宽设置,本发明实施对其不做限定。
115.在一种可能的实现方式中,所述流量控制flow control信息的数据随着请求缓冲区的读指针实时更新,非恒定延时传输系统空闲时,无论valid为高或低,都可以主动发送所述流量控制数据包。流量控制接收组件接收flow control数据包,并解析出所述请求缓冲区的读标志require_read_flag和所述请求缓冲区的读指针require_read_pointer。通过上述流量控制的方法,flow control数据包更新的快、慢、或者丢失都不会让require buffer溢出。
116.在一种可能的实现方式中,可以根据延时时间确定请求缓冲区的容量,具体的,所述请求缓冲区的容量应该在延时时间内所述近端电路所能发送的请求数据包的数量,所述延时时间等于从近端电路发送一个请求数据包从近端电路到远端电路的时间,加上flow control数据包更新的延时,以及所述flow control数据包从远端电路发送到近端电路的
时间之和。通过延时时间确定请求缓冲区的容量可以保证不会因为flow control造成系统的发送效率降低;若请求缓冲区的容量过小的话,可能造成近端频繁被信用检查credit check组件阻断发送,导致效率下降。
117.举例说明,假如一个请求数据包从近端电路发送到远端电路,加上流量控制数据包更新的时间以及flow control包从远端电路发送到近端电路的延时为2s,所述请求数据包的发送频率为100个/s,则require buffer的容量应该可以存储200个所述请求数据包。
118.在一种可能的实现方式中,若非恒定延时传输系统包含多个通道,即存在多组请求数据包和应答数据包,则为每一组请求数据包和应答数据包单独进行流量控制,进而可以减少各组之间数据包的影响;若多组请求数据包汇聚到同一个请求缓冲区中,任一组请求数据包读的过慢,整个请求缓冲区都会被该组的请求数据包占满,影响其他组请求数据包的接收,所述应答缓冲区同理,在此不再赘述。
119.在一种可能的实现方式中,当数据包需要广播时,即数据包传到远端电路后需要进行数据再分发。针对多个远端的情况,需要针对每个通道单独维护写指针,以及抓取对应远端电路的读指针,即每个通道设置一个credit checker组件。
120.在一种可能的实现方式中,对于response包的发送和接收不使用和require类似的credit check组件,而使用buffer check机制,是为了减少在非恒定延时传输系统中额外传输数据,即减少flow control数据包的系统开销。若response数据包和require数据包使用相同的credit check机制,具体结构如下图6所示,图6中需要两路flow control,相比于图1,图6的延迟误差较大。
121.如本领域技术人员将意识到的,本发明实施例的各个方面可以被实现为系统、方法或计算机程序产品。因此,本发明实施例的各个方面可以采取如下形式:完全硬件实施方式、完全软件实施方式(包括固件、常驻软件、微代码等)或者在本文中通常可以都称为“电路”、“模块”或“系统”的将软件方面与硬件方面相结合的实施方式。此外,本发明实施例的各个方面可以采取如下形式:在一个或多个计算机可读介质中实现的计算机程序产品,计算机可读介质具有在其上实现的计算机可读程序代码。
122.可以利用一个或多个计算机可读介质的任意组合。计算机可读介质可以是计算机可读信号介质或计算机可读存储介质。计算机可读存储介质可以是如(但不限于)电子的、磁的、光学的、电磁的、红外的或半导体系统、设备或装置,或者前述的任意适当的组合。计算机可读存储介质的更具体的示例(非穷尽列举)将包括以下各项:具有一根或多根电线的电气连接、便携式计算机软盘、硬盘、随机存取存储器(ram)、只读存储器(rom)、可擦除可编程只读存储器(eprom或闪速存储器)、光纤、便携式光盘只读存储器(cd-rom)、光存储装置、磁存储装置或前述的任意适当的组合。在本发明实施例的上下文中,计算机可读存储介质可以为能够包含或存储由指令执行系统、设备或装置使用的程序或结合指令执行系统、设备或装置使用的程序的任意有形介质。
123.计算机可读信号介质可以包括传播的数据信号,所述传播的数据信号具有在其中如在基带中或作为载波的一部分实现的计算机可读程序代码。这样的传播的信号可以采用多种形式中的任何形式,包括但不限于:电磁的、光学的或其任何适当的组合。计算机可读信号介质可以是以下任意计算机可读介质:不是计算机可读存储介质,并且可以对由指令执行系统、设备或装置使用的或结合指令执行系统、设备或装置使用的程序进行通信、传播
或传输。
124.可以使用包括但不限于无线、有线、光纤电缆、rf等或前述的任意适当组合的任意合适的介质来传送实现在计算机可读介质上的程序代码。
125.用于执行针对本发明实施例各方面的操作的计算机程序代码可以以一种或多种编程语言的任意组合来编写,所述编程语言包括:面向对象的编程语言如java、smalltalk、c++等;以及常规过程编程语言如“c”编程语言或类似的编程语言。程序代码可以作为独立软件包完全地在用户计算机上、部分地在用户计算机上执行;部分地在用户计算机上且部分地在远程计算机上执行;或者完全地在远程计算机或服务器上执行。在后一种情况下,可以将远程计算机通过包括局域网(lan)或广域网(wan)的任意类型的网络连接至用户计算机,或者可以与外部计算机进行连接(例如通过使用因特网服务供应商的因特网)。
126.上述根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图图例和/或框图描述了本发明实施例的各个方面。将要理解的是,流程图图例和/或框图的每个块以及流程图图例和/或框图中的块的组合可以由计算机程序指令来实现。这些计算机程序指令可以被提供至通用计算机、专用计算机或其它可编程数据处理设备的处理器,以产生机器,使得(经由计算机或其它可编程数据处理设备的处理器执行的)指令创建用于实现流程图和/或框图块或块中指定的功能/动作的装置。
127.还可以将这些计算机程序指令存储在可以指导计算机、其它可编程数据处理设备或其它装置以特定方式运行的计算机可读介质中,使得在计算机可读介质中存储的指令产生包括实现在流程图和/或框图块或块中指定的功能/动作的指令的制品。
128.计算机程序指令还可以被加载至计算机、其它可编程数据处理设备或其它装置上,以使在计算机、其它可编程设备或其它装置上执行一系列可操作步骤来产生计算机实现的过程,使得在计算机或其它可编程设备上执行的指令提供用于实现在流程图和/或框图块或块中指定的功能/动作的过程。
129.以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1