UVM的各种port(六)
2017-03-06 00:19
288 查看
TLM:transaction Level Modeling
UVM中常见的port:
前6个定义参数就是port中的数据流类型,而后3个定义中参数则表示(request-response)中发起请求时传输的数据类型和返回的数据类型。
Export:
前6个定义参数就是port中的数据流类型,而后3个定义中参数则表示(request-response)中发起请求时传输的数据类型和返回的数据类型。
IMP:
在前6个IMP传输的数据类型中,第一个T表示IMP传输的数据类型。
传输表示方法:
UVM中各种port的连接
1、 使用connect建立连接关系
A.connect(B);
2、port与IMP连接
在这三种端口中,port是最高优先级,IMP是最低优先级。
现在要把A中的PORT和B中的IMP连接起来,如图:
则在A中需要这样定义:
则在B中的定义为:
B中的IMP中有两个参数,第一个参数是将要传输的transaction,第二个参数是实现接口的uvm_component。
当A和B中定义好后,则需要在C中将A_port和B_port连接起来。
Export与IMP的连接和port与IMP连接完全一样。
UVM中的analysis port和analysis export
他们与port和export的区别:
1、 默认情况下,analysis port(analysis export)可以连接多个IMP,也就是说analysis port(analysis export)是一对多的通信,而port和export是一对一通信。
2、 Port和export对应于有三种操作(get、put、transport_port),而analysis port(analysis export)则对应于一种操作write。Write的意思是广播一下,剩下的事情就与其他无关。
3、 Port和export都有阻塞和非阻塞的区分。对于analysis port(analysis export)来说没有相应的概念。
用analysis port实现monitor和scoreboard的通信
在monitor中,我们定义如下:
Class monitor extends uvm_monitor;
Uvm_analysis_port#(mac_transaction) ap;
Task main_phase(uvm_phase phase);
Super.main_phase(phase);
Mac_transaction tr;
……
Ap.write(tr);
….
Endtask
Endclass
在scoreboard中,我们需要定义write的task,
Class scoreboard extends uvm_scoreboard;
Uvm_analysis_imp#(mac_transaction,scoreboard) scb_imp;
Task write (mac_transaction tr);
//do something on tr
Endtask
Endclass
在agent中,定义analysis port,并把其指向monitor的ap;
Class agent extends uvm_agent;
Uvm_analysis_port#(mac_transaction) ap;
……
Function void connect_phase(uvm_phase phase);
Super.connect(phase);
This.ap = monitor.ap;
Endfunction
Endclass
在env中的定于:
Function void env::connect_phase(uvm_phase);
Super.connect(phase);
Agent.ap.connect(scoreboard.scb_imp);
Endfunction
当存在多个uvm_analysis_imp的情况
Scoreboard要接收monitor和model的数据,则需要如下定义:
Class scoreboard extends uvm_scoreboard;
Uvm_analysis_imp_monitor#(mac_transaction,scoreboard) monitor_imp;
Task write_monitor(mac_transaction tr);
//do something on tr
Endtask
Task write_model(mac_transaction tr);
//do something on tr
Endtask
Endclass
通过宏uvm_analysis_imp_decl,声明了两个后缀_monitor和_model,uvm会根据这两个后缀内建两个新的imp
用fifo实现monitor和scoreboard的通信
在scoreboard中定义:
在env里面的定义:
UVM中常见的port:
前6个定义参数就是port中的数据流类型,而后3个定义中参数则表示(request-response)中发起请求时传输的数据类型和返回的数据类型。
Export:
前6个定义参数就是port中的数据流类型,而后3个定义中参数则表示(request-response)中发起请求时传输的数据类型和返回的数据类型。
IMP:
在前6个IMP传输的数据类型中,第一个T表示IMP传输的数据类型。
传输表示方法:
UVM中各种port的连接
1、 使用connect建立连接关系
A.connect(B);
2、port与IMP连接
在这三种端口中,port是最高优先级,IMP是最低优先级。
现在要把A中的PORT和B中的IMP连接起来,如图:
则在A中需要这样定义:
则在B中的定义为:
B中的IMP中有两个参数,第一个参数是将要传输的transaction,第二个参数是实现接口的uvm_component。
当A和B中定义好后,则需要在C中将A_port和B_port连接起来。
Export与IMP的连接和port与IMP连接完全一样。
UVM中的analysis port和analysis export
他们与port和export的区别:
1、 默认情况下,analysis port(analysis export)可以连接多个IMP,也就是说analysis port(analysis export)是一对多的通信,而port和export是一对一通信。
2、 Port和export对应于有三种操作(get、put、transport_port),而analysis port(analysis export)则对应于一种操作write。Write的意思是广播一下,剩下的事情就与其他无关。
3、 Port和export都有阻塞和非阻塞的区分。对于analysis port(analysis export)来说没有相应的概念。
用analysis port实现monitor和scoreboard的通信
在monitor中,我们定义如下:
Class monitor extends uvm_monitor;
Uvm_analysis_port#(mac_transaction) ap;
Task main_phase(uvm_phase phase);
Super.main_phase(phase);
Mac_transaction tr;
……
Ap.write(tr);
….
Endtask
Endclass
在scoreboard中,我们需要定义write的task,
Class scoreboard extends uvm_scoreboard;
Uvm_analysis_imp#(mac_transaction,scoreboard) scb_imp;
Task write (mac_transaction tr);
//do something on tr
Endtask
Endclass
在agent中,定义analysis port,并把其指向monitor的ap;
Class agent extends uvm_agent;
Uvm_analysis_port#(mac_transaction) ap;
……
Function void connect_phase(uvm_phase phase);
Super.connect(phase);
This.ap = monitor.ap;
Endfunction
Endclass
在env中的定于:
Function void env::connect_phase(uvm_phase);
Super.connect(phase);
Agent.ap.connect(scoreboard.scb_imp);
Endfunction
当存在多个uvm_analysis_imp的情况
Scoreboard要接收monitor和model的数据,则需要如下定义:
uvm_analysis_imp_decl(_monitor)uvm_analysis_imp_decl(_model)
Class scoreboard extends uvm_scoreboard;
Uvm_analysis_imp_monitor#(mac_transaction,scoreboard) monitor_imp;
Task write_monitor(mac_transaction tr);
//do something on tr
Endtask
Task write_model(mac_transaction tr);
//do something on tr
Endtask
Endclass
通过宏uvm_analysis_imp_decl,声明了两个后缀_monitor和_model,uvm会根据这两个后缀内建两个新的imp
用fifo实现monitor和scoreboard的通信
在scoreboard中定义:
在env里面的定义:
相关文章推荐
- tlm源码分析——uvm**port/export/imp class的实现
- uvm_port_base——TLM1事务级建模方法(五)
- uvm_analysis_port——TLM1事务级建模方法(二)
- UVM基础之------uvm_port_base
- Illegal assignment to type String from class mtiUvm.uvm_pkg::uvm_analysis_port #()
- 流动python - 写port扫描仪和各种并发尝试(多线程/多进程/gevent/futures)
- marathon各种Port
- [转]针对各种浏览器的CSS Hack
- 各种SQL驱动的配置方式
- Linux下--各种工具安装--JDK,Eclipse,Tomcat/Apache,Mysql
- gcc编译器各种warning 解决方式
- Android学习笔记_42_各种图形的炫酷效果的实现和使用
- Unused port adds a PWM/analog channel to a microcontroller
- Android 项目中各种小技巧
- css3实现小箭头,各种图形
- 各种问题解决
- 各种排序
- NET中各种数据库连接大全
- 各种好用的书
- 利用GZIP压缩网页(Tomcat,apache,iis)各种方法总结