Johannes schrieb:
> Es geht hier nicht um ein FPGA sondern rein um VHDL und da geht das sehr
> wohl.
LOL. Hört sich ein wenig nach abstraker Betrachtungsweise an...
Dann machs doch einfach so, dass du STD_LOGIC verwendest und immmer 'H'
auf alle Busleitungen treibst. Hier mal ein Beispiel:
1 | library IEEE;
|
2 | use IEEE.STD_LOGIC_1164.ALL;
|
3 |
|
4 | entity Bustreiber is
|
5 | Port ( Din : in STD_LOGIC;
|
6 | Dout : out STD_LOGIC);
|
7 | end Bustreiber;
|
8 |
|
9 | architecture Behavioral of Bustreiber is
|
10 | begin
|
11 | Dout <= 'H'; -- Default
|
12 | Dout <= Din; -- Din auflösen
|
13 | end Behavioral;
|
Damit wird ein Bus, auf den gleichzeitig 'Z' getrieben wird, automatisch
auf 'H' gesetzt. Dazu diese Testbench:
1 | LIBRARY ieee;
|
2 | USE ieee.std_logic_1164.ALL;
|
3 |
|
4 | ENTITY tb_BT_vhd IS
|
5 | END tb_BT_vhd;
|
6 |
|
7 | ARCHITECTURE behavior OF tb_BT_vhd IS
|
8 | COMPONENT Bustreiber
|
9 | PORT( Din : IN std_logic;
|
10 | Dout : OUT std_logic);
|
11 | END COMPONENT;
|
12 | SIGNAL Din : std_logic := '0';
|
13 | SIGNAL Dout : std_logic;
|
14 | BEGIN
|
15 | uut: Bustreiber PORT MAP(
|
16 | Din => Din,
|
17 | Dout => Dout
|
18 | );
|
19 |
|
20 | tb : PROCESS
|
21 | BEGIN
|
22 | for i in 0 to 8 loop
|
23 | Din <= std_logic'val(i);
|
24 | wait for 10 ns;
|
25 | end loop;
|
26 | END PROCESS;
|
Gibt die Waveform aus dem Anhang. Die Zustände von Din im Screenshot
sind: U X 0 1 Z W L H -
Und man sieht schön, dass da dann bei Z ein H draus wird. Denn bei
deiner Auflösungsfunktion gibt es zumindest bei den schwachen W und L
dann eklatante Definitionsprobleme...