《电子技术应用》
您所在的位置:首页 > 其他 > 业界动态 > 基于ZSP500的IDLE模块子系统级验证实现

基于ZSP500的IDLE模块子系统级验证实现

2009-02-04
作者:袁 艳,申 敏

  摘 要: SoC系统的RTL级验证分为模块级、子系统级、系统级三个阶段。本文描述了高速数字信号处理器ZSP500的基本结构和子系统级验证的具体概念,详细介绍了3G手机芯片中的IDLE模块的结构,包括工作模式和空闲模式。介绍通过ZSP500编程工具构造SoC子系统级验证的测试例,利用生成的目标文件对模块进行子系统级验证。最后得出基于ZSP500的子系统级验证效率高并且实现简单的结论。
  关键词: RTL;ZSP500;TD-SCDMA;IDLE;子系统级验证

  

  SoC系统验证是指对基于IP核实现的SoC系统进行功能验证、静态时序分析、功耗分析及规则检查等,以保证正确的系统功能和良好的产品性能。在设计被综合前,首先要对RTL描述进行逻辑功能验证,其目的是为了确保验证过的模块或芯片具有100%的功能正确性。通常,RTL级功能验证主要采用自底向上的验证策略,即在模块集成到芯片以前尽可能地对每一个IP核或模块进行验证,然后再对整个芯片或系统进行验证,因此RTL级验证可分为模块级验证、子系统级验证和系统级验证三个阶段。模块级验证就是对SoC系统中某个模块或IP核进行单独的验证。当单个模块被验证完毕之后,就把它集成到其从属的子系统中去验证;子系统级验证主要侧重于模块间接口的验证和模块间交互的验证;系统级验证就是对整个系统芯片进行验证,它通过模拟一个芯片运行的真实环境,测试系统运行的状况是否与设计规范中的要求相符合。本文主要论述基于ZSP500的子系统级验证实现。
1 ZSP500介绍
  ZSP500[1]为16bit定点DSP,是LSI Logic家族系列中ZSP G2架构DSP核的最新产品。ZSP500内核以独有的高效面积、极低功耗、一流代码密度、实现四MAC的性能等优点成为高带宽3G频带处理和丰富多媒体应用的理想选择。ZSP500的运行频率为250MHz,处理能力可达1000MIps。其处理单元主要包括预取单元(PFU)、指令单元(ISU)、管线控制单元(PCU)、地址生成单元(AGU)、协处理器接口(CPI)、算术逻辑单元(ALU)等。结构框图如图1所示。

 

 

  如图1可知,ZSP500具有两个专有的AGU,可驱动各自专有的装载/存储端口,每周内可完成两次装载或两次存储,或一次装载一次存储。每个数据端口宽度为32位,因此每个周期内可完成64bit(4个字)的数据传输。另外PFU中还有一个跳转预测逻辑,能够提供zero-overhead循环,产生高效的跳转和调用。使用静态分组规则决定每个时钟周期执行的跳转条数,在程序员逻辑上正确编写代码时,保证多条指令并行执行,从而提高了效率。
2 子系统级验证
  当单个模块验证完毕后就可以集成到子系统验证环境中验证。因为每个模块在模块级验证中没有问题,并不能确保它在整个芯片中能正常工作,模块级验证只能说明模块本身的功能是正确的,而它与其他模块之间的接口以及模块与模块之间信号的相互连接是否正常仍然不能确定,所以在子系统级验证中主要侧重于接口的验证和模块间交互的验证[2]。子系统级验证平台与模块级验证平台稍有不同,它不只是包含单个被测的模块,而且包含被测对象所从属的子系统中的所有模块,但是验证模块仍然可以应用模块级验证中使用的总线功能模型。实现时主要构造被测模块的测试例,而对子系统中的其他模块进行功能抽象,假定它们都是功能正确的。基于ZSP500的子系统级验证就是用ZSP500编程工具来构造模块的测试例,然后生成目标文件,在验证环境中利用生成的目标文件在系统中运行,得出该模块的仿真波形,最后对仿真波形进行详细分析。
3 IDLE模块简介
  在TD-SCDMA手机芯片中,为了最大限度地达到省电的目的,设计出了IDLE电路。在空闲模式下,可将除32kHz外的时钟都关闭(包括PLL1/2),仅留32kHz时钟维持IDLE模块电路的工作[3]。本芯片共有两种运行模式:工作模式和空闲模式。
3.1 工作模式和空闲模式
  在工作模式下,3G手机芯片的PLL1一直打开,用于产生系统时钟;PLL2可控,当需要48MHz时钟时才予以打开,ARM时钟一直有效,其他模块(包括ZSP1,ZSP2)的时钟可由ARM、ZSP1、ZSP2控制其关闭。
  在空闲模式下又可分为浅睡眠和深睡眠两种睡眠方式。在浅睡眠模式下,PLL1保持打开状态,产生系统时钟,ARM以及各模块的时钟可选择关闭;在深睡眠模式下,PLL1/2时钟将被关闭,整个芯片没有高频工作时钟(只保留32kHz时钟),整个电路只有32kHz时钟维持IDLE模块工作。当IDLE电路运行结束并等待5ms之后才打开PLL时钟电路;在PLL打开0.63ms之后,才将时钟输出到系统。
3.2 IDLE模块结构
  IDLE电路的功能结构如图2,整个IDLE模块由三个模块构成:F_timer主要用于帧计数、帧号计数以及产生帧中断信号、DHI中断信号;H值计算电路用于提供退出IDLE时同步帧号和帧计数器值得计算参数H,H电路计算方式分为两种:一是ARM或ZSP控制启动H电路计算,二是H电路自动定时更新;IDLE时间计算电路用于控制IDLE持续的时间以及计算退出IDLE时同步的帧号和帧计数器值。

 

3.3 IDLE运行时间的计算
  在IDLE状态中有四个时间段,分别是X、M0、M1、Y。系统进入IDLE运行的时间计算公式为:Idle time=((H*M)/N+X+Y)/f,其中f是系统时钟频率。M是M0与M1的和,是用32kHz时钟计数的时钟周期。X时间是用来计算空闲时间的,是不定值,根据每次进入IDLE的实际情况而定。M0时间段是芯片进入IDLE深睡眠时,用来关闭晶振和PLL时钟的,pllon信号在这段时间内将被拉低。M1时间是用来打开晶振和PLL时钟的,并且使晶振和PLL时钟在这段时间内稳定。Y时间段是计算时间,计算退出IDLE时同步的帧号和帧计数器的值。H是系统时钟与32kHz时钟之间的比例关系。N是计算H系数所用的32kHz的时钟个数。
4 基于ZSP500的IDLE模块子系统级验证的实现
  基于ZSP500的子系统级验证,是在ZSP500的平台上编写测试例,生成目标文件,在验证环境中通过运行命令把目标文件和ZSP1、ZSP2同时启动,把所有的芯片模块联系起来运行,得到仿真波形,通过分析仿真波形来验证模块的功能是否正确,前提是系统中其他模块的功能都是正确的。
4.1 IDLE模块的测试例构造
  TD-SCDMA系统子帧长度为5ms,共6 400个chip[4]。当IDLE模块的计数精度为1/16chip时,帧计数器从1开始计数,当记到设置的帧长时返回为1继续计数,同时向ZSP1/2、ARM发出帧中断信号,同时帧号计数器加1。为了提高效率,在验证时根据实际需要设置帧长计数器的值。系统进入IDLE模式之后,根据唤醒信号到来的时刻不同产生不同的波形,操作过程如图3。

 


  下面主要对H计算电路为自动更新模式的情况进行仿真。主要的测试例如下:
movhw a0,0x0089
movlw a0,0x002C
mov  r0,0x0cf8           //设置的帧长寄存器
                  //framlr=0x0cf8,为了提高验证的
mov  r1,0x0001           //速度帧长设置较短
std  r0,a0

movhw a0,0x0089
movlw a0,REG_IDL_IDM0       //配置M0和M1的值,
                             //以设置空闲的时间
mov  r0,0x8000             //以及晶振和PLL的稳定时间
mov  r1,0x0000
std  r0,a0

movhw a0,0x0089
movlw a0,REG_IDL_IDM1
mov  r0,0x0100
st  r0,a0

movhw a0,0x0089
movlw a0,0x0032      //PLL时钟使能寄存器,
              //设置为深睡眠状态
mov  r0,0x0002
st  r0,a0

movhw a0,0x0089      //配置空闲模式控制寄存器,
              //选择H值的更新时间和
movlw a0,REG_IDL_IDCT   //计算时间,注意
              //更新时间一定要大于计算时间,
mov  r0,0x1048       //否则H值没有计算完毕
              //就自动更新了。选择H电路计
mov  r1,0x00               //算模式为“自动更新模式”,
                            //并且选择芯片工作模式
std  r0,a0                 //为空闲模式

waitInt:
  ldd r0,a0            //查询IDCT第一位,当该位变为1时,
              //说明H电路获
    bitt r0,1             //得最新的H值,可以通过ICHR
                   //寄存器查看H的值
    bz waitInt
      
      mov %loop0,100
    loop:
        mov r2,0x00
      agn0 loop

  movhw a0,0x0089
  movlw a0,REG_IDL_IDCT  //获得H值后就可以
                      //让芯片进入IDLE状态,发出
  mov  r0,0x104d         //进入IDLE的命令,
                    //在下一帧到来时,芯片即进
  mov  r1,0x00           //入IDLE状态
  std  r0,a0
4.2 IDLE模块的系统级仿真波形
  Clk:仿真环境提供的时钟,并不是芯片本身的系统时钟。芯片内部的clk在IDLE状态下应该关闭。
  Clk32K:32kHz晶振时钟
  f_int:帧中断
  ichr_o:存储计算出来的H值
  cfsr_o:帧号寄存器
  framlr[15:0]和framlr_i_17bit:设置的帧长
    framc_o[15:0]和framc_17bit:帧长计数器。从1开始,当它的计数值等于帧长时,f_int产生帧中断,同时帧号计数器的值加1
    icst_o:芯片的状态(1:处于工作状态,0:处于空闲状态)
    pllon:PLL时钟使能(1:关闭PLL,0:打开PLL)
    wake:唤醒信号
    从图4~图6所示的仿真波形来看,IDLE模块在X时间段有wake信号到来,芯片在X时间段结束后将直接进入M1时间段工作,pllon信号也不会被拉低,芯片没有进入睡眠状态。如果在M0时间段有wake信号到来,IDLE模块将立即结束M0时间段,进入M1时间段工作,pllon信号被拉高,并记录下M0时间段实际运行的时间,用于退出时的计算。如果在M1或Y时间段有wake信号,IDLE模块不影响wake信号,按设定工作。具体分析时还应该观察帧计数器和帧号计数器在唤醒时计数的准确性以及H计算电路的误差范围应该在50ns以内,否则不能满足精度要求。

 


  本文所介绍的子系统级验证是在利用RVM层次化验证方法对IP模块进行了完备验证之后进行的。基于ZSP500的子系统级验证方法简单易于实现,只需要在理解协议的基础上配置寄存器,就可以把生成的目标文件用来得到仿真波形。然后仔细分析仿真波形就可以验证模块在整个系统中是否实现了应有的功能。此方法不需要验证工程师具有丰富的编写验证代码的经验,而且实现效率高,大大缩短了SoC系统级验证的周期。


参考文献
[1] 史小玲,张毓波.LSI Logic的ZSP可授权DSP内核加速SoC设计[EB/OL].Http://dsp.blueidea.com/news/infolTo1.
asp.
[2] CHISHOLM D,BAILLIE A.SystemC Verification,Simulation & Emulation of Secure Digital IP.(Available at:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1818988).
[3] 重庆重邮信科股份有限公司.C3220芯片用户手册.2006.

[4] 李小文.TD-SCDMA第三代移动通信系统、信令及实现[M].北京:人民邮电出版社,2003.

本站内容除特别声明的原创文章之外,转载内容只为传递更多信息,并不代表本网站赞同其观点。转载的所有的文章、图片、音/视频文件等资料的版权归版权所有权人所有。本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如涉及作品内容、版权和其它问题,请及时通过电子邮件或电话通知我们,以便迅速采取适当措施,避免给双方造成不必要的经济损失。联系电话:010-82306118;邮箱:aet@chinaaet.com。