Ubuntu 引入了update-motd框架,通过该框架,motd(5) 在登录时从一组脚本中动态获取。.../etc/update-motd.d/* 中的可执行脚本在每次登录时由 pam_motd(8) 作为 root 用户执行,并且这些信息连接在 /var/run/motd 中。 如何查看当前脚本?...2018 98-reboot-required 可以随便看一个脚本文件的内容: bob@ubuntu-20-04:~$ cat /etc/update-motd.d/00-header 如何禁用脚本...如果要禁用所有脚本,请运行以下命令: bob@ubuntu-20-04:~$ sudo chmod -R 644 /etc/update-motd.d/ 如果要禁用单个脚本,请运行以下命令: bob@ubuntu...-20-04:~$ sudo chmod -x /etc/update-motd.d/00-header 如何在 /etc/update-motd.d/ 目录中创建我自己的脚本?
而且这些组件之间还有连接关系,如agent中monitor的输出要送给scoreboard或reference model,这种通信的前提要先把两者连接起来,reference model要和scoreboard...3.UVM中动态运行(run_time)phase ?...如,假设要对DUT在运行过程中要进行一次reset操作,在没有细分phase之前,这种才做要在scoreboard,reference model等加入一些额外的代码来保证验证平台不会出错。...在UVM中,通过objection机制来控制验证平台的关闭。 4.1obejection控制验证平台的关闭 objection子main的意思就是反对,异议。...在验证平台中,可以通过放弃异议(drop_obejection)来通知系统可以关闭验证平台。当然了,在放弃之前,首先要提起异议raise_objection: ?
connect_phase主要是连接各个component之间的传输问题,用于在组件之间建立TLM类型的连接,这就是它在构建阶段之后发生的原因。它自底而上工作,以便在设计层次结构中获得正确的实现。...uvm_resource_db给人带来的困惑是,如果高层次和低层次都对同一个配置变量进行了写入,那么在build阶段,由于是采取top-down的执行顺序,低层次的配置写入发生在最后,反而会作为有效值写入...13、用户是否可以自定义UVM中的phase? 可以,但是用到不多,除了UVM中可用的预定义uvm_phase之外,用户还可以选择将自己的phase添加到组件中。...这通常通过扩展uvm_phase类和使用构造函数调用super.new来完成,new有三个参数:阶段任务或功能的名称、自上而下或自下而上的阶段、任务或功能。...组件或sequence将在活动开始时raise objection(提起异议),该活动必须在phase结束之前完成,因此将在该活动结束时drop objection(撤销异议)。
上期答案 [320] 在UVM中,如何结束仿真UVM具有phase机制,由一组构建阶段,运行阶段和检查阶段组成。...在run()阶段进行实际的测试仿真,并且在此phase中,每个组件都可以在开始时提出raise_objection和drop_objection。...如果在run_phase完成之前超时计时器达到指定的超时限制,则将发出一条错误消息,然后将执行run_phase之后的所有phase,最后测试结束。...UVM RAL(UVM Register Abstraction Layer)是UVM所支持的功能,有助于使用抽象寄存器模型来验证设计中的寄存器以及DUT的配置。...UVM寄存器模型提供了一种跟踪DUT寄存器内容的方法,以及一个用于访问DUT中寄存器和存储器的层次结构。寄存器模型反映了寄存器spec的结构,能够作为硬件和软件工程师的共同参考。
[305] 如何在工厂中注册uvm_component类和uvm_sequence类?...phase.drop_objection( this ); endtask [311] 如何在UVM中实现仿真超时机制?...从概念上讲,测试执行可以分为以下阶段-配置,创建测试平台组件,运行时激励和测试结束。UVM为每一个阶段中定义了标准phase。 [313] uvm_component有哪些phase?...UVM具有phase机制,由一组构建阶段,运行阶段和检查阶段组成。...如果在run_phase完成之前超时计时器达到指定的超时限制,则将发出一条错误消息,然后将执行run_phase之后的所有phase,最后测试结束。
driver中,下面哪些代码是错误的1) function get_drive_req(); forever begin req = get(); req...因此,用户需要注意,一旦调用stop_sequence(),就禁用了sequencer线程(如果在fork中启动)。...[300] 找出UVM sequence的以下代码部分中的所有潜在问题 task body(); seq_item_c req; start_item(req); #10 ns...[302] 如下所示,给定一个简单的单端口RAM,它可以读取或写入,请shiyong1UVM编写一个sequence和driver以测试他的读取和写入。...[305] 如何在工厂中注册uvm_component类和uvm_sequence类? 正确答案将在下一期公布,或者到下面的文章获取答案
上期答案 [311] 如何在UVM中实现仿真超时机制? 如果由于超出最大时间的某些错误而导致测试无法进行,那么仿真超时机制有助于停止仿真。...如果run()阶段在该这个时间内之前没有结束,则仿真将停止并报告错误。...从概念上讲,测试执行可以分为以下阶段-配置,创建测试平台组件,运行时激励和测试结束。UVM为每一个阶段中定义了标准phase。 [313] uvm_component有哪些phase?...UVM的run_phase有哪些子phase? UVM使用标准phase来排序仿真过程中发生的主要步骤。有三组阶段,按以下顺序执行。...[318] 在验证平台层次结构中较低的组件是否可以使用get / set config方法将句柄传递给较高层次结构中的组件? [319] 在UVM中,将虚接口分配给不同组件的最佳方法是什么?
传统上,总线功能模型(BFM)是用高级编程语言(如C / SystemVerilog)编写的不可综合模型,该模型可对总线接口的功能进行建模,并可连接到用于仿真设计的设计接口。...随着时间的流逝,这个定义已经演变,在诸如UVM之类的方法中,没有像BFM这样的实际组件,他的功能是由一系列组件(如驱动程序,监视器和接收器)实现的。 [254] 如何跟踪验证项目的进度?...通过跟踪环境开发(激励发生器,检查器,监视器等),测试开发和功能覆盖率监视器开发的完整性,可以在项目的早期阶段跟踪进度。...一旦开发了大多数测试和受约束的随机数发生器,通常就可以在服务器场中以回归方式运行测试,然后根据回归通过率,错误率和功能覆盖率来监视进度。...[258] UVM的优点有哪些? [259] UVM的缺点有哪些? [260] 事务级建模的概念是什么? 正确答案将在下一期公布,或者到下面的文章获取答案
在此阶段,可以完成不可达性分析,由于编码限制或在给定的约束条件下将激励应用于设计的方式,发现RTL中不可达的部分。...无法访问或舍弃的项目主要是由于VIP中的禁用和未定向功能。...右边的一栏表示获得的总覆盖范围,不包括与基于UVM的环境中完全相同的覆盖范围。未触及的逻辑要么是无法访问的代码,要么具有禁用的功能,从而使覆盖率几乎达到100%。...AHB2APB的测试示例已在基于System Verilog的处理器模型中重用,并有潜力在其他基于C的测试中使用。另外,如PS部分所述,我们能够使用模块级的重用测试来查找与Sync信号相关的集成错误。...这是PS得分的地方,因为可以将测试意图重新用于不同的目标平台,如评估板,FPGA,硬件仿真和测试平台。在AHB2APB Gasket的示例中,AHB模型在SoC级别被重用作处理器模型,用于生成C测试。
[318] 在验证平台层次结构中较低的组件是否可以使用get / set config方法将句柄传递给较高层次结构中的组件? 建议不要在UVM中这么做。...[319] 在UVM中,将虚接口分配给不同组件的最佳方法是什么? 实例化DUT和接口的顶级testbench模块在uvm_config_db中例化虚接口。...中,如何结束仿真UVM具有phase机制,由一组构建阶段,运行阶段和检查阶段组成。...在run()阶段进行实际的测试仿真,并且在此phase中,每个组件都可以在开始时提出raise_objection和drop_objection。...如果在run_phase完成之前超时计时器达到指定的超时限制,则将发出一条错误消息,然后将执行run_phase之后的所有phase,最后测试结束。
在testbench中,有任意数量的值通常可以写成文本值,如for循环次数、字符串名称、随机权重、其他约束表达式值和coverage bin值。...有许多关于在UVM中处理静态参数的文章: 参数化test文章说明如何对UVM工厂使用参数化测试。...endclass 注意,如果在UVM配置数据库中没有找到虚接口,则使用`uvm_fatal()。这将立即停止test,并将给定的消息传递给`uvm_fatal()调用。...可以选择将这些`uvm_fatal()消息转换为`uvm_error()消息,以便在停止之前使testbench运行更久。...endmodule 从sequence中访问配置资源 sequence通常需要访问testbench资源,如寄存器模型或配置对象。
所以问题归结到如何在scoreboard的控制下启动一个sequence以读取寄存器。 一个简单的想法就是设置一个全局事件,然后在scoreboard中触发这个时间。...利用config机制,分别给virtual sequence和scoreboard设置一个config_object,在此object中设置一个时间,如rd_reg_event,然后在scoreboard...这4个域也就对应register model中uvm_reg_field,名字为”reserved”的并不是一个域。 uvm_reg:它比uvm_reg_field高一个级别,但是依然是比较小的单位。...一个寄存器中至少有一个uvm_reg_field组成。 uvm_reg_block:它是一个比较大的单位,在其中可以加入许多uvm_reg,也可以加入其他的uvm_reg_block。...另外,register model还提供了一些任务,如mirror,updata,可以批量完成register model与DUT中相关寄存器的交互。
phase机制介绍 UVM中的phase,按照其是否消耗仿真时间($time打印出的时间)的特性,可以分成两大类,一类是function phase,如 build_phase、connect_phase...一般的验证方法学都会把仿真分成不同的阶段,但是这些阶段的划分通常没有UVM分得这么多、这么细 致。...所以一般来说,当其他验证方法学向UVM迁移的时候,总能找到一个phase来对应原来方法学中的仿真阶段,这为迁移提供 了便利。...(如agent 的run_phase),而是将这些run_phase通过fork…join_none的形式全部启动。...UVM中采用的是深度优先的原则,在UVM的树形图中,scoreboard及driver的build_phase的执行顺序,i_agt实例化时名字为“i_agt”, 而scb为“scb”,那么i_agt的
UVM testbench 的第一阶段(phase)是build phase,在此阶段自上而下地实例化组成验证环境层次结构中的各个uvm_component类。...在执行test case的build phase期间,需要准备好testbench配置对象,并将virtual interface赋值给testbench中各个组件中的virtual interface...在下一级的层次结构(uvm_env)中,将根据从testcase获取的配置对象进一步地配置(uvm_agent)并可以根据实际情况进行更改。...• 设置一个层次化的env配置对象,其中包含各种子组件所需的配置对象 每个验证组件如env或agent ,都应该有一个定义其结构和行为的配置对象。...如果验证子组件的配置比较复杂或者可能需要发生更改,那么值得添加一个 virtual function调用并在扩展的测试用例中重载 class spi_test_base extends uvm_test
这个阶段要懂得什么是BJT,什么是MOSFET,什么又是CMOS。...这个阶段可以复习verilog,如果有C语言基础,一两天速成是没有问题的。...异步复位和同步复位的区别是什么,优缺点是什么,如何在复位阶段避免亚稳态的产生。...工厂机制是什么,通过工厂机制,UVM提供了什么特性,如何使用这些特性 UVM的整体结构是怎么样的,顶层是什么 UVM的消息是如何管理的,冗余度的意义是什么 一个典型的UVM环境纯在哪些组件,数据是如何流动的...多余的项目可以提交到公司的简历系统中。
UVM RAL(UVM Register Abstraction Layer)是UVM所支持的功能,有助于使用抽象寄存器模型来验证设计中的寄存器以及DUT的配置。...UVM寄存器模型提供了一种跟踪DUT寄存器内容的方法,以及一个用于访问DUT中寄存器和存储器的层次结构。寄存器模型反映了寄存器spec的结构,能够作为硬件和软件工程师的共同参考。...用`uvm_register_cb()宏注册回调类 在接收和发送数据包到DUT的driver的run_phase()方法中,基于概率执行回调以导致数据包损坏 class Packet_c; byte...制定调整策略前,需要先找出系统中的耗电大的部件,如CPU、GPU、DSP等硬件算法加速模块(结合逻辑规模);然后统计出这些模块的负载情况,基本的策略当然是工作负载增加则升频升压,工作负载降低则降频降压。...传统的数字芯片设计均是采用Verilog或者VHDL语言对电路进行描述,但是这种方式描述出的电路并没有包含任何的芯片的供电网络信息,这会导致后续的流程如功耗验证和后端实现很难处理或者极易出错。
这次合作失败让英伟达付出了惨痛代价, 不仅2003年营收减少, 还错过了微软DirectX 9规格确立的重要消息, 直接导致当年推出的GeForce FX由于兼容性问题败给ATI的Radeon 9700...禁用nouveau 禁用nouveau内核模块 echo options nouveau modeset=0 sudo update-initramfs -u 重启....如果运行如下指令没用打印出任何内容, 恭喜你, 禁用nouveau成功了....-eq 0 ]; then # Find out the major device number used by the nvidia-uvm driver D=`grep nvidia-uvm.../xxx.sh ls /dev/nvidia* /dev/nvidia0 /dev/nvidiactl /dev/nvidia-uvm 然后写入rc.local中, 如图所示: sudo vim
再重复一点,所谓UVM配置数据库,就是放置所有config_db传递的属性的地方,而config_db的机制在UVM_basics中已经介绍过了。...子组件配置对象 每个容器类组件(如agent或env)都应该有一个配置对象来定义其结构和行为。这些配置对象应该在test的build方法中创建并实现以适应test case的需求。...m_env = spi_env::type_id::create("m_env", this); endfunction: build_phase 构建下一层次结构 test构建过程的最后一个阶段是使用...这些参数的值用于在链表中创建一个条目,UVM使用该条目在伪层次结构中定位uvm_component。此列表用于消息传递和配置机制。...例如,在前面的代码片段中,使用声明句柄m_env在test中创建了spi_env,因此在build过程中,spi_env的UVM“动态路径”名称是“spi_test.m_env”。
两个initial块也封装在hdl_top中。第一个initial块使用uvm_config_db::set将BFM接口的虚接口句柄放置到UVM配置空间中。...在connect phase阶段,再次使用spi_env配置对象来确定要建立哪个TLM连接。...集成级Testbench 这个testbench示例采用了两个模块级别的验证环境,并展示了如何在更高的集成级别重用它们。示例中所说明的原则适用于重复垂直重用。...connect 方法用于在 TLM 端口之间建立连接,并在monitor和analysis组件(如scoreboard)之间建立连接。...testbench示例中所示,有条件地构建sub-env,并如agent示例中所述构建sub-env中包含的agent。
函数对模型进行跟踪时,可能会遇到一个错误消息:Only tensors or tuples of tensors can be output from traced functions(只有张量或张量元组可以从跟踪函数中输出...本文将详细讲解这个错误消息的含义以及如何解决它。引发错误的原因这个错误消息的出现是因为在跟踪函数中尝试返回非张量类型的对象。跟踪过程会将模型的计算图转换为JIT表达,从而提高模型的性能。...compute_non_tensor_output() # 使用张量元组返回多个对象 return tensor_output, torch.tensor(non_tensor_output)下面是一个示例代码,展示了如何在实际应用场景中解决...独立于Python: 跟踪模型可以通过PyTorch的C++前端执行,独立于Python环境,这使得跟踪模型可以在推理阶段以不同的方式部署(如移植到C++应用程序或运行在嵌入式设备上)。...不受Python的限制: 跟踪模型可以使用更多的优化技术,而不受Python的限制(如操作融合、多线程执行等)。
领取专属 10元无门槛券
手把手带您无忧上云