有异步缓存的双倍速动态随机存取存储器控制装置及方法.pdf

上传人:54 文档编号:474311 上传时间:2018-02-18 格式:PDF 页数:34 大小:1.58MB
返回 下载 相关 举报
摘要
申请专利号:

CN200410077886.6

申请日:

2004.09.16

公开号:

CN1588552A

公开日:

2005.03.02

当前法律状态:

授权

有效性:

有权

法律详情:

授权|||专利申请权、专利权的转移(专利申请权的转移)变更项目:申请人变更前权利人:联合信源数字音视频技术(北京)有限公司 申请人地址:北京市海淀区科学院南路6号北楼140室 邮政编码:100080变更后权利人:展讯通信(上海)有限公司 申请人地址:上海市浦东张江高科技园祖冲之路2288弄展讯中心1号楼 邮政编码:201203登记生效日:2007.6.15|||实质审查的生效|||公开

IPC分类号:

G11C11/409; G06F13/16

主分类号:

G11C11/409; G06F13/16

申请人:

联合信源数字音视频技术(北京)有限公司;

发明人:

解晓东; 吴迪; 贾惠柱; 生滨; 郑俊浩; 张鹏; 邓磊; 张力; 张帧睿; 王忠立; 高文

地址:

100080北京市海淀区科学院南路6号北楼140室

优先权:

专利代理机构:

北京同立钧成知识产权代理有限公司

代理人:

刘芳

PDF下载: PDF下载
内容摘要

本发明是一种有异步缓存的双倍速动态随机存取存储器控制装置及方法,装置包括仲裁器、控制器接口和存储器控制器。仲裁器检测其读写请求标志寄存器是否为零,非零且写缓存不满则向控制器接口写缓存发写控制信号,否则继续检测,同时检测控制器接口读缓存,读缓存中有数据则发送读信号;控制器接口写缓存根据仲裁器输出信号缓存读写请求的地址、命令和写操作数据;控制器判断有无读写命令,有则确定存储区和行的数量并打开所需访存存储区和行,再发读写命令,向存储器写入或读出数据;判断是否将该请求处理完,是检查有无刷新请求,有则进入刷新状态,经过刷新回到等待并处理数据,否则检测有无新请求,有则关掉存储区并处理新请求,无则等待。

权利要求书

1、  一种有异步缓存的双倍速动态随机存储器控制装置,其特征在于,该装置包括:
仲裁器,它分别连接各客户模块和存储器控制器接口的写缓存与读缓存,用于根据客户模块读写请求的请求优先级别确定该服务哪一个模块的请求,产生各个客户模块的读写应答与读写结束等接口信号和控制器接口中写缓存与读缓存的读写控制信号,对客户模块读写请求的数据进行输入输出服务;
控制器接口,它连接仲裁器和存储器控制器,包含写缓存和读缓存两个异步先进先出队列,用于根据仲裁器的输出信号缓存读写请求的地址、命令和写操作的数据并缓存读数据;
控制器,用于按照存储器逻辑功能时序,产生存储器的接口控制信号,根据读写缓存的状态和请求的性质确定存储器的存储区和行的数量打开所需访存的存储区和行,向存储器写入或读出数据。

2、
  根据权利要求1所述的所述的有异步缓存的双倍速动态随机存储器存储器控制装置,其特征在于,仲裁器确定请求的优先级为:显示输出>读请求>写请求。

3、
  根据权利要求1所述的所述的有异步缓存的双倍速动态随机存存储器控制装置,其特征在于,所述仲裁器内部有读请求标志暂存先进先出队列,用于临时存放读请求的标志和读请求的数据个数。

4、
  根据权利要求1所述的所述的有异步缓存的双倍速动态随机存储器控制装置,其特征在于,所述存储器为两片改良的球栅点阵封装的1M×32比特位×4存储区存储器,其行地址和列地址是复用的,行地址有13位,列地址有8位。

5、
  根据权利要求4所述的所述的有异步缓存的双倍速动态随机存储器控制装置,其特征在于,所述的存储方器的存储方式为一个存储区的一个行内存放2×4个宏块。

6、
  一种有异步缓存的双倍速动态随机存储器的控制方法,其特征在于,该方法包括以下步骤:
步骤1、仲裁器检测其读写请求标志寄存器是否为非零,非零且写缓存不满时则向存储器控制器接口的写缓存发送写控制信号,否则继续检测,同时检测存储器控制器接口的读缓存,若读缓存中有数据,则发送读信号;
步骤2、存储器控制器接口的写缓存根据仲裁器的输出信号缓存读写请求的地址、命令和写操作的数据;存储器控制器接口中的读缓存受从双倍速动态随机存储器返回的数据锁存信号驱动,缓存双倍速动态随机存储器送回的读数据;
步骤3、控制器判断有无读写命令,有则根据该读写命令确定存储器的存储区和行的数量,首先打开所需访存的存储区和行,然后再发读写命令,向存储器写入数据或读出数据;
步骤4、判断是否将该请求处理完,是检查有无刷新请求,有则进入刷新状态,经过刷新回到等待并转向步骤3,否则检测有无新的请求,有则将所有的存储区关掉,然后转向步骤3,无则在步骤4等待。

7、
  根据权利要求6所述的所述的有异步缓存的双倍速动态随机存储器的控制方法,其特征在于,所述步骤1进一步包括以下步骤:
步骤1a、仲裁器检测是否有一个服务正在进行中,若有,则继续服务当前进程,若上一个服务已结束,则检测读写请求标志寄存器是否为0,写缓存是否满,若为0或者满,则进行入下一时钟周期;
步骤1b、反之若为1且不满,确定服务标志寄存器,并服务读写请求。

8、
  根据权利要求7所述的所述的有异步缓存的双倍速动态随机存储器的控制方法,其特征在于,所述步骤1a中服务读请求时有两个应答信号,一个是请求应答,持续一个时钟周期,一个是数据应答信号,如果控制器接口的读缓存队列中的数据的个数大于零,仲裁器就从其内部读暂存中弹出一个读写请求,将对应于该请求的数据应答信号给该读请求客户模块,并送出读数据信号到控制器接口从读缓存中取数据,直到该请求的数据全部送出,然后从读请求暂存队列中弹出下一个读请求的标志和其对应的读请求数据个数。

9、
  根据权利要求6所述的所述的有异步缓存的双倍速动态随机存储器的控制方法,其特征在于,所述步骤1中的仲裁器在响应读请求时不但将请求的地址送到写缓存,还将其暂存到仲裁器内部的读请求标志暂存先进先出队列中,该队列临时存放读请求的标志和读请求的数据个数。

10、
  根据权利要求6所述的所述的有异步缓存的双倍速动态随机存储器的控制方法,其特征在于,所述步骤1中的仲裁器在服务一个请求的第一个节拍时,将其水平方向请求个数和垂直方向请求行数同请求地址一起写入写缓存中,且只在写缓存中该请求的起始地址处有效。

11、
  根据权利要求6所述的所述的有异步缓存的双倍速动态随机存储器的控制方法,其特征在于,所述步骤4中的刷新由控制器内的刷新计数器产生,每1000个时钟周期发一次刷新请求。

说明书

有异步缓存的双倍速动态随机存取存储器控制装置及方法
技术领域
本发明属于数字图像编解码技术领域,具体地说,是一种有异步缓存的双倍速动态随机存取存储器控制装置及方法。
背景技术
现有的通用双倍速同步动态随机存取存储器(double data ratesynchronous dynamic random access memory简称ddr sdram)的控制器普遍存在控制效率不高的问题。解决这一问题的一种解决办法,是提高一个读写命令之后连续读写的数据(BL,burst_length),比如采用BL=4,BL=8,或者是整页(full-page),即一次读取一行的数据。在地址分布比较规律,比如连续读写同一个ddr sdram行的情况下,这种方式可以将ddr sdram的工作效率提高到90%以上。但是BL跟ddrsdram的应用环境直接相关,比如高清晰度视频解码系统,由于地址访存的随机性和外部总线宽度的要求,burst length必须等于2。因此,在视频解码系统中,现有的ddr sdram控制器实现方式会造成低效率而成为系统的瓶颈,因此找到一种满足高清晰度视频系统数据访存吞吐率要求而又占用硬件资源较少的ddr sdram控制器的实现方式就成为很重要的任务。
发明内容
针对上述现有技术中存在的问题,本发明的目的在于提供一种有异步缓存的双倍速动态随机存取存储器控制装置及方法,以实现高效率的数据存取,最大可能地利用存储器ddr sdram的数据带宽,提高数据吞吐率,满足高清晰度视频解码对大数据量存取操作的需求。
为完成上述发明目的,本发明采用的技术方案是:一种有异步缓存的双倍速动态随机存储器控制装置,包括下列部件:
仲裁器,它分别连接各客户模块和存储器控制器接口的写缓存与读缓存,用于根据客户模块读写请求的请求优先级别确定该服务哪一个模块的请求,产生各个客户模块的读写应答与读写结束等接口信号和控制器接口中写缓存与读缓存的读写控制信号,对客户模块读写请求的数据进行输入输出服务;
控制器接口,它连接仲裁器和存储器控制器,包含写缓存和读缓存两个异步先进先出队列,用于根据仲裁器的输出信号缓存读写请求的地址、命令和写操作的数据及缓存从ddr sdram返回的读数据;
控制器,用于按照存储器逻辑功能时序,产生存储器的接口控制信号,根据读写缓存的状态和请求的性质确定存储器的存储区和行的数量打开所需访存的存储区和行,向存储器写入或读出数据。
所述的仲裁器确定请求的优先级为:显示输出>读请求>写请求。
所述仲裁器内部有读请求标志暂存先进先出队列,用于临时存放读请求的标志和读请求的数据个数。
所述存储器为两片改良的球栅点阵封装的1M×32比特位×4存储区存储器,其行地址和列地址是复用的,行地址有13位,列地址有8位。
所述的存储方器的存储方式为一个存储区的一个行内存放2×4个宏块。
一种有异步缓存的双倍速动态随机存取存储器的控制方法,包括以下步骤:
步骤1、仲裁器检测其读写请求标志寄存器是否为非零,非零且写缓存不满时则向存储器控制器接口的写缓存发送写控制信号,否则继续检测,同时检测存储器控制器接口的读缓存,若读缓存中有数据,则发送读信号;
步骤2、存储器控制器接口的写缓存根据仲裁器的输出信号缓存读写请求的地址、命令和写操作的数据;存储器控制器接口中的读缓存受从双倍速动态随机存储器返回的数据锁存信号驱动,缓存双倍速动态随机存储器送回的读数据;
步骤3、控制器判断有无读写命令,有则根据该读写命令确定存储器的存储区和行的数量,首先打开所需访存的存储区和行,然后再发读写命令,向存储器写入数据或读出数据;
步骤4、判断是否将该请求处理完,是检查有无刷新请求,有则进入刷新状态,经过刷新回到等待并转向步骤3,否则检测有无新的请求,有则将所有的存储区关掉,然后转向步骤3,无则在步骤4等待。
上述所述步骤1进一步包括以下步骤:
步骤1a、仲裁器检测是否有一个服务正在进行中,若有,则继续服务当前进程,若上一个服务已结束,则检测读写请求标志寄存器是否为0,写缓存是否满,若为0或者满,则进行入下一时钟周期;
步骤1b、反之若为1且不满,确定服务标志寄存器,并服务读写请求。
在所述步骤1a中,服务读请求时有两个应答信号,一个是请求应答,持续一个时钟周期,一个是数据应答信号,如果控制器接口的读缓存队列中的数据的个数大于零,仲裁器就从其内部读暂存中弹出一个读写请求,将对应于该请求的数据应答信号给该读请求客户模块,并送出读数据信号到控制器接口从读缓存中取数据,直到该请求地数据全部送出,然后从读请求暂存队列中弹出下一个读请求的标志和其对应的读请求数据个数。
上述所述步骤1中的仲裁器在响应读请求时不但将请求的地址送到写缓存,还将其暂存到仲裁器内部的读请求标志暂存先进先出队列中,该队列临时存放读请求的标志和读请求的数据个数。
上述所述步骤1中的仲裁器在服务一个请求的第一个节拍时,将其水平方向请求个数和垂直方向请求行数同请求地址一起写入写缓存中,且只在写缓存中该请求的起始地址处有效。
所述步骤4中的刷新由控制器内的刷新计数器产生,每1000个时钟周期发一次刷新请求。
本具有显著的优点和积极效果。本发明在视频解码系统中,按照解码流水线架构的要求,对各个客户模块的数据读写请求进行合理的仲裁,控制数据的读写存取操作,完成解码系统各个模块对数据存取的请求,实现高效率的数据存取,最大可能地利用了存储器的数据带宽,满足了高清晰度视频解码对大数据量存取操作的需求。1、仲裁器按照显示输出请求>读请求>写请求的优先级顺序进行仲裁,尽可能早地返回读请求的数据,使从发出读请求到可以接受读数据的时间尽可能地缩短,保证了系统以流水线方式进行实时解码对数据的需求。仲裁器模块中送出请求地址的同时可以输出读数据给读请求的客户模块,使得两种操作同时进行,提高了控制效率。2、存储器控制器接口模块中读写缓存均为异步设计,使得存储器控制核心的时钟不受系统时钟的影响,这就使存储器控制器的设计可以独立化,可以控制不同频率的存储器。因此该接口具有较好的可扩展性和通用性。3、本发明利用了ddr sdram的四个存储区(bank),充分利用了ddr sdram的存储空间。根据逻辑地址访问规律合理地进行了从逻辑地址到物理地址的地址映射,在满足系统数据吞吐率要求的同时降低了控制器状态机设计的难度。本发明尽量地减少了ddr sdram控制器同控制器接口的握手信号,使得在写缓存中有读写命令存在时,尽可能连续地发给ddr sdram控制器,尽可能减少不必要的等待状态。充分利用ddr sdram的数据带宽满足高清实时解码对较大数据量的需求,同时降低了设计的复杂性,降低了控制器的资源消耗。
图1是本发明的结构框图;
图2仲裁器的控制流程示意图;
图3是仲裁器同各个客户模块的写时序示意图;
图4是仲裁器同各个客户模块的读时序示意图;
图5是存储器的逻辑地址到物理地址的映射结构图;
图6存储器控制器的控制流程示意图;
下面结合附图和具体实施方式对本发明作进一步详细。
在视频解码芯片中,一共存在八个客户模块要对存储器进行读写。它们是硬件解码流水线上的八个模块。这八个客户模块分别为:显示输出模块(Display feeder)、运动补偿模块(Motion compensation)、运动向量预测模块(Premv)、参考图像存储模块(Reference store)、音频解码模块(Audio)、变长解码模块(Vld)、传输流解调模块(transport)、主机接口模块(Host interface)。这八个模块中参考图像存储模块(reference store)只有写请求,显示输出模块(Displayfeeder)、运动补偿模块(Motion compensation)、音频解码模块(audio)和变长解码模块(vld)只有读请求,Premv、transport、host interface可以既有写请求又有读请求。这几个客户模块之间的读写关系是:参考图像存储模块写,显示输出模块和运动补偿模块读;主机接口模块写,主机接口模块和传输流解调模块读;传输流解调模块写,变长解码模块和音频解码模块读;运动向量预测模块写、运动向量预测模块读。由于显示输出模块display feeder模块负责图像数据显示的输出,因此在这八个请求中,display feeder应该给予最高的优先级。此外,由于ddr sdram时钟和系统时钟不同步,必须使用异步读缓存(rfifo)进行读回数据的缓存,因此从各个模块发出读请求到arbitor返回数据应答信号data_ack,会有比较长的等待时间。因此在arbitor中,相对于写请求,应该给予读请求更高的优先级。仲裁器(arbitor)的仲裁优先级为,显示输出请求>读请求>写请求。
请参阅图1本发明的装置结构图,本发明包括以下部件:
1、仲裁器(arbitor),它分别连接各客户模块和存储器控制器接口的写缓存与读缓存,根据客户模块读写请求的优先级别确定该服务哪个模块的请求,产生各个客户模块的接口信号和控制器接口中写缓存与读缓存的读写控制信号,对客户模块读写请求的数据进行输入输出服务。客户模块发送有效请求(client_req)、水平方向上请求数据个数(size)、垂直方向上请求数据行数(line)、行起始地址的差值(pitch)、读写请求(rw)。client_req高有效,表示一个有效请求,line和pitch均为二维请求用,rw有读有写的模块使用,1为读请求,0为写请求。写请求模块的写数据为Client_wdata,仲裁器返回信号为req_ack、data_ack、rd_end、wr_end,req_ack高有效,表示已经响应该模块的请求,data_ack为读请求用,表示读请求数据返回、rd_end为读请求的数据全部返回,读请求服务结束、wr_end为写请求用,表明本次写请求服务结束。
仲裁器的工作步骤如下:
步骤1:仲裁器(Arbitor)检查是否可以服务新请求,若不可以,表明有服务正在进行中,于是就继续服务,发送请求地址及读或写命令到写缓存中。
步骤2:仲裁器检查到可以服务新请求,于是检测有没有请求,若有请求且写缓存不满,则根据优先级顺序确定服务哪一个客户,用token寄存器的某一位来表示是哪一个客户,开始为其服务。
2、控制器接口(Ctrl_if,controller interface)
Ctrl_if连接仲裁器和存储器控制器,Ctrl_if模块内部包含两个异步先进先出缓存队列(fifo):wfifo和rfifo,Wfifo缓存arbitor送出的地址,命令和写操作的写数据。Rfifo缓存从ddr sdram读回的数据。Ctrl_if模块是arbitor与控制器核心的接口。Ctrl_if模块一方面在控制器核心的控制下把wfifo中缓存的20位逻辑地址转换成sdram物理地址送给控制器,把wfifo中的写数据送给控制器,在dram读数据锁存信号ddr_dqs即ddr sdram data strobe的驱动下把从dram读回的数据写入rfifo。另一方面并在arbitor的控制下把rfifo中的数据输出给client。
3、控制器(ddr_sdr)
控制器按照存储器逻辑功能时序,产生存储器的接口控制信号,在根据写缓存的状态和读写命令的具体特征如一维还是二维读写,需要开几个存储区(bank),几个行(row)确定存储器的存储区和行的数量打开所需访存的存储区和行,向存储器写入数据或从存储器读出数据。控制器负责和ddr_sdram接口,按照ddr sdram的读写操作时序产生ddr sdram所需的控制信号。
图2是arbitor的控制流程示意图。读写请求有固定的优先级。display feeder负责显示数据输出,因此,display feeder必须有最高的优先级。其次,由于ddr sdram的工作时钟与系统时钟不同步,必须采用异步缓存fifo进行读回数据的缓存,因此相对于写请求,读请求的等待时间会更长,若读请求很长时间得不到响应,则系统解码流水线就有可能断掉。写请求则没有这个等待时间。
请参阅图3所示的写时序图,只要返回请求应答信号(req_ack),写数据就会源源不断地写到wfifo中,写操作经过请求数据个数(wordsize×lines)个系统时钟可以完成。因此,必须给读请求更高的优先级。因此各个模块优先级为:显示输出模块(display feeder)>运动补偿模块(motion compensation)>变长解码模块(vld)>音频解码模块(audio)>传输流解调模块读(transport)>运动向量预测模块读(premv)>主机接口模块读(host interface read)>参考图像存储模块(reference store)>运动向量预测模块读(premv read)>传输流解调模块写(transport write)>主机接口模块写(host interface write)。
在图2中,在每个时钟(clk)的上升沿,检测是否有一个服务正在进行中,若有,则继续服务当前的进程。若上一个服务刚刚结束或者已经结束,则检测(requester||requester)&&!i_wfifo_full,若为0,说明wfifo满或者没有任何读请求或是写请求,于是该时钟周期什么也不作。反之若为1,则说明有请求且wfifo不满,于是可以服务下一个请求。然后检测requester,即请求标志寄存器。Requester是一个11位的寄存器,从最高位到最低位分别代表显示输出模块读请求(displayfeeder read)、运动补偿模块读请求(motion compensation read)、变长解码模块读请求(vld read)、音频解码模块读请求(audio read)、传输流解调模块读请求(transport read)、运动向量预测模块读请求(premv read)、主机接口模块读请求(host interface read)、参考图像存储模块写请求(refrence store write)、运动向量预测模块写请求(premv write)、传输流解调模块写请求(transportwrite)、主机接口模块写请求(host interface write)。从最高位到最低位,优先级别逐次降低。因此可以看出显示输出模块优先级>读请求模块优先级>写请求模块优先级。只要有高优先级的请求,低优先级的请求就必须等待。
八个客户模块发出的请求中,读请求数目主要是运动补偿模块远大于写请求,为保证系统流水(pipeline)解码不间断,一个客户模块的读请求发出后不能等数据全部返回才发送新的读请求,鉴于此,本发明采用给有读请求的模块发两个应答信号、给只有写请求的客户模块只发一个应答信号的方式。这种方式的正确实现要求有读请求的客户模块与本设计接口中采用先进先出队列(fifo)记录其读请求。这些fifo可以很小,因此采用两个应答信号的方式在保证系统解码进行中各个处理模块流水线不会间断的前提下,增加的系统硬件消耗很少。
请参阅图4的读时序图,除了只有写请求的参考图像存储模块reference store外,其它各模块都可能会有读请求,发出读请求的客户模块会收到两个应答ack信号,一个是请求应答信号(req_ack),一个是数据应答信号(data_ack)。同写时序中的连续的req_ack不同,读请求的req_ack在仲裁器响应某一个读请求后持续有效一个系统时钟周期,该客户模块看到请求应答信号req_ack有效后,就可以先将其当前请求的信息暂存到fifo中,然后发送下一个请求。与此对应,Arbitor在响应读请求的时候,不但同写请求一样,将请求的地址送到wfifo,还会将其暂存到一个arbitor内部的读请求标志暂存fifo中,该fifo临时存放读请求的标志和读请求的数据个数。Arbitor只要看到控制器接口ctrl_if模块的返回信号rfifo_nempty=1,说明rfifo中有读回的数据,arbitor就会从内部的读暂存fifo中弹出一个读请求,给出相应于该请求的data_ack给该读请求模块,并送出rfifo_strb信号到ctrl_if模块从rfifo中取数据给该模块,直到该请求的数据全部送出,才从读请求暂存fifo中弹出下一个读请求的标志。由上所述可以看出,读请求模块只要看到req_ack,就可以发下一个请求,而不用等到第一个请求的数据全部返回才发下一个请求。这种方式可以保证读请求较快的发出,并且,arbitor送出请求地址的操作和从rfifo中取数据给读请求模块的操作同时进行,这种机制实现了数据输入输出的流水操作,缩短了arbitor响应请求的时间和读请求模块从发出请求到收到读数据的时间,提高了服务效率。
控制器接口Ctrl_if模块负责控制从wfifo中输出读写命令给控制器,及提前告诉控制器要打开多几个存储区(bank)几个行(row)。
通常,主流的双倍速同步动态随机存储器(ddr sdram)芯片中每个bank的容量是固定的,因此不同存储容量的ddr sdram有不同的bank数。在ddr sdram芯片中,每个bank的结构是完全相同的,这种多bank的配置增大了存储器的存储空间,增加了使用sdram存储空间的灵活性,同时也增加了设计ddr sdram控制器的复杂性。
视频解码系统内部总线宽度为128位。首先,数据带宽的限制要求必须使用64位外部总线;其次,逻辑地址访存的不连续性造成物理地址的不连续,使得sdram的给一个地址后sdram能连续读写的数据个数(burst_length)必须为2。为了降低图像解码系统数据存储器系统的成本,本发明为两片改良的球栅阵列(FBGA)封装的1M×32bit×4bank ddr sdram,其行地址row_addr和列地址col_addr是复用的,row_addr有12位(bit),col_addr共8位(bit),由于burst_length=2,因此,送出地址时,col_addr最低位恒为二进制1’b0。
如图5所示,为了有效地利用sdram的4个bank的存储空间,逻辑地址到物理地址的映射关系非常重要,首先需要确定一个合理的存储结构。图像的一个亮度宏块(MB)为16×16=256字节。因次一个bank的一个row可以存放(28×32bit×2片)/(256×8bit)=8个亮度宏块。
然后,分析各个模块的地址请求规律。显示数据输出模块(Displayfeeder)、音频解码模块(audio)、变长解码模块(vld)、传输流解调模块(transport)、主机接口模块(host interface)一次请求会读出8个逻辑地址连续的128位数据。运动补偿模块(MC,Motion compensation)亮度请求每次读取为13×13象素块的数据,色度请求为5×5象素块的数据,因此13×13亮度块或是5×5色度块若是跨宏块,则运动补偿模块的读请求在图像水平方向上读两个128位数据,否则读一个128位数据。垂直方向上,帧模式(frame mode)下,运动补偿模块mc读取连续的13行亮度数据和连续的5行色度数据,参考图像存储模块(Refrencestore)一次写请求写的数据个数不定,可以是6行、8行、或是10行的亮度数据或或者是连续的7行、8行或9行的色度数据。场模式(fieldmode)下,运动补偿模块读取隔行的13行亮度数据和隔行的5行色度数据,参考图像存储模块(reference store)写隔行的6行,即在垂直方向上跨越了12行、8行或是10行即在垂直方向上跨越了16行或20行的亮度数据或者隔行的7行即在垂直方向上跨越了14行、8行即在垂直方向上跨越了16行、9行即在垂直方向上跨越了18行色度数据。运动向量预测模块Premv读请求有两种情况:读取地址连续size个128位数据或是读取两个相邻宏块行的数据,该变量在premv发请求时给出。运动向量预测模块Premv、传输流解调模块transport、主机接口模块host interface一次写请求写入size逻辑地址连续的128位数据,该size数值在各模块请求时给出。在所有请求中,mc所占比重大于70%。Reference store和display feeder20%左右,其它模块都很少。
由于sdram在换bank和换row时会有额外的开销,尤其是在一个bank内换row时,由于要先关上先前打开的row才能打开新的row,因此开销更大,因此在做地址映射时,要使一次请求的数据尽量在一个bank的同一个row中。采用一个bank的一个row内存放2×4个宏块的方式,会使一维数据访存的主机接口模块host interface、解析视音频数据模块transport、音频解码模块audio、变长解码模块vld、显示数据输出模块display feeder等模块一次访存需要打开两个甚至3个bank,这要视起始逻辑地址和水平方向请求数据个数而定。
如图5所示,例如:transport模块写请求起始地址为20’h12b06(20位的16进制数12b06)且size=8,则该写请求需要依次写bank1、bank0、bank1。且因为第一个bank1和和第二个bank1对应不同row,所以实际上需要三次打开bank的操作。其他一维请求同样如此。可以看出一个bank一个row放2×4个宏块的方式,使得一维请求的开销比较大。但这种方式可以保证运动补偿模块读请求和参考图像存储模块写请求在垂直方向上跨bank的几率最小,而且由于mc的请求在所有的请求中占的比重相当大,因此相对于一个bank一个row存放1×8=8个亮度宏块的方式,2×4的方式效率会更高。
图5所示的存储结构中每个bank一个row存放8=2×4个亮度宏块。相邻的bank0、bank1、bank2、bank3对应着同一个row,因此请求只要落在相邻的bank0、bank1、bank2、bank3构成的单元中,就不用换row,而且只要是在一个bank中就肯定不用换row,所以这种存储方式的存储代价最小。在图5中,不同颜色的单元分别对应着sdram的4个不同的bank。同种颜色的单元是sdram的同一个bank。每个虚线正方形代表一个图像宏块MB。每个MB是16×16象素的阵列。
确定了存储结构后,可以很容易地确定逻辑地址到物理地址的映射关系。
高清模式时,每一行有2048/16=128(’h80)个宏块,标请时,每一行有1024/16=64(’h40)个宏块,因此相邻的宏块行的起始地址相差128×16(高清)=’h800或是64×16(标清)=’h400。在图5中,bank0同右边bank1和下面的bank2,以及对角的bank3构成的单元在同一个row里。因此,可得出高清和标清两种模式下的地址映射关系如下:
                  表1高清与标清模式下地址映射关系

高清(HD)逻辑地址Bit[19:13]Bit12Bit[11:7]Bit[6:3]Bit2Bit[1:0]物理地址Row[10:4]Bank[1]Col[6:2]Row[3:0]Bank[0]Col[1:0]标清(SD)逻辑地址Bit[19:12]Bit11Bit[10:6]Bit[5:3]Bit2Bit[1:0]物理地址Row[10:3]Bank[1]Col[6:2]Row[2:0]Bank[0]Col[1:0]

如前面所述,size表明了一个读写请求在水平方向上访存逻辑地址的个数,lines代表垂直方向上访存逻辑地址的个数,因此确定了地址映射关系后,由请求的起始逻辑地址和相应的size、lines,就已经可以确定这一请求要使用几个bank,几个row。在使用多个bank的情况下,有必要提前告诉控制器这些bank和row的使用信息,因此,本发明采用的方法是arbitor在服务一个请求的第一个周期cycle,将其size、lines值同请求地址写入写缓存wfifo中,size和lines只在wfifo中一个请求的起始地址处有效,在其他时候为0,因此ctrl_if在从wfifo中弹出一个命令时,若发现size!=0,则表明这是一个新的请求的开始,于是弹出该命令后,就可以根据其首地址、size和lines的值确定用哪几个bank和它们对应的row地址。于是在下一个周期cycle的开始,控制器就可以看到这些信息,并执行相应的预操作。这种方式的缺点是浪费了wfifo的一部分存储空间,但是有利于简化控制器的复杂度。
下面详细说明计算一个请求需要打开的存储区的个数open_bank_cnt和需要打开的行的个数open_row_cnt的方法。
1.确定需要打开几个bank。若水平方向需要打开的bank数为bank_x,垂直方向上需要打开的bank数为bank_y,则共需要打开bank_x×bank_y个bank。采用一个bank的一个row存放2×4个宏块的方式对于一维请求来说,一次读写请求需要打开的bank数视起始逻辑地址和size而定,如前所述transport的访存为例,假设起始逻辑地址为20’h12b00,size=8,则只需打开bank0和bank1。但是若起始地址为20’h12b06,size=8,则需要打开bank00-bank1-bank01,显然,bank00和bank01对应的row地址不同,所以bank0需要关上,然后再打开。这需要近10个cycle的开销,必然降低访存的效率。因此规定一维访存的客户模块水平方向访存逻辑地址个数size<=8,否则一维请求可能需要打开3个以上的bank,极大降低访存效率。鉴于此,设水平方向上需要打开的bank数为Kx,则Kx<=3,且Kx=3时,必然是一维访存。
水平方向上:假设start_addr是一个请求的起始地址。设置三个变量X_addr[6:0],tmp0[6:0],tmp1[6:0],Kx[1:0]。标清时X_addr={1’b0,start_addr[5:0]},高清时X_addr=start_addr[6:0]。由于高清模式下,图像水平方向上有128个宏块,标清模式下,图像水平方向上有64个宏块,因此X_addr实际上表示的是逻辑地址在水平方向上的地址索引号,可以看出高清时X_addr∈{0,127},标清时X_addr∈{0,63}。令tmp0=X_addr,tmp1=X_addr+(size-1),Kx=tmp1[3:2]-tmp0[3:2],size是水平方向请求数据个数。图5中,由于一个bank的一个row存放了图像水平方向上的4个宏块,可知差值Kx为二进制2’b00时,表示水平方向上只占用一个bank,差值为二进制2’b01时,水平方向上占用两个bank,2’b10时水平方向上占用3个bank。
垂直方向上:设置变量Y_addr[12:0],Ky,tmp2[12:0],tmp3[12:0],lines[4:0]。其中lines是一个请求在垂直方向上跨逻辑地址的行数。帧模式下,二维请求是逐行访存,因此,lines等于该客户模块垂直方向访存的行数。场模式时,二维请求为隔行访存,因此lines是该客户模块垂直方向访存行数的二倍。标清时,令Y_addr=start_addr[18:6],高清时Y_addr=start_addr[19:7]。可以知道Y_addr实际上表示了一个逻辑地址在垂直方向上的坐标值。由于本发明采用的存储方式保证了二维请求在垂直方向上最多使用两个bank,因此令tmp2=Y_addr,tmp3=Y_addr+(lines-1),令Ky=(tmp3[5]==tmp2[5]),即tmp3[5]=tmp2[5]时,Ky=1;反之,Ky=0。如附图5所示,可知Ky=0时,垂直方向上占用一个bank,Ky=1时,垂直方向上占用两个bank。
2.确定打开几个bank后,接着来确定需要打开几个row,即它们之间的数值关系。
若水平方向上占用一个bank,则看垂直方向上占用几个bank,若垂直方向上占用一个bank,说明该请求只需打开一个bank,因此,只需要开一个行;若垂直方向上占用两个bank,设起始地址对应的bank地址为bank,则若bank[1]=1,说明起始逻辑地址对应的物理地址为bank2(下一个bank必然是bank0)或是bank3(下一个bank必然是bank1),垂直方向上,相邻的bank2和bank0对应的row地址不等,相邻的bank3和bank1对应的row地址不等,因此,需要打开两个row。按照本发明中的地址映射关系,标清图像的一个宏块行占用64/8=8个row地址,高清图像的一个宏块行占用128/8=16个row地址。设起始逻辑地址的row地址为row,则第二个row地址为row+8(标清)或row+16(高清)。反之,若bank[1]=0,说明起始地址的对应的物理地址bank为bank0或是bank1,由图5可知,该请求的所有地址都在一个row内,只需打开一个row。
若水平方向上占用两个bank,则看垂直方向上占用几个bank,若垂直方向上占用一个bank,设起始地址对应的bank地址为bank,则若bank[0]=0,说明起始bank为bank0(下一个bank必然为bank1)或bank2(下一个bank必然是bank3),由图5可知,需要打开一个row,否则bank[0]=1说明起始bank为bank1或bank3,需要打开两个row,设起始逻辑的row地址为row,则显然第二个row地址为row+1;若垂直方向上占用两个bank,则共占用4个bank,再看起始bank地址。若起始地址对应的bank地址为bank0,则显然只需打开一个row;若起始bank为bank3,则需要打开四个row,设起始逻辑地址对应的row地址为row,则这四个row地址分别为row、row+1、row+8(或row+16)、row+9(或row+17);若起始bank为bank1或bank2,则需要打开两个row,设起始逻辑地址对应的row地址为row,则起始bank为bank1时,这四个bank对应的row地址分别为row、row+1、row、row+1;起始地址为bank2时,这四个bank对应的row地址分别为row、row、row+8(或row+16),row+8(或row+16);
若水平方向上占用三个bank,则需要打开两个row。设起始逻辑地址对应的存储区为bank,对应的row地址为row,则bank[0]=1时,起始bank为bank0或bank2,设这三个row分别为row、row、row+1;若bank[0]=0,则这三个row分别为row、row+1、row+1。
控制器负责和ddr sdram接口,根据sdram的工作时序,发送读写命令。
本发明利用了ddr sdram的四个bank的存储空间,因此在不同的请求存取不同的bank时,必须发送相应的RAS(row access strobe)命令,打开某一bank的一个row,然后等sdram的时序满足后,才可以发CAS(column access strobe)命令,对某一个bank打开的一行的某一个列地址进行读写。因此,在一个请求操作内,RAS和CAS可以穿插,这样可以提高控制器的效率,提高性能,但是由于多个bank同时工作这种方式本身就比较复杂,RAS、CAS命令交叉发送这种工作方式使得状态机的控制极其复杂,占用硬件资源会很多。所以,必须找到一种既满足系统数据吞吐率的要求又消耗较少硬件资源的控制方法。由于与本发明仲裁器相连接的八个客户模块请求的地址之间的关系可以认为是毫无规律的,于是每次新的请求到来时,几乎都要更换row地址,因此本发明采用了在每次从wfifo中弹出新请求时,控制器先将所有的bank关闭,然后先打开所需访存的bank,再发读写命令的方式,这种控制方式比较简洁,可以满足系统的性能需求。
假设系统的最坏工作条件是全部是B帧,且B帧内所有的预测模式均为双向,这种极端情况不会出现,这种极端情况下各模块的请求数量最多。高清解码每个宏块必须在610个系统时钟内完成。因此对于每个宏块的读写请求,存储器控制器必须在610个系统时钟内完成请求服务。
每个宏块内各模块的请求情况如表2所示。
           表2各宏块内客户模块的请求情况        Clients CAS cycles Access 0verhead Notes host interface write 1 0.125 1.2125 Transport write 1 0.125 1.2125 VLD read 1 0.125 1.4625 MV Prediction(read for B) 1 0.125 1.4625 MC RefRead 232 16 173.152 Reference store 24 3 25.08 DispFeeder Read 24 3 62.1 Audio read 1 0.125 1.2125 Refresh 8.54 SubTotal 285 22.395 279.7345 564.7345 Total 636.9186

该表中clients表示与存储器控制器相联的各个客户请求,CAScycles表示在一个宏块处理过程中,各个请求占用存储器控制器有效读写命令的周期数。Access表示在一个宏块处理时间内各模块的请求个数。计算各个模块的Access后,可以知道在一个宏块处理时间内读请求和写请求的比例。Overhead表示在一个宏块处理时间内,存储器控制器处理各模块的读写请求时的无效开销,即非有效读写命令的周期数。
1、主机接口模块(host interface)一次读写逻辑地址连续的八个数据,主机接口模块虽然可能有读请求,但读请求仅用于调试,因此其访存开销不算在有效访存之内。因此,虽然主机接口模块的请求牵涉不到宏块的概念,但本发明采用的统一的地址映射方式使得可以将其作为宏块处理。因此,一个宏块处理时间内主机接口模块的CAS cycle为8/8=1,Access为1/8=0.125。
2、解析传输流解调模块(transport)虽然有读有写,但只能是要么读要么写,因此,只需计算其写请求的开销.CAS cycle为8/8=1,Access为1/8=0.125。
3、变长解码模块vld.CAS cylce为8/8=1,Access为1/8=0.125。
4、运动向量预测模块premv同transport一样,虽然有读有写,但只需考虑其中一个.premv 8个宏块请求一次,因此CAS cycle为8/8=1,Access为1/8=0.125。
5、运动补偿模块在一个宏块内发送八个双向参考的13×13象素块的亮度请求,八个5×5象素块的色度请求,13×13的亮度块在水平方向上有12/16的几率跨宏块,5×5的色度块在水平方向上有4/16的几率跨宏块。因此CAS cycle=(2×12/16+1×4/16)×13×8+(2×4/16+1×12/16)×5=232,Access=2×4×2。
6、参考图像存储模块每个宏块内有两次亮度写请求,一次色度写请求。可以假设每次的写请求均为写8个数据。所以CAS cycle=2×8+8=24,Access=2+1=3。
7、显示输出模块display feeder同参考图像存储模块请求类似。CAS Cycle=2×8+8,Access=2+1。
8、音频解码模块每次请求连续逻辑地址的8个数据,因此CAScycle=1,Access=8/8;
由上面分析可知,读请求Access占比例为19.375/22.395=0.86。所以可以近似认为一个请求跟随在读命令之后的几率为0.86。对于本发明的ddr sdram芯片,读写转换的开销即从有效读写命令到下一个有效读写命令的间隔为:读命令到读命令:9cycles,读命令到写命令:7cycles,写命令到读命令:14cycles,写命令到写命令:12cycles此外,每多打开一个bank,增加两个cycle的开销。
因此存储器控制器服务各模块请求的overhead计算如下:
1、主机接口模块:overhead=(0.86×7+12×0.14+2)/8=1.2125。
2、transport模块:overhead=(0.86×7+12×0.14+2)/8=1.2125。
3、变长解码模块:overhead=(0.86×9+0.14×14+2)/8=1.4625
4、运动向量预测模块:假设读请求是一维的,这种情况下开销更大。Overhead=(0.86×9+0.14×14+2)/8=1.4625。
5、运动补偿模块:按照本设计采用的地址映射关系,其读取操作需要打开1个bank的几率为:P1=(20/32)×(1-12/(4×16))=0.51;两个bank的几率为P2=(20/32)×(12/(4×16))+(12/32)×(1-12/(4×16))=0.421;四个bank的几率为1-P1-P2=0.07。因此overhead=(9×0.86+0.14×14+0.421×2+0.07×4)×4×2×2=173.152。
6、参考图像存储模块:分析其请求规律可知,其写请求在垂直方向上占用两个bank的几率为帧模式下20%,场模式下33%,取33%。因此overhead=(0.86×7+0.14×12+0.33×2)×3=25.06。
7、显示输出模块:由于其请求起始地址总是为’hxxxx1或是’hxxxx9。因此,可知,其一维读请求总是要在水平方向上占用3个bank,本设计中其overhead=3×(0.86×9+0.14×14+2+9)=62.1。
表2Notes中564.7345表示一个宏块解码时间内的读写请求操作,可以在564.73个dram clk(133MHz)内完成,折算到系统时钟后可知可在564.73×(148.5/133)=636.91个系统时钟内完成。610/636=88%,这就要求B帧且是双向参考的情况不超过88%,这个条件在实际解码时是满足的。由于本发明考虑的最坏情况是全是B帧,这在实际解码中是不存在的。因此,本发明控制器的设计的数据吞吐率可以满足系统性能的要求。
如图7所示,本发明控制器的控制流程。该状态机有初始化(initialization)、等待命令(wait_cmd)、打开bank(包含active_1bank、active_2bank、active_4bank三种情况)、开始读(begin_rd)、开始写(begin_wr)、读数据(read)、写数据(write)、预充电(precharge_all)、刷新0(rfsh_0)、刷新1(rfsh_1)、刷新2(rfsh_2)共13个状态。状态机在复位后先对sdram进行正常工作所必需的初始化,然后进入等待命令(wait_cmd)状态,同时告诉ctrl_if模块可以发读写命令了。在Wait_cmd状态,若发现刷新请求,则进入刷新状态,完了之后回到wait_cmd。若没有发现刷新请求而是发现有新请求,则根据ctrl_if送来的open_bank_cnt确定打开1个、2个还是4个bank,进入active_1bank,active_2bank或是active_4bank。对于一维请求访问3个bank的情况,本发明采用了在仲裁器为其服务时,将其分解为两次访问的方式,即将其请求分解为访问两个bank加访问一个bank的形式。在存储器接口模块ctrl_if中预先将该请求分解为访问两个bank加访问一个bank的组合,这样有助于减少控制器状态机的状态数,降低控制器的实现难度。由于客户模块的一次请求可能使用ddr sdram的四个bank,因此,为提高访存效率,本发明在打开bank(active)状态会将这四个bank全部打开。正常的读写命令均为对打开的bank的访问,因此,可见Active状态是控制状态机完成与ddr sdram接口时序的最重要的环节。在打开bank(active)状态,控制器根据ctrl_if模块送来的本次访存地址分布的信息,打开该请求要访存的bank,送出相应的RAS地址,bank地址及相应的ras地址在前面ctrl_if模块中已有详细的描述,控制器根据ddr sdram的时序关系将这些地址信息依次送给sdram。打开所有需要访存的bank后,若是读命令就进入开始读(begin_rd)状态,送出起始列地址(collum address)及读命令。否则进入开始写(wait wr)状态,送出起始列地址及写命令。正常的读写开始后,状态机由开始读(wait_rd)状态转移到读数据(read)状态,开始写(wait_wr)状态转移到写数据(write)状态。由于该请求的所有的bank都已打开,因此在读数据(read)状态,控制器可以连续地接受ctrl_if送来的读命令。写数据(Write)状态,控制器可以连续地处理ctrl_if送来的写命令,直到该请求的所有命令都已送出,该请求的处理结束,在写数据(write)或是(read)状态,该请求结束时检查有没有刷新请求,若有刷情请求则进入刷新状态,经过刷新0(关闭所有的bank)、刷新1(向sdram发自动刷新命令)、刷新2(完成刷新)三个状态回到wait_cmd。在刷新0状态,控制器首先发送预充电命令(precharge),这是因为ddr sdram的存储空间是由电容阵列组成的,直接读写电容会造成电容阵列的物理破坏,因此,对存储空间进行访存时,首先要把相应访存地址对应的一行电容上的数据1或是0锁存到一行静态寄存器中,这其实就是active命令完成的功能,然后对静态寄存器进行读写。刷新是对电容进行充放电的操作,因此,需要首先把寄存器中的数据写回到电容中,precharge命令完成的就是这样的功能。刷新1状态,控制器发送刷新命令给ddr sdram,然后ddrsdram内部逻辑控制其完成自动刷新。刷新2状态,满足时序后即ddrsdram已经完成刷新,可以接受新命令时,若发现ctrl_if送来访存命令,则直接转到打开bank(active)状态(包括active_1bank,active_2bank,或是active_4bank),开始新一轮的读写操作。否则回到wait_cmd状态,继续等待访存命令。刷新请求由控制器内的刷新计数器产生,该计数器每1000个时钟周期发一次刷新请求。若在read或write状态请求处理结束时未发现刷新请求,则检测有没有新的访存命令,若有则转入预充电(precharge_all)状态。基于每次访存的逻辑地址不连续的前提,因此,对应的物理地址也不连续。比如:若有一个客户模块访存了bank0的第a行,紧接着的另一个客户模块需要访存bank0的第b行,因此必须把第a行关上,然后打开第b行后才能访问第b行的数据。本发明在每次访存把之前打开的bank全部关闭,然后打开需要打开的bank,由于每次请求访问bank的数目不固定,所以打开新bank之前,就把所有的bank都关闭。因此,在预充电(precharge_all)状态,发送precharge_all命令,先关闭所有的bank。正常情况下状态机由预充电(Prearge_all)状态会转移到打开bank(active),为新一轮的读写进行RAS操作。但也有可能转到刷新1(rfsh_1)状态。由于为了增加效率,去掉不必要的等待时间,因此尽量减少了控制器和控制器接口ctrl_if模块之间的握手信号,因此没有刷新命令。若是状态机由读数据(read)状态或是写数据(write)转移到预充电(precharge_all)状态时,刷新计数器尚未发出刷新请求,由于在打开bank(active)状态不检查刷新请求,读数据(read)、写数据(write)状态在一次请求处理完毕后才检查,所以经过precharge_all、active、read或write状态,刷新请求经过很长时间才得到响应,sdram内电容上存储的数据有可能丢失。因此,若在预充电(precharge_all)状态检测到了刷新请求,则直接进入刷新1(rfsh_1),发刷新命令。刷新请求得不到响应的最长等待时间是响应mc模块的13×13读请求的情况,状态机在active状态到read状态的时间这个时间最长不超过40个cycle。由于128Mbit的ddr sdram需要在32毫秒对4096行电容阵列全部刷行一次,控制器的运行频率为133MHz,因此每32ms/4096/7.5ns=1041个时钟周期需要发送一次刷新命令。这就是刷新计数器每1000个时钟周期发一次刷新请求的原因。
最后所应说明的是:以上实施例仅用以说明而非限制本发明的技术方案,尽管参照上述实施例对本发明进行了详细说明,本领域的普通技术人员应当理解:依然可以对本发明进行修改或者等同替换,而不脱离本发明的精神和范围的任何修改或局部替换,其均应涵盖在本发明的权利要求范围当中。

有异步缓存的双倍速动态随机存取存储器控制装置及方法.pdf_第1页
第1页 / 共34页
有异步缓存的双倍速动态随机存取存储器控制装置及方法.pdf_第2页
第2页 / 共34页
有异步缓存的双倍速动态随机存取存储器控制装置及方法.pdf_第3页
第3页 / 共34页
点击查看更多>>
资源描述

《有异步缓存的双倍速动态随机存取存储器控制装置及方法.pdf》由会员分享,可在线阅读,更多相关《有异步缓存的双倍速动态随机存取存储器控制装置及方法.pdf(34页珍藏版)》请在专利查询网上搜索。

本发明是一种有异步缓存的双倍速动态随机存取存储器控制装置及方法,装置包括仲裁器、控制器接口和存储器控制器。仲裁器检测其读写请求标志寄存器是否为零,非零且写缓存不满则向控制器接口写缓存发写控制信号,否则继续检测,同时检测控制器接口读缓存,读缓存中有数据则发送读信号;控制器接口写缓存根据仲裁器输出信号缓存读写请求的地址、命令和写操作数据;控制器判断有无读写命令,有则确定存储区和行的数量并打开所需访存存。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 物理 > 信息存储


copyright@ 2017-2020 zhuanlichaxun.net网站版权所有
经营许可证编号:粤ICP备2021068784号-1