Stap 2: Configureer uw Multi-LEDs-Controller
Bepalen wie krijgt om te gaan volgende is eenvoudig.
Herinner de goede oude T Flip Flop waarmee de gebruiker "wissel" de output waarde tussen 1 en 0? We zullen niet die worden gebruikt. Met de Nexys 2 Board "geavanceerde" kloksnelheid, het leven heel moeilijk voor u zal zijn als u ooit wilt gebruiken die voor dit spel.
Een andere grote fout van het gebruik van de T Flip flop is dat we hebben om ervoor te zorgen dat de gebruiker de uitvoer waarde niet wijzigen nadat hij of zij al drukte op de knop--dat is geen nee.
Dus voor dit ontwerp hebben we besloten te XOR logica poorten te doen van de functie van het schakelen tussen elke spelers. Het fundamentele idee van XOR is dat het zal output van '1' als er een oneven aantal 1's en output van een '0' als er een even aantal 1's. We zullen gebruiken dat idee om te bepalen welke speler olMeeting is.
Voor de eerste laag van XOR poorten, zal hun inbreng zijn dat de 2 bit Q-output van de D-flip flops setup in de single LED controller. Elk van deze poorten XOR correspondeert met een knop van onze Tic Tac Toe game.
Als u een kijkje op het schema nemen, de output van de module zullen een uitgang 2 bit: Index 0 zal worden de directe output van de XOR en Index 1 zullen de inverse. Deze combinatie van "10", "01", rood en blauw, zal worden terug schakelen en weer bepalen van het aantal knoppen zijn ingedrukt.
De output van de XOR zal worden feed rechtstreeks naar elke individuele Single LED Controller voor de inbreng van de D van de D flip flops set up. Aangezien er een "01" of "10" output van de D-flip flops setup, geval "11" of "00" nooit zal de input voor onze XOR-setup.
WOW! Dat was veel om uit te leggen. Maar geloof ons, het is oneindig veel gemakkelijker dan gaan met de T flip flop of de lineaire shift register route. BAH!
entity Multi_LED_Handle is port (Reset : in std_logic; Input1 : in std_logic_vector(1 downto 0); Input2 : in std_logic_vector(1 downto 0); Input3 : in std_logic_vector(1 downto 0); Input4 : in std_logic_vector(1 downto 0); Input5 : in std_logic_vector(1 downto 0); Input6 : in std_logic_vector(1 downto 0); Input7 : in std_logic_vector(1 downto 0); Input8 : in std_logic_vector(1 downto 0); Input9 : in std_logic_vector(1 downto 0); Output : out std_logic_vector(1 downto 0)); end Multi_LED_Handle; architecture Dataflow of Multi_LED_Handle is signal temp : std_logic_vector(9 downto 0); begin -- XOR First level temp(0) <= input1(0) XOR input1(1); temp(1) <= input2(0) XOR input2(1); temp(2) <= input3(0) XOR input3(1); temp(3) <= input4(0) XOR input4(1); temp(4) <= input5(0) XOR input5(1); temp(5) <= input6(0) XOR input6(1); temp(6) <= input7(0) XOR input7(1); temp(7) <= input8(0) XOR input8(1); temp(8) <= input9(0) XOR input9(1); -- XOR Second level temp(9) <= temp(0) XOR temp(1) XOR temp(2) XOR temp(3) XOR temp(4) XOR temp(5) XOR temp(6) XOR temp(7) XOR temp(8); Output(0) <= temp(9); Output(1) <= not(temp(9)); end Dataflow;