| |
Connect/AbstractConcrete
Abstract/Concrete Class approach to DUT-TB communication
不使用虚拟接口的基于句柄的DUT-TB通信方法在UVM行业中被称为抽象/具体类方法。还有一种使用的方法,在Mentor Graphics中称为Two Kingdoms。
与使用虚拟接口一样,这种方法可以为测试平台中的事务传输器而设置,目的是与DUT的引脚通信,与总线功能模型(BFM)通信,此BFM将transactions驱动到DUT上,或者使用SystemVerilog bind construct来驱动DUT的内部信号。
虚拟接口是DUT-TB通信的推荐方法。只有在无法使用虚拟接口时才应考虑抽象/具体类方法,或者在传统BFM无法修改为接口的情况下作为辅助方法。
本文中的讨论将仅关注使用BFM的抽象/具体类方法。
Example BFM
下图显示了WISHBONE总线的BFM,将在此处的示例中使用。wishbone bus BFM连接到WISHBONE总线,具有WISHBONE总线仲裁,时钟,复位等逻辑以及生成WISHBONE总线事务(读,写等)的tasks。
【此处需一幅图】
这是来自BFM的代码。 可以使用稍后显示的其他示例代码下载完整代码。
module wishbone_bus_syscon_bfm #(int num_masters = 8, int num_slaves = 8,
int data_width = 32, int addr_width = 32)
(
// WISHBONE common signals
output logic clk,
output logic rst,
...
);
// WISHBONE bus arbitration logic
...
//Slave address decode
...
// BFM tasks
//WRITE 1 or more write cycles
task wb_write_cycle(wb_txn req_txn, bit [2:0] m_id = 1);
...
endtask
//READ 1 or more cycles
task wb_read_cycle(wb_txn req_txn, bit [2:0] m_id = 1, output wb_txn rsp_txn);
...
endtask
// Monitor bus transactions
task monitor(output wb_txn txn);
...
endtask
endmodule