摘要:1.factory机制的重载功能 (1)在实例化时,UVM会通过factory机制在内部的一张表格中查看是否有相关的重载记录. 当查到有重载记录时,会使用新的类型代替旧的类型. (2)通常会在env或者具体的case中使用override功能; 1 class case_x extends base
阅读全文
摘要:资料来源: (1)公众号-芯片学堂; 注1:与[CU]factory机制3-factory机制创建实例(create_object/component_by_type/name) - __见贤思齐 - 博客园 (cnblogs.com)内容略有重叠,但侧重点不同; 1.factory机制相关宏 [C
阅读全文
摘要:1. factory机制重载的前提 (1) 无论是重载的类(extended class)还是被重载的类(base class),都要在定义时注册到factory机制中. (2) 被重载的类(base class)在实例化时,需要使用factory机制式的实例化方式,而不是传统的new方式. (3)
阅读全文
摘要:1. 用于factory注册的宏 注:宏实现类的注册; 1.1. `uvm_object_utils 1 `define uvm_object_utils(T) \ 2 `uvm_object_utils_begin(T) \ 3 `uvm_object_utils_end 1 `define uv
阅读全文
摘要:1.factory机制的功能 (1) factory机制的典型功能是创建类的实例和重载. 2.factory机制的本质 (1) factory的本质:重载new函数; (2) uvm_object/uvm_component的派生类在采用factory机制实例化时,会通过factory机制在内部表格
阅读全文
摘要:1.factory机制创建实例的简单分析 1 class uvm_default_factory extends uvm_factory; 2 3 // Group: Registering Types 4 5 // Function: register 6 // 7 // Registers th
阅读全文
摘要:参考资料 (1) https://www.runoob.com/ 1.ruby简介 (1) ruby是开源的面向对象程序设计的服务器段脚本语言; (2) ruby可运行于多种平台,如Windows, mac os和unix的各种版本; (3) 简单示例 1 #!/usr/bin/ruby -w 2
阅读全文
摘要:注:该部分内容可参考uvm cookbook进行补充; 1.seqr的lock与grab操作 (1) lock: sequence向sequencer发送一个请求,这个请求与其他sequence发送transaction的请求一同被放入sequencer的仲裁队列中.当前面的所有请求处理完毕, se
阅读全文
摘要:1.seqr的仲裁 (1) 当有多个sequence同时在一个sequencer上启动时,所有的sequence都参与仲裁,根据算法决定哪个sequence发送transaction.仲裁算法由sequencer决定. (2) sequencer在仲裁时,会查看sequence的is_relevan
阅读全文
摘要:(1) 无论flat_sequence, hierarchical sequence,最终流向sequencer的都是sequence_item. sequence_item通过start_item尝试从sequencer获取可以通过的权限. (2) sequencer在将权限交给某一个底层sequ
阅读全文
摘要:注1:上图有些问题,其中uvm_sequencer内的uvm_seq_item_pull_port应该改为uvm_seq_item_pull_imp; 1.sequencer与driver通信基础 (1) 一个sequence在向sequencer发送transaction前,会先向sequence
阅读全文
摘要:1.normal seqr的作用 (1) 将激励通过TLM port传递给driver; (2) 从driver侧获取RSP对象(driver.seq_item_port.put_response->seqr.put_response->seq.put_response/seq.response_h
阅读全文
摘要:1.sqr简介 2.sqr基类 2.1 uvm_sequencer_base (1) start_phase_sequence (2) wait_for_item_done (3) stop_sequences 2.2 uvm_sequencer_param_base #(REQ,RSP) 2.3
阅读全文
摘要:补充:下图源于uvm cookbook; 1.sqr.stop_sequences的影响 注:调用sequencer.stop_sequences后,由该sqr启动的sequence的body task虽然没有执行完,但依然会退出该sequence的body task??? 确实会这样!!! 2.s
阅读全文
摘要:1.为什么需要p_sequencer? (1) 假设启动sequence(类型为my_sequence)所对应sequencer的类型为my_sequencer. 如果在sequence内想要得到my_sequencer中某些变量的值,不能直接使用m_sequencer. 因为m_sequencer
阅读全文
摘要:1.m_sequencer (1) 所有的sequence都有一个m_sequencer句柄. 1 virtual class uvm_sequence #(type REQ=uvm_sequence_item, type RSP=REQ) extends uvm_sequence_base; 2
阅读全文
摘要:1.vsqr的实现与示例 (1) virtual sequencer派生于uvm_sequencer. 通常情况下, virtual sequencer包含子sequencer的指针; (2) virtual sequencer不和任何driver联系,并且本身不处理data item; 2.vsq
阅读全文
摘要:1.vseq的构建 1.1 vseq_base (1) 由于所有的virtual sequence都需要访问定义于virtual sequencer中的sub-sequencer句柄. 所以virtual sequence需要使用`uvm_declare_p_sequencer宏. (2) 由于每一
阅读全文
摘要:注:api_seq,work seq的详细解释可以查看uvm cookbook; 1. 什么情况下使用virtual sequencer? (1) 只有一个驱动agent,不存在激励协调的需求,不需要virtual sequencer; (2) 存在多个驱动agent,但多个激励之间没有协调关系,
阅读全文
摘要:1.normal seq (1) 每一个sequence都应该派生自uvm_sequence,并且在定义时指定要产生的transaction类型,此处为my_transaction(不一定非要指定transaction,但如果不指定在定义body task或drive时,需要做额外的cast操作,详
阅读全文
摘要:1.为什么需要response_handler? (1) get_response与put_response一一对应.当在sequence中启动get_response时,进程会阻塞,一直到sequence的response_queue里放入新的记录. (2) 如果driver能马上将respons
阅读全文
摘要:1.多个response之put_response & get_response (1) 通常,一个transaction对应一个response,但是UVM也支持一个transaction对应多个response的情况. 这种情况下,sequence中需要多次调用get_response,而在dr
阅读全文
摘要:1.单个response之另类response (1) 无论put/get_response或者item_done或者response_handler,都是新建了一个transaction,并将其返回给sequence. (2) 但是,seq内的uvm_do语句执行完毕后,其第一个参数并不是一个空指
阅读全文
摘要:1.seq对response的使用 (1)sequence机制中不仅提供了sequence->sequencer->driver的数据传输,还可以根据driver对transaction的反应来决定接下来要发送的transaction. (2) response机制的原理是driver将rsp推送到
阅读全文
摘要:1.单个response之get_response & put_response (1) 由于可能存在多个sequence在同一个sequencer上启动的情况,通过调用set_id_info设置了rsp的id等信息, sequencer才知道将response返回给哪个sequence; (2)
阅读全文
摘要:1.uvm-1.2取消在sequence内控制objection; (1) 在uvm-1.1中可以通过在seq内raise_objection与drop_objection控制tb的运行; (2)在uvm-1.2中取消了这种写法,改用set_automatic_phase_objection(1);
阅读全文
摘要:1.采用start task启动seq(实例化seq+randomize seq+seq.start(seqr)) (1) sequence如何向sequencer发送transaction? 定义sequence后,只需要在某个component(如my_sequencer, my_env)的ma
阅读全文
摘要:注1:可以了解下create_item函数; 1.使用start_item与finish_item (1) start_item与finish_item的参数必须是transaction的指针; 注1:通过调用start_item()方法等待获得sequencer的授权许可(sequencer.wa
阅读全文
摘要:1.采用uvm_create & uvm_send宏 注1:`uvm_create与`uvm_send宏的第一个参数都可以是sequencer的指针,也可以是transaction的指针; (1)uvm_create/uvm_create_on调用uvm_sequence_base的create_i
阅读全文
摘要:资料来源 (1) UVM实战-张强; (2) (8条消息) [SV] 内嵌约束中local::的用法_lbt_dvshare的博客-CSDN博客_sv中local 1.seq内rand型变量 (1)在sequence内可以使用随机变量,用以约束它产生的transaction; (2)在sequenc
阅读全文
摘要:注:可以推广到sequencer和driver,即是否为sequencer即driver指定transaction类型; 1.指明sequence产生的transaction类型 (1) 如果sequence中产生的transaction不是此种transaction,将会报错(见示例). (2)
阅读全文
摘要:注1: 每一个sequence都应该派生自uvm_sequence, 在定义时可以指定或不指定要产生的transaction的类型,通常会指定; 注2: 每一个sequence都有一个body任务,当一个sequence启动后,会自动执行body中的代码. 1.扁平类(flat sequence)
阅读全文
摘要:资料来源: (1) 《uvm cookbook》 1. register seq 1.1 register check seq (1) reset test:根据get_reset方法获取reset值,并调用register.read方法获取read value,比较reset值和read valu
阅读全文