uvm_driver负责将seq产生的transaction发送到interface;
可能需要将interface的信号发回seq来控制其行为;
可能需要根据reset信号控制transaction发送;
可能需要控制其他握手信号。
构建基本框架如下:
//run_phase or main_phase
foever begin
wait(rstn==1);
fork
foever begin//发送item的线程
seq_item_port.get(req)
//maybe do something…
fifo.push_back(req);
vif.drive_item(ireq);
if(process_responce ==1)begin
@(responce)
//处理返回信号
seq_item_port.item_done(response_item);
end
end
forever begin
//监测interface 返回信号
->response;
end
forever begin
vif.drive_ready_signal(); //drive 握手signal
end
begin//处理reset信号线程
wait(rst==assert);
vif.reset();
end
join_any //使用join_any,当reset assert时,disable掉所有子线程
disable fork
wait(rst==deassert); //等待rst deassert。
//clean fifo here
//reset counter here
end
大循环,包含几个并行执行的循环。