
ãã¡ããã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ç®è³ªã®äžéšã®èšå®ããªã³ã«ããªãã£ãã®ããéãæªãã£ãã®ãããããŸãã...

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

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