Line 19... |
Line 19... |
use IEEE.std_logic_1164.all;
|
use IEEE.std_logic_1164.all;
|
use IEEE.numeric_std.all;
|
use IEEE.numeric_std.all;
|
use IEEE.std_logic_unsigned.all;
|
use IEEE.std_logic_unsigned.all;
|
|
|
entity barbers is
|
entity barbers is
|
Port ( a_barber_shaves_event : in STD_LOGIC;
|
Port ( big_bang : in STD_LOGIC;
|
|
a_barber_shaves_event : in STD_LOGIC;
|
a_barber_doesnt_shave_event : in STD_LOGIC; --like for a day...
|
a_barber_doesnt_shave_event : in STD_LOGIC; --like for a day...
|
number_of_barbers_who_may_shave_themselves : out STD_LOGIC;
|
number_of_barbers_who_may_shave_themselves : out STD_LOGIC;
|
number_of_barbers_who_may_not_shave_themselves : out STD_LOGIC);
|
number_of_barbers_who_may_not_shave_themselves : out STD_LOGIC);
|
end barbers;
|
end barbers;
|
|
|
architecture simulateable of barbers is
|
architecture simulateable of barbers is
|
|
|
begin
|
begin
|
|
|
process(a_barber_shaves_event, a_barber_doesnt_shave_event)
|
process(big_bang, a_barber_shaves_event, a_barber_doesnt_shave_event)
|
begin
|
begin
|
if big_bang = '1' then
|
if big_bang = '1' then
|
number_of_barbers_who_may_shave_themselves <= x"0";
|
number_of_barbers_who_may_shave_themselves <= x"0";
|
number_of_barbers_who_may_not_shave_themselves <= x"f";
|
number_of_barbers_who_may_not_shave_themselves <= x"f";
|
else
|
else
|
Line 48... |
Line 49... |
|
|
signal counter1, counter2 : std_logic_vector(3 downto 0);
|
signal counter1, counter2 : std_logic_vector(3 downto 0);
|
|
|
begin
|
begin
|
|
|
process(a_barber_shaves_event)
|
process(big_bang, a_barber_shaves_event)
|
begin
|
begin
|
if big_bang = '1' then
|
if big_bang = '1' then
|
counter1 <= x"f";
|
counter1 <= x"f";
|
elsif rising_edge(a_barber_shaves_event) then
|
elsif rising_edge(a_barber_shaves_event) then
|
counter1 <= counter1 + '1';
|
counter1 <= counter1 + '1';
|
end if;
|
end if;
|
end process;
|
end process;
|
|
|
process(a_barber_doesnt_shave_event)
|
process(big_bang, a_barber_doesnt_shave_event)
|
begin
|
begin
|
if big_bang = '1' then
|
if big_bang = '1' then
|
counter2 <= x"0";
|
counter2 <= x"0";
|
elsif rising_edge(a_barber_doesnt_shave_event) then
|
elsif rising_edge(a_barber_doesnt_shave_event) then
|
counter2 <= counter2 + '1';
|
counter2 <= counter2 + '1';
|