CN102479265B - 修改硬掩膜产品固件错误功能的方法 - Google Patents
修改硬掩膜产品固件错误功能的方法 Download PDFInfo
- Publication number
- CN102479265B CN102479265B CN201010558955.0A CN201010558955A CN102479265B CN 102479265 B CN102479265 B CN 102479265B CN 201010558955 A CN201010558955 A CN 201010558955A CN 102479265 B CN102479265 B CN 102479265B
- Authority
- CN
- China
- Prior art keywords
- patch
- function
- firmware
- code
- configuration information
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Landscapes
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种修改硬掩膜产品固件错误功能的方法,在设计固件时对函数进行标记,并在执行函数时做判断分支;针对有错误的固件代码产生补丁代码,编译后将补丁代码写入EEPROM或Flash的某个地址;产生补丁函数配置信息,写入EEPROM或Flash的某个地址。芯片上电后查询补丁函数配置信息,如补丁函数标记存在表示补丁存在,就跳转到补丁代码执行,执行完毕后跳转回固件代码,继续执行固件。本发明能有效解决固件出错时,不能有效的进行后续验证和开发的问题;能在固件出错时通过软件方法弥补错误,保证芯片能正常工作,不影响后续开发测试工作,也为重新掩膜的正确性提供了保障。
Description
技术领域
本发明涉及IC设计和应用领域,特别是涉及一种用软件方法修改硬掩膜产品固件错误功能的方法。
背景技术
硬掩膜产品中固件是掩膜到ROM中的代码,只能一次写入不能修改,如在后期开发测试中发现固件有问题,芯片不能按照代码设计进行工作,为了修复固件错误只有重新进行掩膜,因此,在实际生产中对掩膜前的固件考核要求很高,稍有遗漏就会造成巨大的损失。为了保证掩膜的成功,通常的做法是,在掩膜前对固件进行全面的FPGA(现场可编程门阵列)验证和EDA(电子设计自动化)仿真,此项工作需要投入较多的人力和时间,即使这样,也不能百分之百的保证所有的代码功能都进行了验证,掩膜万无一失,仍然会在掩膜后发现一些问题而需要重新掩膜。一般来说,一个量产的产品在量产前都会有一到二次MetalFix(技术改版)的计划以修补在验证阶段发现的问题。而对于项目时间比较紧张,要求一次掩膜成功,尽快提供样品的项目,掩膜前的验证更为重要,但百密一疏,往往会出现遗漏错误没有被发现的情况。
发明内容
本发明要解决的技术问题是提供一种修改硬掩膜产品固件错误功能的方法,能有效解决固件出错时,不能有效的进行后续验证和开发的问题。
为解决上述技术问题,本发明的修改硬掩膜产品固件错误功能的方法,包括如下步骤:
步骤一、设计固件时对函数进行标记,针对每个标记函数生成一个补丁函数标记;
步骤二、设计一张补丁函数配置信息表,该补丁函数配置信息表包括:每个标记函数的补丁函数标记和补丁函数跳转地址;
步骤三、对需要打补丁的标记函数产生补丁函数代码,先用文本编译器编辑代码,再用编译工具编译生成可执行代码;
步骤四、将所述补丁函数代码按照补丁函数配置信息表中的补丁函数跳转地址写入相应的EEPROM或Flash;
步骤五、将所述补丁函数配置信息表写入EEPROM或Flash;
步骤六、固件运行时在执行函数时进行预判,如果没有对应该标记函数的补丁函数标记表示不存在补丁,则继续执行固件代码;如果存在对应该标记函数的补丁函数标记表示存在补丁,则跳转到相应的补丁函数跳转地址执行补丁代码;执行完补丁代码后跳转回原固件地址,执行固件代码。
芯片掩膜ROM后固件如有错误会影响后续开发测试工作,如需修复固件错误要重新进行掩膜。
本发明可以有效的解决固件出错时,不能有效的进行后续验证和开发的问题。在验证阶段,尽可能的完成固件的调试和错误修改,为后续重新掩膜提供正确保证,缩短产品开发周期。
本发明能在固件出错时通过软件方法弥补错误,通过软件方法修改固件错误功能,在固件有问题的情况下,仍然能使用目前的产品进行后续的开发和测试工作;保证芯片能正常工作,不影响后续开发测试工作,也为重新掩膜的正确性提供了保障。
附图说明
下面结合附图与具体实施方式对本发明作进一步详细的说明:
图1是EEPROM或Flash中数据空间的划分示意图;
图2是补丁函数配置信息数据结构图;
图3是存放在EEPROM或Flash中补丁函数配置信息样例图;
图4是本发明的方法一实施例控制流程示意图。
图5是补丁下载工具主界面。
具体实施方式
在实施本发明时,需要对可写入的EEPROM或Flash空间进行合理的划分。参见图1,图中将EEPROM或Flash中数据空间划分为三块:
1、补丁配置文件区域(静态区域),用于存放补丁函数配置信息表,补丁配置文件区域的大小为64字节。
2、应用文件区域,用于存放具体应用文件。此部分与应用相关。
3、补丁代码区域,用于存放补丁代码。
结合图2所示,补丁函数配置信息表中每个补丁函数配置信息由4个字节组成:前两个字节代表待打补丁函数的补丁函数标记(补丁函数指针);后两个字节表示补丁函数跳转地址,实际使用中用偏移地址表示,补丁函数跳转地址为偏移地址加上动态区域的基地址。
结合图3所示,补丁函数配置信息表存放在补丁配置文件区域,该文件区域的大小为64字节,该区域存放在EEPROM或Flash中的固定区域。
结合图4所示,在一实施例中,所述修改硬掩膜产品固件错误功能的方法,包括如下步骤:
步骤一、编写固件时,对可能出错的函数进行标记,针对每个标记函数生成一个补丁函数标记。函数标记可以是十六进制表示的数据,如0x01,0x02等。
设计固件时对函数进行标记,针对每个标记函数生成一个补丁函数标记。
步骤二、制作一张补丁配置信息表,内容包括:每个标记函数的补丁函数标记,补丁函数跳转地址,也可以增加其他控制标识方便使用。每个补丁函数配置信息可以是一种数据结构,每个数据结构具体可包括两个字节的补丁函数标记,两个字节的补丁函数跳转地址。为了保证程序的运行速度,补丁函数配置信息不能太大,否则程序检索和判断的时间消耗很大。可以根据实际需要修改补丁函数配置信息表内容。补丁函数跳转地址根据芯片内部可读写EEPROM或Flash的空间来确定,实际做法可以是将EEPROM或Flash的某个地址开始的一段空间作为补丁代码存放的空间,所有的补丁函数跳转地址都是这段空间的某个地址。
步骤三、对需要打补丁的标记函数产生补丁函数代码,先用文本编辑器编辑代码,再用编译工具(例如,ARM公司提供的CodeWarrior for ARMDeveloper Suite V1.2编译工具)编译生成可执行代码。当发现固件的函数有问题时,需要对此函数进行修改,修改工作可以在文本编辑器中进行,修改后的补丁函数代码需要通过编译成为可执行代码才能写入EEPROM或Flash中。编译时,可以单独建立一个补丁工程,将修改后的补丁函数代码导入工程,补丁函数代码中调用固件中的函数的全部变量,在固件设计时统一放在一个全局变量头文件中,补丁工程导入此全局变量头文件;补丁函数代码中调用固件中的函数需要使用绝对地址调用。编译正确后生成的文件即为可执行补丁代码。对多个函数打补丁时,需要将每个函数的起始地址定位并整理到补丁函数配置信息表中。
步骤四、将补丁函数代码按照补丁函数配置信息表中的补丁函数跳转地址写入相应的EEPROM或Flash。此过程使用补丁下载工具进行。
步骤五、将补丁函数配置信息表写入Flash或EEPROM的特定地址,写入过程同样使用补丁下载工具。具体实施时结合图5所示,补丁下载工具是为了便于下载补丁代码与补丁配置信息的工具,该工具主要使用补丁固件中设计的写EERPOM或Flash指令,把补丁相关配置信息写入到EEPROM或Flash中。在使用时,修复人员可以先在补丁下载工具中输入补丁函数标记、补丁函数跳转地址、可执行的补丁代码文件,然后点击下载按钮,补丁下载工具会调用固件中设计的写EERPOM或Flash指令先将可执行的补丁代码写入补丁函数跳转地址开始的一段EERPOM或Flash空间,最后补丁下载工具会把补丁函数配置信息写到EEPROM或Flash中补丁函数配置文件区中。
步骤六、芯片重新上电固件运行时首先读入补丁函数配置信息表,保存在可快速读写的内存中的某个位置,以提高后续访问的速度。在执行到步骤四中的被补丁的标记函数时,程序根据补丁函数标记判断补丁函数配置信息表中是否存在补丁,如果补丁函数配置信息表中有对应的补丁函数标记,表示存在补丁代码,则会根据相应的补丁函数跳转地址跳转到EEPROM或Flash中的补丁代码存放地址执行。
步骤七、补丁代码执行完后要跳转回原跳转地址(固件地址),执行固件代码。
补丁函数配置信息表不宜过大,以保证程序运行的速度。固件测试时,根据实际需要,可以通过扩充或减少补丁配置文件区域大小的方法实现。
下面的例子有助于更好的理解本发明,结合图4所示
步骤1、芯片上电后,先读取补丁配置文件区的补丁函数配置信息。
步骤2、芯片在执行具体函数时,先查询补丁函数配置信息中是否存在该函数的补丁,具体是在补丁函数配置信息中查找对应的补丁函数标记是否存在。
步骤3、如果补丁函数标记存在,则根据补丁函数跳转地址跳转到EEPROM或Flash中的补丁代码区域执行;如果没有则继续执行ROM中的固件代码。下面给出的是该实施例的伪代码:
void SysSelect()
{
查补丁函数配置信息表是否有SysSelect函数的补丁函数
标记;
If(存在SysSelect函数的补丁函数标记)
{
从补丁函数配置信息表获取SysSelect函数对应的补丁
函数跳转地址;
SysSelect函数补丁实际地址为SysSelect函数的补丁函
数跳转地址(偏移地址)加上基地址;
跳转;
执行SysSelect函数;
返回;
}
Else
{
执行固化在PROM中的代码;
}
}
以上通过结合具体实施方式对本发明作了详细的说明,这些并非构成对本发明的限制,在不脱离本发明原理的情况下,本领域技术人员还可做出若干变形和改进,这些也应视为属于本发明的保护范围。
Claims (8)
1.一种修改硬掩膜产品固件错误功能的方法,其特征在于,包括如下步骤:
步骤一、设计固件时对函数进行标记,针对每个标记函数生成一个补丁函数标记;
步骤二、设计一张补丁函数配置信息表,该补丁函数配置信息表包括:每个标记函数的补丁函数标记和补丁函数跳转地址;
步骤三、对需要打补丁的标记函数产生补丁函数代码,先用文本编辑器编辑代码,再用编译工具编译生成可执行代码;
步骤四、将所述补丁函数代码按照补丁函数配置信息表中的补丁函数跳转地址写入相应的EEPROM或Flash;
步骤五、将所述补丁函数配置信息表写入EEPROM或Flash;
步骤六、固件运行时在执行函数时进行预判,如果没有对应该标记函数的补丁函数标记表示不存在补丁,则继续执行固件代码;如果存在对应该标记函数的补丁函数标记表示存在补丁,则跳转到相应的补丁函数跳转地址执行补丁代码;执行完补丁代码后跳转回原固件地址,执行固件代码。
2.如权利要求1所述的方法,其特征在于:执行步骤一时,对每个函数都进行标记。
3.如权利要求1所述的方法,其特征在于:步骤二所述的补丁函数配置信息表中的每个补丁函数配置信息是一种数据结构,每个数据结构包括两个字节的补丁函数标记,两个字节的补丁函数跳转地址。
4.如权利要求1所述的方法,其特征在于:步骤二所述的补丁函数跳转地址是将EEPROM或Flash的某个地址开始的一段空间作为补丁代码存放的空间,所有的补丁跳转地址都是这段空间的某个地址。
5.如权利要求1所述的方法,其特征在于:执行步骤三进行编译时单独建立一个补丁工程,将补丁函数代码导入该补丁工程,补丁函数代码调用固件中的函数的全部变量,在固件设计时统一放在一个全局变量头文件中,补丁工程导入该全局变量头文件;补丁函数代码编译时调用固件中的函数需要使用绝对地址调用。
6.如权利要求1所述的方法,其特征在于:执行步骤三需对多个函数打补丁时,需要将每个函数的起始地址定位并整理到所述补丁函数配置信息表中。
7.如权利要求1所述的方法,其特征在于:执行步骤六时,固件需要先读入所述补丁函数配置信息表,并将该补丁函数配置信息表中的数据存储在内存中。
8.如权利要求1所述的方法,其特征在于:执行步骤一时,仅对可能出错的函数进行标记。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010558955.0A CN102479265B (zh) | 2010-11-25 | 2010-11-25 | 修改硬掩膜产品固件错误功能的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201010558955.0A CN102479265B (zh) | 2010-11-25 | 2010-11-25 | 修改硬掩膜产品固件错误功能的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102479265A CN102479265A (zh) | 2012-05-30 |
CN102479265B true CN102479265B (zh) | 2015-10-28 |
Family
ID=46091909
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201010558955.0A Active CN102479265B (zh) | 2010-11-25 | 2010-11-25 | 修改硬掩膜产品固件错误功能的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102479265B (zh) |
Families Citing this family (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102981950B (zh) * | 2012-10-31 | 2015-09-09 | 索尔思光电(成都)有限公司 | 一种光模块固件可视化转换方法 |
CN103077062B (zh) * | 2012-11-30 | 2016-08-03 | 华为技术有限公司 | 一种代码改动的检测方法和装置 |
US9342285B2 (en) | 2012-11-30 | 2016-05-17 | Huawei Technologies Co., Ltd. | Method and apparatus for detecting code change |
CN103677909A (zh) * | 2013-12-05 | 2014-03-26 | 北京大唐智能卡技术有限公司 | 一种掩膜卡补丁机制实现方法及装置 |
CN107391085A (zh) * | 2017-06-20 | 2017-11-24 | 深圳芯邦科技股份有限公司 | 一种rom代码补丁运行方法和系统 |
CN107329753B (zh) * | 2017-06-28 | 2021-07-16 | 联想(北京)有限公司 | 一种固件接口代码的调整方法及电子设备 |
CN110192178B (zh) * | 2017-09-08 | 2023-03-10 | 深圳市汇顶科技股份有限公司 | 程序打补丁的方法、装置、微控制单元和终端设备 |
CN108897697B (zh) * | 2018-05-30 | 2021-05-11 | 建荣半导体(深圳)有限公司 | 配置掩膜rom数据的方法及其装置、芯片及电子设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1648905A (zh) * | 2004-01-15 | 2005-08-03 | 国际商业机器公司 | 逻辑模拟硬件仿真器/加速器中的错线自动纠正装置和方法 |
CN101533481A (zh) * | 2009-04-03 | 2009-09-16 | 东信和平智能卡股份有限公司 | 掩膜智能卡的功能扩展方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7910265B2 (en) * | 2008-03-14 | 2011-03-22 | Infineon Technologies Ag | Reticle for use in a semiconductor lithographic system and method for modifying the same |
-
2010
- 2010-11-25 CN CN201010558955.0A patent/CN102479265B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1648905A (zh) * | 2004-01-15 | 2005-08-03 | 国际商业机器公司 | 逻辑模拟硬件仿真器/加速器中的错线自动纠正装置和方法 |
CN101533481A (zh) * | 2009-04-03 | 2009-09-16 | 东信和平智能卡股份有限公司 | 掩膜智能卡的功能扩展方法 |
Non-Patent Citations (1)
Title |
---|
一种基于CMOS工艺的掩模ROM设计;张亚灵等;《西安邮电学院学报》;20090131;第14卷(第1期);第101-104页 * |
Also Published As
Publication number | Publication date |
---|---|
CN102479265A (zh) | 2012-05-30 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102479265B (zh) | 修改硬掩膜产品固件错误功能的方法 | |
CN103744709B (zh) | 补丁加载方法及装置 | |
CN101799763B (zh) | 内核在线补丁的方法、装置和系统 | |
CN104714788B (zh) | 一种软件安装包自动生成的方法及装置 | |
CN103559449B (zh) | 一种代码改动的检测方法及装置 | |
CN102375778B (zh) | 实现数字信号处理器自动测试的方法及系统 | |
CN107506219A (zh) | 一种基于Android系统的通用版本升级方法 | |
CN108037927A (zh) | 开发包打包方法、系统、可读存储介质和计算机设备 | |
CN104484269A (zh) | 一种自动生成测试脚本的方法 | |
CN109976760A (zh) | 一种图形语言的交叉编译方法及交叉编译器 | |
CN103885770A (zh) | 单片机从可执行文件找回汇编文件的实现方法 | |
CN110554893B (zh) | 软件系统多语言适配方法、装置、设备及可读存储介质 | |
CN103019722B (zh) | 一种抽取Java网络应用升级包的方法及装置 | |
CN105630557A (zh) | 热补丁方法和装置 | |
CN103399775A (zh) | 一种热补丁方法及设备 | |
CN105260169A (zh) | 一种跨平台移植python程序的方法及装置 | |
JP2021501953A (ja) | エンジンデバッグ、テスト、較正、及び調節を制御するためのソフトウェア環境 | |
CN114327776A (zh) | 用于智能合约的调试方法、调试设备和调试系统 | |
CN104536398A (zh) | 一种变频器监控方法和系统 | |
CN106603289B (zh) | 一种lmt配置文件平滑升级方法 | |
CN102662847B (zh) | 基于闪存应用的嵌入式系统的程序调试系统及方法 | |
CN105426635A (zh) | 一种自动建立差分线伴随地孔的Skill程序实现方法 | |
CN111142877B (zh) | Rom芯片补丁的接口函数及参数类型自动化提取方法、系统及存储介质 | |
CN103218241B (zh) | 补丁加载方法和装置 | |
CN107885527A (zh) | 一种测试系统的代码修改方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |