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

审核编辑 :李倩

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

    关注

    50

    文章

    3872

    浏览量

    132153
  • 仿真器
    +关注

    关注

    14

    文章

    988

    浏览量

    82989
  • bit
    bit
    +关注

    关注

    0

    文章

    47

    浏览量

    31853

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

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

收藏 人收藏

    评论

    相关推荐

    STM32F429做的PIL仿真速度非常慢的原因?

    ,但是速度非常慢。不知道是否STM32F429的参数设定有问题。有没有哪位大神做过相关的仿真。补充下:仿真中控制器开关频率是5000khz,采样时间为5e^-5s。 先谢谢了!
    发表于 04-11 07:28

    ADXL345各轴加速度值有较大波动的原因?

    ADXL345各轴加速度值有较大波动 1、如静止不动,其测得的各轴加速度值有近30%-50%的波动 2、芯片转换个位置,静止不动,各轴测的加速度值有十分大的变化,为什么。 难道芯片
    发表于 01-02 08:22

    编码器与PLC的接线方法

    编码器分为旋转编码器和线性编码器两种。旋转编码器用于检测旋转位置和速度,而线性编码器用于检测直线
    发表于 12-22 09:20 458次阅读
    <b class='flag-5'>编码</b>器与PLC的接线方法

    影响SaberRD仿真速度的因素有哪些呢?

    目前,专业仿真软件的功能不断增加,仿真领域不断扩大,处理的对象越来越复杂,这一切都使得软件自身显得越来越庞大,而硬件的更新速度也往往慢于软件更新的速度,这就造成了我们的
    的头像 发表于 12-06 11:30 291次阅读

    AD835用LTspice仿真特别慢的原因?怎么解决?

    输入为1V,50Hz的正弦相乘,仿真速度是65us/s,而且两个AD835连在一起使用是仿真只能进行20ns左右,就不能仿真
    发表于 11-20 07:54

    伺服电机更换编码器后速度太快怎么解决?

    伺服电机更换编码器后速度太快
    发表于 11-17 07:48

    一款动车组用加速度传感器结构设计和仿真

    ,保证行车安全。通过对标准动车组 tNetrol-NAMC1-10-IC 型加速度传感器工作环境进行分析,阐述了其结构设计的思想和方法,对结构强度方面进行了有限元仿真分析,并结合长寿命
    发表于 09-18 07:09

    Qorvo® QSPICETM为电源与模拟设计人员电路仿真带来革命性变革

    中国 北京,2023年7月26日——全球领先的连接和电源解决方案供应商 Qorvo®(纳斯达克代码:QRVO)宣布推出新一代电路仿真软件QSPICETM,通过提升仿真速度、功能和可靠性,为电源和模拟设计人员带来更高水平的设计生产力。
    的头像 发表于 07-27 09:10 590次阅读

    汽车行驶速度的PID控制系统仿真分析

    最近学习一下Simulink中PID控制器的使用算法,翻阅了一些书籍和论文,出现最多的例子就是汽车行驶速度的PID控制仿真
    发表于 07-12 10:54 2054次阅读
    汽车行驶<b class='flag-5'>速度</b>的PID控制系统<b class='flag-5'>仿真</b><b class='flag-5'>分析</b>

    阿里AliOS的编码风格

    其实,我们身边就有很多“好的资源”值得学习,比如本文分享的 阿里 AliOS 的编码风格
    发表于 06-02 09:26 122次阅读

    Verilog编码风格的建议

    良好的编码风格,有助于代码的阅读、调试和修改。虽然 Verilog 代码可以在保证语法正确的前提下任意编写,但是潦草的编码风格往往是一锤子买卖。
    的头像 发表于 06-01 16:27 490次阅读
    Verilog<b class='flag-5'>编码</b><b class='flag-5'>风格</b>的建议

    大学毕业设计一席谈之九 多种编码方式的通信系统仿真(6) RS码联合卷积码仿真

    继续讲解!之前给出了RS码的仿真程序,我们再看看如何将其和卷积码级联在一起进行仿真。本文只涉及纯理论仿真,如果要想在实际工程中使用,请参考后续文章。 大学毕业设计一席谈之三十 级联编码
    的头像 发表于 05-25 17:55 349次阅读
    大学毕业设计一席谈之九 多种<b class='flag-5'>编码</b>方式的通信系统<b class='flag-5'>仿真</b>(6) RS码联合卷积码<b class='flag-5'>仿真</b>

    基于51单片机数码管显示拨码开关编码仿真代码

    基于51单片机数码管显示拨码开关编码仿真设计资料
    发表于 05-22 16:02 2次下载

    单级PID控制带编码器的直流减速电机速度

    STM32 Cubemax(七) —— 单级PID控制带编码器的直流减速电机速度目录 STM32 Cubemax(七) —— 单级PID控制带编码器的直流减速电机速度 文章目录 前言
    发表于 05-16 15:51 3次下载
    单级PID控制带<b class='flag-5'>编码</b>器的直流减速电机<b class='flag-5'>速度</b>

    STM32 Encoder编码器使用总结

    目录 Encoder 原理 STM32 Encoder 计数原理 模型仿真 模拟Encoder 基于Encoder计算角度和速度 关于启动的仿真 代码生成 运行演示 总结总结一下基于STM32
    发表于 05-06 09:44 2次下载
    STM32 Encoder<b class='flag-5'>编码</b>器使用总结