构建了uart验证环境。我有uart_tx_agent和uart_rx_agent。uart_tx_agent有控制cts端口的虚拟bfm,没有驱动程序。uart_rx_agent具有bfm和带有uart_sequence的驱动程序。
uart_env.e :在uart_env中,我按如下方式启动代理
unit uart_env_u like uvm_env {
uart_tx_agent: uart_tx_agent_u is instance;
uart_rx_agent: uart_rx_agent_u is instance;
};
unit uart_tx_agent_u like uvm_agent {
keep soft active_passive == PASSIVE;
};
unit uart_rx_agent_u like uvm_agent {
keep soft active_passive == PASSIVE;
};uart_tx_agent.e:
extend uart_rx_agent_u{
uart_rx_monitor : RX uart_monitor_u is instance;
when ACTIVE uart_rx_agent_u
{
uart_bfm : uart_rx_bfm_u is instance;
driver: uart_driver_u is instance;
};
};
unit uart_rx_bfm_u like uvm_bfm{
};
sequence uart_sequence using
item = uart_frame_s,
created_driver = uart_driver_u;uart_tx_agent.e:
extend uart_tx_agent_u{
uart_tx_monitor : TX uart_monitor_u is instance;
uart_tx_scb: uart_tx_scoreboard_u is instance;
when ACTIVE uart_tx_agent_u {
uart_bfm : uart_tx_bfm_u is instance;
};
};
unit uart_tx_bfm_u like uvm_bfm{
};在tx_test中,我只有一个主序列- vr_ad_sequence,并且我执行以下操作:
extend MAIN vr_ad_sequence {
.....
.....
keep uart_env.uart_tx_agent.active_passive == ACTIVE;
...
}; 在rx_test中,我有两个主要的序列:
extend MAIN uart_sequence {
....
....
body() @driver.clock is only {
};
};
extend MAIN vr_ad_sequence {
.....
.....
keep uart_env.uart_tx_agent.active_passive == ACTIVE;
...
}; 但它确实能像我预期的那样工作。在这两个测试中,代理都处于被动状态(没有bfm /driver)。
发布于 2018-03-09 14:38:03
只有在测试开始后才会生成序列,因此在此时将代理设置为活动状态为时已晚。
将此约束放在层次结构中的更高级别。例如-在包含此代理的env中
发布于 2018-03-09 22:14:33
您需要区分单元层次结构(在模拟开始时生成)和结构。后者可以在任何时候动态生成。因此,在模拟中的稍后点生成的序列中的任何约束都不能改变单元层次结构。这样做也是一种糟糕的风格。
https://stackoverflow.com/questions/49169576
复制相似问题