
UVM实战学习笔记
文章平均质量分 61
m0_52174404
这个作者很懒,什么都没留下…
展开
-
UVM实战CH2:10 验证平台加入reference model
验证平台加入reference modelreference model用于完成和DUT相同的功能,输出被scoreboard接受,用于和DUT的输出比较代码分析my_model 代码`ifndef MY_MODEL__SV`define MY_MODEL__SVclass my_model extends uvm_component; //声明两个接口,用以和monitor和scoreboard传输数据 uvm_blocking_get_port #(my_transac原创 2021-07-18 18:37:05 · 5930 阅读 · 0 评论 -
UVM实战CH2:09 把monitor和driver封装成agent
把monitor和driver封装成agentmonitordriver和monitor处理的是同一种协议。由于二者相似,UVM中将二者封装在一起,成为一个agent。不同的agent就代表了不同的协议my_agent代码`ifndef MY_AGENT__SV`define MY_AGENT__SVclass my_agent extends uvm_agent ;//所有的agent都要派生自uvm_agent类 my_driver drv; my_monito原创 2021-07-11 14:20:01 · 696 阅读 · 0 评论 -
UVM实战CH2:08 验证平台加入monitor
验证平台加入monitormonitor验证平台中实现监测DUT输入输出信号的组件是monitordriver把transaction数据变为dut端口信号,而monitor把dut端口信号变为transaction交给reference model 和scoreboard等组件monitor代码`ifndef MY_MONITOR__SV`define MY_MONITOR__SVclass my_monitor extends uvm_monitor;//所有的monitor类应该派原创 2021-07-11 11:37:21 · 2749 阅读 · 0 评论 -
UVM实战CH2:07 验证平台加入env
验证平台加入env加入env在验证平台中加入reference model、scoreboard等组件后需要考虑对它们进行实例化,在top_tb中使用run_test已经不合适,因为run_test只能创建一个实例。而显式地例化这些组件与run_test例化的对象不属于同一个层次结构。解决方案:引入一个容器类,在这个容器类中实例化化driver、monitor、reference model和scoreboard等,而使用run_test创建这个容器类的实例。这个容器类称为uvm_envmy_env原创 2021-07-10 23:45:36 · 422 阅读 · 0 评论 -
UVM实战CH2:06 验证平台加入transaction
加入transactiontransactiontxd <= rxd;tx_en <= rx_dv;之前driver中的操作都是信号级的。在reference model、monitor、scoreboard等验证平台组件之间,信息的传递是基于transaction的物理协议中的数据交换都是以帧或者包为单位的,transaction就是用于模拟这种实际情况通常在一帧或者一个包中要定义好各项参数,每个包的大小不一样transaction代码以以太网为例,每个包的大小至少是64原创 2021-07-10 22:58:45 · 898 阅读 · 3 评论 -
UVM实战CH2:05 验证平台加入virtual interface
验证平台加入virtual interface加入virtual interfacetop_tb.rxd <= 8'b0; top_tb.rx_dv <= 1'b0;@(posedge top_tb.clk);之前driver中等待时钟事件、给DUT中输入端口赋值都是使用绝对路径绝对路径的使用大大减弱了验证平台的可移植性避免在验证平台中使用绝对路径方法1:使用宏`define TOP top_tb使用场景有限避免绝对路径的另外一种方式是使用interface使原创 2021-07-10 22:03:06 · 802 阅读 · 0 评论 -
UVM实战CH2:04 验证平台加入objection机制
验证平台加入objection机制objection机制my_driver中的main_phase是一个完整的任务,上节输出了“main_phase is called”,但是“data is drived”并没有输出。main_phase执行过程中中止。UVM中通过objection机制来控制验证平台的关闭UVM会检查是否有objection被提起(raise_objection),如果有,那么等待这个objection被撤销(drop_objection)后停止仿真;如果没有,则马上结束当前原创 2021-07-09 22:53:52 · 291 阅读 · 0 评论 -
UVM实战CH2:03 验证平台加入factory机制
验证平台加入factory机制factory机制上节代码initial begin my_driver drv; drv = new("drv", null); drv.main_phase(null); $finish();endtb中my_driver的实例化及drv.main_phase的显式调用与uvm并没有关系factory机制:自动创建一个类的实例并调用其中的函数(function)和任务(task)代码分析my_driver`ifnde原创 2021-07-09 22:28:20 · 219 阅读 · 0 评论 -
UVM实战CH2:02 只有driver的简单验证平台
只有driver的简单验证平台代码分析DUTDUT功能:通过rxd接收数据,再通过txd发送出去;rx_dv是接收的数据有效指示,tx_en是发送的数据有效指示module dut(clk, rst_n, rxd, rx_dv, txd, tx_en);input clk;input rst_n;input[7:0] rxd;input rx_dv;output [7:0]原创 2021-07-08 23:49:47 · 429 阅读 · 0 评论 -
UVM实战CH2:01 验证平台的组成
验证平台的组成简单验证平台driver:给DUT施加各种激励scoreboard:根据DUT的输出来判断DUT的行为是否与预期相符合monitor:收集DUT的输出并把它们传递给scoreboardreference model:验证平台要模拟DUT行为给出预期结果典型UVM验证平台在UVM中,引入了agent和sequence的概念基于接口协议一致和验证平台复用性考虑...原创 2021-07-08 22:58:58 · 249 阅读 · 0 评论 -
00-uvm仿真环境建立
最近在学习张强的《uvm实战》,想要仿真一下书中的代码,建立仿真环境。平台:windows软件:Questasim 10.6c代码来源于《UVM实战》(卷一)以一个简单的仅有driver的UVM平台为例建立仿真环境参考资料:UVM学习-仿真环境的搭建modelsim 10.4 UVM 仿真流程这里为了节约时间选择了windows平台,但实际工作中使用的是vcs和NCsim,后续需要在Linux平台上实践这些。具体步骤新建一个文件夹,这里为uvm_test。文件夹里准备好3个文件原创 2021-07-05 23:52:20 · 1026 阅读 · 1 评论