博客
关于我
#systemverilog# 之 event region 和 timeslot 仿真调度(三)概念
阅读量:792 次
发布时间:2023-01-24

本文共 1804 字,大约阅读时间需要 6 分钟。

调度机制的由来

SystemVerilog(SV)是一种扩展的硬件描述语言(HDL),它不仅适用于硬件设计应用,还显著提高了验证(verif)效率。在这一过程中,仿真调度算法与传统的Verilog兼容,同时引入了新的仿真时间区域(time regions),以更好地支持针对验证需求的新特性。

与传统的软件语言如C/C++不同,SV用于硬件仿真建模,其背后涉及许多并行过程。仿真器运行在CPU上,将仿真时间串行化地一步步推进。虽然 SV标准没有明确规定并行过程的具体执行顺序,这导致多种仿真器可能存在不同的执行结果,从而产生不确定性(nondeterminism)。

为了在编码阶段消除这种不确定性,并更好地理解常见的设计规则,有必要深入研究Verilog/SV的仿真调度算法。同时,混用VHDL和Verilog/SV的仿真也需要了解两者之间的差异。

常见的Design Rules

  • 时序逻辑应使用非阻塞赋值(<=)。
  • 锁存器建模应使用非阻塞赋值(<=)。
  • 使用always对组合逻辑建模时,应使用阻塞赋值(=)。
  • 在同一always块中对组合逻辑和时序逻辑建模时,请使用非阻塞赋值(<=),避免使用=。
  • 避免在同一always块中混合使用<=和=。
  • 不要在不同的always块中对同一个变量进行赋值。
  • 使用$strobe来打印同一时刻下的非阻塞赋值。
  • 千万,千万不要使用0延时(#0)。
  • 仿真模型

    SV的仿真模型基于离散事件驱动的执行机制。事件驱动仿真的基本概念包括仿真时间(simulation time)、仿真域(simulation regions)和事件处理(event processing)。

  • 仿真时间是指波形图中看到的时间,而不是仿真软件在主机PC运行的时间。仿真时间用于对仿真电路的真实时间进行建模。
  • 事件处理模型包括更新事件(update events)和求值事件(evaluation events)。更新事件由仿真电路中的信号或寄存器值的改变触发,求值事件则由更新事件所引发,负责进行计算或PLI调用。
  • 仿真Process和Verilog的事件调度器

    • Process是Verilog中独立的执行单元,包括原始语(primitives)、模块(modules)、初始化块(initial blocks)、always块(always blocks)、连续赋值语句(assign语句)、异步任务(tasks)。仿真器按Verilog语义顺序执行所有过程,效果是同时执行的process的并行效果,但仿真时间仅在所有进程完成后推进。
    • Verilog的事件调度器将时槽划分为五个区域:Active region、Inactive region、NBA region、Monitor region。这些区域根据优先级顺序执行,确保仿真过程的正确性。

    SystemVerilog的事件调度器

    SystemVerilog扩展了事件调度器,将其划分为17个区域,其中9个区域用于SV语句的执行,8个区域用于PLI代码的执行。Preponed region用于信号采样,Observed region用于assertion评估,Re-Active和Re-Inactive regions用于执行assertion动作和testbench程序。

    New SV代码块:program、final、clocking

    • Program块用于分隔设计和测试框架,减少竞争和冒险。
    • Final块用于在仿真结束时打印总结信息,通常在显式或隐式调用$finish后自动执行。
    • Clocking块用于处理时序和同步需求。

    确定性与不确定性

    SV标准规定了以下两种确定性执行顺序:

  • begin...end块中的语句必须按代码中出现的顺序执行,其他process可能会挂起块中的语句执行。
  • NBA(非阻塞赋值)必须按语句顺序执行。
  • 未确定性(Nondeterminism)

    SV标准未定义多个process在同一时刻下的执行顺序,这导致不同的仿真器可能对同一行为有不同的结果。

    阻塞/非阻塞赋值

    阻塞赋值:

  • RHS计算和LHS赋值互不干扰,计算完成立即更新;
  • 阻塞赋值属于活跃事件,在事件队列中的优先级较高。
  • 非阻塞赋值:

  • RHS计算后,LHS赋值提前放入事件队列中,待仿真时间推进到该时刻后执行。
  • 非阻塞赋值的执行延迟较低。
  • 转载地址:http://dxeyk.baihongyu.com/

    你可能感兴趣的文章
    能解决数据可视化大屏需求的3款可视化工具
    查看>>
    多代理区块链框架客户端的操作
    查看>>
    一些技术博客
    查看>>
    第01问:MySQL 一次 insert 刷几次盘?
    查看>>
    优先级队列2
    查看>>
    TiKV 源码解析系列文章(十三)MVCC 数据读取
    查看>>
    Android 开发常用的工具类(更新ing)
    查看>>
    HTTP 错误 500.21 - Internal Server Error 发布网站遇到这个错误
    查看>>
    初次安装webpack之后,提示安装webpack-cli
    查看>>
    使用FileZilla,FTP登录出现错误:FileZilla状态: 不安全的服务器,不支持 FTP over TLS
    查看>>
    Hbase压力测试
    查看>>
    Python爬虫训练:爬取酷燃网视频数据
    查看>>
    Python数据分析入门(十九):绘制散点图
    查看>>
    Linux yum提示Loaded plugins错误的解决方法
    查看>>
    xshell解决文本粘贴格式错误
    查看>>
    JAVA BigInteger和BigDecimal类常用方式
    查看>>
    机器学习全教程
    查看>>
    idea在连接mysql数据库时区错误
    查看>>
    1Z204050、施工质量不合格的处理
    查看>>
    【字节网盘】九款超好看不同页面404源码
    查看>>