接着上一篇博客,正式开始进行System Verilog验证环境的搭建。依据MCDF的结构图,依次进行MCDF功能模块的验证。代码设计时我们将每一个功能模块里的验证内容都放在一个package中,提高代码的可读性。
- arb_pkg
由于Arbiter模块并没有与外部信号进行交互,其内部信号都已经划分至其余功能模块内,这里暂时先不对此模块进行验证,只会在测试案例中添加一些通道优先级的测试。 - chnl_pkg
channel模块的功能是向三个通道发送数据。
package chnl_pkg;
class chnl_trans;
constraint cstr{
};
//-------------------------------------------------
fuction chnl_trans clone();
endfunction
fuction string sprint();
endfunction
endcalss
class chnl_driver;
local string name;
local virtual chnl_intf intf;
mailbox#(chnl_trans)req_mb;
mailbox#(chnl_trans)rsq_mb;
//-------------------------------------------------
function new(string name = "");
endfunction
fuction viod set_interface(virtual chnl_inft intf)
endfunction
//-------------------------------------------------
task tun();
this.do_driver(();
endtask
class chnl_gennerator;
mailbox#(chnl_trans)req_mb;
mailbox#(chnl_trans)rsq_mb;
constraint cstr{
};
//-------------------------------------------------
function new(string name = "");
endfunction
task start();
repeat(ntrans) send_trans();
class chnl_monitor;
local string name;
local virtual chnl_intf intf;
mailbox#(mon_data_t)mon_mb;
//-------------------------------------------------
function new(string name = "");
endfunction
fuction viod set_interface(virtual chnl_inft intf)
endfunction
//-------------------------------------------------
task tun();
this.mon_trans();
endtask
class chnl_agent;
local string name;
chnl_driver driver;
chnl_monitor monitor;
local virtual chnl_intf intf;
//-------------------------------------------------
function new(string name = "");
endfunction
fuction viod set_interface(virtual chnl_inft intf)
endfunction
//-------------------------------------------------
task tun();
fork
driver.run();
monitor.run();
jion
endtask
endpackage
- fmt_pkg
formater模块的功能是模拟一个与设计相符的buffer。
package fmt_pkg;
class fmt_trans;
class fmt_driver;
class fmt_gennerator;
class fmt_monitor;
class fmt_agent;
endpackage
- reg_pkg
reg模块的功能是向寄存器发送读写数据。
package reg_pkg;
class reg_trans;
class reg_driver;
class reg_gennerator;
class reg_monitor;
class reg_agent;
endpackage
- rpt_pkg
report模块的功能是提供一些打印消息的函数,若使用UVM则无须此模块。 - mcdf_pkg
mcdf模块是验证环境的顶层模块,包括env的搭建与测试案例的编写。
package mcdf_pkg;
class mcdf_refmod;
local string name;
local virtual mcdf_intf intf