Hi Marius,
I am trying to add self checking mechanism to another module I am currently verifying.
I currently have an issue when I use the following await_value ie awaiting between 262000 ns & 270000 ns for state_out value of “0110” (this is WRITE_SDA state) to reach :
await_value(state_out, “0110”, 262000 ns, 270000 ns, “Waiting for WRITE_SDA state to reach”);
& get the following error message:
UVVM: ==================================
UVVM: *** ERROR #1 ***
UVVM: 263100 ns TB seq.
UVVM: await_value(slv x"6", 262000 ns, 270000 ns) => Failed. Condition occurred too early, after 54900 ns. ‘Waiting for WRITE_SDA state to reach’
UVVM:
UVVM: Simulator has been paused as requested after 1 ERROR
UVVM: *** To find the root cause of this alert, step out the HDL calling stack in your simulator. ***
UVVM: *** For example, step out until you reach the call from the test sequencer. ***
UVVM: ================================
However, I am aware that there was another WRITE_SDA state_out “0110” that happened earlier @56300 ns and do not wanted to detect that one. Detected that one earlier but had to use also a bigger range band eg
await_value(state_out, “0110”, 54800 ns, 57000 ns, “Waiting for WRITE_SDA state to reach”);
WRITE_SDA state occurred here @56400 nS but had to use 54800 ns as start range and could not use eg 56300 ns ie 100 ns before it’s detection @56400 ns otherwise had a similar error that “Condition occurred too early, after 54900 ns”.
I performed already before hand a single WRITE_SDA followed by a single READ_SDA and at 263000 ns I was trying to perform another WRITE_SDA.
Part of the code in my testbench I am trying to perform is:
::
await_completion(I2CCONTROLLER_VVCT, 1, 2082*C_CLK_PERIOD, “Await completion”);
i2ccontroller_write_sda_multiple_bytes(I2CCONTROLLER_VVCT, 1, 26, “I2CController module: WRITE_SDA multi-byte transfer”);
log(ID_SEQUENCER, “Wait until the target signal ‘state_out’ equals the exp signal ‘0110’”, C_SCOPE); – @263000 nS
await_value(state_out, “0110”, 262000 ns, 270000 ns, “Waiting for WRITE_SDA state to reach”);
::
await_completion(I2CCONTROLLER_VVCT, 1, 26054*C_CLK_PERIOD, “Await completion”);
::
The C_CLK_PERIOD I use is 100 ns ie 2082*C_CLK_PERIOD stated above is 208200 ns
It should complete at 208200 ns from the await_completion procedure used above and then execute the rest. Isn’t this the case?
Your reply to this matter will be appreciated.
Regards,
Kevin