【APB协议 UVM_Sequencer Driver Monitor_2024.03.04】
apb协议
写时序
地址、写信号、PSEL、写数据信号同时发生变化,即传输的第一个时钟被称为SETUP周期。在下个时钟上升沿,PENABLE信号拉高,表示ENABLE周期,在该周期内,数据、地址以及控制信号都必须保持有效。整个写传输在这个周期结束时完成:

读时序
地址、写信号、PSEL信号同时发生变化,在下个时钟上升沿,PENABLE信号拉高,从机必须在ENABLE周期内提供读数据:

Sequencer
充当激励环节的路由器作用,管理sequence,也传递数据,仲裁某一时刻传递哪个sequence的数据
- uvm_sequencer#(REQ,RSP)
REQ:request;RSP:response//一般相同 - default_sequence
决定接数据的类型 - seq_item_export
决定送数据的driver
sequencer的实现
class apb_sequencer extends uvm_sequencer #(apb_trans);`uvm_component_utils(apb_sequencer);function new(string name,uvm_component parent);super.new(name,parent);endfunction
endclass
简便方法(不建议使用):
typedef uvm_sequencer #(apb_trans) apb_sequencer;
virtual sequencer
- 不同的sequence需要不同的sequencer
- 控制其他的sequencer
- 不和任何driver相连
- 本身不处理item
实现与sequencer相同,其中可以定义子sequencer
Driver
driver和monitor都是数据转换类型,但方向相反
driver的方法:
get_next_item(阻塞)
try_next_item(不阻塞)
item_done(不阻塞)
driver的使用
uvm_driver(REQ,REP)
seq_item_port.get_next_item(req);//get上述括号内传来的句柄

driver的实现
class apb_driver extends uvm_driver #(apb_trans);`uvm_component_utils(apb_driver)//定义虚接口virtual apb_interface vif;function new(string name,uvm_component parent);super.new(name,parent);endfunction//config_db连接虚接口function void connect_phase(uvm_phase phase);super.connect_phase(phase);if(!uvm_config_db #(virtual apb_interface)::get(this,"","vif",vif);`uvm_fatal("NOvif","NOvif for apb_driver");endendfunctiontask run_phase(uvm_phase phase);super.run_phase(phase);vif.paddr<=0;vif.pwdata<=0;vif.pwrite<=0;vif.psel<=0;vif.penable<=0;tx_driver();endtask//从seq_item_port获取transactiontask tx_driver();forever beginseq_item_port.get_next_item(req);send(req);seq_item_port.item_done();endendtask//给vif传送transactiontask send(apb_trans tr);case(tr.dir)apb_trans::RD:begin@(posedge vif.clk);vif.paddr<=tr.addr;vif.pwrite<=0;vif.psel<=1;@(posedge vif.clk);vif.penable<=1;@(posedge vif.clk);tr.data=vif.prdata;vif.psel<=0;vif.penable<=0;endapb_trans::WR:begin@(posedge vif.clk);vif.paddr<=tr.addr;vif.pwdata<=tr.data;vif.psel<=1;vif.pwrite<=1;@(posedge vif.clk);vif.penable<=1;@(posedge vif.clk);tr.data=vif.prdata;vif.psel<=0;vif.penable<=0;endendcase
endclass
Monitor
源码中没有定义port
monitor不用像driver一样按时序操作的原因:
driver:transaction→DUT,DUT时序要求正确
monitor:DUT→transaction,验证没有时序的概念,只关注行为

monitor的实现
class apb_monitor extends uvm_monitor;`uvm_component_utils(apb_moitor);//定义虚接口virtual apb_interface vif;//利用uvm_analysis_port创建apb_mon_portuvm_analysis_port #(apb_trans) apb_mon_port;function new(string name,uvm_component parent);super.new(name,parent);endfunctionconfig_db连接虚接口,new apb_mon_portfunction void build_phase(uvm_phase phase);super.build_phase(phase);if(!uvm_config_db #(virtual apb_interface)::get(this,"","vif",vif);`uvm_fatal("NOvif","NOvif for apb_monitor");endapb_mon_port=new("apb_mon_port",this);endfunction//从vif获取transaction,要create transaction,写入apb_mon_port中,base_test中会与scoreboard的uvm_analysis_imp连接task run_phase(uvm_phase phase);super.run_phase(phase);forever beginapb_trans tr = apb_trans::type_id::create("tr",this);@(posedge vif.clk);if(vif.psel==1 && vif.penable==1)begintr.dir=(vif.pwrite)?apb_trans::WR:apb_trans::RD;tr.addr=vif.paddr;tr.data=(vif.pwrite)?vif.pwdata:vif.prdata;apb_mon_port.write(tr);endendendtask
endclass
相关文章:
【APB协议 UVM_Sequencer Driver Monitor_2024.03.04】
apb协议 写时序 地址、写信号、PSEL、写数据信号同时发生变化,即传输的第一个时钟被称为SETUP周期。在下个时钟上升沿,PENABLE信号拉高,表示ENABLE周期,在该周期内,数据、地址以及控制信号都必须保持有效。整个写传输在这个周期…...
C++ Qt开发:QFileSystemWatcher文件监视组件
Qt 是一个跨平台C图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍如何运用QFileSystemWatcher组件实现对文件或…...
window Zookeeper 启动;
文章目录 前言一、Zookeeper 介绍:二、window 使用:2.1 下载:2.2 启动2.3 连接: 总结 前言 本文对window Zookeeper zk 启动 进行介绍; 一、Zookeeper 介绍: ZooKeeper 是一个开源的分布式协调服务&#…...
数据分析-Pandas如何画图验证数据随机性
数据分析-Pandas如何画图验证数据随机性 数据分析和处理中,难免会遇到各种数据,那么数据呈现怎样的规律呢?不管金融数据,风控数据,营销数据等等,莫不如此。如何通过图示展示数据的规律? 数据表…...
地球系统模式(CESM)
目前通用地球系统模式(Community Earth System Model,CESM)在研究地球的过去、现在和未来的气候状况中具有越来越普遍的应用。CESM由美国NCAR于2010年07月推出以来,一直受到气候学界的密切关注。近年升级的CESM2.0在大气、陆地、海…...
数据通信练习题
1.0osi七层模型 应用层 data 表示层 会话层 传输层 数据段 防火墙,端口(TCP UDP) 网络层 数据包 路由器 数据链路层 数据帧 交换机 物理层 比特流 网卡 2.IP地址分类 私有地址 A类 0--127 10.0.0.0…...
本地部署推理TextDiffuser-2:释放语言模型用于文本渲染的力量
系列文章目录 文章目录 系列文章目录一、模型下载和环境配置二、模型训练(一)训练布局规划器(二)训练扩散模型 三、模型推理(一)准备训练好的模型checkpoint(二)全参数推理ÿ…...
设计模式: 模板方法模式
文章目录 一、什么是模板方法模式二、模板方法模式结构三、优点 一、什么是模板方法模式 模板方法模式(Template Method Pattern)是一种行为设计模式,它定义了一个操作中的算法骨架,将一些步骤延迟到子类中实现。这样可以使得子类…...
C++ 打印输出十六进制数 指定占位符前面填充0
C 打印十六进制数据,指定数据长度,前面不够时,补充0. 代码如下: #include <iostream> #include <iomanip> #include <cmath>using namespace std;int main() {unsigned int id 0xc01;unsigned int testCaseId…...
基于 Win Server 2008 复现 IPC$ 漏洞
写在前面 本篇博客演示了使用 winXP(配合部分 win10 的命令)对 win server 2008 的 IPC$ 漏洞进行内网渗透,原本的实验是要求使用 win server 2003,使用 win server 2003 可以规避掉很多下面存在的问题,建议大家使用 …...
HTML笔记2
11,路径 <!DOCTYPE html> <html lang"en"> <head> <meta charset"UTF-8"> <meta name"viewport" content"widthdevice-width, initial-scale1.0"> <title>Document</title> <…...
使用Docker实现Jenkins+Python + Pytest +Allure 接口自动化
一、Jenkins搭建 参考《Docker 安装 Jenkins》 进入 jenkins 容器 CLI 界面 docker exec -itu root jenkins /bin/bash二、准备条件 1、替换镜像内源 为了安装wget,默认用yum会安装不上wget命令,参考文章《docker容器内如何更换yum源【只想换成国内…...
论企业安全漏洞扫描的重要性
前言 随着信息技术的迅猛发展和互联网的广泛普及,网络安全问题日益凸显。在这个数字化的世界里,无论是企业还是个人,都面临着前所未有的安全威胁。安全漏洞,作为这些威胁的源头,常常被忽视或无法及时发现。 而安全漏洞…...
23.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-实现配置工具数据结构
免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果 内容参考于:易道云信息技术研究院VIP课 上一个内容:22.加载配置文件…...
STM32CubeMX学习笔记20——SD卡FATFS文件系统
1. FATFS文件系统简介 文件系统是操作系统用于明确存储设备或分区上的文件的方法和数据结构(即在存储设备上组织文件的方法)。操作系统中负责管理和存储文件信息的软件机构称为文件管理系统,简称文件系统;不带文件系统的SD卡仅能…...
Facebook商城号为什么被封?如何防封?
由于Facebook商城的高利润空间,越来越多的跨境电商商家注意到它的存在。Facebook作为全球最大、用户量最大的社媒平台,同时也孕育了一个巨大的商业生态,包括广告投放、商城交易等。依托背后的大流量,Facebook商城起号较快…...
【教程】APP备案全攻略:确保你的应用合规上线
【教程】APP备案全攻略:确保你的应用合规上线 摘要 本文详细介绍了中国大陆地区互联网信息服务提供者(AP)进行APP备案的流程、要求和注意事项。包括备案对象、备案方式、备案内容、备案流程等方面的详细说明,帮助开发者顺利完成…...
Vue入门2
v-model 原理:v-model本质上是一个语法糖。例如应用于输入框,就是value属性和input事件的合写。 作用:提供数据的双向绑定 数据变,视图跟着变 :value视图变,数据跟着变 input 注意:$event用于在模板中&…...
简介:CMMI软件能力成熟度集成模型
前言 CMMI是英文Capability Maturity Model Integration的缩写。 CMMI认证简称软件能力成熟度集成模型,是鉴定企业在开发流程化和质量管理上的国际通行标准,全球软件生产标准大都以此为基点,并都努力争取成为CMMI认证队伍中的一分子。 对一个…...
mysql的其他问题
1.MySQL数据库作发布系统的存储,一天五万条以上的增量,预计运维三年,怎么优化? a. 设计良好的数据库结构,允许部分数据冗余,尽量避免join查询,提高效率。 b. 选择合适的表字段数据类型和存储引擎…...
springboot 百货中心供应链管理系统小程序
一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,百货中心供应链管理系统被用户普遍使用,为方…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...
IGP(Interior Gateway Protocol,内部网关协议)
IGP(Interior Gateway Protocol,内部网关协议) 是一种用于在一个自治系统(AS)内部传递路由信息的路由协议,主要用于在一个组织或机构的内部网络中决定数据包的最佳路径。与用于自治系统之间通信的 EGP&…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
Spring Boot面试题精选汇总
🤟致敬读者 🟩感谢阅读🟦笑口常开🟪生日快乐⬛早点睡觉 📘博主相关 🟧博主信息🟨博客首页🟫专栏推荐🟥活动信息 文章目录 Spring Boot面试题精选汇总⚙️ **一、核心概…...
NFT模式:数字资产确权与链游经济系统构建
NFT模式:数字资产确权与链游经济系统构建 ——从技术架构到可持续生态的范式革命 一、确权技术革新:构建可信数字资产基石 1. 区块链底层架构的进化 跨链互操作协议:基于LayerZero协议实现以太坊、Solana等公链资产互通,通过零知…...
【Java学习笔记】BigInteger 和 BigDecimal 类
BigInteger 和 BigDecimal 类 二者共有的常见方法 方法功能add加subtract减multiply乘divide除 注意点:传参类型必须是类对象 一、BigInteger 1. 作用:适合保存比较大的整型数 2. 使用说明 创建BigInteger对象 传入字符串 3. 代码示例 import j…...
智能AI电话机器人系统的识别能力现状与发展水平
一、引言 随着人工智能技术的飞速发展,AI电话机器人系统已经从简单的自动应答工具演变为具备复杂交互能力的智能助手。这类系统结合了语音识别、自然语言处理、情感计算和机器学习等多项前沿技术,在客户服务、营销推广、信息查询等领域发挥着越来越重要…...
STM32HAL库USART源代码解析及应用
STM32HAL库USART源代码解析 前言STM32CubeIDE配置串口USART和UART的选择使用模式参数设置GPIO配置DMA配置中断配置硬件流控制使能生成代码解析和使用方法串口初始化__UART_HandleTypeDef结构体浅析HAL库代码实际使用方法使用轮询方式发送使用轮询方式接收使用中断方式发送使用中…...
