使用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
  • CMSIS-NN尝鲜记

    随着物联网的流行,节点的低功耗,实时性智能需求也在不断增多。神经网络(Neural Network)作为一种热门的人工智能技术方向,网上已经非常丰富的介绍文档,我就不再赘述。传统的神经网络需要大量的计算资源去实现,相对于学习过程来说,推理所需要的资源相对较少,但仍然十分巨大。如何在性能相对较弱的微处理器上实现神经网络的快速推理过程?这需要对现有的神经网络模型进行大量的优化,CMSIS-NN就是在这个方向上的一个非常好的尝试…
  • 使用SystemC Cycle Model与HDL仿真

    原文链接:https://community.arm.com/soc/b/blog/posts/using-systemc-cycle-models-with-hdl-simulation Arm Cycle Model提供SystemC仿真支持。这些模型可以从ARM IP Exchange获取,也可以用户使用Arm Cycle Model Studio (CMS)自己创建(非ArmIP)。模型可…
  • 使用 Arm 开发工具在嵌入式装置上导入机器学习

    人工智能正迅速转到装置端       随着日益火红的各种应用 ,机器学习的场景正迅速的移动到终端装置. 人们期望嵌入式装置上能够提供更多智能服务,例如具有语音识别的智能音箱,能够及时识别脸孔的安控摄影机等等... 为了达到这个目标,在开发初期建立一个稳固的评估方案成为各家芯片开发商必要的课题. 在本篇文章中 ,我会利用一个简单的卷积神经网络(Convolutional Neural Network, CNN)作为一个终端装置上…