自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 APB Timer验证环境搭建——学习笔记(8)

当monitor监测到总线上有寄存器操作,会将相应的信息广播给subscribe,subscribe可以通过get_reg_by_offset(tr.addr)(寄存器模型map的方法)得到此次操作中寄存器的句柄r,随后通过r.get_name()方法来定位某个具体的寄存器,同时trigger对应uvm_event事件,最终通过rgm.REG.get()方法拿到DUT侧寄存器配置。功能覆盖率,覆盖组t2-t5的覆盖率达到100%,但是在覆盖组t1部分的bins没有覆盖到;2、对各个覆盖组进行采样。

2023-06-06 19:41:41 439 4

原创 AHB GPIO验证环境搭建——学习笔记(5)

通过观察design接口发和中断类型(如下图)发现,之所以边沿触发,上升有效(raise_adge)这个寄存器没有被配置的原因是,interrupt polarity和interrupt type被配置为01后,被自动清除了(即拉高了INTCLR信号),因为在set_and_clear中配置了clear,即遍历到中断Falling edge后,紧接着遍历Low-level中断了;接下来把inttype和intpolset每次都重新配置一下,配置如下,编译仿真后,四个中断成功按顺序遍历;

2023-06-01 19:36:15 455

原创 AHB GPIO验证环境搭建——学习笔记(4)

portin拉高后,随后拉低,清除当前中断,再对其他类型中断进行遍历,如电平触发,高电平有效;结果发现同一个地址无法映射到两个寄存器,通过修改寄存器名称,把编译通过,只是名称不同,其实还是映射到一个寄存器而已;分别对16bit中断进行遍历,也就是对每1bit位进行4种中断的组合,最后通过外部信号portin进行各个bit位触发中断,每一种中断被触发记录后,分别清除后(清除type和polarity),才能触发其他类型的中断,最后由信号GPIOINT和COMBINT来判断中断的当前状态;

2023-05-31 20:41:44 491 3

原创 AHB GPIO验证环境搭建——学习笔记(3)

对portout先做set,但并不是对全部bit位都做set,对简单寄存器地址访问的思路如上图,tb从AHB端写入,从portout读回;接下来对portout和portin做一个简单的compare,为了考虑bit位的翻转问题,设定初始值1,0,1;AHB端拿到portin之前需要等待3个周期,一拍做记录,两拍做同步(双触发器同步);masked bit过程,对于portin来说,当id > 0时,先需要暂存一下当前的bit id,把对应的id交出来,这样就完成了一个mask的过程;

2023-05-29 17:13:55 593 1

原创 AHB GPIO验证环境搭建——学习笔记(2)

通过Makefile对以上环境进行编译,编译顺利通过,但只是完成了各个组件的创建,必要的连接没有做,后面将把各个组件连接好,编译通过后,实现激励发送。base_sequence拿到ahb的VIP激励后,通过p_sequencer挂载到virtual sequencer后;把相关的信号放入gpio_if中;在tb中定义时钟、例化dut、连接gpio_if;在环境中完成组建的创建、例化和连接;

2023-05-28 18:14:33 503

原创 AHB GPIO验证环境搭建——学习笔记(1)

• 可编程中断生成能力。• 使用地址值的位掩码支持。• 具有引脚多路复用支持的备用功能切换寄存器。• 通过为控制寄存器提供单独的设置和清除地址实现线程安全操作。• 输入使用双触发器采样以避免亚稳态问题。其中FCLK与HCLK是same phase的,也就是它们的上升沿和下降沿在时间上保持对齐;此外,GPIO默认采用小端;就是把数值的高位字节放在内存的低位地址上,把数值的地位字节放在内存的高位地址上。就是把数字的高位字节放在高位的地址上,低位字节放在低位地址上。

2023-05-28 13:42:17 1185 3

原创 APB Timer验证环境搭建——学习笔记(7)

counter不工作,正常计数到。counter不工作,随后。作为clock信号;

2023-05-17 22:15:13 280 2

原创 APB Timer验证环境搭建——学习笔记(6)

(1)为RELOAD VALUE配置初始值32'h8000_0000,设定边界值32'h4000_0000,可以看到减到想要的边界值的时候,counter重新加载RELOAD VALUE,重新开始计数;这根线,统计等待到中断的次数,与理论值做。(2)设定Reload value。(1)由于counter。recount总共次数;

2023-05-17 22:08:31 265 1

原创 APB Timer验证环境搭建——学习笔记(5)

(2)不使能interrupt,counter计数到1 的时候,interrupt为低,随后使能拉高CTRL[3],在counter下一次计数到1 的时候,interrupt拉高;(3)在31725ns处,interrupt拉高,而此时的CLEAR拉低,可以明显看到interrupt保持为高,没有变化;(1)counter在1165ns没有工作,因为,在1165ns处,CTRL[0] 拉高,counter正常工作;随后拉高CTRL[0] 等待一段时间,读回 value;,等待一段时间后,读回。

2023-05-17 21:53:23 245

原创 APB Timer验证环境搭建——学习笔记(4)

rgm、adapter、predictor都要在env定义、例化;把reg_model_block往下传,下面的组件都可以拿到reg_model_block;因为Timer中PID和CID是一些只读寄存器,所以可以通过mirror工作,读回当前寄存器的地址;通过波形和寄存器地址比对能够发现,寄存器访问成功;1、利用脚本Python生成register model;3、仿真编译,验证寄存器是否访问成功。

2023-05-17 21:27:55 265 1

原创 APB Timer验证环境搭建——学习笔记(3)

建立base_sequence,把基本的公共的事务放这这里完成,`uvm_declare_p_sequencer宏完成seq到sqr的挂载;首先要想发送一下激励的话,需要定义一些sequence,而且激励要从apb的write和read发生,随后要把相应的sequence挂载到sequencer上。编译通过,表明对DUT访问成功了,接下来准备发送激励;建立integration_sequence,想法是通过这个seq通过宏`uvm_do_on_with挂载到sqr的方式,把timer寄存器的访问通;

2023-05-13 10:56:37 290 1

原创 APB Timer验证环境搭建——学习笔记(2)

(2)当有多个agent的时候,那每一个agent可能都会有它对应的config class 或者config object,一般agent被嵌套在env中,然后environment又被上层environment嵌套,这种层次化的结构,意味着config也应该具有层次化;(1)接口连接好,传递interface,由于目前只是搭建验证环境的简单框架,只需把apb_if传递给apb_mst,timer_if传递给test;(1)继承base_test,挂起objection;(1)也需要cfg配置信息。

2023-05-12 17:59:58 400

原创 APB Timer验证环境搭建——学习笔记(1)

以下为个人学习笔记,如有疏漏,请大家指正补充~~APB Timer是一个简单的下行计数器,包括一个32位计数器和一组比较器,可以实现多种计时功能。包括生成一次性中断或者定时中断。

2023-05-09 10:48:18 994 2

空空如也

空空如也

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

TA关注的人

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