【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. 选择合适的表字段数据类型和存储引擎…...

接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...

以下是对华为 HarmonyOS NETX 5属性动画(ArkTS)文档的结构化整理,通过层级标题、表格和代码块提升可读性:
一、属性动画概述NETX 作用:实现组件通用属性的渐变过渡效果,提升用户体验。支持属性:width、height、backgroundColor、opacity、scale、rotate、translate等。注意事项: 布局类属性(如宽高)变化时&#…...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器
——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的一体化测试平台,覆盖应用全生命周期测试需求,主要提供五大核心能力: 测试类型检测目标关键指标功能体验基…...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个生活电费的缴纳和查询小程序
一、项目初始化与配置 1. 创建项目 ohpm init harmony/utility-payment-app 2. 配置权限 // module.json5 {"requestPermissions": [{"name": "ohos.permission.INTERNET"},{"name": "ohos.permission.GET_NETWORK_INFO"…...
【RockeMQ】第2节|RocketMQ快速实战以及核⼼概念详解(二)
升级Dledger高可用集群 一、主从架构的不足与Dledger的定位 主从架构缺陷 数据备份依赖Slave节点,但无自动故障转移能力,Master宕机后需人工切换,期间消息可能无法读取。Slave仅存储数据,无法主动升级为Master响应请求ÿ…...

Redis数据倾斜问题解决
Redis 数据倾斜问题解析与解决方案 什么是 Redis 数据倾斜 Redis 数据倾斜指的是在 Redis 集群中,部分节点存储的数据量或访问量远高于其他节点,导致这些节点负载过高,影响整体性能。 数据倾斜的主要表现 部分节点内存使用率远高于其他节…...
Rapidio门铃消息FIFO溢出机制
关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系,以下是深入解析: 门铃FIFO溢出的本质 在RapidIO系统中,门铃消息FIFO是硬件控制器内部的缓冲区,用于临时存储接收到的门铃消息(Doorbell Message)。…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...