Introduction
Whenever it’s possible I avoid using ISIM (the ISE embedded
simulator). Among other things, it has poor support, and also very encrypted Warnings
and Errors messages. In the last project I worked, I had no choice but using
ISim, and when I was finishing the top level simulation I got the famous
warning "Warning: NUMERIC_STD," = "metavalue detected, returning
FALSE". And I say famous, because I goggled it in the web and found many
entries, but almost none gave me an idea of what happened and even less how to
fix it. Well, that is the reason I’m writing this post, to tell you what this
means and at least one concrete way to find a clue where or how this Warning is
generated.
What is it "Metavalue Detected" ?
This message means that the simulator encountered as a
result of an expression a non-numeric value, which can be for example
"UUUU" or "XXXX" or some other value.
Commonly this result is obtained during the initialization
of the system under test, and depending on the type of test it can repeat this
message periodically or just once. As an example, in the following figure you can read the
messages I got during my simulation.
How to find the source of the warning message?
As it can be seen from the figure shown above, there is
nothing that looks "rare/strange" in the waveform of the various
signals shown, so that, the solution is not at simple sight.
One way to find the source of this warning message, at least
in this particular case that I’m showing you, it is to try to see the different
internal signals of the whole system described in VHDL. To do this, go to the
panel called "Instance and Processes" and click on the arrow that is
next to the test bench, show in the figure above, click on the arrow next to
top_tb. The name of the instance of the component under test in the test bench
appears, in this case I called 'uut'. Again click on the arrow that is next to
'uut' and the various sub-components of the system are now listed. The
following figure details what it was explained.
The next step is to select each sub-component and adding the
different E/S and internal signals to the waveforms window (Wave Window). Select
a sub-component by simply click on its name, then in the 'Objects' panel all
the E / S and internal signals of this
sub-component appear. Then select all signals (because we do not know which one
is malfunctioning), and add then to the Wave Window.
The following figure details the steps
explained.
In the figure above, I have added to the Wave Window all the
signals of the cont_4bits_1 sub-component. I can also add the signals of the
other sub-components, freq_div_1 and bcd_7seg_1, but it happened that just adding
the signals of cont_4bits_1, I found part of the problem. How? ... Well, once I
added the signals of this sub-component, I run the simulation again, and
immediately I visualized something that caught my attention .... what was that?
.. well, try to find it out by yourself in the following figure.:
What do you see weird ???? .......
Yes ! ( I guess you found it out J )… the last two signals, count and i_count, are
not defined ('U' = undefined) .... We found something! ....
Possible Solutions
Now I come to this point, the steps to follow are two:
1) review the VHDL / Verilog subcomponent cont_4bits_1, and
check especially initializing the count and i_count vectors.
2) review the bench test and verify the value given to the
signal that initializes the system, commonly called reset.
In one of the two sides is the origin of Warning, and the
solution to work with .....! ... (In my particular case it was a no well
defined reset value in the test bench....).
Finally a note for those using ModelSim, you can read in
various forums that ModelSim has an option for this type of Warnings (based on
'metavalues') that allow you to ignore them. Of course I DO NOT share that
view, because it is always good to know the origin of the Warning. In my
particular case if I had used ModelSim and had used the option to ignore these
Warning, I had never encountered the problem that I found with the reset signal.
. .
Well, I hope you find it useful ... reminded me if so!
See you soon ...