Multithreading UVM中的多线程

Multithreading UVM中的多线程,multithreading,uvm,Multithreading,Uvm,如何在UVM中合并多线程。UVM测试台中的线程、扩展的UVM组件、序列以及fork和join之间的方法是什么? 据我所知,除非为硬件的多个核心划分设计,否则这种多线程测试台几乎不会对加快模拟时间或提高性能产生影响。是吗?SystemVerilog/UVM环境中的多线程与多核硬件无关。虽然EDA供应商确实提供多核支持,但您无法通过编码对其进行控制 还可以看看这个问题: 旁注: HDL模拟本质上是多线程的,因为您必须捕获并行发生的信号更新。SystemVerilog还允许用户使用fork…join构

如何在UVM中合并多线程。UVM测试台中的线程、扩展的UVM组件、序列以及fork和join之间的方法是什么?
据我所知,除非为硬件的多个核心划分设计,否则这种多线程测试台几乎不会对加快模拟时间或提高性能产生影响。是吗?

SystemVerilog/UVM环境中的多线程与多核硬件无关。虽然EDA供应商确实提供多核支持,但您无法通过编码对其进行控制

还可以看看这个问题:

旁注:

HDL模拟本质上是多线程的,因为您必须捕获并行发生的信号更新。SystemVerilog还允许用户使用
fork…join
构造族生成自己的并行执行线程。UVM本身大量使用此功能,例如并行启动所有组件的序列和运行阶段。当然,如果需要,您也可以在自己的代码中使用
fork…join
,来启动自己的并行线程


另一个注意事项:我认为SV中启动线程的术语是“启动并行进程”

,对我来说,问题和答案都显示出混淆。阿拉瓦特似乎在问两个问题:

(1) UVM测试台的本质不是多线程的吗?及

(2) 如果没有,是否可以将多线程引入UVM测试台

我认为对问题1的回答混淆了问题,因为我认为HDL模拟本质上是多线程的说法是不正确的。HDL模拟试图在硬件设计中模拟并行性,在硬件设计中,所有不同的电子元件都并行运行;但是,它没有使用多线程来建模。相反,HDL模拟器(当然,它们本身就是程序)至少在传统上是单线程程序。在单线程程序中模拟并行性的影响是完全可能的,而HDL模拟器就是这样做的。并行建模——这意味着给人一种同时发生的假象——与实际同时发生的事情不一样

多线程意味着将一个给定的程序分解为多个可以同时运行的程序。现在,它们是否真的同时运行取决于操作系统

而操作系统又反过来受到机器的处理器和内存体系结构的约束

  • 在多核计算机上,很可能会运行不同的线程 一个单一的核心
  • 在单核计算机上,其核心是老式的 类型,但不能在其内部承载多个线程, 事实上,多线程不会发生,而是不同的 线程将作为上下文开关进行切换

  • 好的,既然已经说过了,给出的答案的一个方面是正确的,那就是fork-join结构,它本身不是UVM的一部分,而是Verilog和System-Verilog的一部分,本质上允许我们告诉操作系统您希望测试台中的某些代码在单独的线程中运行。但是,这不是UVM库本身的属性,它是一个Verilog/System Verilog结构

    是的,我明白。多核仿真依赖于工具。我想了解多线程UVM测试台是什么样的?据我所知,多线程UVM测试台与在不同硬件核心上工作的不同线程有关。那么这是否意味着UVM中的多线程测试台只是多核模拟?请再次阅读答案:多线程UVM与处理器核上的线程无关。请介绍多线程UVM测试台(不考虑多核)。UVM中的多线程是否意味着一个测试台,包括扩展的UVM组件、序列以及我在第一个问题中提出的fork和join之间的方法。如果是,那么这是否意味着UVM测试台本质上是多线程的?如果没有,那么如何将多线程概念纳入UVM测试台?EDA供应商提供的多核支持仅限于RTL和门级模块,这些模块可以在结构上划分为大部分独立单元,然后在多个核上并行模拟。就行为SystemVerilog构造而言,这是UVM测试台的组成部分,这些工具无法在多核并行意义下运行此类任务。请注意,这是SystemVerilog的一个限制,因为该语言没有定义并发语义。UVM测试台不应消耗超过5-10%的CPU。RTL代码通常是模拟的瓶颈。如果您真的需要性能,模拟不是正确的解决方案。您可能想考虑使用仿真平台。优化测试台可能会给您最多2倍的加速,模拟加速模式下的仿真框很容易给您1000倍的加速。