Hallo Peter,
man kann in Modelsim die Signale per Skript ansteuern. Meistens wird in
VHDL ein Testbench geschrieben. Da ist man flexibler und muss nicht noch
eine Skript-Sprache lernen.
Geunsätzlich solltest du nicht den bit_vektor verwenden, da der keine
Kollisionen und nicht initialisierten Signale kennt.
Ich habe ein Beispiel für deinen Muxer geschrieben.
library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;
entity a0_MUX4X1 is
end entity a0_MUX4X1;
architecture behav of a0_MUX4X1 is
signal S_slv : std_logic_vector(1 downto 0);
signal E_slv : std_logic_vector(3 downto 0);
signal Y : std_logic;
signal S : unsigned (S_slv'range) := (others => '0');
signal E : unsigned(E_slv'range) := (others => '0');
begin -- architecture behav
MUX4X1_2 : entity work.MUX4X1
port map (
S => S_slv,
E => E_slv,
Y => Y);
S_slv <= std_logic_vector (s);
E_slv <= std_logic_vector (e);
p_tb : process is
begin -- process p_tb
while e /= 2**e'length - 1 loop
wait for 10 ns;
e <= e + 1;
end loop;
s <= s + 1;
end process p_tb;
end architecture behav;
Bei Kompilieren deines Muxers hat sich Modelsim beschwert, darum habe
ich den Code geändert.
-- Compiling architecture verhalten of mux4x1
** Error: ../../threinem/work/mux4x1.vhdl(13): Selected signal
assignment covers only 4 out of 81 cases.
** Error: ../../threinem/work/mux4x1.vhdl(18): VHDL Compiler exiting
Compilation exited abnormally with code 2 at Fri Jan 30 08:41:21
library ieee;
use ieee.std_logic_1164.all;
entity MUX4X1 is
port(
S : in std_logic_vector(1 downto 0);
E : in std_logic_vector(3 downto 0);
Y : out std_logic);
end MUX4X1;
architecture VERHALTEN of MUX4X1 is
begin
Y <= E(0) when s = "00" else
E(1) when s = "01" else
E(2) when s = "10" else
E(3) when s = "11";
end VERHALTEN;
Ich habe es nur kompiliert und nicht simuliert.
Tom