当前位置:网站首页>MCDF top level verification scheme
MCDF top level verification scheme
2022-07-27 08:26:00 【Bunny9__】
MCDF Top level verification scheme
1. summary
Multichannel data shaper (MCDF,multi-channel data formatter), You can move up (uplink) Multiple channel data passes through the internal FIFO, Finally, the data package (data packet) Send out in the form of .
2. reg_env
- For the verification environment of register module reg_env, Include
- reg_master_agent, Provide register interface drive signal
- reg_slave_agent, Provide register interface feedback signal
- scoreblard, Respectively from the reg_master_agent Internal monitor and reg_slave_agent Internal monitor Obtain monitoring data , And compare the data

3. chnl_env
- Verification environment of data channel slave chnl_env The components of include :
- chnl_master_agent, Provide uplink incentive data
- chnl_slave_agent, Provide to simulate arbiter Arbitration signal , And receive outgoing data
- reg_cfg_agent, Provide configuration signals for analog registers , And receive built-in FIFO Margin signal
- scoreboard, Respectively from the chnl_master_agent、chnl_slave_agent and reg_cfg_agent Of monitor Receive monitoring data , And right channel The inflow and outflow data of

4. arb_env
- Verification environment of arbiter arb_env The components of include :
- simulation channel Output interface arbiter_master_agent Three examples of , Used to correct arbiter Provide parallel data input , At the same time arbiter The feedback arbitration signal makes corresponding
- arbiter_slave_aent, For reception arbiter Output data of , simulation formatter act , Yes arbiter The output signal makes corresponding
- reg_cfg_agent, Provide configuration signals for analog registers , To three channel Data sources make different priority configurations
- scoreboard, From three arbiter_master_agent、arbiter_slave_agent and reg_cfg_agent Medium monitor Obtain monitoring data , Yes arbiter The arbitration mechanism to make a pre judgment , And the input and output data are compared according to the priority of prediction

5. fmt_env
- Verification environment of shaper fmt_env The components of include :
- fmt_master_agent, To simulate arbiter Output data of
- fmt_slave_agent, To simulate MCDF Downlink data receiving end
- ref_cfg_agent, Used to simulate the configuration signal of the register , Used to specify the length of the output packet
- scoreboard, from fmt_master_agent、fmt_slave_agemt and reg_cfg_agemt Of monitor Obtain monitoring data , Predict the output packets by packet length , And formatter Compare the output packets

6. Environment integration scheme 1

- Reuse the components of the module validation environment ,reg_master_agent、chnl_master_agent、fmt_slave_agent
- scoreboard It provides a complete data path coverage scheme , That is, from each agent Of monitor The data monitoring port collects data , At the same time establish MCDF Reference model of , Predicted output packets , Finally, compare the data
- virtual sequencer Control how incentives are sent , Coordination
class mcdf_env1 extends uvm_env;
`uvm_component_utils(mcdf_env1)
reg_master_agent reg_mst;
chnl_master_agent chnl_mst1;
chnl_master_agent chnl_mst2;
chnl_master_agent chnl_mst3;
fmt_slave_agent fmt_slv;
mcdf_virtual_sequencer virt_sqr;
mcdf_scoreboard sb;
...
function void build_phase(uvm_phase phase);
super.build_phase(phase);
reg_mst = reg_master_agent::type_id::create("reg_mst", this); // establish 5 individual agent
chnl_mst1 = chnl_master_agent::type_id::create("chnl_mst1", this);
chnl_mst2 = chnl_master_agent::type_id::create("chnl_mst2", this);
chnl_mst3 = chnl_master_agent::type_id::create("chnl_mst3", this);
fmt_slv = fmt_slave_agent::type_id::create("fmt_slv", this);
virt_sqr = mcdf_virtual_sequencer::type_id::create("virt_sqr", this);
sb = mcdf_scoreboard::type_id::create("sb", this);
endfunction
function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
//virtual sequencer connect
virt_sqr.reg_sqr = reg_mst.sequencer; // vsqr And 5 individual agent Medium sqr Handle connection
virt_sqr.chnl_sqr1 = chnl_mst1.sequencer;
virt_sqr.chnl_sqr2 = chnl_mst2.sequencer;
virt_sqr.chnl_sqr3 = chnl_mst3.sequencer;
virt_sqr.fmt_sqr = fmt_slv.sequencer;
//monitor transactions to scoreboard
reg_mst.monitor.ap.connect(sb.reg_export); // TLM Communication establish connection
chnl_mst1.monitor.ap.connect(sb.chnl1_export);
chnl_mst2.monitor.ap.connect(sb.chnl2_export);
chnl_mst3.monitor.ap.connect(sb.chnl3_export);
fmt_slv.monitor.ap.connect(sb.fmt_export);
endfunction
endclass
7. Environment integration scheme II

- Option two Reuse the module environment xxx.env, Intuitively, there are many components
- You only need to integrate agent To configure (build Stage ) For different modes (passive or active), Reduce the additional cost of the top-level environment
- There is no need to implement new scoreboard
- Both schemes need new implementation virtual sequencer and virtual sequence, Used to generate the top-level test sequence
class mcdf_env1 extends uvm_env;
`uvm_component_utils(mcdf_env1)
reg_env reg_e; // Reuse environment
chnl_env chnl_e1;
chnl_env chnl_e2;
chnl_env chnl_e3;
fmt_env fmt_e;
arb_env arb_e;
mcdf_virtual_sequencer virt_sqr;
function void build_phase(uvm_phase phase);
super.build_phase(phase);
// Configure the sub environment as active or passive Pattern
uvm_config_db#(int)::set(this, "reg_e.slave", "is_active", UVM_PASSIVE); // Configure before creating
uvm_config_db#(int)::set(this, "chnl_e1.slave", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "chnl_e1.reg_cfg", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "chnl_e2.slave", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "chnl_e2.reg_cfg", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "chnl_e3.slave", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "chnl_e3.reg_cfg", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "arb_e.master1", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "arb_e.master2", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "arb_e.master3", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "arb_e.slave", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "arb_e.reg_cfg", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "fmt_e.master", "is_active", UVM_PASSIVE);
uvm_config_db#(int)::set(this, "fmt_e.reg_cfg", "is_active", UVM_PASSIVE);
// Create a sub environment
reg_e = reg_env::type_id::create("reg_e", this);
chnl_e1 = chnl_env::type_id::create("chnl_e1", this);
chnl_e2 = chnl_env::type_id::create("chnl_e2", this);
chnl_e3 = chnl_env::type_id::create("chnl_e3", this);
virt_sqr = mcdf_virtual_sequencer::type_id::create("virt_sqr", this);
endfunction
function void connect_phase(uvm_phase phase);
super.connect_phase(phase);
//virtual sequencer connection
virt_sqr.reg_sqr = reg_e.master.sequencer; // vsqr And 5 individual agent Medium sqr Handle connection
virt_sqr.chnl_sqr1 = chnl_e1.master.sequencer;
virt_sqr.chnl_sqr2 = chnl_e2.master.sequencer;
virt_sqr.chnl_sqr3 = chnl_e3.master.sequencer;
virt_sqr.fmt_sqr = fmt_e.slave.sequencer;
endfunction
endclass
8. conclusion UVM The advantages of the reuse environment
- The verification environment of each module is encapsulated independently , There is no need to reserve data ports , Therefore, it is convenient for further integration and reuse of the environment
- because UVM Self phase Mechanism , When coordinating the sub environments at the top , There is no need to consider the problem that the object handle reference is suspended due to the instantiation order between sub environments
- Because the test sequence of the sub environment is relatively independent , This enables the top layer to reuse the sub environment test sequence virtual sequence when , No additional migration costs are required
- UVM Provide config_db Configuration mode , The structure and operation mode of the overall environment can be changed from tree config Get in object , This also allows the top-level environment to be different uvm_test Conduct centralized management configuration
边栏推荐
- Iterators and generators
- 百人参与,openGauss开源社区这群人都在讨论什么?
- ERP生产作业控制 华夏
- What is the real HTAP? (1) Background article
- Translation character '/b' in C #
- Local Oracle reported ora-12514: tns: the listener cannot recognize the requested service at present
- Ubuntu: install PostgreSQL
- Data extraction 1
- 数据提取1
- 说透缓存一致性与内存屏障
猜你喜欢

好吃难吃饱七分为宜;好喝难喝醉三分为佳
Why do major domestic manufacturers regard cloud computing as a pastry? Do you really understand this trillion market
![[BJDCTF2020]EasySearch 1](/img/ea/90ac6eab32c28e09bb1fab62b6b140.png)
[BJDCTF2020]EasySearch 1

Use of string type "PHP Basics"

Virtual machine cloning

Promise details

【目标检测】YOLOv6理论解读+实践测试VisDrone数据集

One book 1201 Fibonacci sequence

Prevent cookies from modifying ID to cheat login
Development of three database general SQL code based on PG Oracle and MySQL
随机推荐
Interviewer: what is scaffolding? Why do you need scaffolding? What are the commonly used scaffolds?
STM32小bug汇总
redis配置文件下载
On Valentine's day, I drew an object with characters!
An ordinary autumn recruitment experience
PHP realizes data interaction with MySQL
STM32 small bug summary
Design and development of GUI programming for fixed-point one click query
First experience of tryme in opengauss
One book 1201 Fibonacci sequence
vCenter7.0管理Esxi7.0主机
How does kettle handle text data transfer as' 'instead of null
[geek challenge 2019] finalsql 1
Prevent cookies from modifying ID to cheat login
[applet] the upload of the wechat applet issued by uniapp failed error: error: {'errcode': -10008,'errmsg':'Invalid IP
CMD command and NPM command
Solve the problem of slow batch insertion of MySQL JDBC data
Use of "PHP Basics" delimiters
UVM入门实验1
Ubuntu: install PostgreSQL