Improved Functional Coverage with Dynamic Arrays

Hi,

Is there a way to run test dynamically changing the constraints according to the functional coverage?

To test my block I use a set of random-constrained test, able to set the functional coverage to roughly 98%.
To reach the 100% I need everytime to relaunch singularli some of those tests fixing some specific testbench variables that I know.
It’s not a bit deal but I’d like to automatize this flow, checking the uncovered bins and launching specific tests and sequences
constraining the tb variables accordingly.
I don’t have a clear idea on how to do this, I read that PPS can be a good solution, but I am not an expert.
What kind of approach is generally adopted in this situations?

Thanks

In reply to giulio95:

This question is the Holy Grail of Functional Coverage. If you were using assertions, a formal tool can trace through the design and exhaustively prove that the assertion is valid or not. But given a testbench, it can be next to impossible to figure out what stimulus needs to change to hit a functional coverage point.

Some are experimenting with machine learning algorithms to see if there is anything that could be done to the constraints to improve coverage, but I would say that is mostly in the academic and design specific cases.

Some things that I would suggest is looking at your coverage models and making sure you are not over-specifying your bins(like trying to cover an entire address space) and looking at formal analysis in certain areas to achieve functional coverage rather than dynamic simulation.

In reply to dave_59:

Hi Dave,

Thanks for the super useful answer.

On the theoretical level I know what is formal analysis, but on the practical side I have never built a formal setup myself. Do you have any good documentation to read? Do I need to simply write assertions to cover the states specified by the bins?

What about graph-based stimuli to improve my functional coverage?