TAMS / Java / Hades / applets (print version): contents | previous | next
Buses and the std_logic_1164 resolution functionDescriptionOne of the most important reasons to use multi-level logic systems
is the simulation of buses, that is, signals driven by multiple
First, a bus driven by only one active component should behave
like any normal signal wire.
Second, the simulation should allow to detect short-circuit
conditions when the bus is driven by multiple sources with
Third, it should also support common situations like
pullup-resistors to force a weak but well-defined logical value
when the bus is not driven by any active component.
In the std_logic_1164 system,
the value 'X' is used to model the short-circuit condition,
while the 'Z' value is used for a high-impedance state
that is not driven by any component.
Finally, the 'H' and 'L' (weak '1' and weak '0') values allow
to model the situation of a bus connected to pullup or pulldown resistors.
In a VHDL simulator,
a so-called resolution function is automatically created and
used for each bus, whose task is to calculate the new logic value
on the bus as a function of the bus input values.
The default resolution function reads the first two input values
and calculates the output value from the following truth table.
The resulting value is then combined with each of the additional
input values. For example,
resolve(U,0,0,1) = U,
resolve(0,Z,0,L,0) = 0,
resolve(Z,1,0) = X, etc.
This same resolution function is also used by Hades.
VHDL std_logic resolution function table:
U X 0 1 Z W L H D
U | U U U U U U U U U
X | U X X X X X X X X
0 | U X 0 X 0 0 0 0 X
1 | U X X 1 1 1 1 1 X
Z | U X 0 1 Z W L H X
W | U X 0 1 W W W W X
L | U X 0 1 L W L W X
H | U X 0 1 H W W H X
D | U X X X X X X X X
The applet demonstrates the tri-state driver component
used to drive buses and the std_logic bus resolution function.
As usual, the tri-state driver (hades.models.gates.NTri)
is an inverting driver.
As long as the input value on the enable input (S) is high,
the driver generates a Z (high-impedance) output value,
which effectively disconnects the driver from the bus.
Once the input value on the enable input is 0, the driver
is activated and the Y output value is the inverted A input value.
Finally, an undefined S input value will result in a invalid X output value.
The bus on the right side of the applet schematics is connected
to three of these tri-state drivers. A pullup resistor is used
to generate a 'H' (weak '1') value for the bus as long as no driver
Please play with the enable and data inputs of all three tri-state
drivers and watch the resulting behaviour of the bus.
If only one driver is active, the bus will be set to the inverted
value of the drivers data input.
If multiple drivers are enabled, but generate compatible values,
the bus will have that value.
A short-circuit condition, however, will result in the 'X' value
on the bus.
Run the applet | Run the editor (via Webstart)
Impressum | 24.11.06