专利名称:芯片初始化方法
技术领域:
本发明涉及芯片的初始化技术,特别涉及对按照一定规律访问或分配,并且初始化的存储内容有规律的内部和外部存储器的初始化。
背景技术:
在各种电子系统中,芯片在使用前都需要进行一定的初始化工作,包括配置控制寄存器,初始化存储器等。其中,有一类存储器的初始化比较特殊,这类存储器按照一定规律访问,初始化的存储内容有规律,存储单元数目比较多,一般为几K,而且在芯片正常工作前要求必须将所有存储内容配置为指定数据。
例如,芯片中应用比较广泛的缓存指针的初始化就属于这一类。缓存指针队列是循环先进先出队列(First In First Out,简称“FIFO”),并且初始化的存储内容即表项值有规律且固定,通常其对应的表项数目为几K。如图1所示为缓存指针初始化完成后的示意图。可以看出,为了进行图1所示的缓存初始化,需要配置的表项数目为N个,其对应的表项值为从0到最大缓存指针N-1之间递增的数据。
缓存管理需要进行缓存指针的分配和回收,而这些缓存指针又比较有规律,数量如上所述一般为几K。需要说明的是,缓存指针的分配和回收需要在初始化完成后进行。通常情况下,需要使用芯片内部随机存取存储器(Random Access Memory,简称“RAM”)或外挂RAM存储相应的缓存指针,在芯片正常工作前,将存储器初始化为如图1所示的内容。其中,缓存指针为0~N-1之间的值,可以通过一定的逻辑运算得到实际的缓存块的地址,指向相应的缓存块;可用缓存计数(FreeCnt)初始化为N,即开始可有N个缓存指针可供使用;分配指针(AllocPtr)指向存储器的当前分配位置,初始化为0;回收指针(RecyPtr)指向存储器的当前回收位置,也初始化为0。熟悉本领域的技术人员理解,在缓存的管理中,AllocPtr和RecyPtr之间是已经分配出去的缓存指针,FreeCnt用于防止越界。
当需要进行缓存分配时,首先判断FreeCnt不为0,表明当前有可用缓存;接着从AllocPtr指向的存储器位置读出缓存指针值,即0,这就是第一个可用缓存指针;然后FreeCnt减一,表明当前可用指针减少一个;最后将AllocPtr加一,指向下一个可用缓存指针。在分配下一个缓存指针时,同样如前所述继续进行操作,当AllocPtr加到N-1后,再重新置为0。
缓存回收时,首先判断FreeCnt不等于N,表明此时可以进行缓存回收;接着将缓存指针写入RecyPtr指向的存储器位置,需要说明的是,这时写入的值不一定为0,可以是已分配出去的任意缓存指针值,该缓存指针值从回收指令中获得;接着FreeCnt加一,表明可用指针增加一个;最后将RecyPtr加一,指向下一个回收位置。在下一次回收操作中,同样也如前所述继续进行操作,当RecyPtr加到N-1后,再重新置为0。
熟悉本领域的技术人员可以很容易看出,这里的存储器相当于一个循环的FIFO队列,缓存指针不断被写入和读出供芯片使用在现有的技术中,可以通过硬件或者软件的方式,实现芯片中的按照一定规律访问、并且初始化的存储内容有规律的内部和外部存储器的初始化。
技术方案一采用硬件的方式实现上述表项的初始化,需要在芯片内部设计初始化模块,当芯片工作时,首先启动初始化模块对需要初始化的存储器进行配置,最后输出一个状态信号,表明初始化结束。
技术方案二采用软件的方式实现上述表项的初始化,由硬件配合给该存储器提供软件访问接口,当芯片工作时,先由驱动软件将需要配置的数据写入相应存储器,之后再开始正常工作。
在实际应用中,上述方案存在以下问题现有的技术方案初始化按照一定规律访问并且初始化的存储内容有规律的内部和外部存储器时,需要占用较多芯片资源,并且初始化速度慢。
造成这种情况的主要原因在于,现有的技术方案需要设计专用的初始化模块或软件配置接口模块,这些模块不可避免的要占用芯片的资源,并且由于现有的技术需要专门的硬件或软件初始化过程对所有的存储单元进行初始化,而存储单元一般情况下又比较多,因此会造成初始化时间比较长,速度慢。
发明内容
有鉴于此,本发明的主要目的在于提供一种芯片初始化方法,使得初始化占用的芯片资源少并且初始化速度快。
为实现上述目的,本发明提供了一种芯片初始化方法,包含以下步骤A为需要初始化的存储器设置第一计数器,并设定其初始值;B在初次遍历所述存储器的存储单元时,对所述第一计数器计数,并将所述第一计数器的当前计数值、或者该计数值的代数或逻辑运算结果,作为当前存储单元的初始化的数据读出。
其中,所述存储器以循环先进先出队列的形式存储数据。
初次遍历以后,再次访问所述存储器的存储单元时,直接读取该存储单元内的数据。
所述第一计数器的初始值为0;并且初次遍历中,每次访问下一个存储单元时,将所述第一计数器加1。
所述初次遍历的判定包含以下子步骤当所述第一计数器的值小于所述存储器中存储单元的总数时,判定为初次遍历。
所述初始化方法用于缓存管理,所述存储器中存储的数据是缓存指针。
所述初始化方法用于缓存管理时还包含以下步骤将可用缓存计数初始化为缓存指针总个数N,设置分配指针和回收指针,并均初始化为存储所述缓存指针的队列的首地址。
还包含以下步骤回收缓存时,将指向该缓存的缓存指针存入所述回收指针指向的存储单元;将所述可用缓存计数加1,将所述回收指针模N加1。
还包含以下步骤需要分配缓存时,判断所述可用缓存计数是否大于0,如果是,则进行缓存分配,并在分配成功后,将所述分配指针模N加1,所述可用缓存计数减1。
所述步骤B中,初次遍历时,以所述第一计数器的计数值作为当前所述存储单元的初始化的缓存指针数值。
通过比较可以发现,本发明的技术方案与现有技术的区别在于,对于初始化的存储内容有规律并且依次遍历访问的内部或外部存储器,在芯片中设置计数器,在初次遍历时计数器计数,并将计数器的当前计数值、或者该计数值的代数或逻辑运算结果,作为当前存储单元的初始化的数据读出。
这种技术方案上的区别,带来了较为明显的有益效果,即首先,由于本发明芯片的初始化方法只需要利用一个分配计数器和相关判断逻辑即可以进行初始化操作,不需要设计专用的初始化模块或软件配置接口模块,因此大大减少了对芯片资源的占用;其次,本发明方案由分配计数器的计数值产生初始化后首次遍历的表项值,不需要对所有表项一一进行初始化,尤其是在需要初始化的表项数目很大时,可以明显地缩短初始化的时间。
图1为现有的技术方案中,芯片中的缓存指针初始化完成后的示意图;图2根据本发明的一个较佳实施例的芯片中的缓存指针初始化完成后的示意图。
具体实施例方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合附图对本发明作进一步地详细描述。
首先说明本发明的基本原理。考虑到芯片中需要初始化的存储器按照一定规律访问并且初始化的存储内容有规律,因此可以考虑在芯片初始化后初次读取时,用计数器的计数值生成初始化值;每读取一次,计数器的计数值相应改变一个固定的数值,直至遍历所有需要初始化的存储单元。这样,就可以避免对所有存储单元一一进行初始化的操作。熟悉本领域的技术人员可以理解,当初始化后遍历了所有需要初始化的存储单元后,就相当于对所有的存储单元初始化数据进行了分配,和对所有存储单元一一初始化的效果相同。
下面结合本发明的一个具体实施例来说明本发明方案。
由于缓存指针的初始化是应用比较广泛的按照一定规律访问并且初始化的存储内容有规律的内部和外部存储器的初始化,下文以对缓存指针的初始化为较佳实施例说明本发明方案。
缓存初始化完成后的状态如图2所示,仅仅是设置了相关计数器和指针的值,没有设置每一个存储单元的初始值,每一个存储单元中是任意的随机值。
根据本发明的一个较佳实施例的芯片初始化方法中,对缓存指针进行初始化。其中,有N个存储单元和值从0~N-1的N个缓存指针。熟悉本领域的技术人员可以理解,N的数目较大,一般取几K。
其中,对缓存指针初始化并进行缓存的分配和回收的操作步骤如下。
首先,将分配计数器(AllocCnt)初始化为0,FreeCnt初始化为N,AllocPtr和RecyPtr初始化为指向缓存指针队列首地址。其中,AllocCnt为本发明一个较佳实施例中新增加的一个计数器,FreeCnt、AllocPtr和RecyPtr的意义和上文所述完全相同,在此不赘述。需要说明的是,本发明方案中,不对缓存指针的存储器进行任何初始化,上电后存储器单元的数据为任意值。
当进行缓存分配时,首先要求FreeCnt不为0,此时若AllocCnt小于N,则将AllocCnt的值作为分配得到的缓存指针并将AllocCnt加一,否则将AllocPtr指向的存储单元中的数据作为分配得到的缓存指针。其中,当FreeCnt不为0时,表明当前有可用缓存,可以进行分配,否则缓存分配失败。熟悉本领域的技术人员可以理解,在AllocCnt小于N时,初次遍历还没有完成。
接着,在缓存分配成功后,将FreeCnt减一,并将AllocPtr加一指向FIFO队列的下一个存储单元。其中,FreeCnt减一,表示可用缓存指针减少了一个。需要说明的是,AllocPtr是循环的,当AllocPtr达到N-1时,再次分配缓存后,AllocPtr变为0。熟悉本领域的技术人员可以理解,初次遍历时不变更AllocPtr仅变更FreeCnt和AllocCnt;再次遍历时完全依照现有的技术方案,仅变更FreeCnt和AllocPtr,就可以实现本发明方案。
当进行缓存回收时,首先要求FreeCnt不等于N,接着将缓存指针写入RecyPtr指向的存储器位置。需要说明的是,写入的值可以是已分配出去的任意缓存指针值,该缓存指针值由通过缓存回收命令得到。
接着,将FreeCnt加一,并将RecyPtr指向下一个回收位置。需要说明的是,当RecyPtr加到N-1后,再次回收缓存后,重新置为0。其中,FreeCnt加1是为了表明可用缓存指针增加一个。
可以看出,本发明中,AllocPtr和RecyPtr的加一均为模N加一。
如上所述,本发明的一个较佳实施例的芯片的初始化中,对缓存指针进行初始化时,无须对存储器进行任何初始化,初次遍历时的缓存分配需要的缓存指针先由计数器产生;在回收操作中,再将已分配的有效的缓存指针写回存储器。熟悉本领域的技术人员可以理解,当计数器达到N后,此时有效的缓存指针要么已经写回存储器,要么正在被其他模块使用。
熟悉本领域的技术人员可以理解,本发明不限于芯片的缓存管理,可以应用在与芯片相关的任何存储内容有规律的内部或外部存储器的初始化。在表项值依次为可以由连续的计数值通过一定的逻辑或代数运算得到的值的情况下,在初次遍历时,可以将计数器的计数值通过一定的逻辑或代数运算后得到初始化的数据,并不影响本发明的实质。需要说明的是,当需要初始化的存储器的初次遍历结束后,芯片完全依照现有的技术运行。
虽然通过参照本发明的某些优选实施例,已经对本发明进行了图示和描述,但本领域的普通技术人员应该明白,可以在形式上和细节上对其作各种各样的改变,而不偏离所附权利要求书所限定的本发明的精神和范围。
权利要求
1.一种芯片初始化方法,其特征在于,包含以下步骤A为需要初始化的存储器设置第一计数器,并设定其初始值;B在初次遍历所述存储器的存储单元时,对所述第一计数器计数,并将所述第一计数器的当前计数值、或者该计数值的代数或逻辑运算结果,作为当前存储单元的初始化的数据读出。
2.根据权利要求1所述的芯片初始化方法,其特征在于,所述存储器以循环先进先出队列的形式存储数据。
3.根据权利要求2所述的芯片初始化方法,其特征在于,初次遍历以后,再次访问所述存储器的存储单元时,直接读取该存储单元内的数据。
4.根据权利要求3所述的芯片初始化方法,其特征在于,所述第一计数器的初始值为0;并且初次遍历中,每次访问下一个存储单元时,将所述第一计数器加1。
5.根据权利要求4所述的芯片初始化方法,其特征在于,所述初次遍历的判定包含以下子步骤当所述第一计数器的值小于所述存储器中存储单元的总数时,判定为初次遍历。
6.根据权利要求5所述的芯片初始化方法,其特征在于,所述初始化方法用于缓存管理,所述存储器中存储的数据是缓存指针。
7.根据权利要求6所述的芯片初始化方法,其特征在于,所述初始化方法用于缓存管理时还包含以下步骤将可用缓存计数初始化为缓存指针总个数N,设置分配指针和回收指针,并均初始化为存储所述缓存指针的队列的首地址。
8.根据权利要求7所述的芯片初始化方法,其特征在于,还包含以下步骤回收缓存时,将指向该缓存的缓存指针存入所述回收指针指向的存储单元;将所述可用缓存计数加1,将所述回收指针模N加1。
9.根据权利要求7所述的芯片初始化方法,其特征在于,还包含以下步骤需要分配缓存时,判断所述可用缓存计数是否大于0,如果是,则进行缓存分配,并在分配成功后,将所述分配指针模N加1,所述可用缓存计数减1。
10.根据权利要求6所述的芯片初始化方法,其特征在于,所述步骤B中,初次遍历时,以所述第一计数器的计数值作为当前所述存储单元的初始化的缓存指针数值。
全文摘要
本发明涉及芯片的初始化技术,公开了一种芯片初始化方法,使得初始化占用的芯片资源少并且初始化速度快。这种芯片初始化方法应用于初始化的存储内容有规律并且依次遍历访问的内部或外部存储器,在芯片中设置计数器,在初次遍历时计数器计数,并将计数器的当前计数值、或者该计数值的代数或逻辑运算结果,作为当前存储单元的初始化的数据读出。
文档编号G06F9/00GK1753099SQ20041008305
公开日2006年3月29日 申请日期2004年9月21日 优先权日2004年9月21日
发明者范嘉旗 申请人:华为技术有限公司