I’m fairly new to UVM and running a UVM verification based on Easier UVM. I defined two agents with their respective drivers and sequences. Each agent alone performs its job as expected, but as soon as I enable both of them, the faster sequence is synchronized to the slower one: There is one sequence that needs to wait for 10 clock cycles for the driver to perform its task and one that completes in one clock cycle. What I observe is that the faster sequence performs its one-cycle job then sits idle for nine cycles before the next randomization is performed.
From the code, I cannot figure out where this synchronization is happening.
The structure of the project is like this:
uvm_test_top top_test - @2092 m_env top_env - @2158 m_IO_env IO_env - @2216 m_IO_agent IO_agent - @2300 analysis_port uvm_analysis_port - @2351 m_driver IO_driver - @2550 m_8b10b endec_8b10b_encoder - @3337 m_cov_data_analysis_port uvm_analysis_port - @3387 m_coverage_h endec_8b10b_coverage - @3419 m_cov_data_ap uvm_analysis_imp - @3471 rsp_port uvm_analysis_port - @2652 seq_item_port uvm_seq_item_pull_port - @2600 m_monitor IO_monitor - @2414 analysis_port uvm_analysis_port - @2518 m_8b10b endec_8b10b_decoder - @3524 m_cov_data_analysis_port uvm_analysis_port - @3574 m_coverage_h endec_8b10b_coverage - @3607 m_cov_data_ap uvm_analysis_imp - @3656 m_sequencer uvm_sequencer - @2683 rsp_export uvm_analysis_export - @2744 seq_item_export uvm_seq_item_pull_imp - @3304 arbitration_queue array 0 -.... lock_queue array 0 -.... num_last_reqs integral 32 'd1.. num_last_rsps integral 32 'd1.. m_IO_coverage IO_coverage - @2384 analysis_imp uvm_analysis_imp - @2434 m_analog_env analog_env - @2247 m_analog_agent analog_agent - @3750 analysis_port uvm_analysis_port - @3800 m_driver analog_driver - @3999 rsp_port uvm_analysis_port - @4101 seq_item_port uvm_seq_item_pull_port - @4049 m_monitor analog_monitor - @3863 analysis_port uvm_analysis_port - @3967 m_sequencer uvm_sequencer - @4132 rsp_export uvm_analysis_export - @4192 seq_item_export uvm_seq_item_pull_imp - @4752 arbitration_queue array 0 -.... lock_queue array 0 -.... num_last_reqs integral 32 'd1.. num_last_rsps integral 32 'd1.. m_analog_coverage analog_coverage - @3833 analysis_imp uvm_analysis_imp - @3883
I.e. the two sequencers (IO and analog) only meet at the top level environment. Do I need to separate them even more?
Thanks,
digitalo