الف:
library ieee;
use ieee.std_logic_1164.all;
entity ss is
port (a,b,c,d:in std_logic_vector(0 to 2); s:in std_logic_vector(0 to 1); f:out std_logic_vector(0 to 2));
end;
architecture mm of ss is
signal e:std_logic_vector(0 to 3);
begin
process (s)
begin
if s= "00" then
e<= "0111" ;
elsif s= "01" then
e <= "1011";
elsif s= "10" then
e <= "1101";
else
e <= "1110";
end if;
end process;
f <= a when e(0)='0' else "ZZZ";
f <= b when e(1)='0' else "ZZZ";
f <= c when e(2)='0' else "ZZZ";
f <= d when e(3)='0' else "ZZZ";
end;
library ieee;
use ieee.std_logic_1164.all;
entity test is
end;
architecture mm_tb of test is
signal a1,a2,a3,a4,f:std_logic_vector (0 to 2) ;
signal s:std_logic_vector(0 to 1);
component ss
port (a,b,c,d: in std_logic_vector(0 to 2):="000"; s:in std_logic_vector(0 to 1):="00"; f: out std_logic_vector(0 to 2));
end component;
begin
u1: ss port map (a => a1 , b => a2 , c => a3 , d =>a4 , s => s, f => f);
a1 <= "000" , "110" after 40 ns , "111" after 70 ns , "010" after 120 ns , "100" after 150 ns;
a2 <= "000" , "101" after 40 ns , "001" after 70 ns , "111" after 120 ns , "001" after 150 ns;
a3 <= "100" , "010" after 40 ns , "111" after 70 ns , "110" after 120 ns , "000" after 150 ns;
a4 <= "110" , "101" after 40 ns , "100" after 70 ns , "000" after 120 ns , "111" after 150 ns;
s <= "00" , "01" after 40 ns , "10" after 70 ns , "11" after 120 ns , "01" after 150 ns;
end;
ب:
library ieee;
use ieee.std_logic_1164.all;
entity bus2 is
port (a,b,c,d:inout std_logic_vector(0 to 2); s:in std_logic_vector(0 to 1);ld0,ld1,ld2,ld3,clk:in std_logic);
end;
architecture mm of bus2 is
signal y:std_logic_vector(0 to 2);
begin
process (clk)
begin
if clk = '1' and clk'event then
if s= "00" then
y <= a;
elsif s= "01" then
y <= b;
elsif s= "10" then
y <= c;
else
y <= d;
end if;
if ld0 = '1' then
a <= y;
else
a<="ZZZ";
end if;
if ld1= '1' then
b <= y;
else
b<="ZZZ";
end if;
if ld2 = '1' then
c <= y;
else
c<="ZZZ";
end if;
if ld3 = '1' then
d <= y;
else
d<="ZZZ";
end if;
end if;
end process;
end;
library ieee;
use ieee.std_logic_1164.all;
entity test2 is
end;
architecture mm_tb of test2 is
signal ld0,ld1,ld2,ld3,clk:std_logic :='0';
signal s:std_logic_vector(0 to 1);
signal a,b,c,d:std_logic_vector(0 to 2);
component bus2
port (a,b,c,d:inout std_logic_vector(0 to 2); s:in std_logic_vector(0 to 1);ld0,ld1,ld2,ld3,clk:in std_logic);
end component;
begin
u1: bus2 port map (a => a , b => b , c => c , d =>d , s => s, ld0 => ld0, ld1 => ld1, ld2 => ld2, ld3 => ld3, clk => clk);
a <= "000" , "110" after 80 ns , "111" after 160 ns , "ZZZ" after 240 ns , "ZZZ" after 320 ns;
b <= "ZZZ" , "101" after 80 ns , "001" after 160 ns , "111" after 240 ns , "001" after 320 ns;
c <= "100" , "ZZZ" after 80 ns , "111" after 160 ns , "110" after 240 ns , "000" after 320 ns;
d <= "110" , "101" after 80 ns , "ZZZ" after 160 ns , "000" after 240 ns , "111" after 320 ns;
s <= "00" , "11" after 80 ns , "10" after 160 ns , "01" after 240 ns , "11" after 320 ns;
ld0<='0','1' after 240 ns,'0' after 320 ns;
ld1<= '1','0' after 80 ns;
ld2<= '0','1' after 80 ns,'0' after 160 ns;
ld3<= '0','1' after 160 ns,'0' after 240 ns;
clk<= not clk after 10 ns;
end;