自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(22)
  • 收藏
  • 关注

原创 UVM callback

其次在driver中使用uvm_register_cb将基类放入,并使用uvm_do_callbacks调用方法。最后在base_test中connect_phase实例化callback,因为这里实例化了env,使用add时需要实例的对象,最后这里也可以放入base_test中connect_phase。对于一个vip来说,想增加复用性,需要考虑抽象出一个类,并且在driver中调用这个类的方法,实例化和方法的注册需要放在具体的case中达到满足不同的需求。

2023-05-14 10:48:03 98

原创 UVM config

如果某个case需要专门单独赋值可以在case中set,case和base_test处于同一层,取最近赋值就会取到(虽然case继承自base_test,但是他们都会赋值给sequencer的)若一个变量存在多个set,取最上层的set值,若同层次多个set,取运行上最近的set值,这里层级主要是看相对于自身的路径,比如第二个参数。如果需要在运行时改变某个验证平台的参数配置,可以在sequence中改变,同时想限制driver发送的包数量也可以在sequence中。需要注意第三个参数名字必须一样。

2023-05-13 15:24:43 138

原创 UVM sequence

最后一句在base_test中加,这里创建了一个vsequencer和对应的vsequence,在vsequencer里将cpu_sqr和mac_sqr绑定到env实例化过的对象上,再从vsequence中调用uvm_do_on将需要使用的sequence与对应的sequencer结合起来,再由具体的sequencer端口发送。sequence用来产生激励,一般设置为某个component phase的default sequence(一般为sequencer),从而使用sequence来控制平台的关闭。

2023-05-13 12:25:32 197

原创 UVM transaction和field_automation

transaction派生自uvm_sequence_item,transaction为模块级通信的单位,由不同用例具体的sequence产生,通过sequencer传输给driver,同时monitor和reference model或者scoreboard之间也是传输transation。在transaction中,使用field_automation机制,可以使用很多封装好的方法,比如print、compare、pack、unpack、copy等。

2023-05-13 11:23:03 120

原创 UVM phase

由于想要实现事件发生的不同顺序,UVM提供了不同的phase,每个phase运行时间不一样。常见phase及运行顺序:不消耗仿真时间根据继承关系自顶向下build_phase我们一般这里完成需要的对象实例化和资源的初始化connect_phase完成端口的连接工作消耗仿真时间根据继承关系自下而上run_phase和12个小phase并行运行(如reset_phase、configure_phase、main_phase、shutdown_phase),一般复杂消耗时间的逻辑在这里运行。

2023-05-13 10:57:37 100

原创 UVM factory

UVM factory是使用封装好的宏,可以直接实现很多复杂的功能。使用uvm_component_utils注册派生自uvm_component,使用uvm_object_utils注册派生自uvm_object。注册之后可以调用create方法实例化,实例化后可以使用UVM提供的很多方法。

2023-05-13 10:18:59 50

原创 UVM学习------平台概要

我们需要定义一个类,并且调用new()实例化对象使用方法和变量。

2023-05-12 15:57:42 286

原创 设计模式-命令模式

命令模式将每个行为(命令)封装成类,#include#includeusing namespace std;将行为封装的接口虚类class Command{public:virtual void execute()=0;virtual ~Command(){};};具体的两种执行命令的行为类class ConcreteCommand1:public Command{public:virtual void execute(){cout<<“command1 is run

2021-09-26 19:07:31 64

原创 设计模式-观察者模式

我们可以使用观察者模式来使一个消息通知给多个对象#include#includeusing namespace std;建立观察者公共接口class Observe{public:virtual void updata()=0;virtual ~Observe(){}};建立具体的观察者接口,并且将需要的通知操作重写class ConcreteObserve1:public Observe{public:void print(){cout<<“wrong”;}void

2021-09-26 19:03:52 53

原创 C++string简单实现

class String{ public: String(const char *str=nullptr);//接收一个c字符串类型 String(const String &str);//拷贝构造函数,接收一个String对象 String& operator=(const String &str);//赋值运算符 char operator[](int size);//支持下标[]访问元素 size_t size()const;//返回元素个数 ~Str

2021-09-05 15:24:00 50

原创 C++智能指针采用辅助类的实现方式

智能指针:实际指行为类似于指针的类对象 ,它的一种通用实现方法是采用引用计数的方法。1.智能指针将一个计数器与类指向的对象相关联,引用计数跟踪共有多少个类对象共享同一指针。2.每次创建类的新对象时,初始化指针并将引用计数置为1;3.当对象作为另一对象的副本而创建时,拷贝构造函数拷贝指针并增加与之相应的引用计数;4.对一个对象进行赋值时,赋值操作符减少左操作数所指对象的引用计数(如果引用计数为减至0,则删除对象),并增加右操作数所指对象的引用计数;这是因为左侧的指针指向了右侧指针所指向的对象,因此右指

2021-09-05 12:23:37 172

原创 设计模式-适配器模式

老接口class IAdaptee{ public: virtual void foo(int data)=0; virtual int bar()=0;}; class oldclass:public IAdaptee{ public: virtual void foo(int data){ } virtual int bar(){ }};新接口class ITarget{ public: virtual void process()=0;

2021-09-04 22:01:45 48

原创 设计模式-代理模式

在某些面向对象系统中,有些对象由于对象创建开销很大、某些操作需要安全控制或需要进程外的访问,直接访问会给系统带来麻烦。class ISubject{ public: virtual void process();};class RealSubject:public ISubject{ public: virtual void process(){ //...... }};class ClientApp{ ISubject* subject; public: Clien

2021-09-04 21:10:22 55

原创 设计模式-工厂模式

工厂模式通过对象创建绕开new,避免对象创建时的紧耦合。此类使用一个文件分割器class mainform{ ....public: ..... filesplitter* splitter=new filesplitter();//原方法需要在这new具体的对象 splitter->split();};class filesplitter{public:void split(){ ....}};若我们需要增加图片分割器,文本分割器等需要在new时依赖具体的类,可使用工厂

2021-09-02 11:05:45 104

原创 设计模式-策略模式

//此模式实现计算各个国家的税//定义一个基类,并将方法定义成虚函数,如果需要添加其他国家税收,只需要让工厂模式支持可分配指针,添加一个子类即可,提高了复用性class TaxStrategy{public: virtual double Calculate(const string &text)=0; virtual ~TaxStrategy();};class CNtax:public TaxStrategy{public: virtual double Calculate(c

2021-09-01 16:55:56 53

原创 设计模式-单例模式

//单例模式:存在一种特殊的类,保证在系统中只存在一个实例,以此确保程序的逻辑正确性、良好的效率。#include <iostream>using namespace std;class Singleton{private: Singleton(){}//定义构造函数在private中,防止生成合成的默认构造函数 Singleton(const Singleton&);//定义拷贝构造函数在private中,目的与上述一致,防止类外使用合成的拷贝函数使实例化public:

2021-09-01 11:17:32 69

原创 2021-08-20

C++primer第五版第15章笔记面向对象程序设计面向对象程序设计主要基于三个方面:数据抽象、继承和动态绑定。本章介绍继承和动态绑定。15.1oop:概述使用数据抽象我们可以将接口与实现分离;使用继承,可以定义其相似类型并对相似类型建模;使用动态绑定,可以在一定程度上忽略相似类型区别,使用统一方式使用它们的对象。15.2定义基类和派生类首先定义基类#include <iostream>#include<string>using namespace std;cla

2021-08-27 06:11:46 142

原创 2021-08-13

C++primer第五版第14章笔记重载运算与类型转换当运算符作用于类类型时,可以重载相关运算符使程序更易理解、修改。14.1基本概念和普通函数一样,重载运算符也包含返回类型、参数列表、函数体,函数名为operator加上需要重载的符号,重载运算符的参数数量与需要运算的对象一样多,如果为成员函数,this指针则隐式的绑定到左侧运算对象,所以会少一个参数。我们不能重定义内置类型的运算符,我们只能重载已有的运算符,我们将运算符作用于正确的运算类型隐式的使用,或者通过像普通函数一样显示调用:data1

2021-08-20 21:57:27 75

原创 2021-08-05

C++primer第五版第13章笔记拷贝控制我们可以显示的写出一些函数,如:拷贝构造函数、移动构造函数:同类型另一个对象初始化本对象;拷贝和移动运算符:将一个对象赋予同类型的另一个对象;析构函数:对象销毁;这些统称为拷贝控制操作。13.1拷贝、赋值与销毁13.1.1拷贝构造函数...

2021-08-13 21:23:15 66

原创 2021-07-29

C++primer第五版第12章笔记动态内存前面章节中介绍了静态内存区,用来保存static对象、类static数据成员、以及定义在任何函数之外的变量,在创建前分配,在程序结束时销毁;栈内存区,用来保存局部自动对象,仅在程序运行时存在;本章介绍动态内存区(堆区)创建对象,我们需要显示的销毁对象并回收内存,一般可以用智能指针来管理对象。12.1动态内存和智能指针我们需要一对操作来对动态内存对象进行管理,使用new创建新对象,使用delete销毁对象;有时我们没有释放内存会造成内存泄露,或者销毁了有指针

2021-08-03 22:25:41 55

原创 2021-07-27

C++primer第五版第11章笔记

2021-07-29 15:13:10 66

原创 2021-07-25

C++primer第五版第10章笔记10.1概述C++将大多数泛型算法保存于头文件algorithm中,并且保留了一部分数值运算算法在头文件numeric中。由于我们一般使用一个范围和值作为算法的公共接口,因此我们可以在支持迭代器或指针的容器或者内置类型数组使用这些泛型算法,从而并不关心存储元素的容器。如:find(num.begin(),num.end(),val);(如果查找成功则返回所找值所在迭代器的位置,若失败,则返回第二个参数的迭代器)int number[]={1,2,3};fin

2021-07-27 16:07:32 45

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除