
UVM
文章平均质量分 77
借问众神明.
犹当晚学,不可自弃
展开
-
driver与monitor间的数据传输--UART
文章目录uart发送数据(driver)uart接受数据(monitor)uart发送数据(driver)CPU通过APB总线给uart写入数据,将数据保存在TX_FIFO中,然后通过uart_driver将并行数据串行的发送到总线上。注意:发送时,应该符合uart的通信协议,在不发送数据时,sline.data应该保持高电平,当其拉低以后,表明数据传输开始。同时,数据传输应该根据波特率配置,并采用16倍频发送。具体可看uart波特率模块在发送完前四个数据以后,后续5到8位的数据发送应该由LCR寄存器原创 2022-04-30 19:16:05 · 1536 阅读 · 0 评论 -
UVM产生异常激励的方法
在UVM中,提供了三种产生异常激励的方法(以白皮书中源码为例)在my_transaction中添加一个crc_err的标志位这样,在post_randomize中计算CRC前先检查一下crc_err字段,如果为1,那么直接使用随机值,否则使用真实的CRC。class my_transaction extends uvm_sequence_item; rand bit[47:0] dmac;//A 48-bit Ethernet destination address rand bi原创 2022-04-23 14:37:22 · 771 阅读 · 0 评论 -
UVM中sequnece的启动
文章目录sequence介绍sequence 向sequencer发送transaction`uvm_do方式发送直接发送启动方式1. 通过start启动2. 使用default_sequencesequence介绍本文代码参考自《UVM实战》sequence不属于验证平台的任何一部分,它与sequencer之间有密切的联系。sequence中封装着激励数据transaction,是一个uvm_object,使用uvm_object_utils宏注册到factory中。而sequencer是一个uvm原创 2022-04-12 19:02:22 · 1463 阅读 · 0 评论 -
UVM中phase机制
文章目录phase分类function phase的运行task phase的运行super.phasephase机制的意义phase分类UVM中的phase,按照其是否消耗仿真时间($time打印出的时间)的特性,可以分成两大类,一类是function phase,如build_phase、connect_phase等,这些phase都不耗费仿真时间,通过函数来实现;另外一类是task phase,如run_phase等,它们耗费仿真时间,通过任务来实现。给DUT施加激励、监测DUT的输出都是在这些p原创 2022-03-29 20:29:13 · 2802 阅读 · 0 评论 -
UVM中objection机制学习
文章目录objection机制介绍objection使用注意点代码实例objection机制介绍在UVM中可以通过drop_objection来通知系统可以关闭验证平台,且在drop_objection之前raise_objection。在进入到某一phase时,UVM会收集此phase提出的所有objection,并且实时监测所有objection是否已经被撤销了,当发现所有都已经撤销后,那么就会关闭phase,开始进入下一个phase。当所有的phase都执行完毕后,就会调用$finish来将整个的原创 2022-03-29 19:44:26 · 1829 阅读 · 0 评论 -
波特率分频监测模块理解-基于apb_uart项目
文章目录模块介绍主要代码描述代码实例模块介绍该组件模块只要功能是检测特定波特率下的时钟分频是否正确,主要指IRQ.CLK在寄存器的控制下,是否正确分频成baud_out,其中 DIV2与 DIV2 寄存器的值和各个波形之间的频率关系如下图所示:通过验证在相邻两个 brg_en 时钟的上升沿之间有 16*{DIV2, DIV1}个 IRO.CLK 时钟的上升沿,可以说明寄存器 的功能是正确的。主要代码描述该组件中使用了三个 task:monitor_apb()、count_clocks()和 mon原创 2022-03-28 21:33:10 · 2088 阅读 · 1 评论 -
寄存器访问方法
本文转载自UVM糖果爱好者教程 - 16.寄存器访问方法 UVM的寄存器抽象层(RAL)提供了几种访问寄存器的方法。 这篇文章将解释寄存器访问方法的工作原理。 在Register Abstraction中,我们介绍了RAL的概述并解释了如何定义寄存器。 在这篇文章中,我们将介绍如何访问寄存器。uvm_reg_field的属性在深入了解寄存器访问方法之前,让我们看看如何存储寄存器值。 如寄存器抽象中所示,uvm_r转载 2022-03-26 21:54:49 · 1732 阅读 · 0 评论 -
raise_objection和drop_objection的学习
UVM中通过objection 机制来控制phase的执行,通过raise or drop objection来决定phase中事件的开始和停止。在进入到某一phase时,UVM会收集此phase提出的所有objection,并且实时监测所有objection是否已经被撤销了,当发现所有都已经撤销后,那么就会关闭此phase,开始进入下一个phase。当所有的phase都执行完毕后,就会调用$finish来将整个的验证平台关掉。注意点:Objection机制应该用在耗时语句之前若phase中没原创 2022-03-05 13:57:30 · 4385 阅读 · 0 评论 -
uvm_analysis通信端口学习
UVM实现通信的TLM机制中通常有put,get等术语,put操作是指通信的发起者A把一个transaction发送给B,而get操作指A向B索取一个transaction。同样,存在port与export,imp三种端口,代表了控制流的方向,port的优先级最高。除了这几种端口外,UVM中还有两种特殊的端口:analysis_port和analysis_export。这两者其实与put和get系列端口类似,都用于传递transaction。原创 2022-03-05 10:27:13 · 3150 阅读 · 0 评论 -
UVM实战--基于白皮书代码
文章目录前言DUT介绍dirver模块uvm_sequence与uvm_sequencermy_transaction模块加入monitor加入agent加入reference model加入scoreboard加入env验证平台顶层top_tb创建base_test测试用例case添加前言UVM(Universal Verification Methodology),其正式版是在2011年2月由Accellera推出的,得到了Sysnopsys、Mentor和Cadence的支持。UVM几乎完全继承了原创 2022-02-24 18:54:21 · 3728 阅读 · 0 评论