完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
|
|
相关推荐
1个回答
|
|
uvm_reg_field
uvm_reg_field就像是一个功能模块中寄存器定义里面的域,例如一个32位的中断寄存器,其中可能包含有多种中断类型,一位就是一种中断。当然某些寄存器也会存在多个bit代表某种功能,这种某个寄存器内的某一个或者几个功能在UVM中就用uvm_reg_field类来表示。 所以一个典型的uvm_reg可能包含如下: (代码) 1.1.2. uvm_reg 顾名思义uvm_reg类就相当于一个功能模块中的寄存器 TBD 1.1.3. uvm_reg_block 这个类相当于一个特定模块中所有寄存器的容器,用来包含和划分某个特定范围的uvm_reg。同时一个reg block除了可以包含多个reg之外,还能够包含其他的reg block。 1.1.4. uvm_reg_map reg map类用于保存其所关联的寄存器地址,以及adapter, sequencer等信息。 1.1.5. 典型应用 这一节介绍一下一个经典的寄存器读写,以及predict,执行了哪些步骤,让读者有一个大概的流程概念,但不深入细节。 1.1.5.1. reg.write 首先对于寄存器的写,必须要提供一个value,以及准备一个uvm_status_e用来接收返回的状态,即操作成功与否, 当然write本身还提供了很多带默认值的参数,通常情况不强制用户给这些参数。 在我们调用寄存器的write之后,会将write中的参数信息都打包成类中的成员变量,然后调用do_write,并将该类传递给do_write。然后do_write会先做一些预操作,例如调用各个field的pre_write,以及callback函数中的pre_write(如果存在的话),然后再调用当前reg中的pre_write,和reg中的callback的pre_write。这些在一般操作中都不太需要,这里先不展开。 接下来,write将根据path为backdoor还是frontdoor执行不同的操作。典型应用中将只介绍frontdoor的操作,后续的章节会对各部分展开介绍。 frontdoor操作分为两种,第一种如果对reg和相应的map做了映射操作,并且在调用write时制定sequence,那么可以直接启动frontdoor sequence,然后执行sequence_item->driver->interface的操作,不过据我所知,更常用的方法是通过配置reg_adapter形式来实现,即frontdoor的另一种实现方式:调用相关联的reg_map的do_write操作。 reg_map中的do_write本身包含了支持field write,reg write等一系列的写,这里只介绍reg引起的write流程,在do_write中会调用根据会调用adapter的reg2bus函数,就是我们在adapter中定义的将reg item信息转化为我们需要的sequence item信息(严格来讲是do_write调用的一系列函数中会去调用reg2bus,具体较为复杂,在后续章节会陆续描述)。在经过reg2bus对sequence item进行转换后,就会像执行不同的sequence 一样将该sequence item分配给我们指定好的sequencer中,由相关driver驱动并且送到interface,最后作为一个寄存器写请求发送给DUT。 |
|
|
|
只有小组成员才能发言,加入小组>>
800 浏览 0 评论
1156 浏览 1 评论
2531 浏览 5 评论
2863 浏览 9 评论
移植了freeRTOS到STMf103之后显示没有定义的原因?
2714 浏览 6 评论
keil5中manage run-time environment怎么是灰色,不可以操作吗?
1092浏览 3评论
197浏览 2评论
463浏览 2评论
376浏览 2评论
M0518 PWM的电压输出只有2V左右,没有3.3V是怎么回事?
458浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-12-25 12:38 , Processed in 0.932073 second(s), Total 47, Slave 39 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号