一种加快SOC芯片仿真的方法与流程

文档序号:14685854发布日期:2018-06-14 21:41

本发明涉及一种SOC芯片仿真技术,特别涉及一种加快SOC芯片仿真的方法。



背景技术:

随着SOC(System-on-a-chip)芯片规模的快速增加,对SOC进行验证的仿真工作量也是迅速的增加。特别是芯片整体的网表验证阶段,由于所有的仿真行为都加入了时序信息,服务器的运算量非常巨大,一条验证激励的仿真时间经常都需要一个星期左右的运行时间,而一个芯片的验证通常需要成百上千的验证激励.由于验证仿真的时间过长,给整个芯片的研发时间提出了极大的挑战。所以如何降低SOC芯片的仿真时间是非常有意义的工作,而目前没有较好的办法解决这一难题。



技术实现要素:

本发明要解决的技术问题,在于提供一种加快SOC芯片仿真的方法,通过仿真程序配置和电路设计修改配合的方法,极大的提高了芯片的仿真速度。

本发明是这样实现的:一种加快SOC芯片仿真的方法,包括:

步骤1、通过一测试激励c代码文件来存储SOC芯片中的CPU在测试中准备运行的所有c程序代码;

步骤2、通过程序编译器读取所述测试激励c代码文件中的c程序代码进行编译,产生汇编程序;

步骤3、通过程序分析修改单元读取所述汇编程序和所有的可访问模块地址区间信息,收集所有汇编代码中的地址操作相关代码,把有进行地址操作的地址进行汇总,然后在每个涉及地址操作的指令后加一条log打印指令,以将每个涉及地址操作的指令涉及的地址变量或者常量打印出来;

步骤4、在rtl仿真平台上使用修改后的汇编代码对rtl设计进行rtl仿真,产生地址操作log文件;所述rtl仿真平台在进行仿真前的工作流程包括:

S1、cpu在BOOT复位后进入复位跳转处理,会将获取指令地址跳转到指定的boot程序存放地址,也就是测试激励c代码文件的程序对应的存放地址;

S2、从boot地址完成指令读取后,开始执行指令,第一条指令内容为读取当前运行CPU的ID号,如果ID不为零则运行WFI指令;

S3、完成ID判断后,将系统从boot起来时使用的晶振电路产生的低速时钟切换为PLL输出的高速时钟,使仿真时间大幅缩短;

S4、完成上面的操作后,指令跳往主仿真程序的存放地址开始执行仿真激励;其中,rtl(RegisterTransportLevel)为寄存器转换级电路;

步骤5、涉及IP分析修改单元读取地址操作log文件和所有的可访问模块地址区间信息,收集所有地址操作log文件中的地址值,把有进行地址操作的地址进行汇总;

再根据所有的可访问模块地址区间进行比较,看有哪一些模块没有任何的地址操作,然后把涉及地址操作的模块编号发送到网表组合单元;

步骤6、网表组合单元收到涉及地址操作的模块编号后,到模块网表库中读取模块的网表设计,然后到模块rtl空壳库中读取剩余模块对应的模块rtl空壳,最后合并成一个完整的SOC设计,作为验证对象准备进行验证;

步骤7、在网表验证平台上使用原始测试激励程序对所述验证对象进行仿真,得到电路波形文件后,拿到power分析工具的prime_time上进行功耗分析得到指定模块的功耗数据。此处的prime_time是Synopsys公司的静态时序分析软件,常被用来分析大规模数字ASIC,作为专门的静态时序分析工具,prime_time可以为一个设计提供的时序分析和设计检查,以及电路功耗分析。

进一步的,所述步骤3的具体过程是:使用vi程序打开汇编代码,然后使用perl的正则表达式找出汇编代码中所有涉及地址操作的汇编指令的位置,然后在每个地址操作指令后面增加一个log打印指令,该指令不影响仿真电路行为,只是将地址指令中操作的地址变量或者常量打印到一个log文件。此处的Perl是一种功能丰富的计算机程序语言。

进一步的,所述步骤5中根据所有的可访问模块地址区间进行比较,看有哪一些模块没有任何的地址操作,然后把涉及地址操作的模块编号发送到网表组合单元的具体过程是:

使用vi程序打开汇编代码,然后使用perl的正则表达式找出操作地址从属于哪个模块的地址区间,然将对应模块的ID编号记录下来送往网表组合单元。

本发明具有如下优点:本发明通过仿真程序配置和电路设计修改配合的方法,极大的提高了芯片的仿真速度,可以有效减少芯片的验证仿真时间,从而减少整个芯片的研发时间,并且能自动判断使用的电路部分,自动使用空壳代码;还能自动分析修改代码,加入地址收集动作。

附图说明

下面参照附图结合实施例对本发明作进一步的说明。

图1为本发明方法执行流程图。

图2为本发明rtl仿真平台的在进入仿真程序前的工作流程图。

具体实施方式

如图1所示,本发明的提高大型SOC芯片仿真速度的方法,包括:

步骤1、通过一测试激励c代码文件来存储SOC芯片中的CPU在测试中准备运行的所有c程序代码;

步骤2、通过程序编译器读取所述测试激励c代码文件中的c程序代码进行编译,产生汇编程序;

步骤3、通过程序分析修改单元读取所述汇编程序和所有的可访问模块(指所有SOC中的所有的可访问模块,比如显示控制模块、I2S模块、UART模块等,但不包括芯片功耗评估平台本身的模块)地址区间信息,收集所有汇编代码中的地址操作相关代码,把有进行地址操作的地址进行汇总,然后在每个涉及地址操作的指令后加一条log打印指令,以将每个涉及地址操作的指令涉及的地址变量或者常量打印出来;

具体过程是:使用vi程序打开汇编代码,然后使用perl的正则表达式找出汇编代码中的LRD,STR,MOV等所有涉及地址操作的汇编指令的位置,然后在每个地址操作指令后面增加一个log打印指令,该指令不影响仿真电路行为,只是将地址指令中操作的地址变量或者常量打印到一个地址操作log文件,其作用是在仿真过程中可以将地址指令中操作的地址变量或者常量的值打印到地址操作log文件中。

步骤4、在rtl仿真平台上使用修改后的汇编代码对rtl设计进行rtl仿真,产生地址操作log文件;

再如图2所示,为本发明rtl仿真平台的在进入仿真程序前的工作流程图,即执行所述测试激励c代码文件中的程序的流程,该流程包括下述过程:

S1、cpu在BOOT复位后进入复位跳转处理,会将取指令地址跳转到指定的boot程序存放地址,也就是测试激励c代码文件的程序(由于测试激励c代码文件是用来存储SOC芯片中的CPU在测试中准备运行的所有c程序代码,因此实质上是可执行程序)对应的存放地址;

S2、从boot地址完成指令读取后,开始执行指令,第一条指令内容为读取当前运行CPU的ID号,如果ID不为零则运行WFI指令(即让当前CPU进行WFI睡眠状态,不再运行后续程序,从而节省了大量的仿真行为);

在多核CPU系统中,每个CPU都有一个ID,比如4核cpu系统中,主cpu的ID为0,另外3个CPU的ID分别为1、2、3,每个CPU运行读取ID的指令都会读取出自己的ID号;

S3、完成ID判断后,将系统从boot起来时使用的晶振电路产生的低速时钟切换为PLL输出的高速时钟,使仿真时间大幅缩短;

S4、完成上面的操作后,指令跳往仿真程序的存放地址开始执行仿真激励。

步骤5、涉及IP分析修改单元读取地址操作log文件和所有的可访问模块地址区间信息,收集所有地址操作log文件中的地址值,把有进行地址操作的地址进行汇总;其中,所有的可访问模块地址区间信息存储在所有的可访问模块地址区间存储单元中;

再根据所有的可访问模块地址区间进行比较,看有哪一些模块没有任何的地址操作,然后把涉及地址操作的模块编号发送到网表组合单元;具体过程是:使用vi程序打开汇编代码,然后使用perl的正则表达式找出操作地址从属于哪个模块的地址区间,然将对应模块的ID编号记录下来送往网表组合单元。

步骤6、网表组合单元收到涉及地址操作的模块编号后,到模块网表库中读取模块的网表设计,然后到模块rtl空壳库中读取剩余模块对应的模块rtl空壳,最后合并成一个RTL和网表混合的设计,即形成完整的SOC设计,以作为验证对象准备进行验证;

步骤7、在网表验证平台上使用原始测试激励程序对所述验证对象进行仿真,得到电路波形文件后,拿到power分析工具prime_time上进行功耗分析得到指定模块的功耗数据。

虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。

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