åå¿è ã®éçºè ã¯ãç¹å®ã®èšèªã®çå£ãªç 究ã®ããã«ã©ã®ãããªæåŠãèªãã¹ãããããŸãããç¥ããªãããšããããŸãã
FPGAïŒFPGAïŒéçºã¯åãªãèšèªã§ã¯ãããŸããã ããã¯éåžžã«èšå€§ãªé åã§ãèœãšãç©Žãšãã¥ã¢ã³ã¹ãéåžžã«å€ããããŸãã
ãã®èšäºã«ã¯ä»¥äžãå«ãŸããŠããŸãã
- åå¿è FPGAéçºè ãåŠã¶ã¹ããããã¯ã®ãªã¹ã
- åãããã¯ã«é¢ããæšå¥šæç®
- ãã¹ãåé¡ãšå®éšå®€äœæ¥ã®ã»ãã
- å€å žçãªåå¿è ã®ãã°ïŒããã³ãã©ãã«ã·ã¥ãŒãã£ã³ã°ã®ãã³ãïŒ
ç«ãžããããïŒ
ç¥ã£ãŠå¿ èŠãªããš
ããžã¿ã«åè·¯
å¿ èŠã§ãïŒ
- åºæ¬çãªããžã¿ã«ããŒãïŒAND / OR / NOTè«çèŠçŽ ããšã³ã³ãŒããŒããã«ããã¬ã¯ãµãŒãå ç®åšãªã©ïŒãç¥ã£ãŠãã
åç § ïŒ
- ããããã»ããªã¹ããµã©ã»ããªã¹ã ããžã¿ã«ãã¶ã€ã³ãšã³ã³ãã¥ãŒã¿ãŒã¢ãŒããã¯ãã£ã¯éåžžã«å€§ããªæ¬ã§ãããåºæ¬ããããããŸã§ã説æããŠããŸãã ãã·ã¢èªçããããŸãã ç§ã¯ãã·ã¢èªçãèŠãŸããïŒããã¯éåžžã«çŽ æ©ãç°¡åã«èªã¿ãŸãã
- Ugryumov E.P. ãããžã¿ã«åè·¯ãã¯
ãœããšãã®å€å žçãªæç§æžã§ããããã¹ãŠã®çµæããããããŸãïŒäžéšã®ãããã¯ã¯è€éãããŠèª¬æã§ããªãããããã®æ å ±ãå¿ èŠãã©ãããããã«ç解ã§ããªãããã¹ãããã§ããŸãïŒã ç§ã¯å€ãçãèªã¿ãŸããããããã2010幎çã§ã¯ãã¹ãŠãè¯ããªã£ãã®ã§ãèŠãŠããŸããã§ããã
ãã¹ãã®è³ªå ïŒ
- ããžã¿ã«åè·¯ã¯ã¢ããã°åè·¯ãšã©ãéãã®ã§ããïŒ
- åºæ¬çãªããžã¿ã«ããŒããšã¯äœã§ããïŒ ãããã®ãã¡ãåºåã¯å ¥åã®ã¿ã«äŸåããŸããïŒ
- ãã«ããã¬ã¯ãµãšã¯äœã§ããïŒ ããªããã£ãAND / OR / NOTèŠçŽ ã®4-in-1ãã«ããã¬ã¯ãµãŒãã€ã¢ã°ã©ã ãæç»ããŸãã
- åŒã®ççå€è¡šãäœæããŸãïŒ X = A orïŒB and CïŒor D.
HDLæ§æ
ããã«ã¯ä»¥äžãå«ãŸããŸãïŒ
- HDLèšèªã®åæã³ã³ã¹ãã©ã¯ãïŒæ§æïŒã®ç¥è
- HDLèšèªã䜿çšããŠåºæ¬çãªããžã¿ã«ããŒããèšè¿°ããæ¹æ³ã«é¢ããç¥è
- HDLã³ãŒãã®ãã®éšåãïŒåºæ¬çãªããžã¿ã«ããŒãã®åŽããïŒäœãå€ããŠããããç解ãã
- æ£ããåäœãåŸãããã«HDLèšèªã§æžãèœå
HDLèšèªãšããŠãæåã«Verilogã®æãåºæ¬çãªæ§é ãåŠç¿ãã次ã«SystemVerilogã«åãæ¿ããããšããå§ãããŸãã
åç § ïŒ
- ãã³P.ãã¥ãŒã ãVerilogã®äŸã«ããFPGAãããã¿ã€ãã³ã°ã -åºæ¬ããå§ãŸãVerilogã®ãµã€ã³ã æ§æã¯è©³çŽ°ã«åæãããåçŽãªïŒã«ãŠã³ã¿ãŒïŒããã³ããé«ãã¬ãã«ïŒUARTããã³VGAïŒã®äž¡æ¹ã®èšå€§ãªæ°ã®äŸããããŸãã
- ãžã§ã»ãã»ã«ã«ã·ã§ã³ãã€ã ã ãçæã³ãŒã¹HDLã -ãã·ã¢èªã®å€å žçãªã³ãŒã¹ã
- www.asic-world.comã¯ãVerilogãšSystemVerilogã®äž¡æ¹ããå€æ°ã®äŸãæ²èŒãããŠãããµã€ãã§ãã
- ããããã»ããªã¹ããµã©ã»ããªã¹ã ããžã¿ã«ãã¶ã€ã³ãšã³ã³ãã¥ãŒã¿ãŒã¢ãŒããã¯ãã£ïŒäžèšãåç §ïŒ
- ã¹ãã¥ã¢ãŒãã»ãµã¶ãŒã©ã³ãã SystemVerilog for Designã¯ãVerilogãšSystemVerilogã®éãã«é¢ããæ¬ã§ãã èªãã«ã¯ãVerilogã®åºæ¬çãªç¥èãå¿ èŠã§ãã æ°ããæšæºã§å°å ¥ãããã¢ã¡ããã£ãç解ããããã«èªãããšããå§ãããŸãã
ãã¹ãã®è³ªå ïŒ
- ããããã³ã°å²ãåœãŠã¯ããã³ããããã³ã°ãšã©ã®ããã«éããŸããïŒ äžæ¹ã䜿çšãã䟡å€ãããå Žåãããäžæ¹ã䜿çšãã䟡å€ãããå Žå
- 次ã®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ãªã©ïŒ
- ãå®ç§ãªããã¹ããã³ãã®é 眮æ¹æ³ãç解ãã
åèæç® ïŒ
- testbench.inã¯ãVerilogããã³SystemVerilogã䜿çšããèšå€§ãªæ°ã®æ€èšŒäŸã§ãã
- ã¯ãªã¹ã»ã¹ãã¢ã æ€èšŒçšSystemVerilogã¯ã SystemVerilogã䜿çšããæ€èšŒã«é¢ããåªãã倧ããªæ¬ã§ãã èªã¿ããããå€ãã®è³ªåã«å¯ŸããçããèŠã€ããããšãã§ããŸãã
ãããªãã¥ãŒããªã¢ã« ïŒ
ãã¹ãã®è³ªå ïŒ
- æ©èœã¯ã¿ã¹ã¯ãšã©ãéãã®ã§ããïŒ
- 5ã¹ããŒãžRISCããã»ããµã®æãåçŽãªHDLã¢ãã«ãæžãããšæ³åããŠãã ããã ã©ã®ããã«æ€èšŒããŸããïŒ ïŒ è€éãã®å¢å ã®åé¡ ïŒã
- ãã¥ãŒãšã¡ãŒã«ããã¯ã¹ ïŒSystemVerilogèšèªã®ããŒã¿åïŒã®éãã¯äœã§ããïŒ
- æ©èœã·ãã¥ã¬ãŒã·ã§ã³ãšäžæã·ãã¥ã¬ãŒã·ã§ã³ã®éãã¯äœã§ããïŒ ãã€ã©ãã䜿ãã¹ãã§ããïŒ
FPGA
å¿ èŠã§ãïŒ
- FPGAãæ§æããåºæ¬èŠçŽ ãç¥ã
- FPGAã§ã®éçºã¯ãŒã¯ãããŒã®ä»çµã¿ãç解ãã
- FPGAã®ã©ã®æäœãå®äŸ¡ã§ãã©ã®æäœãïŒåšæ³¢æ°ãšãªãœãŒã¹ã«ãããŠïŒçŽæçã«æ³åã§ãã
ç§ã¯ã¢ã«ãã©ã®ãããã䜿çšããŠããããã以éããã¡ããªããã³ãŠãŒãã£ãªãã£ã®ååã¯ãã®ãã³ããŒã®ãã®ã«ãªããŸãã ã¶ã€ãªã³ã¯ã¹ã«é¢ããåæ§ã®æç®ãç¥ã£ãŠããå Žå-å人çãªã¡ãã»ãŒãžãã³ã¡ã³ããæžããŠãã ãã-ééããªãèšäºã«è¿œå ããŸãã
åèæç® ïŒ
- ã¢ã³ããªã¥ãŒã»ã ãŒã¢ã ãFPGAs for Dummiesãã¯ãéåžžã«é«çŽãªïŒããŒã±ãã£ã³ã°ïŒèšèªã®FPGAã«é¢ãã話ã§ãã çç®ã§èŠãããšãã§ããŸãã
- ã¢ã«ãã©Cyclone IIIãã³ããã㯠-æ¯èŒçå€ãã¢ã«ãã©FPGAãã¡ããªã®ããŒã¿ã·ãŒãã
- ã¹ãã£ãŒãã»ãã«ãã ãAdvanced FPGA Designã -ã¯ã©ã¹ããã¯ã¯ãéçºã®åŸ®åŠãªãã¥ã¢ã³ã¹ã®å€ããæããã«ããŸãã
ãããªãã¥ãŒããªã¢ã« ïŒ
- ã¢ã«ãã©ã ãããã°ã©ããã«ããžãã¯ã®åºç€ïŒFPGAã¢ãŒããã¯ãã£ã
- David L. JonesïŒEEVblogïŒã ã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ã®äžã§ãããžã§ã¯ããè¡ã£ãŠãããšèããŠããŸãã ïŒ*ïŒ
ïŒ*ïŒã§ç€ºãããäºé ã§ã¯ããã¡ããããã¹ãŠãæèšããå¿ èŠã¯ãããŸããããããŒã¿ã·ãŒãã䜿çšã§ããŸãã
åæèšèšãšã¿ã€ãã³ã°ã«é¢é£ãããã¹ãŠ
å¿ èŠã§ãïŒ
- åæèšèšã®åçãç¥ã£ãŠãã
- ãããã®ã¹ããŒã ãŸãã¯ä»ã®ã¹ããŒã ãã©ã®ãããªãã€ãã¹ã®çµæãããããããç¥ã
- å¶çŽã®æŠå¿µãæã£ãŠãã
åèæç® ïŒ
- ã¹ãã£ãŒãã»ãã«ãã ãé«åºŠãªFPGAãã¶ã€ã³ãïŒäžèšãåç §ïŒã
- ã¢ã«ãã©ã Quartus Handbookã¯ã Recommended Design Practicesã®è²¬ä»»è ã§ãã
- ã¢ã«ãã©ã ãã¡ã¿ã¹ã¿ããªãã£ã«ã€ããŠã
- nerudoã ãããªã¬ãŒã®æºå®å®æ§ãšãµã€ã¯ã«éåæã
ãã¹ãã®è³ªå ïŒ
- ã¿ã€ãã³ã°å¶çŽãšã¯äœã§ããïŒ ãããã¯ã©ãã§èª¬æãããäœã®ããã«ïŒäœã®ããã«ïŒäœ¿çšãããŸããïŒ èšèŒãããŠããªãå Žåã¯ã©ããªããŸããïŒ
- ã¯ããã¯ãã¡ã€ã³ã¯ããã·ã³ã°ãšã¯äœã§ããïŒ ã©ã®ããã«ããã€ãããå®è£ ããŸããïŒ
- åæãªã»ãããšéåæãªã»ããã®éãã¯äœã§ããïŒ åæãªã»ããã®å ¥åã«éåæãªã»ãããè¡ããããšã©ããªããŸããïŒ
- ã©ãããšã¯äœã§ããïŒã©ãããã©ããïŒïŒ ã©ããã䜿çšããçµæã¯ã©ããªããŸããïŒ ã©ãããäœæããã³ãŒãã®äŸã瀺ããŸãã
- çµã¿åããã«ãŒããšã¯äœã§ããïŒ çµã¿åããã«ãŒãã䜿çšããçµæã¯ã©ããªããŸããïŒ
- æºå®å®æ§ãšã¯ ãããéæããæ¹æ³ã¯ïŒ é·æãšçæã¯äœã§ããïŒ
- ã°ãªãããšã¯äœã§ããïŒ ããã«å¯ŸåŠããå¿ èŠããããŸããïŒ ãããããªããã©ãã§ãã©ã®ããã«ïŒ
- Dããªã¬ãŒã®ã»ããã¢ããæé/ããŒã«ãæéãšã¯äœã§ããïŒ
CAD
å¿ èŠã§ãïŒ
- ãããžã§ã¯ããäœæã§ãã
- I / Oãã³ãšå®æ°ãèšè¿°ã§ããïŒå°ãªããšãåçŽãªç¶æ³ã§ã¯ãè€éãªI / Oã€ã³ã¿ãŒãã§ã€ã¹ãªãã§ïŒ
- ã¢ã»ã³ããªã¬ããŒããšã¯äœããåã¬ããŒãã«å«ãŸããæ å ±ãç¥ã
- ããŒããŠã§ã¢ãããã°ããŒã«ã䜿çšã§ãã
- Timing Analysis ToolïŒ STA ïŒã䜿çšã§ããããã«ãªã
- ãã³ããŒãæäŸããæ¢è£œã®IPã³ã¢/ã¢ãžã¥ãŒã«ïŒFIFOãRAMãFFTãDDRãã€ãŒãµããããªã©ïŒãšããããããããžã§ã¯ãã«è¿œå ããæ¹æ³ãç¥ã£ãŠãã
åç §ïŒ
- ã¢ã«ãã©ã Quartusãã³ãããã¯
- ã¢ã«ãã©ã ãVerilog Designsã䜿çšããSignalTap IIã
- ããã¹ã»ã·ã§ãã¬ãã ãSynopsys Design Constraint-ã¢ã«ãã©TimeQuestã®äŸã䜿çšããŠæéå¶éãèšå®ããããã®èšèªã -ãã·ã¢èªã®åªããã·ãªãŒãºèšäºã TimeQuest for Dummiesãåç §ããŠãã ããã
ãããªãã¥ãŒããªã¢ã« ïŒ
- ã¢ã«ãã©ã ãQuartus Prime SoftwareïŒFoundationã
- ã¢ã«ãã©ã ãQuartus PrimeãœãããŠã§ã¢ã®äœ¿çšïŒã¯ããã«ã
- ã¢ã«ãã©ã ãQuartus IIãœãããŠã§ã¢ã€ã³ã¿ã©ã¯ãã£ããã¥ãŒããªã¢ã«ãã
- ã¢ã«ãã©ã TimeQuest Timing Analyzer
ãã¹ãã®è³ªå ïŒ
- ããããžã§ã¯ãå šäœããã«ãããããã¿ã³ãã¯ãªãã¯ããŠå®æãããã€ããªãã¡ã€ã«ãååŸããã¢ã»ã³ããªã®æ®µéã¯äœã§ããïŒ å段éã§äœãèµ·ãããŸããïŒ
- 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 ïŒãèŠãŠãç¬èªã«çµè«ãåºãããšããå§ãããŸãã