当前位置:首页 > 心得体会 > Vista在SystemC,模型中的调试分析方法_量化模型分析方法
 

Vista在SystemC,模型中的调试分析方法_量化模型分析方法

发布时间:2019-02-16 04:43:08 影响了:

  摘要:ESL建模的主要语言是SystemC。虽然SystemC是C++的一个类库,但其许多硬件特性在常用的C++IDE中无法全部体现,这为调试分析ESL模型带来了很大的困难。而Mentor Vista针对SystemC的硬件特性,带有很多硬件特性的调试功能,从硬件的角度去调度分析SystemC模型,明显的减少程序的调试时间,并且能直观的观测分析仿真结果,从而带来效率上的提升,为ESL模型正确性提供了有力保障。
  关键词:ESL;SystemC;Vista;调试分析
  
  1ESL综述
  
  面对复杂的功能和瞬息万变的市场,大型ASIC的规模己经到达了上亿门,影响架构性能的因素往往复杂繁多,单纯依靠静态分析去思考衡量这些因素的制约己经不足以保证架构性能的先进性和正确性。如何在如此复杂的芯片架构中保持系统架构的先进性和正确性,ASIC设计人员如何根据需求迅速的改进芯片的系统架构,这些问题都己经提到日程上来,这需要一种新的方法学来从芯片设计的初期就验证架构的可行性。因此越来越多的ASIC设计人员把目光投向了电子系统级(Electronic System Level, ESL)。ESL可以在产品规划和架构设计方面起到很大的作用。ESL本身作为一种方法学,通过建模的方式去验证芯片的系统架构性能。它的特点在于:
  (1)软件模型比硬件RTL仿真运行速度快;
  (2)具有抽象性,我们可以只针对某一个点展开建模,其它适当简化;
  (3)可以根据需要随时调整模型细节;
  (4)为后期RTL设计提供一个可执行的蓝本,实现的细节更加直观。
  结合ESL,ASIC设计人员可以更早评估架构风险和架构性能,对架构的先进性是一个有力的保障。
  ESL通过建模来完成对架构的评估,而建模的语言是SystemC语言,虽然SystemC语言是C++的一个类库,本质上就是C++。但是它作为一种对硬件时序行为的建模语言,有着硬件时序并发等特点,这就为调试带来了一定要求,而己往的建模调试经验则表明,用纯软件的方式去调试SystemC效率较低,加大了ESL模型开发的难度。而且有时难以发现一些隐藏的问题,这为架构性能的评估验证带来了一定的风险。
  
  2Vista调试特点
  
  Vista软件在调试SystemC程序上,有针对性的功能。其许多调试分析功能是从硬件的角度去分析问题,这就为调试ESL模型带来很大的便利,因为ESL本身是对硬件的建模,那其特性只有在硬件中才能体现出来,如果只是从软件的角度去分析程序本身,就会把一些很简单的问题(比如并发,例化)变得过于复杂,导致调试的效率降低。
  先简单的介绍一下Vista调试SystemC语言常用的一些功能:
  
   2.1 硬件视角
  SystemC建模是基于模块(module)的,这和RTL一样,有子模块的概念在里面。虽然软件归根究底还是顺序执行,但是SystemC的一些特性让这些子模块“看上去像是并行”的。如图1所示。A和B3两个模块是独立的,由clk驱动,它们之间通过fifo_3来通信(图中方框圈出部分)。这较直观的把我们模型所建的模块以一种硬件思维去表达出来,有助于我们分析问题。
  
   2.2 波形追踪
  硬件的调试分析手段是依靠波形,因此SystemC语言本身也提供了打印波形的代码,但是对一个复杂的模型,需要调试分析的变量太多,不太可能一一去写代码打印。有一个专门的波形功能是很有必要的,波形追踪也是Vista调试的主要手段。通过波形可以观看变量随着时间的变化情况,而且可以精确的分析模块之间的时序行为是否准确。波形追踪的范围包括了“事件”。“事件”驱动是硬件特有的行为,而从软件的角度对此项功能无能为力。
  
   2.3 进程断点
  SystemC中各进程是相互独立的,也有类似“并行”的概念在里面,而且SystemC调用进程的顺序是随机的,对进程的调用顺序有了解有助于分析模型的整体运行情况。Vista可以对进程设置断点,运行到进程的第一行程序断下来。
  
   2.4 TLM相关功能
  Vista本身支持事务级建模(Transaction Level Model,TLM)的调试,可以深入查看(View)传递事务的信息。特有的TLM View功能可查看所有传递的事务的具体内容并可查看返回状态,如图3所示。
  
  3 利用Vista调试SystemC的方法
  
   3.1 SystemC特有变量的观测
  SystemC里面的众多变量,在一般的C++调试平台(比如VC)上是不可见的,比如一个SC_FIFO,软件平台上断点查看局部变量无法查看里面所存储的具体数值。这种变量却大量使用在ESL模型当中,而由Vista却可以直观的查看里面所有的存储内容,并且可以在波形里查看其变化的情况。如图4所示,fifo_0的深度为5,可以直接定位到里面5个元素的具体内容,并且打印出波形后,能清楚的发现内容在FIFO里面存储变化的情况。这往往在一些异步FIFO里面能起到事半功倍的作用。
  
   3.2 信号延迟量
  在ESL建模中,信号的传递延迟往往是一个重要的观测点。通过ESL建模,可以模拟信号从A模块到B模块的传递延迟。如果设计人员不关心传递的中间过程,而只是为了达到延迟的目的,那中间的过程就会被省略,但是也带来了建模正确性的问题。现在我们想知道我们搭建的模型传递信号延迟是否符合架构的要求,利用Vista的波形可以直接观测到这一参数的情况。如图5所示,两个点之间的延迟可以通过波形上的时间轴计算出来。两点的延迟是31ns-4ns = 27ns。
  
   3.3 Delta周期的观察
  SystemC语言内核有Delta周期的概念,多进程之间以及“求值-更新”过程都是通过Delta周期延迟来实现的。在软件视角,Delta周期是不可见的,无论延迟多少个Delta周期,都视为一个周期。如图6所示,两个变量似乎是同步变化着。但是通过图7的Vista的Delta周期波形的观察,可以发现另一个变量其实是延迟了delta周期后才变化。
  
   3.4 多个例化模块调试
  我们在建模过程中往往会把一个相同的模块“例化”多次,而这些不同的模块都是由一份代码例化生成,前面也提到过,各进程的调用是随机的,这就为调试带来了要求,我们需要知道当前正在执行的代码是第几个模块,否则当某一个模块出现了性能问题,我们无法从纸面上分析到底整个系统的运转过程。如图8所示,从A可以随机发送信号到B模块,当某一个模块出问题时,我们可以马上知道当前的进程调用情况,知道是哪一个出问题。图中方框标注的地方是我们为B2这个模块的一个进程设置了一个断点。当程序停下来时,当前执行的代码就是B2这个模块。
  
   3.5 内存分析
  这是一个很好用的功能。它能把内存泄漏的范围精确到进程。在编写代码的过程中,如果存在内存泄漏,导致的问题可小可大,小的时候只是会影响仿真的速度和程序占用的内存,大的时候就是一个系统的陷阱,整个模型可能会有运行到不可预测的状态,仿真的结果也不能保证完全正确。如图9显示,当我们不小心使A模块的send_run进程里产生了内存泄漏,这个分析功能很快的定位到问题的所在。
  
  4总结
  
  在ESL模型开发过程当中,调试往往占据了很大一部分时间,我们一直都希望有一个便利的IDE平台能辅助我们开展ESL建模工作,尽可能的缩短模型开发周期。ESL越早开展,就越能在架构的前期进行更多的探索,选择合适的架构,保持架构的先进性,提高整个芯片的竞争力。Vista作为一个先进的SystemC调试平台,在我们ESL建模调试过程中发挥了巨大的作用。随着以后ESL在ASIC设计流程中的推广,Vista调试分析工具也会发挥越来越大的作用。
本文为全文原貌 未安装PDF浏览器用户请先下载安装 原版全文

猜你想看
相关文章

Copyright © 2008 - 2022 版权所有 职场范文网

工业和信息化部 备案号:沪ICP备18009755号-3