Skocz do zawartości

Przeszukaj forum

Pokazywanie wyników dla tagów 'FPGA ElbertV.2'.

  • Szukaj wg tagów

    Wpisz tagi, oddzielając przecinkami.
  • Szukaj wg autora

Typ zawartości


Kategorie forum

  • Elektronika i programowanie
    • Elektronika
    • Arduino i ESP
    • Mikrokontrolery
    • Raspberry Pi
    • Inne komputery jednopłytkowe
    • Układy programowalne
    • Programowanie
    • Zasilanie
  • Artykuły, projekty, DIY
    • Artykuły redakcji (blog)
    • Artykuły użytkowników
    • Projekty - roboty
    • Projekty - DIY
    • Projekty - DIY (początkujący)
    • Projekty - w budowie (worklogi)
    • Wiadomości
  • Pozostałe
    • Oprogramowanie CAD
    • Druk 3D
    • Napędy
    • Mechanika
    • Zawody/Konkursy/Wydarzenia
    • Sprzedam/Kupię/Zamienię/Praca
    • Inne
  • Ogólne
    • Ogłoszenia organizacyjne
    • Dyskusje o FORBOT.pl
    • Na luzie
    • Kosz

Szukaj wyników w...

Znajdź wyniki, które zawierają...


Data utworzenia

  • Rozpocznij

    Koniec


Ostatnia aktualizacja

  • Rozpocznij

    Koniec


Filtruj po ilości...

Data dołączenia

  • Rozpocznij

    Koniec


Grupa


Znaleziono 1 wynik

  1. Cześć, ponieważ dorastałem w latach 80-siątych XX wieku (szkołę średnią rozpocząłem w 1981 roku) dużo czasu spędzałem grając w proste gry na "automatach" (w Bydgoszczy były wtedy trzy duże salony gier i sporo osobno stojących automatów). Jedną z moich ulubionych gier była wtedy gra "Breakout" (znana też jako Arkanoid) więc postanowiłem poszukać, czy jakiejś wersji tej gry nie da się uruchomić zestawie FPGA. Znalazłem dwie implementacje tej gry: jedna rozbudowana z wieloma poziomami i fajną grafiką - jednak jej implementacja była oparta o soft-procesor i zajmująca duzo zasobów układu FPGA, druga natomiast bardzo prosta zaimplementowana w "zwykłych blokach logicznych" układu FPGA i zajmująca mało zasobów. Tą drugą bardzo prostą implementację (jeden poziom gry) postanowiłem uruchomić na zestawie FPGA ElbertV.2. Bazowałem na tym projekcie ze strony instructables.com: https://www.instructables.com/id/Breakout-Game/ Aby przystosować grę do zestawu Elbert należało wprowadzić kilka modyfikacji: 1) Dodać nowy zegar, który na podstawie zegara 12MHz z Elberta generował zegar 50 MHz (takim zegarem był taktowany oryginalny projekt) 2) Poprawić błąd w module głównym "breakout.v" związany z buforem dla zegara 25MHz (do taktowania wyświetlacza VGA) 3) Zanegować sygnały resetu gry (de) oraz do ruchu paletki rota i rotb 4) Zmienić proces obsługi paletki (tak, aby można było używać dwóch przycisków z zestawu Elbert) 5) Dostosować plik "user constraints" do zestawu Elbert V.2 Ale po koleji: Został dodany IPCore (moduł zegarowy) PLL_1 - instancja Clock12Mhz, a kod modułu głównego projektu (breakout.v) został zmieniony w następujący sposób: Kod oryginalny: module breakout( input clk50, input rota, input rotb, input de, output red, output green, output blue, output hsync, output vsync ); reg clk25_int; always @(posedge clk50) begin clk25_int <= ~clk25_xx; end wire clk25; BUFG bufg_inst(clk25, clk25_xx); wire [9:0] xpos; wire [9:0] ypos; signal_generator signal_generator_inst(clk25, hsync, vsync, xpos, ypos); game game_inst(clk25, xpos, ypos, rota, rotb,de, red, green, blue); endmodule Zmodyfikowany: module breakout( input clk12, //clk50 was input rota, input rotb, input de, output red, output green, output blue, output hsync, output vsync ); wire clk50; wire clkInBuf, clkOut; reg clk25; // Instantiate the module PLL-Clock PLL_1 Clock12MHz ( .CLKIN_IN(clk12), .CLKFX_OUT(clk50), .CLKIN_IBUFG_OUT(clkInBuf), .CLK0_OUT(clkOut) ); always @(posedge clk50) begin clk25 <= ~clk25; end wire [9:0] xpos; wire [9:0] ypos; signal_generator signal_generator_inst(clk25, hsync, vsync, xpos, ypos); game game_inst(clk25, xpos, ypos, ~rota, ~rotb, ~de, red, green, blue); endmodule W module "game.v" została całkowicie zmodyfikowana obsługa paletki: Było: // paddle movement reg [8:0] paddlePosition; reg [2:0] quadAr, quadBr; always @(posedge clk25) quadAr <= {quadAr[1:0], rota}; always @(posedge clk25) quadBr <= {quadBr[1:0], rotb}; always @(posedge clk25) if(quadAr[2] ^ quadAr[1] ^ quadBr[2] ^ quadBr[1]) begin if(quadAr[2] ^ quadBr[1]) begin if(paddlePosition < 520) // movement range paddlePosition <= paddlePosition + 3 ;//velocity of the paddle end else begin if(paddlePosition >= 0) // movement range paddlePosition <= paddlePosition - 3; // velocity of the paddle end end Po modyfikacji: // paddle movement reg [8:0] paddlePosition; reg [27:0] counter; always @(posedge clk25) begin counter <= counter + 1; if (counter == 250_000) begin counter <= 0; if(rota || rotb) begin if(rota) begin if(paddlePosition < 520) // movement range paddlePosition <= paddlePosition + 3 ;//velocity of the paddle end else if(rotb) begin if(paddlePosition >= 0) // movement range paddlePosition <= paddlePosition - 3; // velocity of the paddle end end end end Obsługa paletki jest teraz obsługiwana przez dwa "switche" sw4 i sw6 z płytki Elbert z częstotliwością około 100Hz (stąd dodany licznik w procesie). No i pozostaje dostosowanie pliku "breakout.ucf" do zerstawu Elbert co wygląda następująco: # Clock 12 MHz NET "clk12" LOC = P129 | IOSTANDARD = LVCMOS33 | PERIOD = 12MHz; #VGA pins NET "hsync" LOC = "P93" | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST ; NET "vsync" LOC = "P92" | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST ; NET "red" LOC = "P105" | IOSTANDARD = LVCMOS33 |DRIVE = 12 | SLEW = FAST ; NET "green" LOC = "P102" | IOSTANDARD = LVCMOS33 | DRIVE = 12 | SLEW = FAST ; NET "blue" LOC = "P98" | IOSTANDARD = LVCMOS33 |DRIVE = 12 | SLEW = FAST ; #Padd pins NET "rota" LOC = "P77" | IOSTANDARD = LVCMOS33 | PULLUP ; #sw6 NET "rotb" LOC = "P75" | IOSTANDARD = LVCMOS33 | PULLUP ; #sw4 NET "de" LOC = "P80" | IOSTANDARD = LVCMOS33 | PULLUP ; #sw1 Gra prezentuje się następująco: Szkoda tylko, że jest tak prosta (zajmuje około 60 % uniwersalnych komórek logicznych zestawu Elbert). Jeśli ktoś chciałby się włączyć do rozbudowy gry (wielu z Was posiada zestaw Elbert) to proponuję mały mini-konkurs: kto pierwszy zdoła tak zmodyfikować projekt tej gry aby za pomocą DIP-switchy z tego zestawu można było wybrać dwie różne szybkości piłeczki i dwie różne długości paletki. Jak analizowałem kod gry nie jest to szczególnie trudne do osiągnięcia (ale wymaga trochę przemyślenia jak można to najłatwiej osiągnąć). Może ten pomysł rozrusza trochę ten dział Forbot'a Tutaj pełny kod projektu dla ISE 14.7: Arkanoidgame.zip BTW: niestety nagrodą dla tego, któremu uda się to osiągnąć pierwszemu jest tylko prestiż Jeśli komuś udałoby się dodać wyświetlane liczni8ki zbitych "cegiełek" i ilości zgubionych piłeczek to byłby mistrzem. Pozdrawiam
×
×
  • Utwórz nowe...