URL
https://opencores.org/ocsvn/russels_paradox/russels_paradox/trunk
Subversion Repositories russels_paradox
Compare Revisions
- This comparison shows the changes necessary to convert path
/russels_paradox
- from Rev 1 to Rev 2
- ↔ Reverse comparison
Rev 1 → Rev 2
/trunk/barber.vhd
0,0 → 1,74
---------------------------------------------------------------------------------- |
-- http://en.wikipedia.org/wiki/Barber_paradox => |
-- "The barber is a man in town who shaves all those, and only those, |
-- men in town who do not shave themselves." |
|
--The point is that the barber is represented by the logical value '1' in the two |
--stage shift register. The '1' shows which set he currently belongs to. In a more |
--sophisticated case we may assume there are several barbers in different cities, |
--and the sets may include more elements at once. |
|
--The reset state is arbitrarily choosen, and in a complex system might effect |
--the long term behaviour: like if the model of the sets definition would somwhow |
--happen to be an LFSR that does not run through all the combinations... |
|
--If the barbers are not identical, FIFO-s can be used to hold their identifiers. |
---------------------------------------------------------------------------------- |
|
library IEEE; |
use IEEE.std_logic_1164.all; |
use IEEE.numeric_std.all; |
use IEEE.std_logic_unsigned.all; |
|
entity barbers is |
Port ( a_barber_shaves_event : in STD_LOGIC; |
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_not_shave_themselves : out STD_LOGIC); |
end barbers; |
|
architecture simulateable of barbers is |
|
begin |
|
process(a_barber_shaves_event, a_barber_doesnt_shave_event) |
begin |
if big_bang = '1' then |
number_of_barbers_who_may_shave_themselves <= x"0"; |
number_of_barbers_who_may_not_shave_themselves <= x"f"; |
else |
number_of_barbers_who_may_shave_themselves <= number_of_barbers_who_may_shave_themselves + a_barber_doesnt_shave_event - a_barber_shaves_event; |
number_of_barbers_who_may_not_shave_themselves <= number_of_barbers_who_may_not_shave_themselves - a_barber_doesnt_shave_event + a_barber_shaves_event; |
end if; |
end process; |
|
end simulateable; |
|
architecture synthesisable of barbers is |
|
signal counter1, counter2 : std_logic_vector(3 downto 0); |
|
begin |
|
process(a_barber_shaves_event) |
begin |
if big_bang = '1' then |
counter1 <= x"f"; |
elsif rising_edge(a_barber_shaves_event) then |
counter1 <= counter1 + '1'; |
end if; |
end process; |
|
process(a_barber_doesnt_shave_event) |
begin |
if big_bang = '1' then |
counter2 <= x"0"; |
elsif rising_edge(a_barber_doesnt_shave_event) then |
counter2 <= counter2 + '1'; |
end if; |
end process; |
|
number_of_barbers_who_may_shave_themselves <= counter2 - counter1; |
number_of_barbers_who_may_not_shave_themselves <= counter1 - counter2; |
|
end some_barbers; |