使用SystemC Cycle Model与HDL仿真

Arm Cycle Model提供SystemC仿真支持。这些模型可以从ARM IP Exchange获取,也可以用户使用Arm Cycle Model Studio (CMS)自己创建(非ArmIP)。模型可以运行在 AccelleraSystemC开源仿真环境 ,也可以运行在EDA供应商如Cadence, Mentor, and Synopsys的仿真器中。两种情形下,Arm Cycle Model均需要runtime license,但用户可以自由选择最适合自己的SystemC仿真器。很多时候,与其他RTL仿真集成或者复用已有的System Verilog TestBench对验证工作非常有用。
本文试图阐述如果使用Cycle Model Studio创建一个简单的SystemC 模型,并使用流行的EDA仿真器把模型运行在一个Verilog testbench中。目的为了说明在混合语言仿真中使用Cycle Model并非难事。过去,Cycle Model与Verilog HDL混合仿真需要用到Verilog PLI (Programming Language Interface) 或DPI (Direct Programming Interface)接口,但如今所有的RTL仿真器都很容易的支持混合语言仿真,且性能更好。
 
示例使用一个CMS已有的叫twocounter的例子,是一个带两个独立计数器的简单Verilog模块。附件 twocounter-cm-hdl.tgz,包括Cycle Model创建和HDL及test bench在EDA仿真器中仿真需要的所有部件,还包括一个支持在任一仿真器运行混合仿真的简单脚本。可以作为集成SystemC Cycle Model到更大仿真工程的参照。
 
环境建立
首先解压文件到一个新目录,本示例除了EDA仿真器没有任何外部依赖。
$ tar xvfz twocounter-cm-hdl.tgz
例子包含两个路径:
  • cm/ 目录包括Verilog源码与编译Cycle Model的脚本。使用CMS的cbuild生成Cycle Model。
  • testbench/目录包括Verilog testbench和编译运行EDA仿真的脚本。
确认EDA仿真器和license配置好即可,不需要额外的环境变量支持。
 
确认HDL仿真工作
第一步最好确认所有HDL版本正确,仿真器工作正常。可以在testbench/目录下运行run.sh脚本选择仿真器使用:
Cadence Incisive:
$ ./run.sh ius-hdl
Mentor Questa:

$ ./run.sh mti-hdl

Synopsys VCS:
$ ./run.sh vcs-hdl
不加参数执行脚本可以看到支持的选项。“-hdl”表示只仿真HDL,不包含Cycle Model。
如果执行无误,将会有输出通过testbench的tb.v中$monitor声明来打印信息。 从而确认EDA仿真器配置运行没有问题,下一步,就可以编译
SystemC Cycle Model来替换twocounter.v。
 
生成Cycle Model
 
生成Cycle Model请指向cm/目录,build-cm.sh脚本会启动cbuild来编译模型。会有生成如下结果:
  • 模型被创建在gcc/目录下
  • SystemC wrapper也创建好
仅执行脚本编译模型即可:
$ ./build-cm.sh
 
SystemC wrapper创建生成文件twocounter.cpp and twocounter.h。
除了wrapper,gcc/libtwocounter.a 和 gcc/libtwocounter.h两个文件也需要集成到EDA仿真中。 
SystemC wrapper通过“carbon systemCWrapper gcc/libtwocounter.io.db”命令生成,该命令从模型.io.db文件中提取信息并写到SystemC wrapper文件里。
 
编译与运行Cycle Model仿真
可以使用任一EDA仿真器,先退回到testbench/目录下。
这次使用run.sh脚本与下面任一参数来选择仿真器, SystemC wrapper编译,相同的twocounter模块被例化在testbench中,但注意使用的是SystemC模型不是Verilog模型。testbench不用任何修改,因为任何仿真器都透明的支持混合语言设计。
各个仿真器的选项如下:

$ cd testbench/

Cadence Incisive:
$ ./run.sh ius
Mentor Questa:

$ ./run.sh mti

Synopsys VCS
$ ./run.sh vcs
仿真和之前运行结果相同,但是其中twocounter模块使用SystemC Cycle Model。
波形导出与仿真器GUI
上述脚本可以通过+VCD选项支持生成波形。
$ ./run.sh vcs +VCD
运行生成一个VCD文件dump.vcd,可以使用任何VCD波形图示工具打开。
每个仿真器也可以通过脚本加如下参数启动GUI模式:
Incisive SimVision GUI:
$ ./run.sh ius -gui
Mentor Quest GUI:
$ ./run.sh mti -gui
VCS DVE GUI:
$ ./run.sh vcs -gui
一种方式来比较纯HDL与SystemC Cycle Model是使用SimVision GUI。 纯HDL仿真,tb与twocounter在Design Browser中都是灰色来表示Verilog。
 
使用SystemC Cycle Model时,twocounter会显示为绿色标识SystemC。 将counter0送到Source Browser中可以秀出两种情形下verilog和SystemC的代码。
总结
ARM SystemC Cycle Models提供了ARM IP(通过IP Exchange)和用户IP的另一种仿真途径。而当许多时候验证极为迫切又需要服用已有仿真testbench时,使用EDA仿真器会很有用。通过IP Exchange 配置生成的SystemC Cycle Models也提供了单纯使用RTL仿真器额外的功能,比如PMU统计等等。同时也会有越来越多模型加入CADI调试接口以支持软件调试。EDA仿真器对Verilog与SystemC混合仿真的灵活支持也时Cycle Model在很多验证任务中更有用处,譬如可以应用到一个锁定的CPU子系统,避免不变的Verilog IP在整个项目中重复编译。
twocounter-cm-hdl.tgz
Anonymous
  • 使用Streamline分析RTOS系统性能

    本文翻译自Analyzing the performance of RTOS-based systems using Streamline ============================================================= Streamline是DS-5中的性能分析工具, Streamline可以用来分析裸机系统,RTOS,Linux,Android和Tizen系统的性能…
  • 免费的原生aarch64 CI/CD

            开源软件社区的朋友们有福了!如果你有个开源软件项目想支持Arm架构平台,却苦于没有Arm服务器做CI/CD (持续集成/持续交付),那这个好消息你可不能错过。7月10日,Shippable宣布和Arm,Packet.net达成合作伙伴关系,为Arm平台上的软件开发提供原生的CI/CD服务,重点是(敲黑板了)对于开源软件项目,Shippble提供免费的CI/CD服务!这些服务运行在给所有开源软件共享的64位的Armv8…
  • 当增强现实(AR)遇到机器学习(ML),一个结合 Google ARCore 与 Arm NN 的 Unity 案例

    背景介绍 在 Unity 中打开 Google ARCore 功能 编译 Arm NN 共享库 作为 Unity 的 Native 插件的一个 C++ 物体检测器 整合 Arm NN 到 Unity 中 背景介绍 增强现实和机器学习是当前两项最前沿的技术。其中增强现实可以把虚拟的物体惟妙惟肖地渲染到真实世界当中。 而机器学习,则可以帮助程序更好的认识真实世界中的物体。同时运用这两项技术,我们将可以创造出一系列新颖的应用…