78K/RL78 でハードウェア乗算器を使う

テクニカル・ノート 44885

アーキテクチャ:

78K, RL78

コンポーネント:

general

更新日:

2018/09/04 7:19

はじめに

一部のRL78マイクロコントローラと78Kマイクロコントローラは、ハードウェア積算/除算ユニットを備えています。これらのユニットに関するランタイムのサポートを追加するには、以下のようにします。

IAR Embedded Workbench for RL78バージョン2.10以降

IDEのプロジェクトオプション(Project Options) > 一般オプション(General Options) > ライブラリ設定(Library Configuration)のページで、
ハードウェア積算/除算ユニットを無効化(Disable Hardware Multiplier/Divider Unit)オプションのチェックを外します。現在選択されているRL78デバイスにハードウェア積算/除算ユニットがない場合、このオプションは使用できません。

コマンドラインからプロジェクトをビルドする場合、アセンブラファイル(hwmdu_LibReplacement.s)をインクルードする必要があります。このファイルは、src\hw_multiply_division_unitsディレクトリにあります。

IAR Embedded Workbench for 78K (またはRL78)バージョン1.40以前

IDEのプロジェクトオプション(Project Options) > 一般オプション(General Options) > ライブラリ設定(Library Configuration)のページで、
ハードウェア積算/除算ユニットを使用(Use Hardware Multiplier/Divider Unit)オプションを選択します。現在選択されているRL78デバイスにハードウェア積算/除算ユニットがない場合、このオプションは使用できません。

コマンドラインからプロジェクトをビルドする場合、アセンブラファイル(hwmdu_LibReplacement.snnまたはhwmuldiv_LibReplacement.snn)をインクルードする必要があります。このファイルは、src\<lib>\hw_multiply_division_unitsディレクトリにあります。

一般

お使いのデバイスにどのような種類の積算/除算ユニットが搭載されているか不明な場合は、config\devicesディレクトリにあるデバイスファイル(.menu)を調べてください。このXMLファイルの<muldiv>エントリに、以下のいずれかの値が記述されています。

mul+div+mac = Has a HW multiplier, divider and MAC unit
mul+div = Has a HW multiplier and divider
mul = Has a HW multiplier
none = No support

また、オリジナルのライブラリ関数をこれらのルーチンに置き換えるには、以下に示すリンカオプションを使用する必要があります。

RL78の例(バージョン2.10以降):

--redirect ?I_MUL_L02=HWMUL_16_16_16
--redirect ?L_MUL_L03=HWMUL_32_32_32
--redirect ?UC_DIV_L01=HWDIV_8_8_8
--redirect ?UI_DIV_L02=HWDIV_16_16_16
--redirect ?UL_DIV_L03=HWDIV_32_32_32
--redirect ?UC_MOD_L01=HWMOD_8_8_8
--redirect ?UI_MOD_L02=HWMOD_16_16_16
--redirect ?UL_MOD_L03=HWMOD_32_32_32
--redirect ?SC_DIV_L01=HWSDIV_8_8_8
--redirect ?SI_DIV_L02=HWSDIV_16_16_16
--redirect ?SL_DIV_L03=HWSDIV_32_32_32
--redirect ?SC_MOD_L01=HWSMOD_8_8_8
--redirect ?SI_MOD_L02=HWSMOD_16_16_16
--redirect ?SL_MOD_L03=HWSMOD_32_32_32

RL78の例(バージョン1.40以前):

-eHWDIV_8_8_8=?UC_DIV_L01
-eHWDIV_16_16_16=?UI_DIV_L02
-eHWDIV_32_32_32=?UL_DIV_L03
-eHWMUL_16_16_16=?I_MUL_L02
-eHWMUL_32_32_32=?L_MUL_L03
-eHWSDIV_8_8_8=?SC_DIV_L01
-eHWSDIV_16_16_16=?SI_DIV_L02
-eHWSDIV_32_32_32=?SL_DIV_L03

78K0R/K0/K0Sの例:

-eHWMUL_16_16_16=?I_MUL_L02
-eHWMUL_32_32_32=?L_MUL_L03
-eHWDIV_8_8_8=?UC_DIV_L01
-eHWDIV_16_16_16=?UI_DIV_L02
-eHWDIV_32_32_32=?UL_DIV_L03
-eHWSDIV_8_8_8=?SC_DIV_L01
-eHWSDIV_16_16_16=?SI_DIV_L02
-eHWSDIV_32_32_32=?SL_DIV_L03

上記のリストは完全ではありません。IAR Embedded Workbenchのリリースによっては、このリストは異なる場合があります。

特定のアセンブラルーチンによってどのライブラリ関数が置き換えられるかは、ソースファイル(hwmuldiv_LibReplacement.snnまたはhwmdu_LibReplacement.s)にも記述されています。

 

全ての製品名は、それぞれの所有者の商標または登録商標です。

申し訳ございませんが、弊社サイトではInternet Explorerをサポートしていません。サイトをより快適にご利用いただくために、Chrome、Edge、Firefoxなどの最新ブラウザをお使いいただきますようお願いいたします。