// Function: get_transaction_id // // Returns this transaction's numeric identifier, which is -1 if not set // explicitly by ~set_transaction_id~. // // When using a <uvm_sequence #(REQ,RSP)> to generate stimulus, the transaction // ID is used along with the sequence ID to rout...
function void uvm_transaction::do_copy (uvm_object rhs);//做一些copy,把各个内部变量做copy function void uvm_transaction::do_record (uvm_recorder recorder);//记录initiator和accept time 9.function void uvm_transaction::enable_recording (string stream, uvm_recorder recorder=null);//根据stream生产st...
sequence负责发送各种transaction, 至于是哪一个sequencer接收,由transaction中的成员变量m_sequencer决定。 实现发送者与接收者的解耦。设计模式侧重应用场景,transaction仅仅是事务,不具备命令的实现行为,所以UVM的实现并不完全符合命令模式。 UVM中的sequencer更像一个仲裁者,一边是driver不断请求transaction,一边根据priority...
为了方便调试和追踪transaction,uvm_transaction基类提供了get_transaction_id()成员方法来根据ID进行追踪。此外由于uvm_sequence_item是从uvm_transaction继承而来的,因此也可以使用这个方法。 举个简单的例子: classsimple_itemextendsuvm_sequence_item;randintunsignedaddr;randintunsigneddata;randintunsigneddelay;constraintc1...
那么这两个参数也是需要封装到 transaction 中去的,但是这两个参数在driver 加载给 DUT是就被剥离了。UVM 如何做到这一点?//———---NO_PACKAGE_DATA———-rand int eth_pkt_length;//eth 帧的长度rand int eth_pkt_speed;//eth 帧业务速率rand byte unsigned dest_id;rand byte unsigned source_id...
建议读者在通过 clone()命令创建 RSP 对象后, 通过 set_ sequence _id()和 set_transaction _id()两个函数保证REQ和 RSP 的中保留的ID 信息一致。 MCDF寄存器模块代码 下面给出实现后的 MCDF 寄存器 RTL 设计代码: 上面的设计中采用宏替代一些寄存器的序列号和地址, 在稍后的寄存器模型映射硬件寄存器路径上也使...
建议读者在通过clone()命令创建RSP对象后,通过set_sequence_id()和set_transaction_id()两个函数保证REQ和RSP的中保留的ID信息一致。
如果transaction_id为-1,也就是用户没有指定要得到特定transaction_id的response时,get_base_response会默认返回response_queue里的第一个response,类似于FIFO。如果transaction_id不为-1,那么get_base_response会在response_queue里检索,直到找到1个匹配对应transaction_id的response为止。
classitransextendsuvm_transaction;int id;int data;...endclassclassotransextendsuvm_transaction;int id;int data;...endclassclasscomp1extendsuvm_component;uvm_blocking_put_port #(itrans)bp_port;//blocking putuvm_nonblocking_get_port #(otrans)nbg_port;//nonblocking get`uvm_component_utils(comp1)...
get_base_response( rsp, transaction_id); $cast(response,rsp); endtask 1. 2. 3. 4. 5. get_base_response(xxx)方法的代码如下: 从以上代码可以看出,get_reponse(xxx)就是从response_queue队列里拿数据,response_queue里的数据是put_response在没有使能response_handler机制情况下放进去的。因此用户要注意...