suppose if I have two signal declarations as follows
signal x:std_logic_vector(1 downto 0) := (others => '0');
signal y:std_logic_vector(1 downto 0);
does that mean x is static and y is non-static?
No. Values determined by evaluating signals in expressions are not static.
The difference between the declarations of x
and y
is that x
has a default value expression provided that is different than y
. Both have default values, the value for x
is provided by a locally static aggregate expression depending on the locally static range of x
via others
and the locally static value of the enumeration literal '0'
.
From IEEE Std 1076-2008, 9 Expressions, 9.1 General:
An expression is a formula that defines the computation of a value.
From 9.4 Static expressions:
Certain expressions are said to be static. Similarly, certain discrete ranges are said to be static, and the type marks of certain subtypes are said to denote static subtypes.
There are two categories of static expression. Certain forms of expression can be evaluated during the analysis of the design unit in which they appear; such an expression is said to be locally static. Certain forms of expression can be evaluated as soon as the design hierarchy in which they appear is elaborated; such an expression is said to be globally static.
The expressions found in the two signal declarations are all locally static, derived from literals (0
, 1
and '0'
), 0
and 1
specifying locally static ranges, in x
providing the choice others
in the aggregate expression for it's default value, for every element in the index range for x
, a '0'
is provided as the default value.
Also does a vhdl function call fall into the category of a non-static expression?
See 4. Subprograms and packages, 4.1 General, paragraph 2:
There are two forms of subprograms: procedures and functions. A procedure call is a statement; a function call is an expression and returns a value. Certain functions, designated pure functions, return the same value each time they are called with the same values as actual parameters; the remainder, impure functions, may return a different value each time they are called, even when multiple calls have the same actual parameter values. ...
So a function call is an expression. An expression can be either locally static or globally static:
9.4.2 Locally static primaries
An expression is said to be locally static if and only if every operator in the expression denotes an implicitly defined operator or an operator defined in one of the packages STD_LOGIC_1164, NUMERIC_BIT, NUMERIC_STD, NUMERIC_BIT_UNSIGNED, or NUMERIC_STD_UNSIGNED in library IEEE, and if every primary in the expression is a locally static primary, where a locally static primary is defined to be one of the following:
...
e) A function call whose function name denotes an implicitly defined operation or an operation defined
in one of the packages STD_LOGIC_1164, NUMERIC_BIT, NUMERIC_STD, NUMERIC_BIT_UNSIGNED, or NUMERIC_STD_UNSIGNED in library IEEE and whose actual parameters are each locally static expressions
...
9.4.3 Globally static primaries
An expression is said to be globally static if and only if every operator in the expression denotes a pure function and every primary in the expression is a globally static primary, where a globally static primary is a primary that, if it denotes an object or a function, does not denote a dynamically elaborated named entity (see 14.6) and is one of the following:
...
i) A function call whose function name denotes a pure function and whose actual parameters are each globally static expressions
...
Essentially the parameters to a function call must be either locally static or globally static and the function must be a pure function for the expression determined by a function call to be static. (All predefined operators for predefined types are pure).
If these requirements are not met then the function call expression is not static. An easy example would be a parameter that is either a variable or a signal, both requiring evaluation during execution.
Interesting idea!
Well I just tried it. I hooked up my trusty Keysight 34410A to the test leads and pierced what I think is dissipative foam (pink foam of an electronics shipment). The ohm reading was overload, so no measurable resistance. Which is to be expected like Bimpelrekkie suspected.
Dissipative material is just too high resistance to make a usable measurement with. I guess with some high voltage equipment you'd get a value, but a grip release sensor sounds like someone is touching it, so high voltage is probably not the way to go.
But I also had some conductive foam (black stuff, quite stiff) lying around. It's a sheet of 30 x 10 x 0.8 cm. When I pierced it at the end, so the whole 30 cm where between the probes, I measured around 20 kOhm at first but that was dropping off the longer I had the probes in.
It didn't really settle over a time of several minutes, so I'll leave it in and see where it goes.
To see if it is pressure sensitive I pushed with the isolated back of a screwdriver onto the foam. The value went up by around 80 Ohm, from 17610 Ohm to 17690 Ohm, after releasing the pressure the value went down 30 Ohm immediately after release and then dropped back in a few seconds.
The screwdriver was rather small, around 1 x 1 cm, so a bigger one would give a higher increase.
Right now it doesn't seem to be a rock stable system but I can imagine you can get something out of it with some clever algorithm. Especially since you are interested in a release, the absolute value might not matter but a change over a short period of time.
After more then an hour it has settled at around 16889 Ohm. As I was squeezing it before I started the experiment, it might have been the time it needed to restore its original structure completely.
That seems quite plausible, after squeezing it again (gripping it in the middle) the resistance went back up to 20 kOhm and is starting to go down again.
Here is a data log of a squeeze:
As you can see, it really has a long recovery time to get where it originally was. I can't say how many cycles of squeezing it will survive. So you have some tests ahead of you.
Best Answer
To answer your specific question. Integration of pc parts into standard modular components and the ubiquity of chip-scale ESD mediation since the early 90's means that there is a higher probability that the part you are working with is less ESD-susceptible today than in the 90's. It is very common today for chip manufacturers to integrate ESD protection into even the simplest logical devices, so while the underlying process (CMOS transistor logic) is the same, the extra protection makes the chips hardier and makes it less likely you will discharge current through anything sensitive than ever before.
Generally speaking a comfortable lab or assembly room with many (grounded) metal surfaces, smooth floor, non-insulating bench surface, non-ionizing air conditioning, with no HV or stray sources of E&M is likely to be a very static-free environment as it is. Likely you have just gotten lucky thus far or your volume is too low for the risk to be appreciated.
Further
ESD protection is generally in place to protect sensitive electronics from charge sources, typically humans and occasionally foreign objects. The likelihood of a significant electrostatic charge on a component or assembly (ram stick, cpu) itself is relatively small, but some components may pick up charge from a human handling it and proceed to discharge into the next grounded component they touch.
ESD becomes an issue in two distinct scenarios. First is extremely sensitive or simple devices (chips with open drain/collector ouptuts, crystals, small integrated sensors, etc.). Second is an environment that increases the likelihood of undissipated static charge on operators handling equipment, examples would include rubber floors (operator isolation), low humidity, rough friction surfaces, lots of operator movement (walking station to station), no grounded metal fixtures, etc.
integrated anti-static protection (diodes to short the charge to ground in the simplest case) is now much more common on cpu's , memory, and other high density IC's (chips). On the assembly side (pcb instead of chip scale) ESD protective components/circuits are widely avaialble. These do not eliminate the danger of ESD, but can reduce the requirements on the handling environment. For e.g. an ESD protection scheme that is integrated into the chip - be it cpu, memory, or other logic. (Source at the bottom of this post)
In the electronic manufacturing world, as single technician or station in a factory could see thousands of units (from different clients) in a day, and these assemblies may be designed for e.g. clean room assembly or have ESD susceptibility across the board. In that world ESD is taken seriously with mandatory grounding cords and ESD discharge stations for all materials and personnel entering the manufacturing floor. This makes the manufacturing process control (QA) simpler even if your device is not particularly ESD susceptible. Manufacturing protocols in the early 90's would probably come from this perspective (large scale manufacturing at one location, not a private assembler from common market parts) and the severity of the requirements coming from a time when computers were considered specialized hardware.
Relevant Source: TI White Sheet on ESD protection