@mr.chip:
Ich habe das gleiche Problem, dass ich einen inout-Port nicht zuweisen
kann. Was hast du gemacht, dass es funktioniert hat?
@all:
Ich habe folgendes versucht (syntax könnte event. fehler enthalten, es
geht nur um die funktionsweise. und bitte seht davon ab, dass read,
write keine gültigen variablennamen sind):
--------------------------------------------------------------------
entity Modul_1 is
port (iopin : inout std_logic);
end Modul_1;
architecture bhv of Modul_1 is
signal read : std_logic;
signal write : std_logic := '1';
signal wenable : std_logic := '0';
begin
read <= iopin;
iopin <= write when wenable = '1' else 'Z';
process is
begin
wait for 10 ns;
wenable <= '1';
wait for 10 ns;
wenable <= '0';
wait until read = '0';
report "module 2 done its job" severity note;
wait;
end process;
end bhv;
entity Modul_2 is
port (iopin : inout std_logic);
end Modul_2;
architecture bhv of Modul_2 is
signal read : std_logic;
signal write : std_logic := '0';
signal wenable : std_logic := '0';
begin
read <= iopin;
iopin <= write when wenable = '1' else 'Z';
process is
begin
wait until read = '1'
report "module 1 done its job" severity note;
wait for 50 ns;
wenable <= '1';
wait for 10 ns;
wenable <= '0';
wait;
end process;
end bhv;
entity testbench is
end testbench;
architecture bhv of Modul_2 is
signal iosignal : std_logic;
begin
instance : module_1
port map (iopin => iosignal);
instance : module_2
port map (iopin => iosignal);
end bhv;
--------------------------------------------------------------------
Eigentlich müsste ja jetzt zuerst Modul 1 den io-Port auf high ziehen
und danach den Port wieder freigeben. Dann ist Modul 2 an der Reihe,
zieht den io-Port auf Low und gibt in nach 10 ns wieder frei. Allerdings
werden in der Simulation (mit Modelsim) die Portveränderungen in den
betreffenden Modulen (entities) nicht verzeichnet. Kann mir jemand
sagen, was ich da falsch gemacht habe?
mfg
Johnsn