0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

分析那些对仿真速度影响较大的编码风格

FPGA之家 来源:FPGA之家 作者:FPGA之家 2022-08-11 09:26 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

做动态仿真验证通常会遇到要等待仿真结果的情况,特别是在调试某个测试用例的时候。很多时候,工程师们会自然地认为仿真速度大部分依赖于跑仿真任务的服务器本身的性能,以及EDA仿真工具的能力。而实际上,高效的验证环境以及代码质量也是影响仿真速度的关键因素。

另一方面,提高仿真速度这回事,对于芯片工程师来说本身就是“求人不如求己”。提高服务器机器性能意味着更大的资金投入,更高性能的仿真工具也不是一时半会能达成的。而探索更高效的验证方法学,构建更高执行效率的代码是当下就能做的事情。

本文的主要内容参考来自于Cliff Cummings在2019年DVCon会议上发表的文章:Yikes! Why is My SystemVerilog Still So Slooooow. 这篇文章主要探讨了SystemVerilog仿真速度跟Coding风格之间的关系,文章中有详细的实验目标、方法和数据结果呈现。本文将摘录和分析那些对仿真速度影响较大的编码风格。

使用向量操作代替单bit操作

仿真器在做完整向量计算的速度比单bit计算要高。根据参考文献的数据,在某款仿真工具下,最高提速可以达到3倍以上。 下面是一个例程,分别呈现不同的代码实现风格。

8fa84634-190e-11ed-ba43-dac502259ad0.png

避免在循环中实例化对象

这个技巧关系到内存的分配和回收。低效的内存管理会导致严重的cache miss、堆栈管理开销和垃圾回收开销,尽管这些都是操作系统帮我们做的。 当我们需要一种新的数据结构时,可以使用结构体struct就不用class,类的例化和垃圾回收都是开销。创建一个对象的时候,不要上来就是一个new,可以考虑是否可以重用之前创建过的对象。 如下例程,应用这个技巧在三款主流仿真工具上都能带来仿真速度收益,最高有超过一半的速度提升。

8fcb1038-190e-11ed-ba43-dac502259ad0.png

条件判断字符串处理

在仿真过程中不断地打印信息或者读写文件会导致仿真速度非常慢,毕竟调用计算机IO效率并不高。在UVM中有健全的report管理机制,可以根据设定的verbosity等级来判断是否需要打印信息出来。 除了信息打印,字符串的格式处理也是很大的开销。如果借用report的管理机制来判断是否有必要进行字符串格式处理,可以非常有效地提高仿真速度。 如下例程,带有条件判断的代码在三款主流仿真工具上都能带来仿真速度收益,而且这个收益非常大,达到了33倍~100倍。

8ff502b2-190e-11ed-ba43-dac502259ad0.png

减少不必要的端口采样或驱动

这是另一种减少不必要操作的技巧。要知道在UVM中,操作TLM analysis port是开销比较大的,因为端口的驱动行为,都会通过回调机制来执行关联到该端口的所有consumer的端口动作。理解这个实现机制,其实还得看看UVM的源码,这里就不做展开解析了。 此外,某些个analysis port是否连接到其他component是依赖于当前的验证环境的,如果根据analysis port的状态判断是否进行端口驱动,可以减少一些不必要的操作。 如下例程,在monitor的run_phase中根据其analysis port状态来进行端口采样和广播给其他组件,可以带来一部分的仿真速度收益。

901ac16e-190e-11ed-ba43-dac502259ad0.png

用回调函数代替低效的随机约束

SystemVerilog提供了很多种随机化变量和添加随机约束的方法,具体可以参考公众号的另外两篇文章《暗藏玄机的SV随机化》《五花八门的SystemVerilog随机约束》。在设计随机约束的时候,除了要确保约束不冲突(即约束有解)之外,还需要避免产生无效的约束解。 其实,SV已经提供了pre_randomize() / post_randomize()两个分别在求解随机值前后会执行的回调函数。灵活使用这两个函数可以避免一些非常低效的约束行为。 如下例程,使用post_randomize对随机后的数列进行排序,可以避免在约束中使用循环去限制每一个数列元素,从而获得数十倍的仿真速度提升。

903fb50a-190e-11ed-ba43-dac502259ad0.png

审核编辑 :李倩

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 仿真
    +关注

    关注

    55

    文章

    4535

    浏览量

    138659
  • 仿真器
    +关注

    关注

    14

    文章

    1052

    浏览量

    88190
  • bit
    bit
    +关注

    关注

    0

    文章

    48

    浏览量

    32872

原文标题:SystemVerilog高效仿真技巧

文章出处:【微信号:zhuyandz,微信公众号:FPGA之家】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    编码器主令如何给定变频器速度

    “带编码器的主令”这个说法,在工业自动化领域通常有两种理解,对应的实现方法也不同。我整理了两种主要情况,你可以根据实际场景对号入座: 你的意图 核心原理 典型应用场景 将编码器作为速度设定源
    的头像 发表于 03-21 12:08 151次阅读
    带<b class='flag-5'>编码</b>器主令如何给定变频器<b class='flag-5'>速度</b>

    麦歌恩磁编码器异常信号分析与定位方法

    在伺服电机、云台、机器人关节及高速吸尘器电机等应用中,麦歌恩磁编码器因体积小、抗干扰强、可靠性高被广泛使用。但在实际装配、运行与环境影响下,常会出现角度抖动、速度波动、通信丢帧、波形畸变等异常信号
    的头像 发表于 02-28 16:09 344次阅读
    麦歌恩磁<b class='flag-5'>编码</b>器异常信号<b class='flag-5'>分析</b>与定位方法

    更快抵达终点线:Questa One如何加速整体仿真周转时间

    编码风格,SmartCompile实现了更高效的设计流程,能够直接应对现代数字设计开发所面临的挑战。议程序言传统仿真流程SmartCompile概述-主要功能Sm
    的头像 发表于 02-11 11:29 520次阅读
    更快抵达终点线:Questa One如何加速整体<b class='flag-5'>仿真</b>周转时间

    Linux内核编码风格权威总结:从缩进到底层设计,让你的代码更“内核味”

    作为全球最庞大的开源项目之一,Linux 内核的代码量早已突破千万行。要让来自世界各地的开发者高效协作,一套统一、严谨的编码风格必不可少 —— 这不仅是 “代码颜值” 的要求,更是可读性、可维护性的核心保障。
    的头像 发表于 02-09 16:29 280次阅读
    Linux内核<b class='flag-5'>编码</b><b class='flag-5'>风格</b>权威总结:从缩进到底层设计,让你的代码更“内核味”

    HFSS仿真铌酸锂电光调制器T型电极损耗较大

    在HFSS仿真铌酸锂电光调制器T型电极时,尽管电极设为了完美电导体,介质的介质损耗角正切设为0,dB(S21)仍然有比较大的损耗,导致用ABCD矩阵计算时损耗较大,这是什么原因引起的,如何解决?
    发表于 12-16 14:36

    【产品介绍】Modelsim:HDL语言仿真软件

    仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。
    的头像 发表于 11-13 11:41 681次阅读
    【产品介绍】Modelsim:HDL语言<b class='flag-5'>仿真</b>软件

    SOA增益饱和特性仿真分析

    SOA的仿真,通常离不开载流子速率方程、传输方程、以及增益方程这三大方程,本文根据增益方程分析行波半导体光放大器TW-SOA的增益饱和特性。
    的头像 发表于 10-31 09:29 656次阅读
    SOA增益饱和特性<b class='flag-5'>仿真</b><b class='flag-5'>分析</b>

    Vivado仿真e203_hbirdv2跑whetstone跑分(开源)

    宏定义可调节仿真速度,这里全部打开 优化-O3,Extra CommonFlags加上-funroll-loops -fsingle-precision-constant
    发表于 10-27 07:21

    Linux使用coremark程序进行vcs仿真的注意事项

    coremark.h中额外定义CFG_SIMULATION,使得该程序执行的轮数iteration=2来加快仿真速度: 修改完c程序后,我们需要对其进行重新编译,在上述终端中执行make clean 然后执行
    发表于 10-20 09:02

    eVTOL舱外噪声的仿真分析

    前两期内容中讨论了eVTOL舱室内噪声仿真分析流程以及降噪优化方法,本文主要阐述eVTOL舱外噪声的仿真分析
    的头像 发表于 09-23 14:09 880次阅读
    eVTOL舱外噪声的<b class='flag-5'>仿真</b><b class='flag-5'>分析</b>

    eVTOL舱内噪声响应分析仿真流程

    上一节中介绍了eVTOL旋翼噪声的表征以及通过声学BEM模型分析旋翼噪声到eVTOL机体外表面的噪声传播分析流程,本节将在上节内容的基础上继续介绍eVTOL舱内噪声响应分析仿真流程,
    的头像 发表于 09-23 14:06 830次阅读
    eVTOL舱内噪声响应<b class='flag-5'>分析</b>的<b class='flag-5'>仿真</b>流程

    Bourns发布全新增量式微型编码

    Bourns 推出 PEC04 系列 4 mm 增量式微型编码器、PEC05 PEC05 系列 5 mm 增量式微型编码器,以及 PEC06 型号 6 mm 增量式微型编码器。Bourns 全新微型
    的头像 发表于 09-22 16:05 1449次阅读

    【「开关电源控制环路设计:Christophe Basso 的实战秘籍」阅读体验】+ 问题一:什么是SIMPLIS?

    功能强大的仿真软件如SABER,SIMPLIS具有操作简单、容易上手的特点,这使得它成为许多工程师的首选工具。 3. 快速仿真:SIMPLIS的仿真速度较快,能够在较短的时间内完成复杂的仿
    发表于 08-03 14:52

    无刷直流电机控制系统的建模仿真分析

    摘要:分析了BLDCM的数学模型,运用MATLAB仿真软件搭建了无刷直流电机控制系统的仿真模型。本系统采用了速度PID控制、电流迟滞控制的双闭环控制方案,电流迟滞控制是为了更方便地跟踪
    发表于 06-27 16:52

    罗姆新SPICE模型助力优化功率半导体性能

    在SiC(碳化硅)等功率半导体的电气仿真中,以往的行为模型存在收敛性差、仿真速度慢的问题。但是,这次开发并发布了提高仿真速度的新模型。
    的头像 发表于 06-23 14:25 1482次阅读
    罗姆新SPICE模型助力优化功率半导体性能