首页 > 其他分享 >线程同步-uvm_event的用法

线程同步-uvm_event的用法

时间:2024-01-17 11:23:44浏览次数:34  
标签:en cfg upd 线程 wr event uvm

在验证中可能出现一种场景:某些cfg在仿真过程中会更新,tb中用到这些cfg的component需要及时更新到最新的cfg.这里有两种解决方法

方案一、 通过config_db set/get将cfg传到component的时候,由于传递的是cfg的句柄,所以在component中直接引用句柄中的值xxx_cfg.xxx,就可以实时得到cfg中的最新值。

但是某些情况下,拿到cfg中的参数后,还需要做一些处理,这时候就不能直接引用句柄中的值,这种场景就涉及到线程的同步

方案二、使用event来进行线程同步

同样是通过config_db set/get将cfg传到component中,当cfg更新的时候,trigger event, 在目标component总wait到event trigger后更新参数。



 1 class base_test extends uvm_test;
 2 
 3 uvm_event        cfg_upd_ev;
 4 
 5 bit wr_en;
 6 
 7 function void build_phase(uvm_phase phase);
 8 
 9 cfg_upd_ev = uvm_event_pool::get_global("my_event");//instance 
10 
11 endfunction
12 
13 function cfg_test_env(bit wr_en);
14 
15 test_cfg.wr_en = wr_en;
16 
17 cfg_upd_ev.trigger();//trigger event
18 
19 endfunction
20 
21 
22 endclass
23 
24 //base_scb
25 class base_scb extends uvm_component;
26 
27 uvm_event        cfg_upd_ev;
28 bit wr_en = 0;
29 
30 function void build_phase(uvm_phase phase);
31 
32 cfg_upd_ev = uvm_event_pool::get_global("my_event");//instance 
33 
34 
35 endfunction
36 
37 
38 task wait_cfg_upd();
39   forever begin
40     cfg_upd_ev.wait_trigger();
41     cfg_scb_param();
42   end
43 endtask
44 
45 function cfg_scb_param();
46    wr_en = wr_en = 0 ? base_cfg.wr_en : 1;
47 endfunction

endclass

 

  

 

标签:en,cfg,upd,线程,wr,event,uvm
From: https://www.cnblogs.com/yue-0927/p/17969549

相关文章

  • linux之线程概念(八千字长文详解)
    linux之线程概念线程的概念首先我们要进程和线程区分开来什么是进程——专业点的说法就是加载到内存的一个执行流!而在linux里面本质点的来说就是内核数据结构+进程对应的代码和数据每一个进程——都有自己独立的PCB,自己的进程地址空间,页表进程地址空间决定了,进程能够看到的......
  • OpenMP学习 第四章 线程与OpenMP编程模型
    第四章线程与OpenMP编程模型编译器指令为了将顺序程序转换为并行程序,修改代码的最小干扰方式是通过编译器指令.在C/C++中,指令通过编译器表示#pragmaompparallel[clause[[,]clause]...]#pragmaompparallelprivate(x){//codeexecutedbyeachthread}大部分......
  • 线程池源码学习
    使用线程池的好处降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以......
  • 爬虫-多线程抓取图片
    一、目的利用多线程的方式爬取图片,地址:其他电脑动态壁纸-其他桌面动态壁纸-元气壁纸(cheetahfun.com)二、分析F12分析网页结构,图片的地址都在class="flexflex-wrapjustify-betweenfont-normal"标签中的li里面,只需要在a标签中img中  根据前面学过的内容,......
  • 面试学习——线程篇
    Thread的生命周期指线程从创建到销毁的整个过程。在线程的生命周期中,可能会经历不同的状态变化。线程的运行状态:NEW:线程对象被创建,未启动线程READY:start()启动RUNNABLE(可以运行的线程状态):线程已被加载到线程调度器的就绪队列中,等待CPU的调度执行。RUNNING:线程正在执......
  • 多线程(Java.Thread)学习(完结)
    多线程(Java.Thread)学习线程简介:1、线程是独立执行的路径2、程序运行时有很多后台进程比如主线程、young.gc、full.gc()3、main是主线程,系统入口,用于执行整个程序4、一个进程中、如果开辟多个线程,线程的运行由调度器安排调度、调度器的先后顺序不能人为干预5、对同一份资......
  • MFC---多线程(线程死锁)
    死锁是指多个线程因竞争资源而造成的一种僵局(互相等待),若无外力作用,这些进程都将无法向前推进。#include<stdio.h>#include<windows.h>#include<process.h>intiTickets=5000;CRITICAL_SECTIONg_csA;CRITICAL_SECTIONg_csB;//A窗口B窗口DWORDWINAPISellT......
  • MFC---多线程(线程同步之信号量)
    内核对象的状态触发状态(有信号状态),表示有可用资源。未触发状态(无信号状态),表示没有可用资源工作原理以一个停车场是运作为例。假设停车场只有三个车位,一开始三个车位都是空的。这时如果同时来了五辆车,看门人允许其中三辆不受阻碍的进入,然后放下车拦,剩下的车则必须在入口等待,此后来......
  • MFC---多线程(各种线程同步的比较总结)
    windows线程同步的方式主要有四种:互斥对象Mutex、事件对象event和关键代码段criticalSection,信号量对于上面介绍的三种线程同步的方式,它们之间的区别如下所述:●互斥对象和事件以及信号量都属于内核对象,利用内核对象进行线程同步时,速度较慢,但利用互斥对象和事件对象这样的内核对......
  • MFC---多线程(qq群聊的服务端和客户端)
    服务端//多线程+socket编程的一个联合使用//用互斥体进行线程同步socket编程临界区全局变量#include<WinSock2.h>#include<iostream>#include<windows.h>#include<process.h>#pragmacomment(lib,"ws2_32.lib")#defineMAX_CLNT256#defineMAX_BUF_S......