Use an SQR to call DataMover to Export then call a

本文提供了一段SQR代码示例,演示如何使用DataMover进行数据导出,执行一些处理操作,并在SQR内部调用另一个SQR程序可能用于加载数据。这是一个很好的SQR编程示例。
Below is a sample piece of SQR code which you can use to call Datamover to export data perform some processing, and call another SQR within that SQR to posibly load the data. It's a good sample!

 

!************
Begin-Program
!************

do Init-Report
call system using 'r:\hr700\bin\client\winx86\psdmt.exe -CT MICROSFT
-CS servername -CD databasename -CO user -CP password -CI user -CW
password -FP c:\temp\ccc_pers_data_export.dms' #status1
show 'DataMover Export Status: ' #status1
do Process-Main
call system using 'c:\winnt\system32\cmd.exe /c start /wait
r:\hr700\sqrbinw\sqrw.exe c:\temp\Interface.sqr
databasename/user/password -ir:\hr700\sqr\' #status2
show 'Interface status: ' #status2
do StdAPI-Term

!************
End-Program
!************

转载于:https://www.cnblogs.com/GoDevil/archive/2009/01/09/1372668.html

手机扫码点餐功能:用户可以通过扫描二维码或者搜索菜品名称,选择菜品并下单。 多人在线同时点餐:当多人同时点餐时可以实时同步共享以点菜单,共享购物车。 商户前台点餐功能:商户管理端也有点餐功能,商户可以帮助顾客点餐,而并不是只能顾客扫码点餐。 餐桌状态实时监控:餐桌的使用情况可以实时的展示出来,无需手动刷新, 同时也方便顾客查看餐桌的使用情况,快速寻找可用餐桌。 菜品管理:商户可以在管理端对店铺中的菜品进行管理,例如可以对菜品进行增加、修改和删除等功能。 菜品分类管理:设置菜品包含的分类,商户点餐端可以根据分类快速查找商品,同时顾客点餐端也会根据菜品分类展示菜品。 桌号管理:商户可以对店铺中的就餐桌进行编号,并录入到系统中,就可以通过系统对餐桌进行管理。 区域管理:对餐桌的分布位置进行管理,使商户更加方便的进行管理。 生成餐桌二维码:商户可以针对某一桌号生成当前餐桌的二维码,用户扫描后就可以针对当前餐桌进行点餐。 店铺数据统计:餐厅可以通过扫码点餐系统统计订单数据,包括销售额、菜品销量等。 店铺设置:商户可以设置店铺的一些展示信息,例如店名、介绍、公告等信息。这些信息同时会展示在顾客点餐端。 小票打印机管理:商户可以绑定小票打印机,当有订单时就会自动打印当前订单的一些信息。
<think> 我们正在讨论的是UVM验证平台中driver和sequencer之间的连接代码: 代码:`drv.seq_item_port.connect(sqr.seq_item_export)` 根据引用[1]和引用[2]的内容,我们来详细解释: ### 1. **代码含义** - **目的**:建立driver与sequencer之间的TLM通信通道 - **组件角色**: - `drv`:uvm_driver的实例,负责驱动事务到DUT - `sqr`:uvm_sequencer的实例,负责管理sequence产生的事务流 - **端口定义**: - `seq_item_port`:driver中的`uvm_seq_item_pull_port`端口(请求端口) - `seq_item_export`:sequencer中的`uvm_seq_item_pull_export`端口(提供端口) - **连接效果**:建立driver主动拉取事务的通道 ```mermaid graph LR drv[Driver] -- seq_item_port --> sqr[Sequencer] sqr -- seq_item_export --> drv ``` ### 2. **使用方法** #### (1) 标准连接位置 在agent的`connect_phase`中执行连接: ```systemverilog class my_agent extends uvm_agent; my_driver drv; my_sequencer sqr; virtual function void connect_phase(uvm_phase phase); super.connect_phase(phase); // 关键连接代码 drv.seq_item_port.connect(sqr.seq_item_export); endfunction endclass ``` #### (2) 工作原理时序 ```mermaid sequenceDiagram driver->>sequencer: get_next_item() sequencer->>sequence: 调用body()生成事务 sequence->>sequencer: 返回事务对象 sequencer->>driver: 传递事务对象 driver->>sequencer: item_done() 结束握手 ``` ### 3. **常见问题与解决方案** | 问题现象 | 根本原因 | 解决方案 | |---------|---------|---------| | **运行时错误:端口未连接** | agent中忘记调用`connect()` | 检查agent的`connect_phase`是否包含连接代码[^1] | | **事务传输卡死** | sequencer未设置默认sequence | 在test中设置:<br>`uvm_config_db#(uvm_object_wrapper)::set(this, "env.agt.sqr.main_phase", "default_sequence", my_sequence::type_id::get());` | | **多driver竞争** | 多个driver连接同一个sequencer | 每个driver应连接独立sequencer | | **协议不匹配** | sequencer与driver事务类型不一致 | 确保两者使用相同的REQ/RSP类型:<br>`class my_driver extends uvm_driver #(my_transaction);`<br>`class my_sequencer extends uvm_sequencer #(my_transaction);` | ### 4. **高级应用** #### (1) 响应路径连接 若需要返回响应(RSP),需额外连接: ```systemverilog // 在agent中 drv.rsp_port.connect(sqr.rsp_export); ``` #### (2) 虚拟sequencer配置 在系统级验证中连接虚拟sequencer: ```systemverilog // 在env的connect_phase virt_sqr.eth_sqr = eth_agent.sqr; virt_sqr.pcie_sqr = pcie_agent.sqr; ``` ### 5. **调试技巧** - 启用UVM端口调试信息: ```systemverilog +UVM_PHASE_TRACE +UVM_OBJECTION_TRACE ``` - 在连接失败时检查层次路径: ```systemverilog uvm_top.print_topology(); // 打印组件层次 ``` §§相关问题§§ 1. UVM中如何实现多个driver共享同一个sequencer? 2. 为什么在`connect_phase`执行端口连接而不是`build_phase`? 3. `uvm_seq_item_pull_port`和`uvm_blocking_get_port`有何区别? 4. 如何处理driver和sequencer之间的事务类型不匹配错误? </think> ### 代码解析:`drv.seq_item_port.connect(sqr.seq_item_export)` #### 1. **代码含义** ```systemverilog drv.seq_item_port.connect(sqr.seq_item_export); ``` - **目的**:建立driver与sequencer之间的TLM通信通道 - **组件角色**: - `drv`:UVM driver实例(事务驱动者) - `sqr`:UVM sequencer实例(事务生成者) - **端口类型**: - `seq_item_port`:driver的请求端口(`uvm_seq_item_pull_port`) - `seq_item_export`:sequencer的提供端口(`uvm_seq_item_pull_export`) - **连接效果**:创建driver主动拉取事务的通道 ```mermaid graph LR drv[Driver] -- seq_item_port --> sqr[Sequencer] sqr -- seq_item_export --> drv ``` #### 2. **使用场景与方法** ##### 标准连接位置 在agent的`connect_phase`执行: ```systemverilog class my_agent extends uvm_agent; my_driver drv; my_sequencer sqr; virtual function void connect_phase(uvm_phase phase); super.connect_phase(phase); // 关键连接代码 drv.seq_item_port.connect(sqr.seq_item_export); // [^1] endfunction endclass ``` ##### 工作流程时序 ```mermaid sequenceDiagram driver->>sequencer: get_next_item() sequencer->>sequence: 调用body()生成事务 sequence->>sequencer: 返回事务对象 sequencer->>driver: 传递事务对象 driver->>sequencer: item_done() 结束握手 ``` #### 3. **常见问题与解决方案** | 问题现象 | 根本原因 | 解决方案 | |---------|---------|---------| | **运行时错误:端口未连接** | agent中忘记调用`connect()` | 检查agent的`connect_phase`是否包含连接代码[^1] | | **事务传输卡死** | sequencer未设置default_sequence | 在test中配置:<br>`uvm_config_db#(uvm_object_wrapper)::set(this, "env.agt.sqr.main_phase", "default_sequence", my_sequence::type_id::get());` | | **多driver竞争** | 多个driver连接同一个sequencer | 为每个driver分配独立sequencer | | **协议不匹配** | sequencer与driver事务类型不一致 | 确保模板参数一致:<br>`class my_driver extends uvm_driver #(my_trans);`<br>`class my_sequencer extends uvm_sequencer #(my_trans);` | #### 4. **调试技巧** - 启用UVM端口调试: ```systemverilog +UVM_PHASE_TRACE +UVM_OBJECTION_TRACE ``` - 连接失败时检查层次路径: ```systemverilog uvm_top.print_topology(); // 打印组件拓扑 ``` #### 5. **高级应用** ##### 响应路径连接 如需返回响应(RSP),需额外连接: ```systemverilog drv.rsp_port.connect(sqr.rsp_export); ``` ##### 虚拟sequencer配置 系统级验证时连接虚拟sequencer: ```systemverilog // 在env的connect_phase virt_sqr.eth_sqr = eth_agent.sqr; virt_sqr.pcie_sqr = pcie_agent.sqr; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值