DDR读写仲裁器及方法与流程

文档序号:17079972发布日期:2019-03-09 00:08阅读:3264来源:国知局
DDR读写仲裁器及方法与流程

本发明涉及ddr,尤其涉及ddr读写仲裁器及仲裁方法。



背景技术:

ddr存储器目前已被广泛运用于各产品解决方案中。目前,很多cpu中集成了ddr控制器,操作系统和应用程序决定了对ddr控制器的调度过程。然而,对于实时性要求较高的专用数字电路设计,fpga或者asic芯片对ddr的调度问题,并不像向软件系统那样易于控制。在fpga领域,xilinx和intel都提供了成熟且免费的ddr控制器ip,但这些ip都是针对一个用户的。系统设计中,可能存在多个模块,需要同时对ddr控制器进行访问。通常采用仲裁器,解决多个用户对ddr控制器的使用权分配问题。较为简易的仲裁器,一般是将整个访问时段全部分配给某一用户,期间的握手、等待等过程,浪费了很多时间,最终导致ddr的访问效率上不去。不同用户的访问行为特点不一:有的访问数据量大,如果仲裁器一次让它把所有数据访问完,则其它用户的申请可能迟迟得不到响应,导致系统错误;有的写用户数据量小,发起了写申请后,写数据迟迟不来,或者写用户的数据带宽跟不上ddr控制器的速度;有的读用户,处理读数据的速率没有ddr控制器快,为了避免缓存溢出,需等待用户处理完读数据后继续访问ddr控制器。这都是导致ddr控制器访问效率不高的原因。本发明所提供的ddr读写仲裁方法,能较好地解决上述问题。



技术实现要素:

本发明的目的在于提供一种ddr读写仲裁方法,主要用于可编程逻辑系统或asic领域中,多用户并行访问ddr内存时,提高ddr的访问效率。

本发明为达上述目的所采用的技术方案是:

提供一种ddr读写仲裁器,包括:

多个写转换单元,用于将写用户申请的某一长度数据的写操作细分为多个小批次的写申请并提交给命令拆分单元;

多个读转换单元,用于将读用户申请的某一长度数据的读操作细分为多个小批次的读申请并提交给命令拆分单元;

命令拆分单元,用于将小批次的读、写命令,进一步拆分成ddr控制器可识别的指令,并将读、写命令存入第一fifo单元,将写数据存入第二fifo单元;

公平仲裁单元,用于对每个读用户和写用户进行编号,并对其优先级进行裁定,并生成路由表存储在第三fifo单元中;

流控保护单元,用于监控第一fifo单元、第二fifo单元是否有足够裕量,若否,则暂停命令拆分单元对当前批次的命令拆分;

握手逻辑单元,用于将读、写命令和写数据分别从第一fifo单元和第二fifo单元中读出,按照ddr控制器的握手要求发送给ddr控制器;

路由控制单元,用于从第三fifo单元获取路由表,在ddr控制器返回数据时,根据路由表进行路由选择。

接上述技术方案,读转换单元和写转换单元细分小批次时,将分批大小设置成ddr的row长度的1/2或者1/4。

接上述技术方案,读转换单元还用于计算ddr控制器未返回数据并据此确定是否继续提交读申请,具体为记录自身一共向ddr控制器申请过的读数据个数,并记录ddr控制器一共返回过多少个读数据,两者的差为ddr控制器未返回的数据,将ddr控制器未返回的数据、第二fifo单元中剩余的数据量、最大分批个数相加,如果和大于第二fifo单元的深度l,则读转换单元不再提交读申请。

接上述技术方案,当ddr控制器未返回的数据、第二fifo单元中剩余的数据量、最大分批个数相加大于l-4,则读转换单元不再提交读申请。

接上述技术方案,写转换单元还用于判断第二fifo单元中是否有足够的数据空间,若是则继续提交当前批次的写申请。

根据权利要求1所述的ddr读写仲裁器,其特征在于,流控保护单元具体用于对第一fifo单元和第二fifo单元的预满状态进行监测,当第一fifo单元预满时,读、写命令均需要等待;当第二fifo单元预满时,写命令暂停,读命令继续拆分。

本发明还提供一种ddr读写仲裁方法,包括以下步骤:

将多个读用户和写用户的读、写操作细分为多个小批次的读、写申请;

将小批次的读、写命令进一步拆分成ddr控制器可识别的指令,并将读、写命令存入第一fifo单元,将写数据存入第二fifo单元;

对每个读用户和写用户进行编号,并对其优先级进行裁定,并生成路由表存储在第三fifo单元中;

监控第一fifo单元、第二fifo单元是否有足够裕量,若否,则暂停当前批次的命令拆分;

将读、写命令和写数据分别从第一fifo单元和第二fifo单元中读出,按照ddr控制器的握手要求发送给ddr控制器;

从第三fifo单元获取路由表,在ddr控制器返回数据时,根据路由表进行路由选择。

接上述技术方案,细分小批次时,将分批大小设置成ddr的row长度的1/2或者1/4。

接上述技术方案,计算ddr控制器未返回数据并据此确定是否继续提交读申请,具体为记录一共向ddr控制器申请过的读数据个数,并记录ddr控制器一共返回过多少个读数据,两者的差为ddr控制器未返回的数据,将ddr控制器未返回的数据、第二fifo单元中剩余的数据量、最大分批个数相加,如果和大于l-4,则读转换单元不再提交读申请,l为第二fifo单元的深度。

接上述技术方案,在响应读用户申请时,下一个被裁定申请有效的写用户,提前将其写数据导入第二fifo单元。

本发明的有益效果:本发明将ddr控制器的单用户读写接口,扩展成支持多用户并发访问的读接口和写接口。各读用户和写用户享有均等的被服务机会,即避免某一方长时间独占ddr总线的情况。且在多用户并发访问时,仍能保证较高的ddr使用效率(批量访问时,效率能达到80%以上)。

进一步地,本发明面向用户的读写接口,相对于ddr控制的读写接口,操作过程更简便且易实现。对ddr空间和时间资源的充分挖掘,不仅提高系统性能,还能降低设计成本。

附图说明

下面将结合附图及实施方式对本发明作进一步说明,附图中:

图1是本发明实施例ddr读写仲裁器结构示意图。

图2是写转换单元的对外接口。

图3是读转换单元的对外接口。

图4是命令申请接口时序说明。

图5是写数据流接口时序说明。

图6是公平仲裁示例。

图7是本发明实施例ddr读写仲裁流程图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明的ddr读写仲裁器的结构如图1所示,主要包含读转换单元、写转换单元、公平仲裁单元、命令拆分单元、流控保护单元、握手逻辑单元、路由控制单元、fifo1、fifo2、fifo3。

多个写转换单元,用于将写用户申请的某一长度数据的写操作细分为多个小批次的写申请并提交给命令拆分单元;

多个读转换单元,用于将读用户申请的某一长度数据的读操作细分为多个小批次的读申请并提交给命令拆分单元;

命令拆分单元,用于将小批次的读、写命令,进一步拆分成ddr控制器可识别的指令,并将读、写命令存入fifo1,将写数据存入第二fifo单元;

公平仲裁单元,用于对每个读用户和写用户进行编号,并对其优先级进行裁定,并生成路由表存储在fifo3中;

流控保护单元,用于监控fifo1、fifo2是否有足够裕量,若否,则暂停命令拆分单元对当前批次的命令拆分;

握手逻辑单元,用于将读、写命令和写数据分别从fifo1和fifo2中读出,按照ddr控制器的握手要求发送给ddr控制器;

路由控制单元,用于从fifo3获取路由表,在ddr控制器返回数据时,根据路由表进行路由选择。

写转换单元的对外接口,如附图2所示。写转换单元包括写命令分批控制模块和写fifo模块,写用户可以一次申请任意长度数据的写操作,写命令分批控制模块将此申请细分为多个小批次的写申请,提交给公平仲裁单元。写用户的数据先缓存在写fifo模块中,当ddr仲裁器响应申请后,将此写fifo模块中的数据转发给仲裁器。

读转换单元的对外接口,如附图3所示。读转换单元包括读命令分批控制模块和读fifo模块,读用户可以一次申请任意长度数据的读操作,读命令分批控制模块将此申请细分为多个小批次的读申请,提交给公平仲裁单元。路由控制单元输出的读数据,先缓存在读fifo模块中,读用户自身就绪时将数据从此读fifo模块中取走。

公平仲裁单元,保证多个读写用户享有均等的被服务机会。其另一个特点是,在响应读用户申请时,下一个被裁定申请有效的写用户,可以提前将其写数据导入写数据fifo,进一步提高仲裁器的吞吐率。

命令拆分单元,将小批次的读写命令,进一步拆分成ddr控制器可识别的指令。fifo1缓存ddr控制器的写命令(包含地址),fifo2缓存ddr控制器的写数据。仲裁逻辑需要借助流控保护单元的判断,保证这两个fifo是安全的,否则暂停对当前批次的命令拆分,等到fifo1和fifo2有足够裕量后继续执行。握手逻辑,实现ddr控制器所要求的时序,将命令流和写数据流从fifo中导出。

公平仲裁单元输出一张路由表,存储在fifo3中,供路由控制逻辑使用。

读转换单元和写转换单元的用户时钟,可以独立于仲裁单元(以及后续其它单元),用户数据的位宽也是可变的。读转换单元和写转换单元内部的fifo(见附图2和附图3),一方面用于缓存数据流,另一方面实现时钟域转换和数据位宽转换。

读转换和写转换单元与用户之间的接口,均采用cmd_addr、cmd_len、cmd_req、cmd_rdy这几个信号握手。cmd_addr表示请求访问的起始地址;cmd_len表示本次请求访问的总长度;cmd_req为高时,表示申请访问;cmd_rdy为高时,表示申请得到响应。cmd_req拉高后,需要一直保持高的状态直到cmd_rdy变高。如果之后用户仍然有写申请,可以将cmd_req继续拉高,如果之后没有写申请了,需要立即拉低cmd_req(在cmd_rdy拉高的下一拍生效)。附图4反映了这几个信号间的时序关系。t1时刻,申请得到响应,下一节拍持续发送申请(cmd_req维持高电平);t1时刻,申请得到响应,但之后不继续申请(cmd_req拉低)。握手逻辑向ddr控制器写控制流,也采用这种接口实现。

写用户数据的传输接口,采用data、data_valid、data_rdy进行握手。其中,data表示待写入的数据,data_valid表示发送方的data请求写入到接收方,data_rdy表示接收方就绪,只有data_valid和data_rdy同时为高时才表示数据被成功写入。这3个信号的时序关系如附图5所示,d0~d4依次成功写入,且不发生重复。握手逻辑向ddr控制器写发送数据,也采用这种接口实现。

作为优选的方案,为满足附图5所示的时序接口,数据的发送方(比如用户)可以采用fifo的预读取机制,即数据总是提前准备好。当fifo的读使能有效时,下一个读数据从fifo中拍出。用fifo的empty取反得到valid,当接收方送出rdy的同时产生fifo的读使能,则下一个读数据会在下一个节拍会就绪。如果下一拍数据未就绪(fifo空了),则empty必然为高,对应valid为低。此时,就算接收方给出的rdy为高,数据也是无效的。

作为优选的方案,为满足附图5所示的时序接口,接收方(比如写转换单元)可以把fifo的预满(almostfull)信号取反作为rdy。当fifo中有足够的缓存空间时,rdy为高代表可以写入数据。fifo的写使能,通过valid和rdy相与操作得到。为了提高时序,可以对与的结果经由flipper-flop打拍(data也同步打拍),由于使用fifo预满信号做此逻辑,所以不用担心打拍后fifo真的满了。比如,对于512深度的fifo,将预满门限设置成510以下就很安全。

读转换和写转换单元,都会用到分批操作的思想。所谓的分批,就是把用户实际要访问的数据分段,变成n个批次提交给公平仲裁单元。比如,有两个用户a和b,a被分成a1、a2、……、an段,b被分成b1、b2、……、bm段。将这些申请提交给仲裁单元后,最终被服务的顺序可能变成a1、b1、a2、b2、……。这种办法好处就是,a和b从整体上可认为是被同时服务的。如果让b等待a的所有数据都访问完,那么可能b会因为服务未及时响应而报错。

分批大小的确定,也是有讲究的。研究表明,对ddr内存的连续或连续写(burst操作,地址连续),会大大提高ddr的访问效率。如果读写交错进行,即使地址是连续的,也会降低效率。从这一点看,分批的长度是越大越好。但如果太大,会导致其它的问题。1.读用户和写用户的缓存开销更大。2.由于分批过大,为某个用户的服务时间必然会变长,而其它用户可能会因此而‘空等’,导致仲裁的效率反而降低。

作为优选的方案,将分批大小设置成ddr的row长度的1/2或者1/4,效果较为理想。用户的实际访问长度,并不一定是分批大小的整数倍,因此分批处理逻辑需要判断当前是否为最后一个批次。如果是,则需调整本批次的访问长度。例如,读用户申请访问3589个数据,分批操作的长度是256。那么,用户的申请将被分成15个批次进行,前面14个批次长度为256,最后一个长度为4。

写用户申请访问ddr后,可能随后的写数据流暂时无法就绪。就算很快就绪了,可能写用户的数据速率无法匹配上ddr控制器的速率。为解决此问题,写转换单元在判断fifo中有足够的数据(大于或者等于当前分段大小)后,再向公平仲裁单元发出当前批次的写申请。从而避免仲裁器需单独等待此用户,节省出的时间可以为其它用户提供服务。

在读ddr数据时,返回读数据的时刻相对先前发送的读指令的时刻,存在较大延迟(一般有几十个时钟周期)。所以,对于读转换而言,要提前预知缓存用户读数据的fifo是否可能会溢出。举个例子,假设fifo的深度为512,当前fifo中剩余360个数据,(由于延迟的原因)ddr控制器还有32个读数据未返回,而此时读用户仍然有读数据的申请,分批大小为128。这种情况下,如果读转换单元继续向ddr控制器递交此128个数据的读申请,则可能会导致fifo的溢出。因为360+32+128>512,如果读用户此时不从fifo中取数据了,而后续ddr返回的数据必然会写入fifo,最终导致溢出。

作为优选的方案,读转换单元计算ddr控制器未返回数据的方法:用cnt1记录自身一共向ddr控制器申请过的读数据个数,用cnt2记录ddr控制器一共返回过多少个读数据,cnt1减去cnt2的至即为ddr未返回的数据cnt_diff。此时将cnt_diff、fifo中剩余的数据量、最大分批个数相加,如果大于fifo的深度l,读转换单元此时不能继续向ddr仲裁器递交读申请。实际运作时,还需要保证一定裕量,将l-4作为比较门限更为安全。

公平仲裁单元,对每个读用户和写用户进行编号。作为优选的方案,公平仲裁单元每响应一个用户,将此编号记录,用于下次仲裁的优先级调整。附图6描述了对4个用户仲裁的过程。当usr_id为0时,usr1的优先级最高,usr2次之;当usr_id为1时,usr2的优先级最高,usr3次之;……;当usr_id为3时,usr0的优先级最高,usr1次之。仲裁逻辑同时只能给出一个用户的rdy信号,表示当前用户的请求通过,usr_id在下一个周期更新为刚才被通过的用户id。在t1时刻,4个用户都有申请,但此时usr_id为0,则user1的申请先通过,其次是user2、user3、user0。在t6时刻,虽然usr_id为1,但user2没有申请,因此usr3的优先级要高于user1的,所以user3的申请通过,之后usr_id变成3。

命令拆分单元,将申请通过的用户命令进一步拆分。读命令流和写命令流存储在fifo1中,数据流存储至fifo2中。流控保护单元,实现对fifo1和fifo2的预满状态监测,为仲裁单元提供判断条件。当fifo1预满时,不管是读命令还是写命令,都需要等待。当fifo2预满时,写命令可暂停,不影响读命令的拆解。这种效果得益于仲裁逻辑对读用户和写用户的并行仲裁机制。作为优选的方案,fifo1缓存深度为64,fifo2缓存深度为32,这两个fifo用逻辑资源搭建(无需blockram或m9k之类的资源)。fifo1预满门限设为60,fifo2预满门限设为28。

仲裁逻辑输出的路由表,由user_id和此user申请的读数据个数组成,存储在fifo3中。当ddr控制器返回数据时,对其进行计数,结合路由表可以得知当前返回的数据属于哪个用户,从而实现路由选择。路由表的更新符合“先进先出”的规则,适合用fifo实现。为减少路由延迟,并考虑到时序,fifo启用预读取机制。将fifo输出的user_id信息,实现对各用户valid的译码,这里仅需要一个时钟节拍的延迟即可满足设计。fifo3的写使能由仲裁逻辑提供。fifo3的读使能,需要判断ddr控制器中返回的数据是否对应当前user_id的最后一个读数据得到。

将上述各单元及采用的方案关联起来,即构成本专利的ddr读写仲裁器的总体方法,如图7所示,本发明的ddr读写仲裁方法主要包括以下步骤:

s1.将读用户和写用户的读、写操作细分为多个小批次的读、写申请;

s2.将小批次的读、写命令进一步拆分成ddr控制器可识别的指令,并将读、写命令存入fifo1,将写数据存入fifo2;

s3.对每个读用户和写用户进行编号,并对其优先级进行裁定,并生成路由表存储在fifo3中;

s4.监控fifo1和fifo2单元是否有足够裕量,若否,则暂停当前批次的命令拆分;

s5.将读、写命令和写数据分别从fifo1和fifo2单元中读出,按照ddr控制器的握手要求发送给ddr控制器;

s6.从fifo3单元获取路由表,在ddr控制器返回数据时,根据路由表进行路由选择。

写用户可以一次申请任意长度数据的写操作,写转换单元将此申请细分为多个小批次的写申请,提交给公平仲裁单元。写用户的数据先缓存在fifo中,当ddr仲裁器响应申请后,将fifo中的数据转发给仲裁器。

读用户可以一次申请任意长度数据的读操作,读转换单元将此申请细分为多个小批次的读申请,提交给公平仲裁单元。路由单元输出的读数据,先缓存在fifo中,读用户自身就绪时将数据从fifo中取走。公平仲裁单元,保证多个读写用户享有均等的被服务机会。其另一个特点是,在响应读用户申请时,下一个被裁定申请有效的写用户,可以提前将其写数据导入写数据fifo,进一步提高仲裁器的吞吐率。命令拆分单元,将小批次的读写命令,进一步拆分成ddr控制器可识别的指令。fifo1缓存ddr控制器的写命令(包含地址),fifo2缓存ddr控制器的写数据。仲裁逻辑需要借助流控保护单元的判断,保证这两个fifo是安全的,否则暂停对当前批次的命令拆分,等到fifo1和fifo2有足够裕量后继续执行。握手逻辑,实现ddr控制器所要求的时序,将命令流和写数据流从fifo中导出。公平仲裁单元输出一张路由表,存储在fifo3中,供路由控制逻辑使用。

fifo1主要用于存储ddr控制器的命令;fifo2主要用于存储ddr控制器的写数据;fifo3主要用于存储读用户路由表;流控保护模块用于检测fifo1和fifo2的预满状态,结果传给公平仲裁模块;路由控制模块主要用于从fifo3中获取路由表,将ddr控制器的读数据按用户id转发给各读转换模块;握手逻辑功能:将ddr控制器的命令和写数据分别从fifo1和fifo2中读出,按照ddr控制器的握手要求发送给ddr控制器(具体方式依赖于ddr控制器规格)。

本发明可实现以下功能:多路读写用户并行访问;写用户和读用户接口至仲裁器接口的转换,将用户的申请分段处理;实现读用户和写用户的数据缓存管理;对多用户实现公平仲裁;将读写用户的申请拆解成ddr控制器可执行的命令流和数据流;ddr流控保护机制;用户读数据路由。

综上,本发明将ddr控制器的单用户读写接口,扩展成支持多用户并发访问的读接口和写接口。各读用户和写用户享有均等的被服务机会,即避免某一方长时间独占ddr总线的情况。且在多用户并发访问时,仍能保证较高的ddr使用效率(批量访问时,效率能达到80%以上)。进一步地,本发明面向用户的读写接口,相对于ddr控制的读写接口,操作过程更简便且易实现。对ddr空间和时间资源的充分挖掘,不仅提高系统性能,还能降低设计成本。

应当理解的是,对本领域普通技术人员来说,可以根据上述说明加以改进或变换,而所有这些改进和变换都应属于本发明所附权利要求的保护范围。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1