支持16位和32位字宽存储器的启动方法及装置的制作方法

文档序号:6405047阅读:150来源:国知局
专利名称:支持16位和32位字宽存储器的启动方法及装置的制作方法
技术领域
本发明涉及数据读取的方法和装置,尤其涉及读取非易失性存储器的数据的方法和装置。
背景技术
软硬件结合系统是在硬件结构的基础上进行软件开发,提供面向用户的应用。基于软件的灵活和易修改性,在不改变硬件的基础上可以提供多种应用。这类软硬件结合系统,例如,计算机、手机以及所有电脑控制的消费品,都是在系统上电后,启动软件代码,与硬件协作完成所需的功能应用。而这些软件代码必须保证存放在非易失性存储器中,并且在系统上电后,硬件系统会自动到该存储器中取指令并执行。
在处理芯片内部,存储器的地址都是以字节为单位的,即一个存储地址对应8位数据。通常32位处理器都认为每一个PC地址(内部程序指针地址)对应一个32位的数据。因此在芯片内部PC地址的最低两位是不关心的。在利用芯片进行电路板设计时,用户既可能选用32位数据宽度的存储器也可能选用16位宽度的存储器。这点从芯片设计的角度是不可预知的。需要芯片内部的存储控制器来做32位和16位数据宽度的转换。
如果外部存储器的数据宽度是32位,则一个芯片内部的一个32位存储器地址访问直接对应外部的一个外部存储器地址访问,存储控制器将芯片内部地址除以4(丢掉内部地址的最低两位)作为外部存储器地址;如果外部存储器的数据宽度是16位,存储控制器将芯片内部地址除以2(丢掉内部地址的最低一位)作为外部存储器地址,这时,一个芯片内部的32位存储器访问会对应两个外部的存储器地址,即每次一个内部的32位存储器访问会产生两个外部的16位存储器访问,存储控制器将两次16位的数据访问合并成一个32位的数据完成一次芯片内部的32位存储器访问。
由于不同的外部存储器数据宽度的配置会导致同样的内部地址输出不同的外部地址,所以即使PC地址不变,改变存储控制器的存储器宽度配置会使外部的存储器地址变化。例如,处理器对PC=0x0000001C进行访问时,配置为16位数据宽度时外部地址是0x0000000E,而且存储器会自动插入一个对地址0x0000000F的访问;而配置32位数据宽度时外部地址是0x00000007。
非易失性存储器可能是16位字宽,也可能是32位字宽。如果存储控制器原来配置的存储器字宽和实际使用的存储器字宽不同,处理器将不能正确从外部存储器取指。为了保证系统硬件可以正确的从存储器中取指令并执行,目前是从硬件上更改设计,为芯片提供额外的硬件管脚来做存储器宽度的配置,使之支持16位字宽或者32位字宽的存储器。这会导致仅仅由于存储器字宽的不同,就需要提供两种类型的硬件结构,而硬件结构的更改会带来很大的开销。

发明内容
本发明要解决的技术问题是提供一种不需改变硬件结构,即可支持16位和32位字宽存储器的启动方法。
为了解决上述技术问题,本发明提供了一种支持16位和32位字宽存储器的启动方法,应用于包括处理器、存储控制器和非易失性存储器的32位总线的系统,包括以下步骤(a)采用寄存器相应控制位的值来设置存储控制器所适应的存储器字宽,初始设置为16位,对16位字宽的非易失性存储器可正常取指并执行;(b)对32位字宽的非易失性存储器,从起始位置依次设置第一至第四存储区,在第一、第三存储区,每条32位指令的高、低16位分别放入相邻的两个存储器单元,在第二、第四存储区,每条32位指令直接放入一个存储器单元;(c)系统启动,在第一存储区执行了在该区存放的第一跳转指令后,转入第三存储区继续执行;(d)在第三存储区执行在该区存放的修改所述控制位值的指令,将所述存储控制器的存储器字宽设置改为32位,自动转入第二存储区继续执行;(e)在第二存储区执行了在该区存放的第二跳转指令后,转入第四存储区继续执行在该区存放的指令。
上述方法可具有以下特点在所述第一、第三存储区,每条32位指令的低16位和高16位均放在存储器单元的低16位。
上述方法可具有以下特点在所述第一、第三存储区,每条32位指令的低16位放在偶数标号的存储器单元,而该指令的高16位放在比偶数标号大1的相邻存储器单元。
上述方法可具有以下特点所述步骤(c)在执行第一跳转指令之前,先执行在第一存储区该跳转指令之前存放的设置芯片内部寄存器的指令。
上述方法可具有以下特点所述第一跳转指令、第二跳转指令、修改所述控制位值的指令,及第四存储区的指令之间存放有若干的空指令。
本发明要解决的另一技术问题是提供一种不需改变硬件结构,即可支持16位和32位字宽存储器的启动装置。
为了解决以上技术问题,本发明提供了一种支持16位和32位字宽存储器的启动装置,应用于32位总线的硬件系统,包括依次连接的处理器、存储控制器,以及16位或32位非易失性存储器,其特征在于所述存储控制器包括一寄存器,该寄存器相应控制位的值设置了所连接存储器的字宽,初始设置为16位;所述32位存储器进一步包括第一至第四指令存储区域,在第一和第三指令存储区域,每条32位指令的高、低16位分别存放在相邻存储器单元,在第二和第四指令存储区域,每条32位指令存放在一个存储器单元,且第一存储区域存放有指向第三存储区域的第一跳转指令,第二存储区域存放有指向第四存储区域的第二跳转指令,第三存储区存放有修改所述控制位值的指令;所述处理器用于在启动后从所述32位存储器取指执行,在第一指令存储区域执行所述第一跳转指令后,转入第三指令存储区域;在第三指令存储区域执行所述修改控制位值的指令后,将所述存储控制器的存储器字宽设置改为32位,自动转入第二指令存储区域;在第二指令存储区域执行了所述第二跳转指令后,转入第四指令存储区域继续执行在该区存放的指令。
上述启动装置可具有以下特点在所述第一和第三指令存储区域,每条32位指令的高、低16位分别存放在相邻存储器单元的低16位。
上述启动装置可具有以下特点所述处理器在执行所述第一跳转指令、修改所述控制位值的指令、第二跳转指令及第四存储区的非空指令之间还执行若干不进行任何操作的空指令。
上述启动装置可具有以下特点所述处理器在执行所述第一跳转指令之前,先执行若干设置芯片内部寄存器的指令。
由上可知,本发明在不更改硬件结构的基础上,通过在外部存储器中采用特别的指令结构放置特定的指令代码,从而达到可以利用软件来完成对外部存储器数据宽度的配置,使得相同的硬件结构即可以支持从16位存储器启动,又可以支持从32位存储器启动。


图1是本发明实施例装置的结构示意图。
图2是本发明实施例存储器指令代码存放位置的示意图。
具体实施例方式
现有技术是通过额外管脚的电平来控制字宽设置的,本发明改用存储控制器寄存器中相应的控制位的值来实现,以避免对硬件的改动。但由于最初的取指令操作发生在软件代码执行之前,该控制位的值并不能在一开始就用指令直接修改,必须巧妙地对指令进行设计。
如图1所示,本发明实施例装置是一种用于32位总线的硬件系统,它包含一款32位处理器1和一个存储控制器2,并通过存储控制器2与非易失性存储器3(如,FLASH)相连。
在硬件设计时,设置存储控制器适应的初始存储器字宽为16位。如果存储控制器接16位字宽存储器,硬件系统自然能够适应该存储器,正常取指并执行。假定存储控制器接的是32位字宽存储器,本实施例通过增加一部分软件代码以及巧妙地设计这些代码在存储器中的存放位置,来实现正常的取指和执行。
以下是在该存储器起始位置设置的指令代码示例,均为32位MOVr1,#0x02000000;instructionl
ADDr1,r1,#0x10000 ;insruuction2ADDr1,r1,#0xA000 ;instruction3ADDr1,r1,#A4 ;instruction4LDRr0,[r1] ;instruction5LDRpc,=0x38;instruction6NOP ;instruction7NOP ;instruction8NOP ;instruction9NOP ;instruction10NOP ;instruction11NOP ;instruction12NOP ;instruction13NOP ;instruction14NOP ;instruction15NOP ;instruction16NOP ;instruction17NOP ;instruction18LDRpc,=0xA0;instruction19NOP ;instruction20NOP ;instruction21NOP ;instruction22ORRr0,r0,#0x00000080 ;instruction23STRr0,[r1] ;instruction24NOP ;instruction25NOP ;instruction26NOP ;instruction27NOP ;instruction28NOP ;instruction29NOP ;instruction30LDR ;instruction31
其中指令1到指令5为设置芯片内部寄存器的代码;指令6为跳转指令,跳到指令23的位置;指令7到指令18为空指令,不做任何实质操作,只占用处理器的周期,以保证处理器进行安全跳转;指令19为跳转指令,跳到指令29的位置;指令20到指令22为空指令;指令23和24完成对存储控制器寄存器中相位的字宽设置控制位的修改,由16位改为32位;指令25到30是空指令;指令31为其它需要执行的启动指令。各个指令均为32位指令。
图2示出了所需软件代码在存储器中的正确放置方法,图中有阴影的框表示存放有指令数据指令1到指令6,由于此时的存储器字宽设置为16位,为了保证正常取指执行,将32位指令的高16位放置在奇数标号的存储器单元的低16位,将低16位放置在偶数标号的存储器单元的低16位;指令7到指令22,为了保证存储器字宽设置改变后,回跳到该区域时能够正确取指令,将每条32位指令放入一个存储器单元(32位)中;指令23到指令28,是在存储器字宽设置为16位的情况下需要执行的指令,所以也按照指令1到指令6的规则来放置;从指令29开始,按照每条32位指令,占用一个存储器字宽的规则存入存储器中。
从存放方式来划分,可以将指令1到指令6所存放的区域划分为第一指令存储区域,将指令7到指令22所存放的区域划分为第二指令存储区域,将指令23到指令28所存放的区域划分为第三指令存储区域,将从指令29所在位置以后划分为第四指令存储区域。
图2还示出了软件启动的执行顺序开始存储控制器的设置为16位字宽,从指令1到指令5进行芯片内部寄存器的设置,执行到指令6后,改变PC值,处理器取指位置发生变化,所以跳到第23条指令的位置;继续执行指令23和24,将存储控制器的存储器字宽设置更改为32位,由于该字宽设置的改变,虽然PC不变,但是处理器通过存储器取指令的外部存储器地址发生了改变,因而在执行完指令26后,会跳转回指令12所在的物理地址取指并执行;继续执行到跳转指令19,然后跳转到指令29进入正常32位指令存放区,此时存储控制器的存储器字宽设置已与实际存储器字宽一致且指令是按正常方式存放,即可正常取指并执行了。
综上所述,本发明在不更改硬件结构的基础上,巧妙的利用了存储控制器和外部存储器的特点,通过在外部存储器中采用特别的指令结构放置特定的指令代码,从而达到可以利用软件来完成对外部存储器数据宽度的配置,使得相同的硬件结构即可以支持从16位存储器启动,又可以支持从32位存储器启动,避免了硬件结构的更改带来的开销。
权利要求
1.一种支持16位和32位字宽存储器的启动方法,应用于包括处理器、存储控制器和非易失性存储器的32位总线的系统,包括以下步骤(a)采用寄存器相应控制位的值来设置存储控制器所适应的存储器字宽,初始设置为16位,对16位字宽的非易失性存储器可正常取指并执行;(b)对32位字宽的非易失性存储器,从起始位置依次设置第一至第四存储区,在第一、第三存储区,每条32位指令的高、低16位分别放入相邻的两个存储器单元,在第二、第四存储区,每条32位指令直接放入一个存储器单元;(c)系统启动,在第一存储区执行了在该区存放的第一跳转指令后,转入第三存储区继续执行;(d)在第三存储区执行在该区存放的修改所述控制位值的指令,将所述存储控制器的存储器字宽设置改为32位,自动转入第二存储区继续执行;(e)在第二存储区执行了在该区存放的第二跳转指令后,转入第四存储区继续执行在该区存放的指令。
2.如权利要求1所述的方法,其特征在于,在所述第一、第三存储区,每条32位指令的低16位和高16位均放在存储器单元的低16位。
3.如权利要求1所述的方法,其特征在于,在所述第一、第三存储区,每条32位指令的低16位放在偶数标号的存储器单元,高16位放在比偶数标号大1的相邻存储器单元。
4.如权利要求1所述的方法,其特征在于,所述步骤(c)在执行所述第一跳转指令之前,先执行在第一存储区该跳转指令之前存放的设置芯片内部寄存器的指令。
5.如权利要求1所述的方法,其特征在于,所述第一跳转指令、第二跳转指令、修改所述控制位值的指令,及第四存储区的指令之间存放有若干的空指令。
6.一种支持16位和32位字宽存储器的启动装置,应用于32位总线的硬件系统,包括依次连接的处理器、存储控制器,以及16位或32位非易失性存储器,其特征在于所述存储控制器包括一寄存器,该寄存器相应控制位的值设置了所连接存储器的字宽,初始设置为16位;所述32位存储器进一步包括第一至第四指令存储区域,在第一和第三指令存储区域,每条32位指令的高、低16位分别存放在相邻存储器单元,在第二和第四指令存储区域,每条32位指令存放在一个存储器单元,且第一存储区域存放有指向第三存储区域的第一跳转指令,第二存储区域存放有指向第四存储区域的第二跳转指令,第三存储区存放有修改所述控制位值的指令;所述处理器用于在启动后从所述32位存储器取指执行,在第一指令存储区域执行所述第一跳转指令后,转入第三指令存储区域;在第三指令存储区域执行所述修改控制位值的指令后,将所述存储控制器的存储器字宽设置改为32位,自动转入第二指令存储区域;在第二指令存储区域执行了所述第二跳转指令后,转入第四指令存储区域继续执行在该区存放的指令。
7.如权利要求6所述的启动装置,其特征在于,在所述第一和第三指令存储区域,每条32位指令的高、低16位分别存放在相邻存储器单元的低16位。
8.如权利要求6所述的启动装置,其特征在于,所述处理器在执行所述第一跳转指令、修改所述控制位值的指令、第二跳转指令及第四存储区的非空指令之间还执行若干不进行任何操作的空指令。
9.如权利要求6所述的启动装置,其特征在于,所述处理器在执行所述第一跳转指令之前,先执行若干设置芯片内部寄存器的指令。
全文摘要
本发明公开一种支持16位和32位字宽存储器的启动方法和装置,应用于32位总线的包括处理器、存储控制器和存储器的系统。在芯片设计时先设定寄存器相应控制位的值,使存储控制器适应的初始存储器字宽为16位;对32位字宽存储器,依次设置第一至第四存储区,在一、三存储区,32位指令的高、低16位分别放入相邻两个存储器单元的低16位,在二、四存储区,每条指令放入一个存储器单元;启动后,在第一存储区执行跳转指令转入第三存储区,修改所述控制位的值,将存储控制器的存储器字宽设置改为32位,自动转入第二存储区,再执行跳转指令转入第四存储区继续执行。本发明不更改硬件结构,即可支持16位和32位字宽的存储器启动。
文档编号G06F9/312GK1584825SQ200410046269
公开日2005年2月23日 申请日期2004年6月8日 优先权日2004年6月8日
发明者刘迪军, 吴铭 申请人:大唐微电子技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1