FPGA Tic Tac Toe (2 / 10 steg)
Steg 2: Konfigurera handkontrollen Multi-lysdioder
Bestämma vem som får gå nästa är enkel.
Kom ihåg de goda gamla T Flip Flop som låter användaren "växla" produktionsvärde mellan 1 och 0? Vi kommer inte att använda som. Med Nexys 2 styrelsens "avancerade" klockfrekvens blir livet svårt för dig om du någonsin vill använda det för detta spel.
En annan stor brist av att använda T vänd floppen är att vi måste se till att användaren inte kan ändra produktionsvärde när han eller hon redan tryckt på knappen--det är en no no.
Därför har denna design, vi beslutat att använda XOR logik gates för att göra funktionen växla mellan varje spelare. Grundidén av XOR är att utgången '1' om det finns ett udda antal 1: s och utgång en '0' om det finns ett jämnt antal 1. Vi kommer att använda att tanken att avgöra vilken spelare slår den är.
För det första lagret av XOR gates blir deras input 2 bitar Q produktionen av D-flip flops setup i den enda LED-controller. Var och en av dessa XOR gates motsvarar en knapp av vårt Tic Tac Toe spel.
Om du tar en titt på schematiskt, produktionen av modulen kommer att vara en 2 bitars utdata: Index 0 blir den direkta produktionen av XOR och Index 1 kommer att vara dess invers. Denna kombination av "10", röda och "01", blå, kommer att byta tillbaka och fram ta reda på hur många knappar som har pressats.
Produktionen av XOR ska vara föda direkt till varje enskild LED-styrenhet för D är ingång d flip flops uppsättning upp. Eftersom vi kommer att ha antingen en "01" eller "10" utgång D flip flops setup, fallet "11" eller "00" kommer aldrig att indata för våra XOR setup.
WOW! Det var mycket att förklara. Men lita på oss, det är oändligt mycket lättare än att gå med T flip flop eller linjär SKIFT register rutt. USCH!
enhet Multi_LED_Handle är
port (Återställ: i std_logic;
Input1: i std_logic_vector (1 CEN. 0);
Input2: i std_logic_vector (1 CEN. 0);
Input3: i std_logic_vector (1 CEN. 0);
INGÅNG4: i std_logic_vector (1 CEN. 0);
INGÅNG5: i std_logic_vector (1 CEN. 0);
INGÅNG6: i std_logic_vector (1 CEN. 0);
Input7: i std_logic_vector (1 CEN. 0);
Input8: i std_logic_vector (1 CEN. 0);
Input9: i std_logic_vector (1 CEN. 0);
Utgång: ut std_logic_vector (1 CEN. 0));
slutet Multi_LED_Handle;
arkitektur dataflöde för Multi_LED_Handle är
signal temp: std_logic_vector (9 b 0);
börja
--XOR första nivån
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 andra nivån
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));
slutet dataflöde;