ãããžã§ã¯ããæµ®åå°æ°ç¹ããåºå®å°æ°ç¹ã«å€æããå Žåããšã³ãžãã¢ã¯åºå®å°æ°ç¹ã§æé©ãªããŒã¿åã決å®ããå¿
èŠããããŸãã ãããã®ããŒã¿åã¯ãçµã¿èŸŒã¿ããŒããŠã§ã¢ã®å¶éãæºããã€ã€ã粟床èšç®ã®ã·ã¹ãã èŠä»¶ãæºãããŠããå¿
èŠããããŸãã Fixed-Point Designerã¯ãåºå®å°æ°ç¹ã¢ã«ãŽãªãºã ãéçºããã¢ã«ãŽãªãºã ãæµ®åå°æ°ç¹ããåºå®å°æ°ç¹ã«å€æããåºå®å°æ°ç¹ã§ã®ããŒã¿åãšç®è¡å±æ§ãèªåçã«ææ¡ããã®ã«åœ¹ç«ã¡ãŸãã åæã«ããããã«å¯ŸããŠæ£ç¢ºãªåºå®å°æ°ç¹ã§ã®ã·ãã¥ã¬ãŒã·ã§ã³çµæãšæµ®åå°æ°ç¹ã§ã®åç
§çµæãæ¯èŒããããšãã§ããŸãã
ãã®èšäºã§ã¯ãMATLABã³ãŒããå€æçšã«æºåããMATLABã³ãŒããåºå®å°æ°ç¹ã«çŽæ¥å€æããå¹çãšããã©ãŒãã³ã¹ã®ããã«ã¢ã«ãŽãªãºã ãæé©åããããã®ãã¹ããã©ã¯ãã£ã¹ãæäŸããŸãã åŸç¶ã®æåã³ãŒãã£ã³ã°ã®ããã«MATLABã®åºå®å°æ°ç¹ã§ã¢ã«ãŽãªãºã ãéçºããå ŽåããŸãã¯èªåã³ãŒãçæã®ããã«åºå®å°æ°ç¹ã«å€æããå Žåã説æãããŠããææ³ã¯ãæ±çšMATLABã³ãŒããå¹ççãªåºå®å°æ°ç¹ã³ãŒãã«å€æããã®ã«åœ¹ç«ã¡ãŸãã
åºå®å°æ°ç¹ãžã®è»¢éã®ããã®ã³ãŒãã®æºåã¹ã ãŒãºãªå€æããã»ã¹ã確ä¿ããã«ã¯ã次ã®3ã€ã®æé ãå®è¡ããå¿
èŠããããŸãã
- ã¡ã€ã³ã¢ã«ãŽãªãºã ãæ®ãã®ã³ãŒãããåé¢ããŸãã
- ã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ãšã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã®ã³ãŒããæºåããŸãã
- åºå®å°æ°ç¹ãµããŒãã«äœ¿çšãããé¢æ°ã確èªããŠãã ããã
ã¡ã€ã³ã¢ã«ãŽãªãºã ãšæ®ãã®MATLABã³ãŒãã®åé¢éåžžãã¢ã«ãŽãªãºã ã«ã¯ãå
¥åããŒã¿ãæºåããã³ãŒããšãçµæãæ€èšŒããã°ã©ããäœæããã³ãŒããä»å±ããŠããŸãã ã¢ã«ãŽãªãºã ã³ã¢ã®ã¿ãåºå®å°æ°ç¹ã«å€æããå¿
èŠããããããå¥ã®ãã¹ããã¡ã€ã«ãå
¥åãäœæããã¡ã€ã³ã¢ã«ãŽãªãºã ãåŒã³åºããŠçµæãããããããããã«ã³ãŒããæ§æããæ¹ãå¹ççã§ãã ãã®å Žåãã¡ã€ã³ã¢ã«ãŽãªãºã ã1ã€ãŸãã¯è€æ°ã®åå¥ã®ãã¡ã€ã«ã«æ ŒçŽãããŸãïŒè¡š1ïŒã
å
ã®ã³ãŒã | å€æŽãããã³ãŒã |
---|
| ãã¹ããã¡ã€ã«ã
ã¢ã«ãŽãªãºã ãå«ããã¡ã€ã«ã
function y = cumulative_sum(x) y = zeros(size(x)); y(1) = x(1); for n=2:length(x) y(n) = y(n-1) + x(n); end end
|
è¡š1.ãã¹ããã€ã³ãã£ã³ã°ããã¡ã€ã³ã¢ã«ãŽãªãºã ãåé¢ããååŸã®ã³ãŒãã
èšæž¬ãšå éã®ããã®ã¢ã«ãŽãªãºã ã³ãŒãã®æºåèšè£
ãšå éã«ãããå€æããã»ã¹ãç°¡çŽ åãããŸãã Fixed-Point Designerã䜿çšããŠãã³ãŒããèšæž¬ãããã¹ãŠã®ååä»ãå€æ°ãšäžéå€æ°ã®æå°å€ãšæ倧å€ãèšé²ããŸãã ãã®ããŒã«ã¯ãèšé²ãããå€ã䜿çšããŠãåºå®ç¹ã§ã³ãŒãã§äœ¿çšããããŒã¿åãææ¡ã§ããŸãã
Fixed-Point Designerã䜿çšããŠãMEXãã¡ã€ã«ãäœæããããšã«ãããåºå®ç¹ã§ã¢ã«ãŽãªãºã ãé«éåããå
ã®ããŒãžã§ã³ã«å¯ŸããŠåºå®ç¹ã§å®è£
ãæ€èšŒããããã«å¿
èŠãªã·ãã¥ã¬ãŒã·ã§ã³ãé«éåããããšãã§ããŸãã
ã€ã³ã¹ãã«ã¡ã³ããŒã·ã§ã³ãšã¢ã¯ã»ã©ã¬ãŒã·ã§ã³ã¯ã³ãŒãçææè¡ã«äŸåããŠããããã䜿çšããåã«ãCã³ãŒããŸãã¯HDLã³ãŒããçæããããã«MATLAB CoderãŸãã¯HDL Coderã䜿çšããäºå®ããªãå Žåã§ããã³ãŒãçæçšã®ã¢ã«ãŽãªãºã ãæºåããå¿
èŠããããŸãã
æåã«ãã³ãŒãçæã§ãµããŒããããŠããªãé¢æ°ãŸãã¯ã³ã³ã¹ãã©ã¯ããMATLABã³ãŒãã§å®çŸ©ããå¿
èŠããããŸãïŒ
ãµããŒããããŠããé¢æ°ãšãªããžã§ã¯ãã®ãªã¹ãã«ã€ããŠã¯ã
èšèªãµããŒããåç
§ããŠãã ããïŒã
ãã®æé ãèªååããæ¹æ³ã¯2ã€ãããŸãã
- ãã£ã¬ã¯ãã£ããè¿œå
ã¢ã«ãŽãªãºã ã®ã³ã¢ãå«ãMATLABãã¡ã€ã«ã®å
é ã ãã®ãã£ã¬ã¯ãã£ãã¯ãã³ãŒãçæã®ããã«ãµããŒããããŠããMATLABèšèªã®ãµãã»ããã«å«ãŸããŠããªãé¢æ°ãšæ§æãèšé²ããããã³ãŒãã¢ãã©ã€ã¶ãŒã«æ瀺ããŸã ã - ã³ãŒãæºåããŒã«ã䜿çšããŠãé¢æ°åŒã³åºããšãã³ãŒãçæã§ãµããŒããããŠããªãããŒã¿åã®äœ¿çšãèå¥ããã¬ããŒããäœæããŸãã
ã³ãŒãçæçšã®ã¢ã«ãŽãªãºã ãæºåããåŸãFixed-Point Designerã䜿çšããŠã³ãŒããã€ã³ã¹ãã«ã¡ã³ãåããã³é«éåã§ããŸãã 䜿çšãã
buildInstrumentedMex
ãã¹ãŠã®ååä»ãå€æ°ãšäžéå€æ°ã®æå°å€ãšæ倧å€ãèšé²ã§ããããã«ããŸãã ãŸã䜿çšãã
showInstrumentationResults
åºå®å°æ°ç¹ã§æšå¥šãããããŒã¿åãå«ãã³ãŒãçæã¬ããŒãã衚瀺ããŸãã èµ°ã
fiaccel
MATLABã¢ã«ãŽãªãºã ãMEXãã¡ã€ã«ã«å€æããåºå®ç¹ã§ã®ã·ãã¥ã¬ãŒã·ã§ã³ãé«éåããããã
ã¢ã«ãŽãªãºã ã³ãŒãã§äœ¿çšãããé¢æ°ã®åºå®å°æ°ç¹ãµããŒãã®ç¢ºèªã³ãŒãçæã§ãµããŒããããŠããªãé¢æ°ãç¹å®ããå Žåã次ã®3ã€ã®ãªãã·ã§ã³ããããŸãã
- åºå®ç¹ã§é¢æ°ãåçã®é¢æ°ã«çœ®ãæããŸãã
- ç¬èªã®åçã®é¢æ°ãäœæããŸãã
- é¢æ°ã®å
¥åã§doubleãžã®åãã£ã¹ãã䜿çšããŠãµããŒããããŠããªãé¢æ°ãåé¢ããåºåã§åºå®å°æ°ç¹ãžã®éãã£ã¹ããè¡ããŸãã
ãã®åŸãã³ãŒããåŒãç¶ãåºå®å°æ°ç¹ã«å€æããé©åãªçœ®æãããå Žåã¯ãµããŒããããŠããªãé¢æ°ã«æ»ãããšãã§ããŸãïŒè¡š2ïŒã
å
ã®ã³ãŒã | å€æŽãããã³ãŒã |
---|
y = 1/exp(x);
| y = 1/exp(double(x));
|
è¡š2.åãã£ã¹ãã䜿çšããŠæµ®åå°æ°ç¹æŒç®ãåé¢ããååŸã®ã³ãŒãïŒåºåã§ã®åºå®å°æ°ç¹ãžã®éãã£ã¹ãã¯è¡šç€ºãããŠããŸããïŒã
ããŒã¿ã¿ã€ã管çãšãããã¬ãŒãå¶éåºå®å°æ°ç¹ã®å®è£
ã§ã¯ãåºå®å°æ°ç¹ã®å€æ°ã¯ãããã深床ãå¶éããããŸãŸç®è¡çã§ãããä»»æã«æµ®åå°æ°ç¹ã«ãªã£ãŠã¯ãªããŸããã
ããã深床ã®äžæãé²ãããšãéèŠã§ãã
ããšãã°ã次ã®ã³ãŒããæ€èšããŠãã ããã
y = y + x(n)
ãã®åŒã¯yãå€ã§äžæžãããŸã
y + x(n)
ã³ãŒãã®åºå®ãã€ã³ãã§ããŒã¿åã䜿çšããå ŽåïŒyããã³xã®å ŽåïŒãããŒã¿åyã¯äžæžãåŸã«å€æŽãããå¯èœæ§ããããããã深床ãå¢å ããå¯èœæ§ããããŸãã
æ§æã䜿çšããŠããŒã¿åyãä¿åããŸã
(:) =
ïŒè¡š3ïŒã ã€ã³ããã¯ã¹å²ãåœãŠãšåŒã°ãããã®æ§æã¯ãMATLABã«æ¢åã®ããŒã¿åãšæžãæãå¯èœãªå€æ°ã®é
åãµã€ãºãä¿æããããã«åŒ·å¶ããŸãã è¡šçŸ
y(:) = y + x(n)
å³åŽã®åŒãå
ã®ããŒã¿åyã«å€æããããã深床ã®å¢å ãé²ããŸãã
å
ã®ã³ãŒã | å€æŽãããã³ãŒã |
---|
y = 0; for n=1:length(x) y = y + x(n); end
| y = 0; for n=1:length(x) y(:) = y + x(n); end
|
è¡š3.ãããã®å¢å ãé²ãããã«ã€ã³ããã¯ã¹å²ãåœãŠã䜿çšããååŸã®ã³ãŒãã
ããŒã¿åå®çŸ©ãšã¢ã«ãŽãªãºã ã³ãŒããåé¢ããããã®åãæã€ããŒãã«ã®äœæããŒã¿åå®çŸ©ãšã¢ã«ãŽãªãºã ã³ãŒããåé¢ãããšãåºå®ãã€ã³ãã§å®è£
ãæ¯èŒããã¢ã«ãŽãªãºã ãä»ã®ã¿ãŒã²ããæ©åšã«è»¢éãããããªããŸãã
ãã®ãã¹ããã©ã¯ãã£ã¹ãé©çšããã«ã¯ã次ã®æé ãå®è¡ããŸãã
- 䜿çšãã
cast(x,'like',y)
ãŸãã¯
zeros(m,n,'like',y)
å€æ°ãæåã«å®çŸ©ããããšãã«ãå€æ°ã®åãç®çã®ããŒã¿åã«ãã£ã¹ãããŸãã - ã³ãŒãã§äœ¿çšãããå
ã®ããŒã¿åïŒéåžžã¯å粟床浮åå°æ°ç¹ïŒããéå§ããŠãMATLABã®æ¢å®ã®ããŒã¿åã§ããåå®çŸ©ã®ããŒãã«ãäœæããŸãïŒè¡š4aïŒã
- åºå®å°æ°ç¹ã«å€æããåã«ãåäžã®ããŒã¿åãåããŒãã«ã«è¿œå ããŠãäžæŽåããã®ä»ã®åé¡ãæ€çŽ¢ããŸãïŒè¡š4bïŒã
- ç°ãªãããŒã¿åã䜿çšããŠåããŒãã«ã«ãã€ã³ããããã³ãŒããå®è¡ããçµæãæ¯èŒããŠããã€ã³ãã確èªããŸãã
å
ã®ã³ãŒã | å€æŽãããã³ãŒã |
---|
|
|
è¡š4aã ããŒã¿åããŒãã«ãäœæããååŸã®ã³ãŒããã¢ã«ãŽãªãºã å®çŸ©ã³ãŒããåå®çŸ©ããåé¢ããŸãã
å
ã®ã³ãŒã | å€æŽãããã³ãŒã |
---|
|
|
è¡š4bã åããŒãã«ã«å粟床ããŒã¿åãè¿œå ããååŸã®ã³ãŒãã
åããŒãã«ã®åºå®ç¹ã«ããŒã¿åãè¿œå ããããŒã¿åå®çŸ©ãå«ãããŒãã«ãäœæããããåºå®å°æ°ç¹ãžã®å€æã®ç®æšã«åºã¥ããŠãåºå®å°æ°ç¹ã§ããŒã¿åãè¿œå ã§ããŸãã ããšãã°ãã¢ã«ãŽãªãºã ãCã§å®è£
ããå Žåãåºå®å°æ°ç¹ã®ããŒã¿åã®ã¯ãŒããµã€ãºã¯16ã®åæ°ã«å¶éãããŸããäžæ¹ãHDLã§å®è£
ããå Žåãã¯ãŒããµã€ãºã¯å¶éãããŸããã
ã³ãŒãã«æšå¥šãããããŒã¿åã®ã»ãããååŸããã«ã¯ãFixed-Point Designerã³ãã³ãã䜿çšããŸã
buildInstrumentedMex
ãããŠ
showInstrumentationResults
ïŒè¡š5ïŒã Fixed-Point Designerã«ãã£ãŠææ¡ãããåã¯åªãããã¹ãå¹æãšåããããåªããŠããããããã¹ãŠã®åã䜿çšããäžé£ã®ãã¹ããã¯ãã«ãå¿
èŠã«ãªããŸãã åºç¯å²ã®äºæ³ãããå
¥åã䜿çšããé£ç¶ã·ãã¥ã¬ãŒã·ã§ã³ã«ãããææ¡ãããæé«ã®ããŒã¿åãåŸãããŸãã ã³ãŒãçæã¬ããŒãïŒå³1ïŒã§ææ¡ãããŠãããã®ãããåºå®ç¹ã®åæããŒã¿ã»ãããéžæããŸãã

å³1.ãã£ã«ã¿ãªã³ã°ã¢ã«ãŽãªãºã ã®å€æ°ã«å¯ŸããŠææ¡ãããããŒã¿åã䜿çšããŠshowInstrumentationResultsã«ãã£ãŠçæãããã³ãŒãçæã¬ããŒãã
ãã®åŸãå¿
èŠã«å¿ããŠãæšå¥šãããã¿ã€ãã埮調æŽã§ããŸãïŒè¡š5ããã³6ïŒã
ã¢ã«ãŽãªãºã ã³ãŒã | ãã¹ããã¡ã€ã« |
---|
function [y,z] = myfilter(b,x,z) y = zeros(size(x)); for n=1:length(x) z(:) = [x(n); z(1:end-1)]; y(n) = b * z; end end
|
|
è¡š5.ã³ãŒãã®ã€ã³ã¹ãã«ã¡ã³ãåãšå®è¡ãããã³å€æ°ã®åºå®å°æ°ç¹ã§ã®ææ¡ãããããŒã¿åã®è¡šç€ºã®ããã®ãã£ã«ã¿ãªã³ã°ã¢ã«ãŽãªãºã ãšãã¹ãã¹ã¯ãªããã
ã¢ã«ãŽãªãºã ã³ãŒã | ãã¹ããã¡ã€ã« | ã¿ã€ãè¡š |
---|
function [y,z] = myfilter(b,x,z,T) y = zeros(size(x),'like',Ty); for n=1:length(x) z(:) = [x(n); z(1:end-1)]; y(n) = b * z; end end
|
| function T = mytypes(dt) switch dt case 'double' Tb = double([]); Tx = double([]); Ty = double([]); case 'fixed16' Tb = fi([],true,16,15); Tx = fi([],true,16,15); Ty = fi([],true,16,14); end end
|
è¡š6.åºå®å°æ°ç¹ã®ããŒã¿åã䜿çšãããè¡š4ã®ãã¹ãã¹ã¯ãªãããšãã£ã«ã¿ãªã³ã°ã¢ã«ãŽãªãºã ã
åºå®å°æ°ç¹ã§æ°ããããŒã¿åã䜿çšããŠã¢ã«ãŽãªãºã ãå®è¡ããåºåãæµ®åå°æ°ç¹ã®åç
§ã¢ã«ãŽãªãºã ã®çµæãšæ¯èŒããŸãã
ããŒã¿åã®æé©ååºå®å°æ°ç¹ã§ç¬èªã®ã¿ã€ããéžæããå Žåã§ããææ¡ãããFixed-Point Designerã䜿çšããå Žåã§ããã¯ãŒããµã€ãºãå°æ°éšã®ãµã€ãºãæåãå Žåã«ãã£ãŠã¯ç®è¡ã¢ãŒãïŒ
fimath ïŒãæé©åããæ©äŒãåžžã«æ¢ããŠãã ããã ããã¯ãã¹ã±ãŒãªã³ã°ãããdoubleã䜿çšããŠãå€æ°å€ã®ãã¹ãã°ã©ã ã調ã¹ãããã¿ã€ãããŒãã«ã®ç°ãªãããŒã¿ã¿ã€ãããã¹ãããããšã§å®è¡ã§ããŸãã
ã¹ã±ãŒãªã³ã°ãããdoubleã䜿çšããŠæœåšçãªãªãŒããŒãããŒãæ€åºããã¹ã±ãŒãªã³ã°ãããdoubleã¯ãæµ®åå°æ°ç¹æ°ãšåºå®å°æ°ç¹æ°ã®ãã€ããªããã§ãã Fixed-Point Designerã¯ãã¹ã±ãŒãªã³ã°ãããdoubleãå粟床ã®æ°å€ãšããŠæ ŒçŽããŸãããããã深床ã笊å·ãèªé·ã«é¢ããæ
å ±ãæ ŒçŽããŸãã ã¹ã±ãŒãªã³ã°ãããdoubleã䜿çšããã«ã¯ãããŒã¿åãªãŒããŒã©ã€ãïŒDTOïŒããããã£ãèšå®ããå¿
èŠããããŸãïŒè¡š7ïŒã
DTOãã€ã³ã¹ããŒã«ãã | äŸ |
---|
DTOã¯æ¬¡ã䜿çšããŠããŒã«ã«ã«ã€ã³ã¹ããŒã«ãããŸã numerictype ãããã㣠'DataType' | >> Ta = fi([], 1, 16, 13, 'DataType', 'ScaledDouble'); >> a = cast(pi, 'like', Ta) a = 3.1416 DataTypeMode: Scaled double: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 13 |
DTOã¯æ¬¡ã䜿çšããŠã°ããŒãã«ã«ã€ã³ã¹ããŒã«ãããŸã fipref ãããã㣠'DataTypeOverride' | >> fipref('DataTypeOverride', 'ScaledDoubles'); >> Ta = fi([], 1, 16, 13); >> a = cast(pi, 'like', Ta) a = 3.1416 DataTypeMode: Scaled double: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 13 |
è¡š7.ããŒã¿åãäžæžãããããããã£ãèšå®ããæ¹æ³-ããŒã«ã«ããã³ã°ããŒãã«ã
ã³ãã³ãã§äžèŠã«ãªã£ãå Žåã¯ãã°ããŒãã«DTOããªã»ããããããšãå¿ããªãã§ãã ãã
reset(fipref)
buildInstrumentedMexã䜿çšããŠã³ãŒããå®è¡ããshowInstrumentationResultsã䜿çšããŠçµæã衚瀺ããŸãã ã³ãŒãçæã«é¢ããã¬ããŒãã§ã¯ããªãŒããŒãããŒããå€ã¯èµ€ã§åŒ·èª¿è¡šç€ºãããŸãïŒå³2ïŒã

å³2. Scaled Doublesã¿ã€ãïŒå·ŠïŒãšãã¹ãã°ã©ã ã¢ã€ã³ã³ïŒå³ïŒã䜿çšããå Žåã®ãªãŒããŒãããŒã瀺ãã³ãŒãçæã¬ããŒã
å€æ°å€ã®ååžã確èªãããã¹ãã°ã©ã ã䜿çšããŠã蚱容ç¯å²å
ãç¯å²å€ããŸãã¯è§£å床ïŒç²ŸåºŠïŒæªæºã®å€ãæã€ããŒã¿åãèå¥ã§ããŸãã ãã¹ãã°ã©ã ã¢ã€ã³ã³ãã¯ãªãã¯ãããšã
NumericTypeScopeãå®è¡ããŠãéžæããå€æ°ã®ã·ãã¥ã¬ãŒã·ã§ã³äžã«èŠ³æž¬ãããå€ã®ååžã確èªã§ããŸãïŒå³3ïŒã

å³3.ãªãŒããŒãããŒããå€æ°ã®å€ã®ååžã瀺ããã¹ãã°ã©ã ïŒãç¯å²å€ãïŒãèµ€ã§è¡šç€º
ã¿ã€ãããŒãã«ããã®ããŸããŸãªã¿ã€ãã®ããŒã¿ã®ãã¹ãããŒã¿åã®ç¬èªã®ããªãšãŒã·ã§ã³ãã¿ã€ãããŒãã«ã®åºå®ãã€ã³ãã«è¿œå ã§ããŸãïŒè¡š8ïŒã
ã¢ã«ãŽãªãºã ã³ãŒã | ãã¹ããã¡ã€ã« | ã¿ã€ãè¡š |
---|
function [y,z] = myfilter(b,x,z,T) y = zeros(size(x),'like',Ty); for n=1:length(x) z(:) = [x(n); z(1:end-1)]; y(n) = b * z; end end
| function mytest % b = fir1(11,0.25); t = linspace(0,10*pi,256)'; x = sin((pi/16)*t.^2); % % y0 = entrypoint('double',b,x); y8 = entrypoint('fixed8',b,x); y16 = entrypoint('fixed16',b,x); % subplot(3,1,1);plot(t,x,'c',t,y0,'k'); legend('',' ') title(' ') subplot(3,2,3);plot(t,y8,'k'); title('8- . : ') subplot(3,2,4);plot(t,y0-double(y8),'r'); title('8- . : ') subplot(3,2,5);plot(t,y16,'k'); title('16- . : ') xlabel(' ()') subplot(3,2,6);plot(t,y0-double(y16),'r'); title('16- . : ') xlabel(' ()') end function [y,z] = entrypoint(dt,b,x) T = mytypes(dt); b = cast(b,'like',Tb); x = cast(x,'like',Tx); z = zeros(size(b'),'like',Tx); [y,z] = myfilter(b,x,z,T); end
| function T = mytypes(dt) switch dt case 'double' Tb = double([]); Tx = double([]); Ty = double([]); case 'fixed8' Tb = fi([],true,8,7); Tx = fi([],true,8,7); Ty = fi([],true,8,6); case 'fixed16' Tb = fi([],true,16,15); Tx = fi([],true,16,15); Ty = fi([],true,16,14); end end |
è¡š8.ãã£ã«ã¿ãŒé¢æ°ã®ã¿ã€ãããŒãã«ããåºå®ãã€ã³ãã§ããŸããŸãªããŒã¿ã¿ã€ãã䜿çšããå Žåã®å¹æã調ã¹ãããã®ãã¹ãã¹ã¯ãªããã
ç°ãªãå埩ã®çµæãæ¯èŒããŠãåå€æŽåŸã®ã¢ã«ãŽãªãºã ã®ç²ŸåºŠãæ€èšŒããŸãïŒå³4ïŒã

å³4.è¡š8ã®ãã¹ãã¹ã¯ãªããã®çµæã®ã°ã©ããåºå®å°æ°ç¹ã§8ãããããã³16ãããã®ããŒã¿åã«å€æããåŸã®åºåãšãšã©ãŒã瀺ããŠããŸãã
ã¢ã«ãŽãªãºã ã®æé©åã¢ã«ãŽãªãºã ãæé©åããŠããã©ãŒãã³ã¹ãæ¹åããããå¹ççãªCã³ãŒããçæããã«ã¯ã3ã€ã®äžè¬çãªæ¹æ³ããããŸãã
次ã®ããšãã§ããŸãã
- fimathããããã£ã䜿çšããŠãçæãããã³ãŒãã®å¹çãæ¹åãã
- ã€ã³ã©ã€ã³é¢æ°ãããå¹ççãªåºå®å°æ°ç¹å®è£
ã«çœ®ãæããŸã
- ä»ã®æ¹æ³ã§é€ç®æäœãå®è£
ãã
fimathããããã£ã䜿çšããŠçæãããã³ãŒãã®å¹çãæ¹åããããã©ã«ãã®fimathèšå®ã䜿çšãããšãè¿œå ã®ã³ãŒããçæããŠããªãŒããŒãããŒãäžžããç®è¡äžã®é£œåãå®å
šãªç²ŸåºŠã§å®è£
ã§ããŸãïŒè¡š9aïŒã
MATLABã³ãŒã | çæãããCã³ãŒã |
---|
: function y = adder(a,b) y = a + b; end , fimath : Ta = fi([],1,16,0); Tb = fi([],1,16,0); a = cast(0,'like',Ta); b = cast(0,'like',Tb);
| int adder(short a, short b) { int y; int i0; int i1; int i2; int i3; i0 = a; i1 = b; if ((i0 & 65536) != 0) { i2 = i0 | -65536; } else { i2 = i0 & 65535; } if ((i1 & 65536) != 0) { i3 = i1 | -65536; } else { i3 = i1 & 65535; } i0 = i2 + i3; if ((i0 & 65536) != 0) { y = i0 | -65536; } else { y = i0 & 65535; } return y; }
|
è¡š9aã ããã©ã«ãã®fimathèšå®ã§çæãããå
ã®MATLABã³ãŒããšCã³ãŒãã
çæãããã³ãŒããããå¹ççã«ããã«ã¯ãããã»ããµã¿ã€ãã«åã£ãåºå®å°æ°ç¹æŒç®èšå®ãéžæããå¿
èŠããããŸãã fimathããããã£ã䜿çšããŠç®è¡ãäžžãæ¹æ³ãããã³ãªãŒããŒãããŒã¢ã¯ã·ã§ã³ãèšè¿°ããfiãªããžã§ã¯ãã§ç®è¡æŒç®ãå®è¡ããããã®ã«ãŒã«ãèšå®ããŸãïŒè¡š9bïŒã
MATLABã³ãŒã | çæãããCã³ãŒã |
---|
: function y = adder(a,b) y = a + b; end , fimath : Ta = fi([],1,16,0); Tb = fi([],1,16,0); a = cast(0,'like',Ta); b = cast(0,'like',Tb);
| int adder(short a, short b) { return a + b; }
|
è¡š9bã ããã»ããµã®çš®é¡ã«é©ããfimathèšå®ã§çæãããå
ã®MATLABã³ãŒããšCã³ãŒãã
ã€ã³ã©ã€ã³é¢æ°ãåºå®å°æ°ç¹å®è£
ã§çœ®ãæããäžéšã®MATLABé¢æ°ã¯ãåºå®å°æ°ç¹ã§ããå¹ççãªå®è£
ãååŸããããã«çœ®ãæããããšãã§ããŸãã ããšãã°ãçµã¿èŸŒã¿é¢æ°ããå埩ã·ããããã³åèšæŒç®ã®ã¿ãå¿
èŠãšããè£éããŒãã«ãŸãã¯CORDICå®è£
ã«çœ®ãæããããšãã§ããŸãã
ä»ã®æ¹æ³ã§ã®é€ç®æäœã®å®è£
å€ãã®å Žåãé€ç®æŒç®ã¯ããŒããŠã§ã¢ã«ãã£ãŠå®å
šã«ãµããŒããããŠããããèšç®ãé
ããªãå¯èœæ§ããããŸãã ã¢ã«ãŽãªãºã ã«é€ç®æŒç®ãå¿
èŠãªå Žåã¯ãããé«éãªä»£æ¿æŒç®ã«çœ®ãæããããšãæ€èšããŠãã ããã åæ¯ã2ã®ã¹ãä¹ã®å Žåããããã·ããã䜿çšããŸãã ããšãã°ãx / 8ã®ä»£ããã«bitsraïŒxã3ïŒã䜿çšããŸãã åæ¯ãå®æ°ã®å Žåãéæ°ãæããŸãã ããšãã°ãx / 5ã®ä»£ããã«x * 0.2ã䜿çšããŸãã
次ã¯ïŒFixed-Point Designerã䜿çšããŠèª¬æãããã¹ããã©ã¯ãã£ã¹ã䜿çšããŠæµ®åå°æ°ç¹ã³ãŒããåºå®å°æ°ç¹ã«å€æããåŸãçŸå®çãªãã¹ãå
¥åã䜿çšããŠåºå®å°æ°ç¹å®è£
ã培åºçã«ãã¹ãããã·ãã¥ã¬ãŒã·ã§ã³çµæãæµ®åå°æ°ç¹ãªãã¡ã¬ã³ã¹ã®ããããšæ¯èŒããŸãã