ã¿ãªããããã«ã¡ã¯ïŒ

ãã®é·ãæ°å¹Žã®é±æ«ãç§ã¯çåã«æã£ãïŒãã£ã¹ãã¬ã€ãžã®åºåãšããŒããŒãå¶åŸ¡ãåããFPGAäžã«ç°¡åãªå°ããªããã¡ããæžãã®ã¯ã©ãã»ã©ç°¡åãã ããã§ããããªã¹ã®å¥ã®
FPGAå®è£
ãçãŸããŸããïŒ
yafpgatetris ã
ãã¡ãããFPGAã®ã²ãŒã ã¯ãå®éã®ããããã¯ã·ã§ã³ãã¿ã¹ã¯ãããæ¥œãããŠãã¬ãŒãã³ã°çšã«äœãããŠãããã²ãŒã ã®ãéçºããšã¯
ã»ã©é ãã§ããããã¯ç§ã«ãšã£ãŠæ°ããçµéšã§ãã
ãªãã¬ãŒãã£ã³ã°ã·ã¹ãã ãªãã§ã²ãŒã ãå®è¡ããæ¹æ³ã«èå³ãããå Žåã¯ãããªã¬ãŒãšçµã¿åããããžãã¯ã䜿çšããŠæäžäœã¬ãã«ã§ã²ãŒã ãå®è£
ããcatãžããããã
Devkitã«ã€ããŠ
ã²ãŒã ãå§ãŸããäœãããå¿
èŠã§ãã æãç°¡åãªæ¹æ³ã®1ã€ã¯ãéçºãããã䜿çšããããšã§ããéçºãããã«ã¯ãFPGAãšå
¥åºåçšã®åšèŸºæ©åšããããŸãã ç§ãèªç±ã«äœ¿ããã®ã¯ã
DE1-SoCãšåŒã°ããTerasicã®ã·ã§ãŒã«ã§ããã


äœãèšããŸããïŒ
éçºããããéçºãããã®ãããªã åšèŸºæ©åšã®å€ãïŒãããã
PS / 2ãš
VGAã³ãã¯ã¿ã¯ç§ãã¡ã«ãšã£ãŠè峿·±ãã§ãããã ïŒåŠæ ¡ã倧åŠã§ã®ïŒãã¬ãŒãã³ã°ã®ããã«ãŸãã«ããã ç§ãã¡ã®ç®çã®ããã«ããçç£ãã®ã¢ã€ãã¢ã®äžéšãå®è£
ããããã§ã¯ãªããéãã§ïŒãããŠåŠçãæè²ããããïŒã«è³Œå
¥ããŸããã
å®éã®ããã€ã¹ã§ïŒLEDãç¹æ»
ãããã ãã§ãªãïŒçªç¶DE1-SoCïŒãŸãã¯åæ§ã®ããŒãïŒã䜿çšããå ŽåïŒã³ã¡ã³ããå
±æããŠãã ããïŒãè峿·±ããã®ã«ãªããŸãã
ãããåã®
SoCã¯ããããã«éåžžã®FPGAããžãã¯ãšARMããã»ããµã®äž¡æ¹ãããããšãæå³ããŸãã ä»åŸã¯ãARMããã®ä»ã®ãœãããŠã§ã¢ããã»ããµã®ãããã䜿çšããªãã£ããããããŒãäžã§ä»ã®FPGAãããã䜿çšããŠãããžã§ã¯ããå®è¡ã§ããŸãã FPGA + ARMã
倧éã«èª¿éããããšãããã³ããããåŸãããããŒãã¹ã«ã€ããŠèå³ãããå Žå
㯠ãååã®
Des333ã® èšäºãåç
§ããããšããå§ãããŸãã
äœãæã«å
¥ãããã§ãã
ãããªã¹ã®æŠå¿µã«ã¯ããŸããŸãªãã®ãæè³ã§ãããããããããã®TKãã¹ã±ããããŸããã
- æ°åã®æšæºã»ããã ãããã®æ¯ãèãã¯ãéåžžãšåæ§ã§ãªããã°ãªããŸããã
- ã²ãŒã ã¯ã«ã©ãã«ã§ãã åå³ã«ã¯ç¬èªã®è²ããããŸãã
- å³ã¯ãåäžãªååžã§ã©ã³ãã ã«çæãããŸãã
- 次ã®å³ã衚瀺ããããŠã£ã³ããŠãããã¯ãã§ãã
- ã²ãŒã ã®ç¶æ
ã«é¢ããæ
å ±ãããã¯ãã§ãïŒãã€ã³ãã®æ°ãåé€ãããè¡ã®æ°ãçŸåšã®ã¬ãã«ã
- ãã€ã³ãã¯ãããã°ã¬ãã·ããã¹ã±ãŒã«ã§æäžãããŸããäžåºŠã«åé€ãããã©ã€ã³ãå€ãã»ã©ããã€ã³ããå€ããªããŸãã
- ã¬ãã«ãé«ãã»ã©ãæ°åã®èœäžé床ã倧ãããªããŸãã
- ãã²ãŒã ã®çµäºããæ£ããæ€åºããããšãæ°ããã²ãŒã ãéå§ããããšãã§ããŸãã
- ãŠãŒã¶ãŒã¢ã¯ã·ã§ã³ã¯ããŒããŒãããå
¥åãããŸãïŒPS / 2ïŒã
- ãã£ãŒã«ãã®ã¹ããŒã¿ã¹ãªã©ã®è¡šç€ºã¯ãVGAã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠåŸæ¥ã®ãã£ã¹ãã¬ã€ã§è¡ãããŸãã
ãããžã§ã¯ãæŠèŠ

3ã€ã®äž»èŠãªéšåãåºå¥ã§ããŸãã
- ãŠãŒã¶ãŒå
¥åã ããŒããŒãããã®ããŒã¿ãåãå
¥ããã·ã¹ãã ã§ãå®è¡ãããŸãã
- ã²ãŒã èªäœã«é¢é£ãããã¹ãŠã å®éãFSMïŒæéç¶æ
ãã·ã³ïŒã¯ããã¬ãŒã€ãŒãããèŠæ±ããåãåããããã¹ãŠãå®è¡ãããŸããæ°ããå³åœ¢ãçæããããããç§»åããç·ãåé€ããŸãã
- ã²ãŒã ã®ã¹ããŒã¿ã¹ã衚瀺ããŸãã VGAã€ã³ã¿ãŒãã§ã€ã¹ãä»ããŠãã£ã¹ãã¬ã€ã«æç»ããŸãã
PS / 2
æ£çŽãªãšãããæåã¯ããŒããŒããªãã§ã¯ãžã©èªäœã®ããŒã䜿çšããããšãèããŸããããé©ãã¹ãããšã«ããŒããŒãã«åé¡ã¯çºçããŸããã§ããã
ããŒããŒãããã³ãã³ããåä¿¡ããã«ã¯ãPS / 2ã³ã³ãããŒã©ãŒãå¿
èŠã§ãã ããã䜿ããŸããã
å°ãçè«ã«ç®ãåãããšãåããŒã«å¯ŸããŠãããŒããŒããæŒããããé¢ãããããããšãã«éä¿¡ããäžé£ã®
ã³ãŒããå®çŸ©ãããŸãã
ãEnterãããŒãæŒããŸãã
- ã¡ãŒã«ãŒïŒ5A
- äŒæ©ïŒF0.5Aã
FPGAå
ã§ã©ã®ããã«èŠãããèŠãŠã¿ãŸãããã
éåžžã®ããŒã¹ãããŒã¯ïŒ

ã芧ã®ãšãããæ¬åœã«ïŒ
- ããŒãæŒããšã5Aãæ¥ãŸãã
- ãªãªãŒã¹ããŸãïŒF0ã¯5Aã«ç¶ããŸãã
- ããäžåºŠæŒããšã5Aãç¶ããŸãã
ããŒãæŒãç¶ãããšã次ã®ããã«ãªããŸãã

5AããŒã ã¯äžå®ã®é »åºŠã§åå ããŸãã
ããŒã®å°ããªã»ãããå¿
èŠã§ãã
- åŸæ¥ã®ç¢å°-å³ãå¶åŸ¡ããŸãã
- n-æ°ããã²ãŒã ãéå§ããŸãã
ã€ãã³ãã®ã¿ã€ããå€å¥ããã«ã¯ãã·ããã¬ãžã¹ã¿ãšå°ããªããªããã£ãããžãã¯ã䜿çšããŠãä»ã®ãã¹ãŠã®ããŒãã¹ãããããŸãã ãã®ã²ãŒã ã®äžç°ãšããŠãããŒã¹ãããŒã¯ã«é¢ããã€ãã³ããæ€åºãããªãªãŒã¹ãç¡èŠããã ãã§ååã§ãããšå€æããŸããã ããŒãæŒãããŸãŸã«ãããšãããŒãæŒããããšããã³ãã³ãã衚瀺ãããããããã¬ãŒã€ãŒã¯ãã£ã®ã¥ã¢ãåããããè£è¿ãããããããšãæã¿ãŸãã æ°åãããŸãã«ãçããåãã®ã§ã¯ãªãããšå¿é
ããŠããŸããããäœãèµ·ãããŸããã§ããã
èå³ã®ãããã€ãã³ãããæ€åºããåŸãFIFOã«å
¥ããããããã²ãŒã ã®ãé©çšãããããžãã¯ãããããååŸããŸãã ããŒãã«PS / 2ããªããããã€ãã®ããŒããã°ã«ã¹ã€ãããããå Žåããããã®ãã¿ã³ããã€ãã³ããã«ããã·ã¥ããããžãã¯ãèšè¿°ããã ãã§ãã²ãŒã ã¯äœãèªèããŸããã
ãã®ã³ã³ãããŒã©ãŒã䜿çšãããšãããŠã¹ãæ¥ç¶ã§ããŸããã詊ããããšã¯ãããŸããã
ã²ãŒã ã®åºæ¬çãªããžãã¯
äžæ¹ã§ã¯ãè«çã¯ç°¡åã§ãããæ¬¡ã®FSMã«ãã£ãŠèšè¿°ãããŸãã

ïŒæ£çŽãªãšããã誰ãããState Machine Viewerããããã¯ã·ã§ã³ã䜿çšããŠãããã©ããããããŸããããããããªããã³ã¡ã³ããå
±æããŠãã ãããFPGAã®éçºæéäžãæ°åããããŠãã¬ãŒãã³ã°ã®äžéšãšããŠãããéããŸãããïŒ
FSMã¯ã次ã®ãããã¯/ã¢ãžã¥ãŒã«ãšãéä¿¡ãããŸãã
- gen_sys_event-æ°åãèªåçã«äžã«ç§»åããå¿
èŠãããæéãã«ãŠã³ãããã¿ã€ããŒã
- gen_next_block-æ°ããå³ã®çæã
- check_move-çŸåšã®ãç§»åããå¯èœãã©ããã確èªããŸãã
- tetris_stat- ãçµ±èšãã®èç©ã
- user_input-ãŠãŒã¶ãŒããçæãããã€ãã³ããèªã¿åããŸãã
ãã¹ãŠãC ++ / Java /ãªã©ã§èšè¿°ããããéåžžã®ããããªã¹ã®å®è£
ã«éåžžã«äŒŒãŠããŸããããŸããŸãªã¢ãžã¥ãŒã«ããããã®èšèªã®é¢æ°ãšããŠæ©èœããŸãã ã¯ããåãåé¡ãçºçããŸããç§ããã£ã®ã¥ã¢ã®ã¯ãŒãã¿ãŒã§æãé·ã座ã£ããšãããã®çãã¯
ã¯ã¢ãã©ããã»ã«ã®ã³ãŒãã«
èŠåŒµãããŠã
ãŸãã ã 1ã€ã®ãªãã·ã§ã³ã¯ãå¯èœãªãã¹ãŠã®ã¹ãã¬ããã®ããŒãã«ãä¿åã§ããããšã§ãïŒåå³ã«ã¯4ã€ã®ãªãã·ã§ã³ããããŸãïŒã
ãã¹ãŠã®ã³ãŒãã¯Verilogã§èšè¿°ãããŠãããããæ£ç¢ºã«ã¯SystemVerilogã§èšè¿°ãããŠããŸãã äžæ¹ã§ã¯ãSystemVerilogã¯Verilogãããã¯ããã«æè»æ§ãããã仿¹ã§ã¯ãå¶éããªããããå€ãã®ç°ãªããã®ãå®è£
ããããšããäºå®ã«ã€ãªãããŸã:)ã
ç§ã¯èªåã®äººçãåçŽåããŸããïŒãã£ãŒã«ãã®çŸåšã®ç¶æ
ã¯ïŒå
éšã¡ã¢ãªã§ã¯ãªãïŒã¬ãžã¹ã¿ã«ä¿åããããã®ããïŒããã€ãã®äºæãæé©ã«è¡ãããªããšããäºå®ãšãšãã«ïŒå€ãã®ããžãã¯ã圢æããããããžã§ã¯ãã¯å€ãã®ãªãœãŒã¹ïŒ32kã®çŽ3.2k ALMïŒãå æããŸãïŒ ã¡ã¢ãªã«ç§»åããå Žåãããã€ãã®ããšãé çªã«è¡ãå¿
èŠããããŸãïŒããšãã°ãå¡ãã€ã¶ãããè¡ãåé€ããå¿
èŠããããšãã«ãã£ãŒã«ãå
šäœãäžã«ã·ããããŸãïŒã ã»ãšãã©ã®å Žåãã¡ã¢ãªã®äœ¿çšãããçŽããŸããã
ãã¹ãã®ç®çã§ãç§ã¯DE0 / DE1ããŒãïŒç§ãæã£ãŠããããŒãã®å
åŒã§ãããäœã³ã¹ãã®ãããã䜿çšããŠããŸãããªãœãŒã¹ãå°ãªãããè¥ãäžä»£ãã§ãïŒïŒãªãœãŒã¹ãããžã§ã¯ãã䟵å
¥ããŸãã ããã...
é衚瀺ã®ããã¹ã...ç®±ããåºããŠããã«ã¯æ©èœããŸããïŒ
- Quartusã¯qsfãã¡ã€ã«ã®ããã€ãã®ããšãèªããŸãã ãµã€ã¯ãã³II / IIIããªã第14ååæã«åéããŸããã quartusã®åæããŒãžã§ã³ã¯ãããã®ããšãç¥ããŸãããqsfãã¡ã€ã«ã§ãããã®è¡ãåé€ããããã«ãã³ã䜿çšããããæå³ã§quartus GUIã«åãããŒãºãé
眮ããå¿
èŠããããŸãã
- åšæ³¢æ°ã«é©åããŸããããã®ãããžã§ã¯ãã®ãã¡ã€ã³ãåšæ³¢æ°ã¯108 MHzã§ãïŒmain_game_logicèªäœãšVGAã¬ã³ããªã³ã°ãåäœããŸãïŒã å°ãå
ãèŠããšãåšæ³¢æ°ã¯108 MHzã§ã-è§£å床ã1280x1024ã§ããããã640x480ã䜿çšããå Žåã25 MHzã®åšæ³¢æ°ããããé©åããŸãã
- PLLããã³FIFOã®ã¡ã¬ãã¡ã³ã¯ã·ã§ã³ãåçæããå¿
èŠãããå ŽåããããŸãã Cyclone Vçšã«äœæãããŸããã
- ãã£ã¹ãã¬ã€åºåãå°ãç·šéããå¿
èŠãããå ŽåããããŸãïŒä»ã®è²ãéžæïŒã ããã§ã¯ããã®ããŒãã®ããã«ã8è²ã«å¯ŸããŠãåè²ã«4ãããã®ã¿ãå²ãåœãŠãããŠããŸãïŒç§ãçè§£ããŠããããã«ïŒã
ãã£ã¹ãã¬ã€
FPGAã䜿çšããŠã
ãããªã©ã®VGAãä»ããŠãã£ã¹ãã¬ã€ã«ç»åã衚瀺ããæ¹æ³ã«ã€ããŠã¯å€ãã®æ
å ±ããããããããã«ã€ããŠã¯è©³ãã説æããŸããã
ãã®ã¯ãžã©ã§ã¯ãVGAåºåã¯æ¬¡ã®ããã«äœæãããŸãã
VGA_CLKã®åãµã€ã¯ã«ã§ã¯ãRGBã¢ãã«ã§æ°ããã«ã©ãŒå€ãèšå®ããå¿
èŠããããDACã¯ãããã®å€ãç®çã®ä¿¡å·ã¬ãã«ã«å€æããŸãã
VGAä¿¡å·ã®ã³ã³ãããŒã©ãŒãšããŠããã®ãããã®
CDã«ãããã¢äŸããã¢ãžã¥ãŒã«ãåããŸããã CDã®æŠå¿µãããã®ã¯é¢çœãã§ãããããŒãã«ã¯CDãå«ãŸããŠããŸãããã€ã³ã¿ãŒãããããã¢ãŒã«ã€ããããŠã³ããŒãããå¿
èŠããããŸãã
ãã®ãã³ã³ãããŒã©ãŒãTerasicã¯ä»ã®ã¯ãžã©ã§äœ¿çšããŸãããvga_time_generatorããšããååã§ç°¡åã«ã°ãŒã°ã«ã§æ€çŽ¢ã§ããŸãã ä»»æã®åäœã¢ãŒãïŒ
640x480ã800x600ãªã©ïŒã«æ§æã§ãã衚瀺çšã«çŸåšã®ãã¯ã»ã«ã®åº§æšïŒ
pixel_x ã
pixel_y ïŒãæäŸã§ãããšãã
ç¹ã§
䟿å©ã§ãã ç§ãã¡ã®ã¿ã¹ã¯ã¯ããããã®åº§æšã«å¿ããŠå¿
èŠãªè²ã®å€ã眮ãæããããšã§ãã

倧ããªã¢ãã¿ãŒã®640x480ã¯èŠæ ãããããªããšå€æãã1280x1024ã«ç§»è¡ããŸãããå¿
èŠãªå€ã
æšæºããã¢ãžã¥ãŒã«ã«æž¡ãã ãã§ãã ããã«ã
VGA_CLKå€ã倿Žãã
å¿
èŠããããŸãã
ã25.175MHzã§ã¯ãªãã108 MHzã«ãªããŸããã 確ãã«ãåŸã§å°ãåŸæããŸããããçŸããã«ã¯ç ç²ãå¿
èŠã§ãã
ããã€ãã®ããªããã£ããªããžã§ã¯ãã衚瀺ããæ¹æ³ãèããŠã¿ãŸãããã
äŸïŒ
`define RGB_BLACK 24'h00_00_00 `define RGB_ORANGE 24'hFF_A5_00 logic [23:0] vga_data; localparam START_X = 100; localparam START_Y = 100; localparam END_X = START_X + 200 - 1; localparam END_Y = START_Y + 300 - 1; always_comb begin vga_data = `RGB_BLACK; if( ( pixel_x >= START_X ) && ( pixel_x <= END_X ) && ( pixel_y >= START_Y ) && ( pixel_y <= END_Y ) ) vga_data = `RGB_ORANGE; end assign { r, g, b } = vga_data;
ãµã€ãºã200x300ãã¯ã»ã«ã®ãªã¬ã³ãžè²ã®æ£æ¹åœ¢ã衚瀺ãããå·Šäžé
ãïŒ100ã100ïŒã«ãããŸãã
ãŸãã¯ïŒ
`define RGB_BLACK 24'h00_00_00 `define RGB_ORANGE 24'hFF_A5_00 logic [23:0] vga_data; localparam MSG_X = 56; localparam MSG_Y = 5; logic [0:MSG_Y-1][0:MSG_X-1] msg; assign msg[0] = 56'b10010011110010000010000001100000001001000110001110001110; assign msg[1] = 56'b10010010000010000010000010010000001001001001001001001001; assign msg[2] = 56'b11110011110010000010000010010000001111001111001111001111; assign msg[3] = 56'b10010010000010000010000010010000001001001001001001001110; assign msg[4] = 56'b10010011110011110011110001100000001001001001001110001001; logic [$clog2(MSG_X)-1:0] msg_pix_x; logic [$clog2(MSG_Y)-1:0] msg_pix_y; localparam START_MSG_X = 100; localparam START_MSG_Y = 100; localparam END_MSG_X = START_MSG_X + MSG_X - 1; localparam END_MSG_Y = START_MSG_Y + MSG_Y - 1; assign msg_pix_x = pixel_x - START_MSG_X; assign msg_pix_y = pixel_y - START_MSG_Y; always_comb begin vga_data = `RGB_BLACK; if( ( pixel_x >= START_MSG_X ) && ( pixel_x <= END_MSG_X ) && ( pixel_y >= START_MSG_Y ) && ( pixel_y <= END_MSG_Y ) ) begin if( msg[ msg_pix_y ][ msg_pix_x ] ) begin vga_data = `RGB_ORANGE; end end end assign { r, g, b } = vga_data;
é»ãèæ¯ã«ãªã¬ã³ãžã®é«ã5ãã¯ã»ã«ã®
HELLO HABRãã©ã³ãã衚瀺ããŸããã ïŒ
msgé
åã®åäœãèŠãŠãã ããïŒã
ããçš®ã®éçãªã¡ãã»ãŒãžãã²ãŒã ãã£ãŒã«ããã©ã®ããã«æãããšãã§ãããã¯æããã ãšæããŸãã
è¡ãå°å·ãã
çµ±èšïŒãã¹ã³ã¢ãããã©ã€ã³ãããã¬ãã«ããããã³ãããã®å€ã®è¡ïŒã衚瀺ããããã«ããã¯ã©ã·ãã¯ããã¹ã«æ²¿ã£ãŠé²ãããšã«ããŸããã ããšãã°ã
ããã§ç¢ºèªã§ã
ãŸã ã
ããããžãã¯ïŒèªã¿åããæåããŸãã¯æ°åïŒããä»ããã«åºåããïŒ
ãã¯ã»ã«ãæ¢ã«æ±ºå®ãããŠãããšä»®å®ããŸãïŒ
pixel_x ã
pixel_yã«äŸå ïŒã ããã衚瀺ããã«ã¯ãæ¢è£œã®ãã©ã³ãããŒãã«ã䜿çšããŸãããã®ããŒãã«ã§ã¯ããŠãããã¯ãã©ã®ãã¯ã»ã«ããã©ã³ãã«ã©ãŒã§ãã€ã³ããããŒãïŒèæ¯è²ïŒã§ãã€ã³ãããå¿
èŠããããã瀺ããŸãã
"00000000", -- 0 "00000000", -- 1 "00010000", -- 2 * "00111000", -- 3 *** "01101100", -- 4 ** ** "11000110", -- 5 ** ** "11000110", -- 6 ** ** "11111110", -- 7 ******* "11000110", -- 8 ** ** "11000110", -- 9 ** ** "11000110", -- a ** ** "11000110", -- b ** ** "00000000", -- c "00000000", -- d "00000000", -- e "00000000", -- f
å€ãã®ãããžã§ã¯ãïŒãããã¯ãŒã¯äžã«ãããŸãïŒã§ã¯ããã®ãããªããŒãã«ïŒ
Font ROM ïŒãVGAã§äœ¿çšãããŸããã640x480ãã£ã¹ãã¬ã€çšã«èšèšãããŠããŸãïŒ1280x1024ã§ã¯å°ãããããããåæ§ã®ããŒãã«ãã倧ããããã©ã³ãã§æºåããå¿
èŠããããŸãã
nafeãŠãŒãã£ãªãã£ã¯ãããå©ããŠãããŸããã å
¥åã§ãpsfãã¡ã€ã«ãåºåã§ãæç»ããå¿
èŠã®ãããã¯ã»ã«ã®Xä»ãããã¹ããã¡ã€ã«ãåãåããŸãã ãæ°ã«å
¥ãã®èšèªã䜿çšããŠïŒãŸãã¯å
ã®ããã°ã©ã ã®åºåãå°ãããçŽãïŒãXãã1ãã«ãã¹ããŒã¹ãã0ãã«å€æŽããããããŒã远å ããŠmifãã¡ã€ã«ãäœæããŸãïŒROMã®åæåã«äœ¿çšãããŸãïŒã
ç§ã®psf圢åŒã§èŠã€ããæå€§ã®ãã©ã³ãã¯32x16ã§ãååãšããŠãã®ã¿ã¹ã¯ã«ã¯ååã§ããããããå°ãäœããããšæããŸãã ç§ãçè§£ããŠããéããå¶éã¯ãããŸããããã®ãŠãŒãã£ãªãã£ã䜿çšãããšãä»»æã®æåïŒãã·ã¢èªã®æåãªã©ïŒã§ROMãæºåã§ããŸãã
ãã ãã
yafpgatetrisããããŒãš
GAMEOVERã¡ãã»ãŒãžã«ã€ããŠã¯
ããã®ãµã€ãºã¯å°ããããã«æãããããäžèšã®äŸã®
HELLO HABRè¡ãšåæ§ã«ãããã®ã¡ãã»ãŒãžã衚瀺ããããšã«ããŸããã å¯äžã®è³ªåã¯
msgãæºåããæ¹æ³ã§ã ç§ã¯æ¬åœã«ããããã³ã§ãããããããŸããã§ããã
ããã«ãæ¯èŒçåçŽãªèªè»¢è»ïŒïŒïŒãæãã€ããŸããã
- Paint / GIMPã«åžæã®ãã©ã³ããšãµã€ãºã®ããã¹ããå
¥åããŸãã
- å§çž®ããã³ã¹ã ãŒãžã³ã°ãªãã§PNGã«ä¿åããŸãã
- æ¢è£œã®ã©ã€ãã©ãªã䜿çšããŠPNGãã¡ã€ã«ãèªã¿åãããã¯ã»ã«ããšã«ãè²ãçœãã®å Žåã¯0ããè²ãé»ãã®å Žåã¯1ãå°å·ããŸãã
çµæã®ãŒããš1ã®ã»ããã¯ãROMã«å
¥ããããšãã§ããŸãïŒãã¡ãããç°ãªããã©ã³ãã§ïŒã
ããã€ãã®åç
ãéçºäžãã·ãªãŒãºã®åçïŒ
é衚瀺ã®ããã¹ããã£ãŒã«ãã衚瀺ããæ¹æ³ãåŠã³ãŸãããæ°åã¯åçŽã«èœã¡ããã¹ãŠåãè²ã§ãã

çµ±èšãšç°ãªãè²ã远å ãããŸããã è²vyrviglaznye :)

ããŠãæçµããŒãžã§ã³ã¯èšäºã®åé ã«ãããŸã:)
PS
æ£çŽã«èšããšããã£ã¹ãã¬ã€ã§ãã®ãããªããã¿ããæ®åœ±ãããšããVGAç®è³ªã®äžéšã®èšå®ããªã³ã«ããªãã£ãã®ããéãæªãã£ãã®ãããããŸãã...
ãŸãšã
ãœãŒã¹ïŒhttps://github.com/johan92/yafpgatetrisãããªïŒç§ã¯ãããžã§ã¯ããå¯èœãªéããã©ã¡ãŒã¿åããŠãè«ççã«éšåã«åå²ããããšããã®ã§ãä»ã®è»ãèããããå¿
èŠãããç§ã®ãããžã§ã¯ãã«åºã¥ããŠãã¬ãŒã¹ããäœãããå Žåã¯ã
main_game_logicãæžããŠãå¿
èŠã«å¿ããŠåºåããããã«ä¿®æ£ããŠãã ããã
ãã¯ãªãŒã³ã¿ã€ã ããèæ
®ãããšãéçºã«çŽ5æ¥ããããŸãããå³ã®å転ããããå¿
èŠãããïŒå®éãã¢ã«ãŽãªãºã ã2åæžãæããå¿
èŠããããŸãïŒãè²ããµã€ãºãé
眮ãã¡ãã»ãŒãžã®å Žæãéžæããã®ã«å€ãã®æéãããããŸããã å
éšã®å®ç§äž»çŸ©è
ã¯ãå
éšã®ãã¶ã€ããŒã«äœããåãããããäœããå¢ããããæžããããããããšãåžžã«èŠæ±ããŸãããç§ã«ãšã£ãŠãGUIéçºã¯ç§ã®ãã®ã§ã¯ãªãããšãç¥ããŸããã
ãããã賌å
¥ããŠFPGAåãã®éçºæ¹æ³ãåŠã³ããå Žåã¯ãæåã®ãããžã§ã¯ããšããŠãããªã¹ãçŽæ¥è¡ãããšã¯ãå§ãããŸããã LEDãã»ã°ã¡ã³ãã€ã³ãžã±ãŒã¿ãæèšããã®ä»ã®å€å
žçãªãã®ããå§ããŸãã ããã«åæ Œãããããããªã¹ãŸãã¯ä»ã®ã·ã³ãã«ãªã²ãŒã ã詊ãããšãã§ããŸãã ç§ã®ãããžã§ã¯ãããã®åãçµã¿ã«åœ¹ç«ã€ããšãé¡ã£ãŠããŸãã
ãæž
èŽããããšãããããŸããïŒ è³ªåãããå Žåã¯ãééããªã質åããŠãã ããã