I’m trying to create a glitch free check on gpio pin, which declared as tri state in my tb_top, Even though there is variation in the GPIO_P[0] pin certainly below assertions triggers only once, I even tried with @(posedge tb_top.GPIO_P[0] or negedge
tb_top.GPIO_P[0]) But no use.
property gpio_p_0;
realtime time0;
@(`tb_top.GPIO_P[0])
(1,time0 = $realtime) |=> (($realtime - time0) >= 3ns)[*1:$];
endproperty : gpio_p_0
assert_gpio_p_0 : assert property (gpio_p_0)
uvm_report_info("GPIO_GLITCH_FREE_CHECK", $psprintf("PASSED: GPIO_GLITCH_FREE on GPIO[0] assertion successful!"));
else
`uvm_error("GPIO_0_GLITCH_FREE_ASSERT", $psprintf("\n\nFAILED: GPIO_GLITCH_FREE_CHECK gpio_p_0 Assertion failed!\n"))
In reply to balramnaik03:
You would need to delve in the LRM to determine what tri-state changes constitute an event.
In the meantime, consider those options:
- use $changed. @$changed(`tb_top.GPIO_P[0])
?? Is @$changed(sig) considered an event when sig transitions from X to 2, or from 1 to X?
Is a change from x to 1 considered
// **** $changed requires a clock, that would NOT work for what you want.
//Updated by Ben
- use combinational support logic (with the always block) to test changes in values of (`tb_top.GPIO_P[0]) and then based on the the change in values, create your own event to be used by the assertion.
Ben Cohen
http://www.systemverilog.us/ ben@systemverilog.us
For training, consulting, services: contact Home - My cvcblr
- SVA Handbook 4th Edition, 2016 ISBN 978-1518681448
- Real Chip Design and Verification Using Verilog and VHDL, 2002 isbn 978-1539769712
- A Pragmatic Approach to VMM Adoption 2006 ISBN 0-9705394-9-5
- Using PSL/SUGAR for Formal and Dynamic Verification 2nd Edition, 2004, ISBN 0-9705394-6-0
- Component Design by Example ", 2001 ISBN 0-9705394-0-1
- VHDL Coding Styles and Methodologies, 2nd Edition, 1999 ISBN 0-7923-8474-1
- VHDL Answers to Frequently Asked Questions, 2nd Edition ISBN 0-7923-8115
See Paper: 1) VF Horizons:PAPER: SVA Alternative for Complex Assertions | Verification Academy
2) http://systemverilog.us/vf/SolvingComplexUsersAssertions.
In reply to ben@SystemVerilog.us:
Thanks Ben, 2nd approach is correct, But when i tried $changed with clk also not working, what is the wrong with below code.??
property gpio_p_0;
realtime time0;
@(posedge tb_top.clk)
($changed(`tb_top.GPIO_P[0]), time0 = $realtime) |=> (($realtime - time0) >= 3ns)[*0:$];
endproperty : gpio_p_0
In reply to balramnaik03:
- when using $changed(z)…
Use the ss1 before it is to take care of the first cycle.
- Check in 1800 if transitions like x to 1/0, z to 1/0 are considered changes.
You should could also run a small test to see how the simulator handles this.
In my language learning experiences with VHDL, Verilog and SV I ran small tests for things I didn’t understand. In most cases the simulation tools implemented that issue correctly, and that clarified my issues.
Ben systemverilog.us