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