ã¿ãªããããã«ã¡ã¯ïŒ ãã®èšäºã§ã¯ãããžã¿ã«ä¿¡å·åŠçã®1ã€ã®éèŠãªéšåãç¹ã«FPGAã§ã®ãŠã£ã³ããŠä¿¡å·ãã£ã«ã¿ãªã³ã°ã«çŠç¹ãåœãŠãŸãã ãã®èšäºã§ã¯ãæšæºé·ã®ã¯ã©ã·ãã¯ãŠã£ã³ããŠãš64Kã16M +ãµã³ãã«ã®ãé·ãããŠã£ã³ããŠã®èšèšæ¹æ³ã瀺ããŸãã äž»ãªéçºèšèªã¯VHDLããšã¬ã¡ã³ãããŒã¹ã¯ææ°ãã¡ããªã®ææ°ã®ã¶ã€ãªã³ã¯ã¹FPGAã¯ãªã¹ã¿ã«ã§ãããããã¯UltrascaleãUltrascale +ã7ã·ãªãŒãºã§ãã ãã®èšäºã§ã¯ãä»»æã®æéã®ãŠã£ã³ããŠé¢æ°ãæ§æããããã®åºæ¬çãªã³ã¢ã§ããCORDICã®å®è£
ãšãåºæ¬çãªãŠã£ã³ããŠé¢æ°ã瀺ããŸãã ãã®èšäºã§ã¯ãVivado HLSã®é«ã¬ãã«èšèªC / C ++ã䜿çšããèšèšæ¹æ³ã«ã€ããŠèª¬æããŸãã ãã€ãã®ããã«ãèšäºã®æåŸã«ããããžã§ã¯ãã®ãœãŒã¹ã³ãŒããžã®ãªã³ã¯ããããŸãã
KDPVïŒã¹ãã¯ãã«åæã¿ã¹ã¯ã®ããã®DSPããŒããéãä¿¡å·ééã®å
žåçãªã¹ããŒã ã

ã¯ããã«
ãããžã¿ã«ä¿¡å·åŠçãã³ãŒã¹ãããæéçã«ç¡éã®æ£åŒŠæ³¢ã®å Žåããã®ã¹ãã¯ãã«ã¯ä¿¡å·åšæ³¢æ°ã§ã®ãã«ã¿é¢æ°ã§ããããšãç¥ã£ãŠããŸãã å®éã«ã¯ãå®æéå¶éé«èª¿æ³¢ä¿¡å·ã®ã¹ãã¯ãã«ã¯é¢æ°
ãsinïŒxïŒ/ xãšåçã§ãããã¡ã€ã³ããŒãã®å¹
ã¯ä¿¡å·è§£æéé
Tã®æç¶æéã«äŸåããŸã
ã æéå¶éã¯ãä¿¡å·ã«é·æ¹åœ¢ã®ãšã³ãããŒããæããããšã«ãããŸããã DSPã³ãŒã¹ãããæéé åã§ã®ä¿¡å·ã®ä¹ç®ã¯åšæ³¢æ°é åã§ã®ã¹ãã¯ãã«ã®ç³ã¿èŸŒã¿ã§ããããšãããã£ãŠããããïŒéãåæ§ïŒããããã£ãŠãé«èª¿æ³¢ä¿¡å·ã®å¶éãããç©åœ¢ãšã³ãããŒãã®ã¹ãã¯ãã«ã¯ãsincïŒxïŒã«çžåœããŸãã ããã¯ãç¡éã®æéééã§ä¿¡å·ãç©åããããšãã§ããªããšããäºå®ãåå ã§ãããæéã®åèšã§è¡šãããé¢æ£åœ¢åŒã®ããŒãªãšå€æã¯ããµã³ãã«æ°ã«ãã£ãŠå¶éãããŸãã ååãšããŠãææ°ã®FPGAããžã¿ã«åŠçããã€ã¹ã®FFTã®é·ãã¯ã
8ãæ°çŸäžãã€ã³ãã®
NFFTå€ã
åããŸãã ã€ãŸããå
¥åä¿¡å·ã®ã¹ãã¯ãã«ã¯ãå€ãã®å Žåã
NFFTã«çããéé
Tã§èšç®ãããŸãã ä¿¡å·ãéé
Tã«å¶éããããšã«ããã
Tãµã³ãã«ã®é·ãã®é·æ¹åœ¢ã®ããŠã£ã³ããŠããèšå®ããŸãã ãããã£ãŠãçµæã®ã¹ãã¯ãã«ã¯ãä¹ç®ãããé«èª¿æ³¢ä¿¡å·ãšç©åœ¢ãšã³ãããŒãã®ã¹ãã¯ãã«ã§ãã DSPã®åé¡ã§ã¯ãããŸããŸãªåœ¢ç¶ã®ãŠã£ã³ããŠãé·ãéçºæãããŠãããæéé åã§ä¿¡å·ã«éãåããããšãã¹ãã¯ãã«ç¹æ§ãæ¹åã§ããŸãã å€æ°ã®ããŸããŸãªãŠã£ã³ããŠã¯ãäž»ã«ãŠã£ã³ããŠãªãŒããŒã¬ã€ã®äž»ãªæ©èœã®1ã€ã«ãããã®ã§ãã ãã®æ©èœã¯ããµã€ãããŒãã®ã¬ãã«ãšäžå€®ããŒãã®å¹
ã®é¢ä¿ã§è¡šãããŸãã ããç¥ãããŠãããã¿ãŒã³ïŒãµã€ãããŒãã®æå¶ã匷ãã»ã©ãã¡ã€ã³ããŒããåºããªããéããŸãåæ§ã§ãã
ãŠã£ã³ããŠé¢æ°ã®ã¢ããªã±ãŒã·ã§ã³ã®1ã€ïŒãµã€ãããŒãã®ã¬ãã«ãæå¶ããããšã«ããã匷ãä¿¡å·ã®èæ¯ã«å¯Ÿãã匱ãä¿¡å·ã®æ€åºã DSPã¿ã¹ã¯ã®ã¡ã€ã³ãŠã£ã³ããŠé¢æ°ã¯ãäžè§åœ¢ãæ£åŒŠæ³¢ãã©ã³ãã§ã¹ããã³ãããã³ã°ããã©ãã¯ãã³ãããªã¹ããã©ãã¯ãã³ããªã¹ãŠã£ã³ããŠããã©ããããããŠã£ã³ããŠããã¿ãŒã«ãã¬ãŠã¹ãã«ã€ã¶ãŒãŠã£ã³ããŠãªã©ã§ãã ãããã®ã»ãšãã©ã¯ãç¹å®ã®éã¿ãæã€é«èª¿æ³¢ä¿¡å·ãå ç®ããããšã«ãããæéçŽæ°ã§è¡šçŸãããŸãã è€éãªåœ¢ç¶ã®ãŠã£ã³ããŠã¯ãææ°ïŒã¬ãŠã¹ãŠã£ã³ããŠïŒãŸãã¯ä¿®æ£ããã»ã«é¢æ°ïŒã«ã€ã¶ãŒãŠã£ã³ããŠïŒã䜿çšããŠèšç®ãããããããã®èšäºã§ã¯èæ
®ããŸããã ãŠã£ã³ããŠé¢æ°ã®è©³çŽ°ã«ã€ããŠã¯ãåŸæ¥ã®èšäºã®æåŸã§èª¬æããæç®ãåç
§ããŠãã ããã
次ã®å³ã¯ãMatlab CADããŒã«ã䜿çšããŠæ§ç¯ãããå
žåçãªãŠã£ã³ããŠé¢æ°ãšãã®ã¹ãã¯ãã«ç¹æ§ã瀺ããŠããŸãã

å®è£
èšäºã®åé ã§ãKDPVãæ¿å
¥ããŸãããKDPVã¯ãå
¥åããŒã¿ã«ãŠã£ã³ããŠé¢æ°ãä¹ç®ããæ§é å³ãäžè¬çãªçšèªã§ç€ºããŠããŸãã æããã«ãFPGAã«ãŠã£ã³ããŠé¢æ°ã®ã¹ãã¬ãŒãžãå®è£
ããæãç°¡åãªæ¹æ³ã¯ãã¡ã¢ãªã«æžã蟌ã¿ïŒãããã¯
RAMBãŸãã¯åæ£
åæ£ -ããã»ã©éèŠã§ã¯ãããŸããïŒããã®åŸãä¿¡å·ã®å
¥åãµã³ãã«ãå°çãããšãã«ããŒã¿ãåšæçã«ååŸããããšã§ãã ååãšããŠãææ°ã®FPGAã§ã¯ãå
éšã¡ã¢ãªã®éã«ãããæ¯èŒçå°ããªãµã€ãºã®ãŠã£ã³ããŠé¢æ°ãæ ŒçŽã§ããŸãããã®åŸããŠã£ã³ããŠé¢æ°ã«å
¥åä¿¡å·ãä¹ç®ãããŸãã å°ãããšã¯ã64Kãµã³ãã«ãŸã§ã®ãŠã£ã³ããŠé¢æ°ãæå³ããŸãã
ãããããŠã£ã³ããŠé¢æ°ãé·ãããå Žåã¯ã©ãã§ããããïŒ ããšãã°ã1Mã®èªã¿åãå€ã 32ããããããã°ãªããã§è¡šç€ºããããã®ãããªãŠã£ã³ããŠé¢æ°ã«ã¯ãRAMB36Kã¿ã€ãFPGAã®ã¶ã€ãªã³ã¯ã¹ã¯ãªã¹ã¿ã«ã®NRAMB = 1024 * 1024 * 32/32768 = 1024ãããã¯ã¡ã¢ãªã»ã«ãå¿
èŠã§ãããšç°¡åã«èšç®ã§ããŸãã ãŸãã16Mã®ãµã³ãã«ã®å Žåã¯ïŒ 16,000åã®ã¡ã¢ãªã»ã«ïŒ åäžã®ææ°FPGAã«ã¯ããã»ã©å€ãã®ã¡ã¢ãªããããŸããã å€ãã®FPGAã§ã¯ãããã¯å€ãããŸãããŸããFPGAãªãœãŒã¹ïŒãããŠãã¡ããã顧客ã®ãéïŒãç¡é§ã«äœ¿çšããŠããå ŽåããããŸãã
ãã®ç¹ã§ããªã¢ãŒãããã€ã¹ãããããã¯ã¡ã¢ãªã«ä¿æ°ãæžã蟌ãããšãªãããŠã£ã³ããŠé¢æ°ãµã³ãã«ãFPGAã«çŽæ¥ãªã³ã¶ãã©ã€ã§çæããæ¹æ³ãèãåºãå¿
èŠããããŸãã 幞ããªããšã«ãåºæ¬çãªãã®ã¯é·ãéçºæãããŠããŸããã
CORDIC ïŒ
ããžã¿ã«ããžã¿ã«æ¹åŒïŒãªã©ã®ã¢ã«ãŽãªãºã ã䜿çšããŠãåŒãé«èª¿æ³¢ä¿¡å·ïŒãã©ãã¯ãã³ããªã¹ããã³ãããã³ã°ããã¿ãŒã«ãªã©ïŒã§è¡šãããå€ãã®ãŠã£ã³ããŠé¢æ°ãèšèšããããšãã§ããŸãã
CORDIC
CORDICã¯ã座æšç³»ã®å転ãèšç®ããããã®åçŽã§äŸ¿å©ãªå埩æ³ã§ããããã«ãããããªããã£ãã®å ç®ããã³ã·ããæäœãå®è¡ããŠè€éãªé¢æ°ãèšç®ã§ããŸãã CORDICã¢ã«ãŽãªãºã ã䜿çšããŠãé«èª¿æ³¢ä¿¡å·sinïŒxïŒãcosïŒxïŒã®å€ãèšç®ããäœçž-atanïŒxïŒããã³atan2ïŒxãyïŒãåæ²ç·äžè§é¢æ°ãèŠã€ãããã¯ãã«ãå転ãããæ°ã®æ ¹ãæœåºãããªã©ãã§ããŸãã
æåã¯ãå®æããCORDICã«ãŒãã«ã䜿çšããŠäœæ¥éãæžããããã£ãã®ã§ãããã¶ã€ãªã³ã¯ã¹ã«ãŒãã«ã«ã¯é·ãéå«ãããããŸããã githubã®ãªããžããªã調ã¹ãåŸãç§ã¯æ瀺ããããã¹ãŠã®ã«ãŒãã«ãå€ãã®çç±ã«é©ããŠããªãããšã«æ°ä»ããŸããïŒäžååã«ææžåãããŠããŠèªãããæ®éçã§ã¯ãªããç¹å®ã®ã¿ã¹ã¯ãŸãã¯èŠçŽ ããŒã¹ã§
äœæãããverilogãªã©ã§
æžãããŠããŸãïŒã ãããããåå¿ã®
lazifoã«ãã®ä»äºãããŠãããšé Œã¿ãŸããã ãã¡ãããCORDICã®å®è£
ã¯DSPã®åéã§æãåçŽãªã¿ã¹ã¯ã®1ã€ã§ããããã圌ã¯ããã«å¯ŸåŠããŸããã ããããç§ã¯åœŒã®ä»äºãšäžŠè¡ã
ãŠã€ã©ã€ã©ããŠããã®ã§ã
èªåã®ãã©ã¡ãŒã¿ãŒåãããã³ã¢ã§
ãã€ã¯ãæžããŸããã äž»ãªæ©èœã¯ã
DATA_WIDTHåºåä¿¡å·ã®æ§æå¯èœãªããã深床ã
-1ã1ã®æ£èŠåãããå
¥åãã§ãŒãº
PHASE_WIDTH ãããã³
PRECISIONèšç®ã®ç²ŸåºŠã§ãã CORDICã³ã¢ã¯ã䞊åãã€ãã©ã€ã³ã¹ããŒã ã«åŸã£ãŠå®è¡ãããŸããåã¯ããã¯ãµã€ã¯ã«ã§ãã³ã¢ã¯èšç®ãå®è¡ããŠå
¥åãµã³ãã«ãåä¿¡ããæºåãã§ããŠããŸãã ã«ãŒãã«ã¯ãåºåãµã³ãã«ã®èšç®ã«Nãµã€ã¯ã«ãè²»ãããŸãããã®æ°ã¯ãåºåãµã³ãã«ã®å®¹éã«äŸåããŸãïŒå®¹éã倧ããã»ã©ãåºåå€ãèšç®ããããã®å埩ãå€ããªããŸãïŒã ãã¹ãŠã®èšç®ã¯äžŠè¡ããŠè¡ãããŸãã ãããã£ãŠãCORDICã¯ãŠã£ã³ããŠé¢æ°ãäœæããããã®åºæ¬çãªã³ã¢ã§ãã
ãŠã£ã³ããŠé¢æ°
ãã®èšäºã®ãã¬ãŒã ã¯ãŒã¯ã§ã¯ãé«èª¿æ³¢ä¿¡å·ïŒãã³ãããã³ã°ãããŸããŸãªæ¬¡æ°ã®ãã©ãã¯ãã³ã»ããªã¹ãªã©ïŒã§è¡šçŸããããŠã£ã³ããŠé¢æ°ã®ã¿ãå®çŸããŸãã ããã«ã¯äœãå¿
èŠã§ããïŒ äžè¬çã«ããŠã£ã³ããŠãæ§ç¯ããããã®åŒã¯äžé£ã®æéé·ã®ããã«èŠããŸãã

ä¿æ°
a kã®ç¹å®ã®ã»ãããšç³»åã®ã¡ã³ããŒã¯ããŠã£ã³ããŠã®ååã決å®ããŸãã æã人æ°ããããé »ç¹ã«äœ¿çšãããã®ã¯ãç°ãªãé åºïŒ3ã11ïŒã®Blackman-HarrisãŠã£ã³ããŠã§ãã 以äžã¯ãBlackman-HarrisãŠã£ã³ããŠã®ä¿æ°ã®è¡šã§ãã

ååãšããŠãBlackman-HarrisãŠã£ã³ããŠã»ããã¯ã¹ãã¯ãã«åæã®å€ãã®åé¡ã«é©çšå¯èœã§ãããGaussãKaiserãªã©ã®è€éãªãŠã£ã³ããŠã䜿çšããå¿
èŠã¯ãããŸããã NattalãŸãã¯ãã©ããããããŠã£ã³ããŠã¯ãééãç°ãªãããŸããŸãªãŠã£ã³ããŠã§ãããBlackman-Harrisãšåãåºæ¬åçã§ãã ã·ãªãŒãºã®ã¡ã³ããŒãå€ãã»ã©ããµã€ãããŒãã®ã¬ãã«ã®æå¶ã匷ããªãããšãç¥ãããŠããŸãïŒãŠã£ã³ããŠé¢æ°ã®ããã深床ã®åççãªéžæã«åŸããŸãïŒã ã¿ã¹ã¯ã«åºã¥ããŠãéçºè
ã¯äœ¿çšãããŠã£ã³ããŠã®çš®é¡ãéžæããã ãã§ãã
FPGAå®è£
-åŸæ¥ã®ã¢ãããŒã
ãŠã£ã³ããŠé¢æ°ã®ãã¹ãŠã®ã«ãŒãã«ã¯ãFPGAã§ããžã¿ã«åè·¯ãèšè¿°ããããã®å€å
žçãªã¢ãããŒãã䜿çšããŠèšèšãããŠãããVHDLèšèªã§èšè¿°ãããŠããŸãã 以äžã¯ãäœæãããã³ã³ããŒãã³ãã®ãªã¹ãã§ãã
- bh_win_7term -Blackman-Harris 7ãªãŒããŒããµã€ãã¹ãã£ãã©ãŒã«ããæ倧ã«æå¶ãããŠã£ã³ããŠã
- bh_win_5term -Blackman-Harris 5ãªãŒããŒããã©ãããããã®ãŠã£ã³ããŠãå«ãŸããŸãã
- bh_win_4term -Blackman-Harris 4泚æãNattalããã³Blackman-NattalãŠã£ã³ããŠãå«ãŸããŸãã
- bh_win_3term -Blackman-Harris 3泚æã
- hamming_win-ããã³ã°ãŠã£ã³ããŠãšãã³ãŠã£ã³ããŠã
Blackman-HarrisãŠã£ã³ããŠã³ã³ããŒãã³ãã®ãœãŒã¹ã³ãŒãã¯3æ¡ã§ãã
entity bh_win_3term is generic ( TD : time:=0.5ns;
å Žåã«ãã£ãŠã¯ããããžã§ã¯ãã«
DSP48E1ããã³DSP48E2ããŒããåã蟌ãããã«
UNISIMã©ã€ãã©ãªã䜿çšããŸãããããã«ãããæçµçã«ãããã®ãããã¯å
ã®ãã€ãã©ã€ã³åŠçã«ããèšç®é床ãäžããããšãã§ã
ãŸãããå®éã«ç€ºãããŠããããã«ã
P =ã®ãããªãã®ãããéãç°¡åã«æžãããšãã§ããŸã
A * B + Cããã³ã³ãŒãã§æ¬¡ã®ãã£ã¬ã¯ãã£ããæå®ããŸãã
attribute USE_DSP of <signal_name>: signal is "YES";
ããã¯ããŸãæ©èœããã·ã³ã»ãµã€ã¶ãŒã«æ°åŠé¢æ°ãå®è£
ãããèŠçŽ ã®ã¿ã€ããå³å¯ã«èšå®ããŸãã
Vivado hls
ããã«ã
Vivado HLSããŒã«ã䜿çšããŠãã¹ãŠã®ã³ã¢ãå®è£
ããŸããã Vivado HLSã®äž»ãª
å©ç¹ããªã¹ãããŸãïŒé«ã¬ãã«èšèªCãŸãã¯C ++ã§ã®é«éèšèšïŒ
Time-to-Market ïŒãã¯ããã¯åšæ³¢æ°ã®æŠå¿µã®æ¬ åŠã«ããéçºããŒãã®è¿
éãªã¢ããªã³ã°ããœãªã¥ãŒã·ã§ã³ã®æè»ãªæ§æïŒãªãœãŒã¹ãšããã©ãŒãã³ã¹ã®èŠ³ç¹ããïŒãããžã§ã¯ãå
ã®ãã©ã°ããšãã£ã¬ã¯ãã£ããããã³é«ã¬ãã«èšèªã®éçºè
åãã®äœãšã³ããªãããå€ã äž»ãªæ¬ ç¹ã¯ãåŸæ¥ã®ã¢ãããŒããšæ¯èŒããå Žåã®FPGAãªãœãŒã¹ã®æé©ã§ãªãã³ã¹ãã§ãã ãŸããåŸæ¥ã®å€ãRTLã¡ãœããïŒVHDLãVerilogãSVïŒã§æäŸãããé床ãéæããããšã¯ã§ããŸããã ããŠãæ倧ã®
æ¬ ç¹ã¯ã¿ã³ããªã³ãšèžã
ããšã§ãããããã¯ã¶ã€ãªã³ã¯ã¹ã®ãã¹ãŠã®CADã®ç¹åŸŽã§ãã ïŒæ³šïŒVivado HLSã¯ã
ä»»æ粟床ã®å©ç¹ã䜿çšããŠæ²ãã£ãŠåäœãããããVivado HLSãããã¬ãŒãšå®éã®C ++ã¢ãã«ã§ã¯ããã°ãã°ç°ãªãçµæãåŸãããŸãããïŒ
次ã®ç»åã¯ãVivado HLSã§åæãããCORDICã«ãŒãã«ã®ãã°ã瀺ããŠããŸãã ããã¯éåžžã«æçã§ããã䜿çšããããªãœãŒã¹ã®éãã«ãŒãã«ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ãã«ãŒããšãã®ããããã£ãèšç®ã®é
延ãåºåå€ã®èšç®ééïŒã·ãªã¢ã«ããã³ãã©ã¬ã«åè·¯ãèšèšããéã«éèŠïŒã®å€ãã®æçšãªæ
å ±ã衚瀺ããŸãã

ããŸããŸãªã³ã³ããŒãã³ãïŒé¢æ°ïŒã®ããŒã¿ãèšç®ããæ¹æ³ã確èªã§ããŸãã ãã§ãŒãº0ã§ãã§ãŒãºããŒã¿ãèªã¿åãããã¹ããŒãž7ããã³8ã§CORDICããŒãã®çµæã衚瀺ãããŠããããšãããããŸãã

Vivado HLSã®çµæïŒCã³ãŒãããäœæãããåæRTLã«ãŒãã«ã ãã°ã¯ãæéåæã§ãã«ãŒãã«ããã¹ãŠã®å¶éãæ£åžžã«ééããããšã瀺ããŠããŸãã

Vivado HLSã®ãã1ã€ã®å€§ããªå©ç¹ã¯ãCã³ãŒããæ€èšŒããŠçµæãæ€èšŒããããã«äœ¿çšãããã¢ãã«ã«åºã¥ããŠãåæãããRTLã³ãŒãããã§ãã¯ããããšã§ãã ããã¯åå§çãªãã¹ããããããŸããããCãšHDLã®ã¢ã«ãŽãªãºã ã®åäœãæ¯èŒããã®ã«éåžžã«ã¯ãŒã«ã§äŸ¿å©ã ãšæããŸãã 以äžã¯ãVivado HLSã§ååŸãããŠã£ã³ããŠé¢æ°ã®ã«ãŒãã«é¢æ°ã¢ãã«ã®ã·ãã¥ã¬ãŒã·ã§ã³ã瀺ãVivadoã®ã¹ã¯ãªãŒã³ã·ã§ããã§ãã

ãããã£ãŠããã¹ãŠã®ãŠã£ã³ããŠé¢æ°ã«ã€ããŠãVHDLãŸãã¯C ++ã®èšèšæ¹æ³ã«é¢ä¿ãªããåæ§ã®çµæãåŸãããŸããã ãã ããæåã®ã±ãŒã¹ã§ã¯ãåäœã®é »åºŠãé«ããªãã䜿çšããããªãœãŒã¹ã®æ°ãå°ãªããªããŸãã2çªç®ã®ã±ãŒã¹ã§ã¯ãæ倧èšèšé床ãéæãããŸãã ã©ã¡ãã®ã¢ãããŒãã«ãçåœã«å¯Ÿããæš©å©ããããŸãã
å
·äœçã«ã¯ãããŸããŸãªæ¹æ³ã䜿çšããŠéçºã«è²»ããæéãèšç®ããŸããã Vivado HLSã§C ++ãããžã§ã¯ããVHDLããã12åé«éã«å®è£
ããŸããã
ã¢ãããŒãã®æ¯èŒ
CORDICã³ã¢ã®HDLãšC ++ã®ãœãŒã¹ã³ãŒããæ¯èŒããŸãã åè¿°ã®ããã«ãã¢ã«ãŽãªãºã ã¯å ç®ãæžç®ãã·ããã®æŒç®ã«åºã¥ããŠããŸãã VHDLã§ã¯ã次ã®ããã«ãªããŸãïŒ3ã€ã®ããŒã¿ãã¯ãã«ããããŸã-1ã€ã¯è§åºŠã®å転ãæ
åœããä»ã®2ã€ã¯Xããã³Y軞ã«æ²¿ã£ããã¯ãã«ã®é·ãã決å®ããŸããããã¯sinããã³cosãšåçã§ãïŒwikiã®å³ãåç
§ïŒã

Zå€ãç¹°ãè¿ãèšç®ããããšã«ãããXå€ãšYå€ã䞊è¡ããŠèšç®ãããŸãHDLã§åºåå€ãå·¡åæ€çŽ¢ããããã»ã¹ïŒ
constant ROM_LUT : rom_array := ( x"400000000000", x"25C80A3B3BE6", x"13F670B6BDC7", x"0A2223A83BBB", x"05161A861CB1", x"028BAFC2B209", x"0145EC3CB850", x"00A2F8AA23A9", x"00517CA68DA2", x"0028BE5D7661", x"00145F300123", x"000A2F982950", x"000517CC19C0", x"00028BE60D83", x"000145F306D6", x"0000A2F9836D", x"0000517CC1B7", x"000028BE60DC", x"0000145F306E", x"00000A2F9837", x"00000517CC1B", x"0000028BE60E", x"00000145F307", x"000000A2F983", x"000000517CC2", x"00000028BE61", x"000000145F30", x"0000000A2F98", x"0000000517CC", x"000000028BE6", x"0000000145F3", x"00000000A2FA", x"00000000517D", x"0000000028BE", x"00000000145F", x"000000000A30", x"000000000518", x"00000000028C", x"000000000146", x"0000000000A3", x"000000000051", x"000000000029", x"000000000014", x"00000000000A", x"000000000005", x"000000000003", x"000000000001", x"000000000000" ); pr_crd: process(clk, reset) begin if (reset = '1') then
C ++ãVivado HLSã§ã¯ãã³ãŒãã¯ã»ãšãã©åãããã«èŠããŸãããã¬ã³ãŒãã¯äœåãçããªããŸãã
ã©ããããã·ãããšè¿œå ã®åããµã€ã¯ã«ã䜿çšãããŸãã ãã ããããã©ã«ãã§ã¯ãC ++èšèªåãã«ãVivado HLSã®ãã¹ãŠã®ã«ãŒãã¯ãæãããã¿ããããé 次å®è¡ãããŸãã
HLS UNROLLãŸãã¯
HLS PIPELINEãã©ã°ãã®å°å
¥ã«ãããã·ãªã¢ã«èšç®ããã©ã¬ã«èšç®ã«å€æãããŸãã ããã«ãããFPGAãªãœãŒã¹ãå¢å ããŸãããåã¯ããã¯ãµã€ã¯ã«ã§æ°ããå€ãèšç®ããŠã³ã¢ã«éä¿¡ã§ããŸãã
VHDLããã³C ++ã§ã®ãããžã§ã¯ãã®åæçµæãäžå³ã«ç€ºããŸãã è«ççã«èŠããšãéãã¯2åã§ãããåŸæ¥ã®ã¢ãããŒããæ¯æããŠããŸãã ãã®ä»ã®FPGAãªãœãŒã¹ã®å Žåãå·®ç°ã¯ãããã§ãã C ++ã§ã®ãããžã§ã¯ãã®æé©åã«ã¯æ·±ãå
¥ããŸããã§ããããããŸããŸãªãã£ã¬ã¯ãã£ããèšå®ããããã³ãŒããéšåçã«å€æŽãããããããšã§ã䜿çšãããªãœãŒã¹ã®æ°ãæžããããšãã§ããŸãã ã©ã¡ãã®å Žåããã¿ã€ãã³ã°ã¯ã350 MHzã®ç¹å®ã®ã³ã¢åšæ³¢æ°ã§åæããŸããã

å®è£
æ©èœ
èšç®ã¯åºå®å°æ°ç¹åœ¢åŒã§å®è¡ãããããããŠã£ã³ããŠé¢æ°ã«ã¯FPGAã§DSPã·ã¹ãã ãèšèšããéã«èæ
®ããªããã°ãªããªãå€ãã®æ©èœããããŸãã ããšãã°ããŠã£ã³ããŠé¢æ°ããŒã¿ã®ããã深床ã倧ããã»ã©ããŠã£ã³ããŠãªãŒããŒã¬ã€ã®ç²ŸåºŠãåäžããŸãã äžæ¹ããŠã£ã³ããŠé¢æ°ã®ããã深床ãäžååãªå Žåãçµæã®æ³¢åœ¢ã«æªã¿ãçããã¹ãã¯ãã«ç¹æ§ã®å質ã«åœ±é¿ããŸãã ããšãã°ã2 ^ 20 = 1Mãµã³ãã«ã®æéã®ä¿¡å·ãä¹ç®ããå ŽåããŠã£ã³ããŠé¢æ°ã«ã¯å°ãªããšã20ããããå¿
èŠã§ãã
ãããã«
ãã®èšäºã§ã¯ãå€éšã¡ã¢ãªãŸãã¯FPGAãããã¯ã¡ã¢ãªã䜿çšããã«ãŠã£ã³ããŠé¢æ°ãèšèšãã1ã€ã®æ¹æ³ã瀺ããŸãã FPGAïŒããã³å Žåã«ãã£ãŠã¯DSPãããã¯ïŒã®è«çãªãœãŒã¹ã®ã¿ã䜿çšããæ¹æ³ã瀺ãããŠããŸãã CORDICã¢ã«ãŽãªãºã ã䜿çšãããšãä»»æã®ããã深床ïŒçç±å
ïŒãä»»æã®é·ãã次æ°ã®ãŠã£ã³ããŠé¢æ°ãååŸã§ããããããŠã£ã³ããŠã®ã»ãŒãã¹ãŠã®ã¹ãã¯ãã«ç¹æ§ã®ã»ãããååŸã§ããŸãã
äœåã®1ã€ã§ã¯ãçŽ375 MHzã®åšæ³¢æ°ã§1Mãµã³ãã«ã«å¯ŸããŠ5æ¡ãš7æ¡ã®ãã©ãã¯ãã³ã»ããªã¹çªé¢æ°ã®å®å®ããŠåäœããã«ãŒãã«ãååŸããçŽ400 MHzã®åšæ³¢æ°ã§CORDICã«åºã¥ããŠFFTã®å転ä¿æ°ã®ãžã§ãã¬ãŒã¿ãŒãäœæããããšãã§ããŸããã 䜿çšæžã¿FPGAã¯ãªã¹ã¿ã«ïŒKintex Ultrascale +ïŒxcku11p-ffva1156-2-eïŒã
githubãããžã§ã¯ããž
ã®ãªã³ã¯
ã¯ãã¡ã ã ãããžã§ã¯ãã«ã¯ãMatlabã®æ°åŠã¢ãã«ãVHDLã®ãŠã£ã³ããŠé¢æ°ãšCORDICã®ãœãŒã¹ã³ãŒããVivado HLSã®C ++ã®ãªã¹ãããããŠã£ã³ããŠé¢æ°ã®ã¢ãã«ãå«ãŸããŠããŸãã
æçšãªèšäº
DSPã«é¢ããéåžžã«äººæ°ã®ããæ¬ã
Ayficher E.ãJervis B.ã®ããžã¿ã«ä¿¡å·åŠçããå§ãã
ãŸãã å®çšçãªã¢ãããŒããæž
èŽããããšãããããŸããïŒ