ã¿ãªããããã«ã¡ã¯ïŒ
åå¿è
ã®éçºè
ã¯ãç¹å®ã®èšèªã®çå£ãªç ç©¶ã®ããã«ã©ã®ãããªæåŠãèªãã¹ãããããŸãããç¥ããªãããšããããŸãã
FPGAïŒFPGAïŒéçºã¯åãªãèšèªã§ã¯ãããŸããã ããã¯éåžžã«èšå€§ãªé åã§ãèœãšã穎ãšãã¥ã¢ã³ã¹ãéåžžã«å€ããããŸãã
ãã®èšäºã«ã¯ä»¥äžãå«ãŸããŠããŸãã
- åå¿è
FPGAéçºè
ãåŠã¶ã¹ããããã¯ã®ãªã¹ã
- åãããã¯ã«é¢ããæšå¥šæç®
- ãã¹ãåé¡ãšå®éšå®€äœæ¥ã®ã»ãã
- å€å
žçãªåå¿è
ã®ãã°ïŒããã³ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ãã³ãïŒ
ç«ãžããããïŒ
ç¥ã£ãŠå¿
èŠãªããš
ããžã¿ã«åè·¯
å¿
èŠã§ãïŒ
- åºæ¬çãªããžã¿ã«ããŒãïŒAND / OR / NOTè«çèŠçŽ ããšã³ã³ãŒããŒããã«ããã¬ã¯ãµãŒãå ç®åšãªã©ïŒãç¥ã£ãŠãã
åç
§ ïŒ
ãã¹ãã®è³ªå ïŒ
- ããžã¿ã«åè·¯ã¯ã¢ããã°åè·¯ãšã©ãéãã®ã§ããïŒ
- åºæ¬çãªããžã¿ã«ããŒããšã¯äœã§ããïŒ ãããã®ãã¡ãåºåã¯å
¥åã®ã¿ã«äŸåããŸããïŒ
- ãã«ããã¬ã¯ãµãšã¯äœã§ããïŒ ããªããã£ãAND / OR / NOTèŠçŽ ã®4-in-1ãã«ããã¬ã¯ãµãŒãã€ã¢ã°ã©ã ãæç»ããŸãã
- åŒã®ççå€è¡šãäœæããŸãïŒ X = A orïŒB and CïŒor D.
HDLæ§æ
ããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- HDLèšèªã®åæã³ã³ã¹ãã©ã¯ãïŒæ§æïŒã®ç¥è
- HDLèšèªã䜿çšããŠåºæ¬çãªããžã¿ã«ããŒããèšè¿°ããæ¹æ³ã«é¢ããç¥è
- HDLã³ãŒãã®ãã®éšåãïŒåºæ¬çãªããžã¿ã«ããŒãã®åŽããïŒäœãå€ããŠããããçè§£ãã
- æ£ããåäœãåŸãããã«HDLèšèªã§æžãèœå
HDLèšèªãšããŠãæåã«
Verilogã®æãåºæ¬çãªæ§é ãåŠç¿ããæ¬¡ã«
SystemVerilogã«åãæ¿ããããšããå§ãããŸãã
åç
§ ïŒ
ãã¹ãã®è³ªå ïŒ
- ããããã³ã°å²ãåœãŠã¯ããã³ããããã³ã°ãšã©ã®ããã«éããŸããïŒ äžæ¹ã䜿çšãã䟡å€ãããå Žåãããäžæ¹ã䜿çšãã䟡å€ãããå Žå
- 次ã®3ã€ã®èª¬æã«éãã¯ãããŸããïŒ ãããããªããããã¯ã©ã®ããã«çŸããŸããïŒ
// code 1: assign a = b + c; // code 2: always @( b or c ) begin a = b + c; end // code 3: always @( * ) begin a = b + c; end
ãã¹ãã¿ã¹ã¯ ïŒ
1.次ã®ã³ãŒãã®åºæ¬çãªããžã¿ã«ããŒãã®å³ãäœæããŸãã
é衚瀺ã®ããã¹ã module test( input clk_i, input a_i, input [2:0] b_i, output reg x_o ); reg [7:0] cnt = 8'd0; reg [7:0] cnt2; wire c; reg d; always @( posedge clk_i ) cnt <= cnt + 1'd1; always @(*) begin cnt2 = cnt + 1'd1; end assign c = ( cnt < 8'd5 ) && ( a_i == 1'b0 ); always @( posedge clk_i ) begin d <= c; x_o <= c ? ( d ) : ( cnt2[ b_i ] ); end endmodule
2.次ã®å
¥åã¢ã¯ã·ã§ã³ã®äžã§ãé
ç®1ããã®åè·¯ã®åäœïŒã€ãŸãããã¹ãŠã®ã倿°ãã®ç¶æ
ïŒãæç»ããŸãã

é衚瀺ã®ããã¹ãæéã¯ãWaveDromãªã³ã©ã€ã³ãšãã£ã¿ãŒã䜿çšããŠæç»ãããŸãã
3.èµ€ãèµ€ãé»ãç·ãç·ã®ç¹æ»
ãé»ãèµ€ã®é åºã§èµ€ãé»ãç·ã®ã©ã€ããç¹ç¯ããä¿¡å·æ©ãå¶åŸ¡ããã¢ãžã¥ãŒã«ãäœæããŸãã ä¿¡å·æ©ã®ççŒæéãšç·è²ã®ã©ã€ãã®ç¹æ»
æéãæå®ãããã©ã¡ãŒã¿ãŒã¯ãã¢ãžã¥ãŒã«ãã©ã¡ãŒã¿ãŒã§ãã æéã¯
clk_iã®ã¯ããã¯ãµã€ã¯ã«æ°ã§èšå®ãããŸãã
ã¢ãžã¥ãŒã«ã€ã³ã¿ãŒãã§ã€ã¹ïŒ
é衚瀺ã®ããã¹ã module traffic_light( // c input clk_i, // input rst_i, // 1, , 0 â output red_o, output yellow_o, output green_o );
HDLã³ãŒãã®ã·ãã¥ã¬ãŒã·ã§ã³ãšæ€èšŒ
å¿
èŠã§ãïŒ
- Verilog'aããã³SystemVerilog'aã®éåæã³ã³ã¹ãã©ã¯ããç¥ã£ãŠãã
- ç°¡åãªãã¹ããã³ããäœæããã·ãã¥ã¬ãŒã¿ãŒã§å®è¡ã§ããããã«ããŸãïŒModelSimãªã©ïŒ
- ãå®ç§ãªããã¹ããã³ãã®é
çœ®æ¹æ³ãçè§£ãã
åèæç® ïŒ
ãããªãã¥ãŒããªã¢ã« ïŒ
ãã¹ãã®è³ªå ïŒ
- æ©èœã¯ã¿ã¹ã¯ãšã©ãéãã®ã§ããïŒ
- 5ã¹ããŒãžRISCããã»ããµã®æãåçŽãªHDLã¢ãã«ãæžãããšæ³åããŠãã ããã ã©ã®ããã«æ€èšŒããŸããïŒ ïŒ è€éãã®å¢å ã®åé¡ ïŒã
- ãã¥ãŒãšã¡ãŒã«ããã¯ã¹ ïŒSystemVerilogèšèªã®ããŒã¿åïŒã®éãã¯äœã§ããïŒ
- æ©èœã·ãã¥ã¬ãŒã·ã§ã³ãšäžæã·ãã¥ã¬ãŒã·ã§ã³ã®éãã¯äœã§ããïŒ ãã€ã©ãã䜿ãã¹ãã§ããïŒ
FPGA
å¿
èŠã§ãïŒ
- FPGAãæ§æããåºæ¬èŠçŽ ãç¥ã
- FPGAã§ã®éçºã¯ãŒã¯ãããŒã®ä»çµã¿ãçè§£ãã
- FPGAã®ã©ã®æäœãå®äŸ¡ã§ãã©ã®æäœãïŒåšæ³¢æ°ãšãªãœãŒã¹ã«ãããŠïŒçŽæçã«æ³åã§ãã
ç§ã¯
ã¢ã«ãã©ã®ãããã䜿çšããŠããããã以éããã¡ããªããã³ãŠãŒãã£ãªãã£ã®ååã¯ãã®ãã³ããŒã®ãã®ã«ãªããŸãã
ã¶ã€ãªã³ã¯ã¹ã«é¢ããåæ§ã®æç®ãç¥ã£ãŠããå Žå-å人çãªã¡ãã»ãŒãžãã³ã¡ã³ããæžããŠãã ãã-ééããªãèšäºã«è¿œå ããŸãã
åèæç® ïŒ
ãããªãã¥ãŒããªã¢ã« ïŒ
ãã¹ãã®è³ªå ïŒ
- FPGAãšASICã®éãã¯äœã§ããïŒ FPGAã¯ã©ã®ãããã¯ã§æ§æãããŸããïŒãŸãã¯æ§æãããå¯èœæ§ããããŸããïŒïŒ
- FPGAã䜿çšããã®ãé©åãªïŒçµæžçã«å®è¡å¯èœãªïŒã¿ã¹ã¯ãšãã©ã®MCUããã³CPUã®ã¿ã¹ã¯ã®ç¯å²ãæŠèª¬ããŠã¿ãŸããïŒ
- ã©ã®ããŒããŠã§ã¢ãããã¯ãç¥ã£ãŠããŸããïŒ åœŒãã¯äœã®ããã«äœ¿ãããŸããïŒ ïŒããã§ããŒããŠã§ã¢ãããã¯ãšã¯ã ããŒãIPãæããŸã ïŒã
- Yãã¡ããªã¯ã3ã€ã®å
¥åãš1ã€ã®åºåãæã€LUTã䜿çšããŸãã assign eq =ïŒa == bïŒãèšç®ããããã«å¿
èŠãªLUTã®æå°æ°ã¯äœã§ããã aãšbã32ãããã®æ£ã®æŽæ°ã§ããå Žå LUTã«4ã€ïŒ5ã€ã6ã€ïŒã®å
¥åãããå Žå
- 16ã¯ãŒãã®ã·ã³ã°ã«ããŒãã¡ã¢ãªãäœæããå¿
èŠããããŸãã åã¯ãŒãã¯100ãããå¹
ã§ãã ããã€ã®M9Kãããã¯ïŒ9216ãããïŒãå æãããŸããïŒ ç§ãã¡ã¯ãCyclone IIIã®äžã§ãããžã§ã¯ããè¡ã£ãŠãããšèããŠããŸãã ïŒ*ïŒ
ïŒ*ïŒã§ç€ºãããäºé
ã§ã¯ããã¡ããããã¹ãŠãæèšããå¿
èŠã¯ãããŸããããããŒã¿ã·ãŒãã䜿çšã§ããŸãã
åæèšèšãšã¿ã€ãã³ã°ã«é¢é£ãããã¹ãŠ
å¿
èŠã§ãïŒ
- åæèšèšã®åçãç¥ã£ãŠãã
- ãããã®ã¹ããŒã ãŸãã¯ä»ã®ã¹ããŒã ãã©ã®ãããªãã€ãã¹ã®çµæãããããããç¥ã
- å¶çŽã®æŠå¿µãæã£ãŠãã
åèæç® ïŒ
ãã¹ãã®è³ªå ïŒ
- ã¿ã€ãã³ã°å¶çŽãšã¯äœã§ããïŒ ãããã¯ã©ãã§èª¬æãããäœã®ããã«ïŒäœã®ããã«ïŒäœ¿çšãããŸããïŒ èšèŒãããŠããªãå Žåã¯ã©ããªããŸããïŒ
- ã¯ããã¯ãã¡ã€ã³ã¯ããã·ã³ã°ãšã¯äœã§ããïŒ ã©ã®ããã«ããã€ãããå®è£
ããŸããïŒ
- åæãªã»ãããšéåæãªã»ããã®éãã¯äœã§ããïŒ åæãªã»ããã®å
¥åã«éåæãªã»ãããè¡ããããšã©ããªããŸããïŒ
- ã©ãããšã¯äœã§ããïŒã©ãããã©ããïŒïŒ ã©ããã䜿çšããçµæã¯ã©ããªããŸããïŒ ã©ãããäœæããã³ãŒãã®äŸã瀺ããŸãã
- çµã¿åããã«ãŒããšã¯äœã§ããïŒ çµã¿åããã«ãŒãã䜿çšããçµæã¯ã©ããªããŸããïŒ
- æºå®å®æ§ãšã¯ ãããéæããæ¹æ³ã¯ïŒ é·æãšçæã¯äœã§ããïŒ
- ã°ãªãããšã¯äœã§ããïŒ ããã«å¯ŸåŠããå¿
èŠããããŸããïŒ ãããããªããã©ãã§ãã©ã®ããã«ïŒ
- Dããªã¬ãŒã®ã»ããã¢ããæé/ããŒã«ãæéãšã¯äœã§ããïŒ
CAD
å¿
èŠã§ãïŒ
- ãããžã§ã¯ããäœæã§ãã
- I / Oãã³ãšå®æ°ãèšè¿°ã§ããïŒå°ãªããšãåçŽãªç¶æ³ã§ã¯ãè€éãªI / Oã€ã³ã¿ãŒãã§ã€ã¹ãªãã§ïŒ
- ã¢ã»ã³ããªã¬ããŒããšã¯äœããåã¬ããŒãã«å«ãŸããæ
å ±ãç¥ã
- ããŒããŠã§ã¢ãããã°ããŒã«ã䜿çšã§ãã
- Timing Analysis ToolïŒ STA ïŒã䜿çšã§ããããã«ãªã
- ãã³ããŒãæäŸããæ¢è£œã®IPã³ã¢/ã¢ãžã¥ãŒã«ïŒFIFOãRAMãFFTãDDRãã€ãŒãµããããªã©ïŒãšããããããããžã§ã¯ãã«è¿œå ããæ¹æ³ãç¥ã£ãŠãã
åç
§ïŒãããªãã¥ãŒããªã¢ã« ïŒ
ãã¹ãã®è³ªå ïŒ
- ããããžã§ã¯ãå
šäœããã«ãããããã¿ã³ãã¯ãªãã¯ããŠå®æãããã€ããªãã¡ã€ã«ãååŸããã¢ã»ã³ããªã®æ®µéã¯äœã§ããïŒ åæ®µéã§äœãèµ·ãããŸããïŒ
- CADããããžã§ã¯ããæå®ãããå¶çŽïŒå¶çŽïŒã«å
¥ããããšã«æåãããã©ããã確èªããæ¹æ³ã¯ïŒ
è¬çŸ©ãšç 究宀
2åŠæã®éãç§ã¯ãµã³ã¯ãããã«ãã«ã¯ã®å€§åŠã®äžçŽçåãã«ã³ãŒã¹ãFPGAéçºããæããŸããã ãã®ã³ãŒã¹ã«ã¯ãè¬çŸ©ãšäžé£ã®å®éšå®€äœæ¥ã®äž¡æ¹ãå«ãŸããŠããŸããã è¬çŸ©ã¯äžèšã®æç®ã«åºã¥ããŠããŸããã
ã³ãŒã¹ãã©ã³ïŒ
é衚瀺ã®ããã¹ã : * ? . * ( Quartus ). Verilog: * ( HDL ). * / . * : * . * , / * . * . * . * / . * . * Verilog . * ( +SystemVerilog ): * . . Testbench. testbench. * testbench'. * . . * ( , .. ). * tasks. * . * . * SystemVerilog Assertions. * testbench . * c ( ) .
è¬çŸ©ã¿ã€ãã«ïŒ2015幎ïŒïŒ
- FPGAã®ç޹ä»ã
- å
éšFPGAããã€ã¹ã
- Verilog / SystemVerilogã®æŠèŠã ããŸããŸãªã¿ã€ãã®ããžãã¯ã®èª¬æã®äŸã
- åæèšèšã ç°¡åãªãã¹ããã³ããäœæããŸãã
- SystemVerilogã®FSMãé
åãããã³æ§é ã®èª¬æã ã¡ã¢ãªïŒVerilogããã³MegaWizardã䜿çšããäœæã
- DCFIFOã®ä»çµã¿ éçã¿ã€ãã³ã°åæã TimeQuestãå¶çŽã
- æ€èšŒïŒã«ãã¬ããžãã¢ãµãŒã·ã§ã³ãSystemVerilogã€ã³ã¿ãŒãã§ã€ã¹
- Avalonãã¡ããªãŒã®ã€ã³ã¿ãŒãã§ãŒã¹ã IPã³ã¢ã Qsysã
- æ€èšŒïŒSystemVerilog OOPãå¶çŽä»ãã©ã³ãã ãã¹ãã
è¬çŸ©ã¹ã©ã€ãé衚瀺ã®ããã¹ãæ®å¿µãªããããããã¯ç§ãè¬çŸ©ãããã®ãå©ããã¹ã©ã€ãã§ãïŒãã¹ãŠã®ã³ãŒã¹æ
å ±ãã¹ã©ã€ãäžã«ããããã§ã¯ãªããäžéšã¯ãµããŒããšããŠäœ¿çšããè³æã¯ããŒãäžã§æäŸãããŸããïŒã
é£ã®åçãšã¯ãŸã£ããé¢ä¿ã®ãªãåçã衚瀺ãããããšããããŸãïŒããšãã°ãè¬çŸ©ã§è¡ããããã¹ãã®ã¿ã¹ã¯ïŒã
å®éšå®€ã®ä»äº ïŒ
å€å
žçãªãšã©ãŒ
èšäºã®ãã®éšåã§ã¯ãåå¿è
ã®éçºè
ãç¯ããå
žåçãªééãã«ã€ããŠèª¬æããããããä¿®æ£ããããã®ãã³ããæäŸããŸãã
å²ãåœãŠã®æ··ä¹±ïŒãããã¯ãšéãããã¯ïŒ
çç¶- ãããã¯å²ãåœãŠãšéãããã¯å²ãåœãŠã«é¢ãã質åã«çããèªä¿¡ããããŸããïŒäžèšãåç
§ïŒ
- ã=ããã<=ã ïŒããã³ãã®éïŒã«ã©ã³ãã ã«å€æŽããæ©èœããããšãæåŸ
ããŠããããšã«æ°ã¥ãã
- ã·ãã¥ã¬ãŒã¿ãŒãå¥åŠãªããšã瀺ããŠããå ŽåãDããªã¬ãŒãã©ã®ããã«æ©èœããããçè§£ããŠããããšãçãå§ããŸã
- ã·ãã¥ã¬ãŒã·ã§ã³çµæã¯ãããŒããŠã§ã¢äžã§çºçããŠããããšãšå®å®ããŠäžèŽããŸããïŒäœããããŒãã«æµ®ãã¶ïŒ
åŠçœ® ïŒ
- Verilogã®è³æãçè§£ããïŒäžèšã®æç®ãåç
§ïŒ
- ã·ãã¥ã¬ãŒã·ã§ã³çµæãããŒããŠã§ã¢ã§åæããã³å®è£
ãããã®ãšäžèŽããããå Žåã¯ãåçŽãªã«ãŒã«ãèŠããŠãããŠãã ããïŒçµã¿åããããžãã¯ïŒ always_comb ã åžžã«@ïŒ*ïŒ ïŒãèšè¿°ãããããã¯ã§ã¯ããããã¯å²ãåœãŠïŒ = ïŒã®ã¿ã䜿çšããå¿
èŠããããŸã ããªã¬ãŒãèšè¿°ãããããã¯ïŒ always_ff ã åžžã«@ïŒposedge clk ...ïŒ ïŒã§ã¯ãéããããã³ã°å²ãåœãŠïŒ <= ïŒã®ã¿ã䜿çšããå¿
èŠããããŸãã
ã¿ã€ãã³ã°ã®åé¡
çç¶- ã·ãã¥ã¬ãŒã·ã§ã³çµæãããŒããŠã§ã¢ã§çºçããããšãšäžèŽããŸãã
- éã¯äžå®å®ã«åäœããŸãïŒå¹²æžãã¯ã£ãããšèŠããå ŽåããããŸãïŒVGAãªã©ïŒ
- ãã·ã°ããªã³ã°æé ã远å ãããã®åŸãåè·¯ãæ£åžžã«åäœããªããªã£ãåŸãã·ã°ããªã³ã°æé ãåé€ããŸãããããã¹ãŠæ£åžžã§ãã
åŠçœ® ïŒ
- å¿
èŠãªãã¹ãŠã®å¶çŽïŒå°ãªããšã* .sdcãã¡ã€ã«ã®äœ¿çšã¯ããã¯åšæ³¢æ°ïŒãèŠå®ãããã®ãã¡ã€ã«ããããžã§ã¯ãã«æ¥ç¶ããŸã
- ãããžã§ã¯ããåã³ã³ãã€ã«ããŸãã TimeQuestã«ç§»åããŠããã¬ãã£ãã¹ã©ãã¯ããããã©ããã確èªããããã§ããå Žåã¯ããªããããèµ·ãã£ãŠããã®ãã調ã¹ãŸãïŒQuartusã®èšå®ã倿Žããããã³ãŒããæžãçŽãå¿
èŠããããŸãïŒã
SignalTapã«ç°åžžãããå Žåã¯ããã²ãŒãã£ã³ã°ãåšæ³¢æ°ã§æ®åœ±ããä¿¡å·ãåæããŠããããšãå確èªããŠãã ããã
åæèšèšã®ååã«æºæ ããŠããªãïŒéåæïŒ
æåã®æ®µèœã®ç¶ãã§ãããå¥ã«åŒ·èª¿ããããšã«ããŸããã
çç¶ã¯åã®æ®µèœãšäŒŒãŠããŸãã
äœããã®çç±ã§ãå€ãã®äººããã®ãããªããšããããã®ã§ãïŒ
// BAD EXAMPLE ... input clk_i, ... logic [7:0] sec_cnt; logic [7:0] min_cnt; logic last_sec_value; assign last_sec_value = ( sec_cnt == 8'd59 ); always_ff @( posedge clk_i ) if( last_sec_value ) sec_cnt <= 'd0; else sec_cnt <= sec_cnt + 1'd1; always_ff @( posedge last_sec_value ) min_cnt <= min_cnt + 1'd1;
ã€ãŸã
clk_iã¯ããã¯ãšã¯ç°ãªãä¿¡å·ãã
min_cntããªã¬ãŒã®å
¥åä¿¡å·ãšããŠäœ¿çšãããŸãã çµã¿åããè«çïŒã³ã³ãã¬ãŒã¿åºåïŒã«ãã£ãŠåœ¢æãããŸãã
ãŸãã¯ãã®ããã«ïŒ
// BAD EXAMPLE ... input clk_a_i, input clk_b_i, ... logic [7:0] cnt_a; logic [7:0] cnt_b; logic [7:0] sum; always_ff @( posedge clk_a_i ) cnt_a <= cnt_a + 1'd1; always_ff @( posedge clk_b_i ) cnt_b <= cnt_b + 1'd1; always_ff @( posedge clk_b_i ) sum <= cnt_a + cnt_b;
ããªã¬ãŒå
¥åã®
åèšã¯ãçµã¿åããã¯ããã¯ã®åºåãåãåããŸããçµã¿åããããžãã¯ã®å
¥åã¯ã
ç°ãªãã¯ããã¯ä¿¡å·ã§é§åãããŸãã
äž¡æ¹ã®äŸã¯
ééã£ãŠããŸã;絶察ã«ããªãã§ãã ããïŒ ãããã®äŸã¯ãåæèšèšã®èŠåã«æããã«
éåããŠããŸãã
ããã¯ãã¹ãŠãããããå°ãããéçºè
ãæåãå°œãããŠçãæ®ã£ã2000幎代ã«ç±æ¥ãããšæããŸãã
ã»ãšãã©ã®å Žåãäœåšæ³¢æ°ïŒ1 MHzãªã©ïŒã§æ©èœããŸããããããããšã³ããããã§æ·±å»ãªããšãããããŒã ã«åå ããå Žåããã®ãããªããªãã¯ã®ããã«ã€ã³ã¿ãŒã³ã·ããããç°¡åã«é£ã³åºãããšãã§ããŸãã
åŠçœ® ïŒ
- ãããžã§ã¯ãå
šäœã調ã¹ãåããªã¬ãŒã«äœ¿çšããã¯ãããã³ã°ãããã¯ïŒä¿¡å·ïŒãïŒçŽã«ïŒæžãçããŸãã
- ãã®æ°ãæå°æ°ã«ïŒãã¡ããåççãªå¶éå
ã§ïŒæžããæ¹æ³ãçè§£ããåæèšèšã®èŠåã«åŸã£ãŠã³ãŒããä¿®æ£ããŸãã
- ãããžã§ã¯ãå
šäœã調ã¹ãã¯ããã¯ãã¡ã€ã³ã®äº€å·®ãã©ã®ããã«çºçããããæ³šææ·±ãç£èŠããŸãïŒã€ãŸããããåšæ³¢æ°ããå¥ã®åšæ³¢æ°ã«ããŒã¿ã転éãããŸãïŒã æ£ãããªãå Žåã¯ä¿®æ£ããŸãã
- ãã¿ã€ãã³ã°ã®åé¡ãã®é
ç®ãããã¹ãŠã®ã¹ããããå®äºããŸãã
ããŒããŠã§ã¢ã§ã®æ°žç¶çãªãããã°ïŒã·ãã¥ã¬ãŒã·ã§ã³ãç¡èŠïŒ
éçºã次ã®ãããªå Žåããã®ééããç¯ããŸãã
- HDLãã¡ã€ã«ã®ç·šé
- å®å
šãªãããžã§ã¯ãã®ã³ã³ãã€ã«
- ãã€ããªãããŒãã«ãã©ãã·ã¥ãã
- SignalTapæ¥ç¶ãç®çã®ä¿¡å·ã衚瀺
- ãšã©ãŒã®çè§£ããã©ã°ã©ã1ãžã®ç§»è¡
ãªããããæªãã®ã§ããïŒ
- SignalTapã§ã¯ãå€§èŠæš¡ãªãããžã§ã¯ããããå Žåããã¹ãŠãã¹ãŠãã¹ãŠã®ä¿¡å·ãèŠãããšãã§ããŸãã
- å®å
šãªãããžã§ã¯ããã³ã³ãã€ã«ãããšããããªãã¯ããªãã®æéããŸãã¯éçšè
ã®æéããšããŸãã ããã«ã¯ããªãã®æéãããããŸãã å°ããªãããã§ã¯5ã10åãããããã®æéã«ãã³ããŒã䜿ã£ãŠå«ç
/ãè¶ã飲ã/ããã«ãŒãããããšãã§ããŸãããå€§èŠæš¡ãªãããžã§ã¯ãã§ã¯ããªãã®åŽã«æ¥ãŸãã
- æå
ã«ã¯ãŒãã³ã°ããŒããå¿
èŠã§ã
- ããªãã¯ãã³ãŒãã®å€æŽãæ©èœãããã©ãããããããä»ã®ãã®ãå£ããªã
åŠçœ® ïŒ
- ãããžã§ã¯ãå
šäœãŸãã¯ãã®éšåã®ãã¹ããã³ããäœæãã
- ã·ãã¥ã¬ãŒã·ã§ã³ã§æ£ããåäœãå®çŸãã
- ãããžã§ã¯ããçµã¿ç«ãŠãããŒãã確èªããŸã
ããŒããŠã§ã¢ã§äœããæ©èœããªãå Žåã¯ã次ã®ããã«ããŸãã
- äžèšã®ãã€ã³ããééããŸãïŒã¿ã€ãã³ã°ãšéåææ§ïŒ
- ã¿ã€ãã³ã°ã«åé¡ããªãå Žåã¯ããããçºçããå
¥åã®åœ±é¿ãçè§£ããŠãã ãã
- ã·ãã¥ã¬ãŒã·ã§ã³ã§ãããã®å¹æãéä¿¡ããåé¡ãåçŸãããããšã確èªããŠãã ãã
- RTLã³ãŒãã®ãšã©ãŒãä¿®æ£ããã·ãã¥ã¬ãŒã·ã§ã³ãšããŒããŠã§ã¢ããã§ãã¯ã€ã³ããŸã
- required ïŒã·ãã¥ã¬ãŒã·ã§ã³ã®ä»¥åã®ããŒãžã§ã³ããã®ãšã©ãŒããã£ããã§ããªãã£ãçç±ãçµè«ä»ãã
çç¶- æšæ¥æžããã³ãŒãã®èªã¿åãïŒè§£æïŒã«å€ãã®æéãè²»ãããŠããŸãã
- å€ãã®å Žåãåãã¿ã€ãã®ã³ãŒããèšè¿°ããŸãïŒããŒããŒãã§æãäžè¬çãªããŒã¯Ctrl + Cããã³Ctrl + Vã§ã ïŒ
- ååãæžããã³ãŒããçè§£ããããšã¯ã§ããŸããïŒåãã¢ãžã¥ãŒã«/ IPã³ã¢ã§äžç·ã«äœæ¥ããå ŽåïŒãããã¯ããªãã®ãã®ã§ãã
åŠçœ® ïŒ
- McConnellãªã©ãåªããã³ãŒãã®æžãæ¹ã説æããæç®ãèªãã§ãã ããã ãå®ç§ãªã³ãŒãã
- ããŒã ã®éçºã«ãŒã«ãäœæããŠèª¬æããŸãã ãŸãã¯ãæ¢è£œã®ãã®ã䜿çšããŸããNetFPGA ã electronixïŒ1 ã«é¢ããè°è«ãelectronixïŒ2ã«é¢ããè°è« ããŸãã¯ç§ã䜿çšããŠãããã®ã
- ã¬ãã¥ãŒã³ãŒããçµéšè±å¯ãªéçºè
ã«æäŸããŠãã ããã ããã¯ãé©åãªã»ã¯ã·ã§ã³ã®electronixãã©ãŒã©ã ã§ç¢ºèªã§ããŸãã ãã¡ãããLEDã®ç¹æ»
ãããæ·±å»ãªãã®ãæãŸããã§ãããããªããšãåã«çè§£ã§ããªãã§ããã:)ã
ãããã«
ãã®èšäºã§ãFPGAã®éçºã®äžçã«å
¥ãããã«èªãã§ç¥ã£ãŠããã¹ãããšãæããã«ããããšãé¡ã£ãŠããŸãã
ããããªããïŒ
- äžèšã®ãã¹ãã®è³ªåã«ç°¡åã«çããããšãã§ããŸãïŒãã¡ããæèšãªãã§ïŒ
- é©åãªã©ããæ±ºå®ãã
- ãå€å
žçãªééãããåãé€ã
- githubã§1-2ãããžã§ã¯ããäœæããããŒããŠã§ã¢ã§ãã¹ãããŸãã ïŒã§ããã°ãç¹æ»
ããLEDãæèšãããè€éã§ãïŒã
ãã®åŸãäœã®åé¡ããªããçé¢ç®ãªäŒç€Ÿã®ãžã¥ãã¢ããžã·ã§ã³ã«å¿åã§ããŸãã
ãã¡ããããã®ãã¹ã1ã€ã®é±æ«ã«ç¿åŸããããšã¯ã§ããŸããã 1ãæä»¥äžãããå ŽåããããŸãããåŠçã®FPGAéçºãããããã§ãã·ã§ãã«ã«åãæ¿ããå Žåã¯ããã®æ¹æ³ã§è¡ãå¿
èŠããããŸãã
ãæž
èŽããããšãããããŸããïŒ
ãã€ãã®ããã«ãç§ã¯ã³ã¡ã³ããå人çãªã¡ãŒã«ã§è³ªåãã³ã¡ã³ããåãã§ããŸãã
PS
æã
ã圌ãã¯ååŸã«ç§ã«æçŽãæžããŸãïŒ
ããã«ã¡ã¯
ç§ã¯ãã®ãããªå€§åŠãšãã®ãããªå€§åŠã®3ïŒ4ã5ïŒã³ãŒã¹ã®åŠçã§ãã
ç§ã¯FPGAã§æžããšããã¢ã€ãã¢ã奜ãã§ïŒäžŠè¡æ§ã奜ããªããšãã§ããŸããäœãšãäœãšãïŒãJavaã奜ãã§ãïŒAndroidçšã®ã·ã³ãã«ãªã¢ããªã±ãŒã·ã§ã³ãäœæããŸããïŒã ç§ã¯ããã®ããã€ããå€ããå°ãªããçå£ã«ããããã§ãã äœãåŠã¶ããšãå§ããŸããïŒ
ã»ãšãã©ã®å Žåã2ã€ã®ãªãã¡ã¬ã³ã¹ïŒ
FPGAãš
JAVA ïŒãèŠãŠãç¬èªã«çµè«ãåºãããšããå§ãããŸãã