| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 网络协议 -> UVM学习整理——附录(部分组件源码) -> 正文阅读 |
|
[网络协议]UVM学习整理——附录(部分组件源码) |
目录 部分组件源码这些组件源码,除了uvm_driver、uvm_agent、uvm_subscriber中增补定义了部分变量,以提高代码的可重用性之外,其余组件源码的内容基本一致,不存在太大变化。 1.Driver和SequencerDriver和Sequencer之间的握手机制:Driver的seq_item_port和Sequencer的seq_item_export: uvm_driver的源代码:
uvm_sequencer的源代码:
Driver中的seq_item_port和Sequencer的seq_item_export的连接方式(和普通的TLM端口类似):
????????如果不想使用自带的成员变量,想加入改动,也可以由uvm_component来派生Driver等组件,然后自行定义uvm_seq_item_pull_port #(REQ, RSP)等类型的变量,名字可以不再是seq_item_port等,此外与Sequencer中的export的连接方式和上面相同。 1.Driver和Sequencer之间的通信方式属于TLM通信,传输的transaction应该是uvm_sequence_item或者其子类。UVM定义了专门的TLM端口供Driver和Sequencer使用: ????????uvm_seq_item_pull_port #(type REQ=uvm_sequence_item, type RSP=REQ) ????????uvm_seq_item_pull_export #(type REQ=uvm_sequence_item, type RSP=REQ) ????????uvm_seq_item_pull_imp #(type REQ=uvm_sequence_item, type RSP=REQ, type imp=) 2.由1可知这些端口默认传输的数据类型是uvm_sequence_item类型,如果在定义端口的时候没有声明用户所需的transaction类型,那么会有一个潜在的类型转换,会将transaction转换为uvm_sequence_item类型,这种情况下Driver从Sequencer中的FIFO中get到的req也是uvm_sequence_item,需要进行动态类型转换,转换成用户所需的transaction类型,才能获得里面的成员数据。 如果在Driver派生自uvm_driver的定义和Sequencer派生自uvm_sequencer的定义时就指明了用户定义的transaction类型(Sequence中也是如此),那么就不需要二次转换。 ????????uvm_sequencer #(type REQ=uvm_sequence_item,RSP=REQ) ????????uvm_driver #(type REQ=uvm_sequence_item,RSP=REQ) 3.Driver和Sequencer之间的连接和对应关系就体现在两个TLM端口的connect上。多个Driver不能和一个Sequencer连接,多个Sequencer也不能和一个Driver连接,也就是说Driver和Sequencer是一对一的关系。实际上是一个seq_item_port只会connect一个seq_item_export,我们可以在一个Driver中(当然不能是派生自uvm_driver的Driver,自定义的)定义多个uvm_seq_item_pull_port,用来连接多个Sequencer,一个uvm_seq_item_pull_port与一个Sequencer的uvm_seq_item_pull_imp连接。 4.uvm_seq_item_pull_*类型的TLM端口含有许多特殊的可调用方法,Driver可以使用这些方法来从Sequencer的FIFO中得到transaction,告知transaction使用完毕,也可以将处理完的transaction返回给Sequence。 Driver中uvm_seq_item_pull_*内含的多种方法实现sequence->sequencer->driver的数据传输以及driver->sequence的反馈机制:
sk put(input RSP rsp_arg):采取blocking方式将response发送回sequence。 2.uvm_monitoruvm_monitor源码:几乎没有做任何扩充。 3.uvm_sequencer组织管理sequence。比uvm_component做了相当多的扩展。 4.uvm_scoreboard与uvm_component比也没什么扩展。 5.uvm_agent如果不考虑重用性,可有可无,最大改动多了个is_active。 6.uvm_env也没做太多扩展。 7.uvm_test任何从uvm_test派生的都要例化env,只有这样,在测试用例运行的时候,才能把数据正确发给DUT。也没怎么扩展。 |
|
网络协议 最新文章 |
使用Easyswoole 搭建简单的Websoket服务 |
常见的数据通信方式有哪些? |
Openssl 1024bit RSA算法---公私钥获取和处 |
HTTPS协议的密钥交换流程 |
《小白WEB安全入门》03. 漏洞篇 |
HttpRunner4.x 安装与使用 |
2021-07-04 |
手写RPC学习笔记 |
K8S高可用版本部署 |
mySQL计算IP地址范围 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 | -2024/11/26 9:29:36- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |