Driver——同相运算放大器
概述
class ue_driver extends uvm_driver #(ue_transaction);bit show_info;ue_config cfg;virtual ue_interface vif; `uvm_component_utils(ue_driver)extern function new(string name ="ue_driver",uvm_component parent = null);extern function void build();extern task run();extern protected task _reset_listener();extern protected task _get_and_drive();extern protected task _drive_transfer(ue_transaction t);extern protected task _do_idle();extern protected task _set_scaler(ue_transaction t);extern protected task _wr_base_number(ue_transaction t);endclass : ue_driver
不同的sequence对应不同的testcase,但是只有一个driver,所以driver中包含了所有需要用到的sequence配套方法。
1.build 和 new
function ue_driver::new(string name ="ue_driver",uvm_component parent = null);super.new(name, parent);`uvm_info(get_type_name(), $sformatf("created"), UVM_LOW)
endfunction : newfunction void ue_driver::build();super.build();if(!uvm_config_db#(ue_config)::get(this,"","cfg", cfg)) begincfg = ue_config::type_id::create("cfg");endshow_info = cfg.show_info_drv;`uvm_info(get_type_name(), "built", UVM_LOW)
endfunction : build
2.run
task ue_driver::run();super.run();vif.wr_en_i = 1'b0;vif.set_scaler_i = 1'b0;vif.wr_data_i = 1'b0;vif.rd_val_o = 1'b0;vif.rd_data_o = 1'b0;vif.scaler_o = 1'b0;while(!vif.rstn)@(posedge vif.clk);`uvm_info(get_type_name(), "start run()", UVM_LOW)forkue_driver::_get_and_drive();ue_driver::_reset_listener();join`uvm_info(get_type_name(), "end run()", UVM_LOW)
endtask : run
首先将interface上所有信号复位。在时钟上升沿启动任务,当get and driver 以及reset listener均结束后,结束function run。
3.get and driver 和 reset listener
task ue_driver::_get_and_drive();forever begin seq_item_port.get_next_item(req);this._drive_transfer(req);void'($cast(rsp, req.clone()));rsp.set_sequence_id(req.get_sequence_id());seq_item_port.item_done(rsp);end
endtask
driver向sqr发送请求,sqr将transaction发送给driver。driver根据transaction不同类型进行不同的解析驱动DUT,同时将解析后的信号clone至rsp,返回sqr完成一次握手。
task ue_driver::_drive_transfer(ue_transaction t);if(show_info)t.print_info("ue_driver _drive_transfer");case (t.ttype) ue_transaction::IDLE:_do_idle(); ue_transaction::SET_SCALER:_set_scaler(t); ue_transaction::WR_BASE_NUMBER:_wr_base_number(t); default:`uvm_error("ERRTYPE", "_drive_transfer mode err")endcaseendtask
task ue_driver::_reset_listener();forever begin @(negedge vif.rstn);vif.wr_en_i = 0;vif.set_scaler_i =0 ;vif.wr_data_i = 0;if(show_info)`uvm_info(get_type_name(), "_reset_listener done", UVM_LOW)end
endtask
发送完成后,复位。
4.三种不同的解析方式
task ue_driver::_do_idle();@(vif.cb_drv);vif.cb_drv.wr_en_i <= 1'b0;vif.cb_drv.wr_data_i<= 1'b0;
endtasktask ue_driver::_set_scaler(ue_transaction t);@(vif.cb_drv);vif.cb_drv.wr_en_i <= 1'b1;vif.cb_drv.set_scaler_i<= 1'b1;vif.cb_drv.wr_data_i <= t.wr_scaler;@(vif.cb_drv);//dut收到信号@(vif.cb_drv);t.rd_scaler = vif.cb_drv.scaler_o;
endtasktask ue_driver::_wr_base_number(ue_transaction t);@(vif.cb_drv);vif.cb_drv.wr_en_i <= 1'b1;vif.cb_drv.set_scaler_i <= 1'b0; vif.cb_drv.wr_data_i <= {t.no,t.base_number};t.rd_scaler = vif.cb_drv.scaler_o;repeat(t.idle_cycles) _do_idle();
endtask
Driver——同相运算放大器相关推荐
- 《电路基础》同相运算放大器
同相运算放大器
- 同相运算放大器电压增益计算
同相运算放大器电压增益 运算放大器的放大主要取决于两个反馈电阻,如 R1 和 R2,它们连接在分压器配置中.R1 电阻器称为反馈电阻器 (Rf),提供给运算放大器反相引脚的分压器输出等效于 Vin,因 ...
- env——同相运算放大器
放小豪老师的b站 IC验证 - 手把手教你搭建UVM芯片验证环境(含代码)_哔哩哔哩_bilibili 整个验证环境由4个组件组成,i_agt.o_agt .mdl(reference model) ...
- DUT——同相运算放大器
一.DUT概述 系统信号 clk_i 系统时钟 rstn_i ...
- 运算放大器电路PCB的设计技巧
印制电路板(PCB)布线在高速电路中具有关键的作用,但它往往是电路设计过程的最后几个步骤之一. 本文主要从实践的角度来探讨高速电路的布线问题. 主要目的在于帮助新用户当设计高速电路 PCB 布线时对需 ...
- 运算放大器应用汇总2
内容包括Howland电流源的仿真与其定性分析.定量计算,峰值检波电路,正弦波信号频率测量电路,工业4-20mA转0-3.3V/5V/10V/15V转换变送器电路,基于LM358被动红外人体检测,单电 ...
- 运算放大器节点电压方程_干货分享 | 关于放大器配置,你不得不知道的22个常用设计方程...
放大器种类纷繁复杂,有运算放大器.功率放大器,还有射频放大器.仪表放大器等等.作为电路学习中的一大课题,想必大家对于放大器配置肯定不陌生.为了帮助大家更好的学习该知识点,或随时对这一知识点" ...
- 运算放大器加法器设计学习笔记
运算放大器构成加法器 可以分为同相加法器和反相加法器 第一种:同相加法器 举个栗子:Vin1=0.4*Sin(wt) 也就是一个正弦信号 Vin2=1V 那么要实现两个信号的叠加 ...
- 同相放大器原理是什么?
在运算放大器电路中,有一个专有名词叫做"同相放大器".同相运算放大器通过两个规则工作,如电流规则和电压规则,电流规则指出没有电流流向运算放大器的输入,而电压规则指出运算放大器电压试 ...
最新文章
- 用eclipse在windows下搭建cocos2d-x开发环境
- 利用Hadoop Streaming处理二进制格式文件
- LeetCode: Longest Consecutive Sequence [128]
- oracle thread日志查看,请教归档日志的视图v$archived_log里的thread#的问题
- 【Level 08】U08 Positive Attitude L5 Satisfy your need to know
- linux下源码安装log4cxx
- 关于国庆假期延长的通知
- 再看中国互联网web2.0百强名单
- Netmeeting 安装步骤
- JS 获取浏览器高度和宽度
- 《视觉SLAM十四讲》笔记摘抄
- 计算机冰雪世界教案,教案有趣的冰
- 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
- Leetcode 037 解数独 思路详解 python
- Python 画樱花树(樱花树下的约定)
- 一个压长定式衍生出的一个角部攻防
- APL开发日志--2012-12-03
- 软件工程专业大学生的一年半 | 2022年度总结
- 利用Python做excel文本合并(根据左侧单元格,快速合并右侧单元格内容)
- 使用账号激活MATLAB软件