- 博客(15)
- 收藏
- 关注
原创 为什么打两拍可以消除亚稳态的影响?
为什么打两拍可以消除亚稳态的影响?首先,我们需要了解什么是亚稳态,看下图简单来说,就是当时钟信号上升沿到来的时候正好采样的数据也在发生变化,但是对于采样的时钟信号,如果想要采样得到一个稳定值,在clk的上升沿的前一段时间有一个建立时间TSU和在clk的上升沿的后一段时间有一个保持时间Th,如果在这两个时间段内采样的信号D发生跳变的话,输出的信号Q就会出现0,1之间跳变的不稳定、不确定状态,从而对采样结果产生干扰,这就是亚稳态。在建立时间TSU期间,若D不能保持稳定状态,则寄存器则无法
2022-10-21 14:20:24
2984
原创 异步fifo(UVM验证)
1.interface2.fifo_transaction3.fifo_driver4.fifo _monitor5.fifo _sequencer6.fifo_agent7.ref_module(在这里其实就是个接收来自i_agent的monitor的数据 和 发送数据到scoreboard)8.scoreboardscb里面有个队列expect_quene [$]
2022-10-16 21:04:18
1934
原创 异步fifo设计与验证(V)
设计文件:1.men模块2、格雷码形式写指针同步到读时钟域(为什么要这么做,就是因为读写时钟不一样,要判断空满信号无法直接判断,所以将(格雷码形式的写指针)同步到读时钟域(变成rq2_wptr信号),就需要将写指针打两拍,这个指针(rq2_wptr)与读时钟域的格雷码读指针(rptr)进行读空判断)二者指针相同为1(读空)为什么要将二进制指针转为格雷码形式指针:二进制指针为多比特变化,出现亚稳态概率太高,格雷码只有一位比特变化,单比特变化打两拍,异步fifo读写地址变化是连续的
2022-10-13 14:32:31
685
原创 异步fifo知识点
1.格雷码(1)二进制码转换成格雷码,其法则是保留二进制码的最高位作为格雷码的最高位,而次高位格雷码为二进制码的高位与次高位相异或(异或:两个数相同为0,不同为1),而格雷码其余各位与次高位的求法相类似。(2)格雷码转换成二进制码,其法则是保留格雷码的最高位作为自然二进制码的最高位,而次高位自然二进制码为高位自然二进制码与次高位格雷码相异或,而自然二进制码的其余各位与次高位自然二进制码的求法相类似。异步FIFO的写指针和读指针分属不同时钟域,这样指针在进行同步过程中很容易出错,
2022-10-08 14:48:09
1604
原创 同步fifo 设计与验证(两种方法:计数器法与高位扩展法)
1、FIFO 的常见参数:FIFO 的宽度:即 FIFO 一次读写操作的数据位FIFO 的深度:指的是 FIFO 可以存储多少个 N 位的数据(如果宽度为 N)满标志:FIFO 已满或将要满时由 FIFO 的状态送出的一个信号,以阻止 FIFO 的写操作继续向 FIFO 中写数据而造成溢出(overflow)空标志:FIFO 已空或将要空时由 FIFO 的状态送出的一个信号,以阻止 FIFO 的读操作继续从 FIFO 中读出数据而造成无效数据的读出(underflow)读时钟:读操作所遵循的时钟,
2022-10-07 19:44:04
884
1
原创 men与reg的区别以及内建sequence
1.uvm_menk可以用来模拟读写(RW),也可以RO(只读)WO (只写),类型的存储,并且可以配置模拟的数据宽度和地址范围,担因为物理存储一旦映射到UVM_men会带来更大的资源消耗,所以men不支持预测和影子存储功能,即没有镜像值,也没有期望值。2.与uvm_reg相比,uvm_men同样有常规访问方法read() write() peek() poke (),还提供了更加高速的通过物理总线的Burst方式连续存储(burst_read burst_write),但要考虑1.挂载的总线UV
2022-09-23 14:41:42
289
原创 predicter
1.自动预测(set_auto_predict):利用寄存器的操作来自动记录每一次寄存器的读写数值,并在后台自动调用predict(),担如果出现一些sequence在总线层面上对寄存器进行操作,跳过寄存器级别的write()/read(),或通过其他总线进行访问寄存器,这样就无法自动获得寄存器的镜像值和预期值。2.显示预测,总线agent的monitor监测到有效事务就会发给predictor,通过bus2reg更新寄存器模型中的寄存器。注意:1.predict是组件component类
2022-09-22 21:24:58
371
原创 前门 后门访问
1、前门访问:在寄存器模型上做的读写操作,通过总线UVC实现总线上的物理时序访问,是真实的物理操作后门访问:利用UVM DPI,将寄存器的操作直接作用到DUT的寄存器变量,而不通过物理总线的访问。(速度快,不需要消耗时间,0时刻立即返回)2.前门访问中对寄存器操作有两种方式:第一种:uvm_reg:read()/write () 在传递数据要将参数path指定为uvm_frontdoor。第二种:要先声明为uvm_reg_sequence ,然后可直接调用3.后门访问:在寄存器
2022-09-22 20:43:23
1484
2
原创 adapter
1.总线适配器 寄存器模型生成时并不随之生成adapter,因为adapter的转换上层是UVM的寄存器标准包,转换下层可能是不同的总线UVC(比如ahb apb 的VIP),所以adapter的开发责任就落到总线UVC上(上层是寄存器模型块,发出的数据位宽等等可能跟标准总线的不一样,所以就要有adapter) 2.寄存器序列将带有目标寄存器的相关信息存储到uvm_reg_item实例中,送往adapter,adapter接收到uvm_reg_item后,从中抽取总线UVC需要的信息,生成总线UVC
2022-09-22 16:29:30
463
原创 实验注意点
1.generator分为sequence和sequencer,sequencer是组件类,而sequence和sequence_item是object类。在sequence里面要调用body任务,不能用run_phase2.uvm宏的便捷性,uvm_do_with 后面可以加constraint3.直接调用object的核心方法
2022-09-21 11:23:45
130
原创 一、virtual sequence 与virtual sequencer 二、layering sequence
一、1.virtual sequence一般挂载到virtual sequencer上面,virtual sequencer里面有各个sequencer(如reg_sequencer formatter_sequencer 的句柄),这样virtual sequence就可以通过句柄将不同类型sequence挂载到不同的sequencer上;要使用uvm_do_on ,这个才可以把不同sequence挂载到不同sequencer上。uvm_do是吧sequence挂载到同一个sequencer,是属于h
2022-09-07 16:27:26
405
原创 sequencer仲裁
1.在sequence里面才能用宏定义 uvm_do/uvm_do_with等,在test里面不能。2.仲裁机制中的lock函数和grad函数
2022-09-06 21:14:52
214
原创 sequencer和driver
一般在顶层用:driver.seq_item_port.connect(sqr.seq_item_export);作连接,完成item的完整传送。这一类型的tlm端口支持很多方法:主要是:task get_next_item和function void item_done1.uvm_sequencer和uvm_driver都是参数化的类,默认类型是父类类型,这会带来一个潜在的类型转换要求,2、挂载用start
2022-09-05 17:40:40
164
原创 UVM序列
1.sequence 、sequence_item是object类,uvm_object 独立于build阶段,所以可以在任何阶段创建sequence 、sequence_item,但是因为不在uvm结构中,所以在顶层无法按照层次关系直接配置到sequence,就是无法通过config_db作配置。sequence活动起来必须挂载到一个sequencer上,这样sequence可以依赖于sequencer的结构关系,间接通过sequencer来获取顶层的配置和更多消息。2.sequencer和
2022-09-05 11:47:11
259
原创 通信管道- TLM-fifo、analysis tlm port
Uvm _tlm_fifo是一个组件类(一端对一端),继承于uvm_component,且内置了多个端口,内部内置了一个Mailbox,该mailbox没有尺寸限制,Uvm _tlm_fifo的多个端口都是利用该mailbox进行数据读写。Uvm _tlm_fifo有三个参数,继承于component的两个,name 和 parent ,还有一个size,可以自己修改,默认为1,存一个数。analysis tlm port 是一个新的组件,继承于uvm_tlm_fifo ,所以既有面向单一tl
2022-09-04 10:57:38
865
2
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人