UVM_DO_ON_WITH Error

Hi,

I am trying uvm_do_on_with to run i2c sequence on master sequencer and getting below syntax error . Can you please help on this ?

SEQUENCE CODE ------------------------------------------------------------------------------------------------------
// uvm_do_on_with(i2c_mst_seq,svt_i2c_master_transaction_sequencer, uvm_do_on_with(i2c_mst_seq,m_env.i2c_env.i2c_system_env.sequencer.master_sequencer[0],
{
i2c_mst_seq.lcl_cmd == I2C_WRITE; i2c_mst_seq.lcl_addr == I2C_SLAVE0_ADDRESS;
i2c_mst_seq.lcl_data_size == 5;
i2c_mst_seq,lcl_sr_or_p_gen == 0;
i2c_mst_seq,lcl_send_start_byte == 0;
})

ERROR---------------------------------------------------------------------------------------------------------------
5206 Error-[SE] Syntax error
5207 Following verilog source has syntax error :
5208 “cambria_i2c_mst_write_sequence.sv”,
5209 30 (expanding macro): token is ‘,’
5210 })
5211 ^
5212
5213 #0, uvm_do_on_pri_with(SEQ_OR_ITEM=i2c_mst_seq, SEQR=m_env.i2c_env.i2c_system_env.sequencer.master_sequencer[0], PRIORITY=-1, CONSTRAINTS={ i2c_mst_seq.lcl_cmd == SVT_I2C_WRITE; i2c_mst_seq.lcl_addr == SVT_I2C_SLAVE0_ADDRESS; i2c_mst_seq.lcl_data_size == 5; i2c_mst_se q,lcl_sr_or_p_gen == 0; i2c_mst_seq,lcl_send_start_byte == 0; }) : “/p/psg/eda/synopsys/vcsmx/N-2017.12-SP2-3/linux64/suse/etc/uvm-1.1/src/macr os/uvm_sequence_defines.svh”:204
5214 #1, uvm_do_on_with(SEQ_OR_ITEM=i2c_mst_seq, SEQR=m_env.i2c_env.i2c_system_env.sequencer.master_sequencer[0], CONSTRAINTS={ i2c_mst_seq.lcl_cmd == SVT_I2C_ WRITE; i2c_mst_seq.lcl_addr == SVT_I2C_SLAVE0_ADDRESS; i2c_mst_seq.lcl_data_size == 5; i2c_mst_seq,lcl_sr_or_p_gen == 0; i2c_mst_seq,lcl_send_start_byte == 0; }) : “/p/psg/eda/synopsys/vcsmx/N-2017.12-SP2-3/linux64/suse/etc/uvm-1.1/src/macros/uvm_sequence_d efines.svh”:188
5215 full expansion of macro (uvm_do_on_with), error at line 9
5216 …
5217 $cast(i2c_mst_seq , create_item(w_, m_env.i2c_env.i2c_system_env.sequencer.master_sequencer[0], “i2c_mst_seq”));
5218 end
5219 if (!$cast(__seq,i2c_mst_seq)) start_item(i2c_mst_seq, -1);
5220 => if ((__seq == null || !__seq.do_not_randomize) && !i2c_mst_seq.randomize() with { i2c_mst_seq.lcl_cmd == 0; i2c_mst_seq.lcl_addr == 10’b1100110011; i2c_mst_seq.lcl_data_size == 5; i2c_mst_seq,lcl_sr_or_p_gen == 0; i2c_mst_seq,lcl_send_start_byte = = 0; } ) begin
5221 `uvm_warning(“RNDFLD”, “Randomization failed in uvm_do_with action”)
5222 end
5223 …

In reply to as1494:

You are showing only the error message. We do not see the source code, especially the sequence code. This does not allow to give you a good advice.

In reply to chr_sue:

I added sequence code and syntax error comes at uvm_do_on_with line -

 task body();

uvm_do_on_with(i2c_mst_seq,m_env.i2c_env.i2c_system_env.sequencer.master_sequencer[0], { i2c_mst_seq.lcl_cmd == SVT_I2C_WRITE;
i2c_mst_seq.lcl_addr == `SVT_I2C_SLAVE0_ADDRESS;
i2c_mst_seq.lcl_data_size == 5;
i2c_mst_seq,lcl_sr_or_p_gen == 0;
i2c_mst_seq,lcl_send_start_byte == 0;
})

 `uvm_do_on(wait_until_driver_idle_seq,p_sequencer.root_virt_seqr.driver_seqr[0]);

 endtask 

Thankyou !

In reply to as1494:

You have a comma instead of a dot in the last two constraint lines between i2c_mst_seq and lcl.