EDA/IC设计
提高验证生产力的关键之一就是在合适的抽象层次思考问题和完成验证工作,为此UVM提供了 事务级别(transaction level) 的通信接口 (Transaction-Level Modeling,TLM) 。
在UVM中,Transactions建模了两个组件之间通信所需的信息(变量、约束等等)。下面是一个简单的总线协议事务示例:
class simple_trans extends uvm_transaction;
rand data_t data;
rand addr_t addr;
rand enum {WRITE,READ} kind;
constraint c1 { addr < 16’h2000; }
...
endclass
有了Transactions之后,还需要定义操作Transactions的接口。
TLM **port **发起Transactions操作,TLM export提供这些操作Transactions方法的具体实现
Basic TLM Communication(put操作)
最基本的事务级别操作是一个 组件(component) 将事务put给另一个组件(component)。
producer上的方框表示port,consumer上的圆圈表示export。
producer组件代码如下
class producer extends uvm_component;
uvm_blocking_put_port #(simple_trans) put_port; // 1 parameter
function new( string name, uvm_component parent);
put_port = new(“put_port”, this);
...
endfunction
virtual task run();
simple_trans t;
for(int i = 0; i < N; i++) begin
// Generate t.
put_port.put(t);
end
endtask
endclass
producer组件首先定义了 uvm_blocking_put_port ,指定参数化事务为simple_trans。然后在run()函数内发起put操作。
consumer组件代码如下
class consumer extends uvm_component;
uvm_blocking_put_imp #(simple_trans, consumer) put_export; // 2 parameters
...
task put(simple_trans t);
case(t.kind)
READ: // Do read.
WRITE: // Do write.
endcase
endtask
endclass
consumer组件首先定义了uvm_blocking_put_imp,指定参数化事务为simple_trans,同时指定put函数的具体实现组件。put()函数的具体实现是在consumer内完成的。
Basic TLM Communication(get操作)
get事务级操作和put类似,
get_consumer上的方框表示port,get_producer上的圆圈表示export。
由get_consumer这个port处定义uvm_blocking_get_port,指定事务类型,发起get操作。
class get_consumer extends uvm_component;
uvm_blocking_get_port #(simple_trans) get_port;
function new( string name, uvm_component parent);
get_port = new(“get_port”, this);
...
endfunction
virtual task run();
simple_trans t;
for(int i = 0; i < N; i++) begin
// Generate t.
get_port.get(t);
end
endtask
endclass
然后在export处完成get操作的具体实现
class get_producer extends uvm_component;
uvm_blocking_get_imp #(simple_trans, get_producer) get_export;
...
task get(output simple_trans t);
simple_trans tmp = new();
// Assign values to tmp.
t = tmp;
endtask
endclass
全部0条评论
快来发表一下你的评论吧 !