(57)【要約】【課題】浮動小数点型データと整数型データとの数型変換演算処理をソフトウェアで実施すると、ＣＰＵへの負荷が大きくなる。【解決手段】半導体装置は、メモリと、前記メモリと接続されるバスと、前記バスに接続されるバスマスタと、前記バスに接続される変換演算回路と、を備える。前記変換演算回路は浮動小数点型データの加減算器と整数型データの加減算器とシフト演算器とを備え、浮動小数点型データの乗算器および除算器を用いないで浮動小数点型データを整数型データに変換演算し、または、整数型データを浮動小数点型データに変換演算する。【選択図】図１７
2017199167.tif 000002
【特許請求の範囲】
【請求項１】
半導体装置は、
メモリと、
前記メモリと接続されるバスと、
前記バスに接続されるバスマスタと、
前記バスに接続される変換演算回路と、
を備え、
前記変換演算回路は浮動小数点型データの加減算器と整数型データの加減算器とシフト演算器とを備え、浮動小数点型データの乗算器および除算器を用いないで浮動小数点型データを整数型データに変換演算し、または、整数型データを浮動小数点型データに変換演算する。
【請求項２】
請求項１の半導体装置において、
前記変換演算回路は、前記バスマスタから供給される変換演算の指示に基づいて前記バスマスタよってメモリから供給される浮動小数点型データを整数型データに変換演算を行い、
前記バスマスタは前記変換演算回路が変換演算した結果を前記メモリに格納する。
【請求項３】
請求項２の半導体装置において、
さらに、通信回路を備え、
前記バスマスタは前記メモリに格納された変換演算した結果を前記通信回路に供給する。
【請求項４】
請求項１の半導体装置において、
前記変換演算回路は、前記バスマスタから供給される指示に基づいて、前記メモリから浮動小数点型データを読み出して整数型データに変換演算する。
【請求項５】
請求項４の半導体装置において、
さらに、通信回路を備え、
前記変換演算回路は前記変換演算した結果を前記通信回路に供給する。
【請求項６】
請求項１の半導体装置において、
前記変換演算回路は、中間値との比較を繰り返す二分法を用いて浮動小数点型データを整数型データに変換演算する。
【請求項７】
請求項６の半導体装置において、
前記変換演算回路は、前記浮動小数点型データがとり得る最大値と最小値から中間値を求めて変換演算を行う。
【請求項８】
請求項６の半導体装置において、
前記整数型データのビット長をｎ、前記浮動小数点型データがとり得る範囲をRange、前記浮動小数点型データがとり得る最小値をOffsetとし、Range／２ｎをLsbとし、
前記変換演算回路は、前記Lsbおよび前記Offsetを用いて変換演算する。
【請求項９】
請求項１の半導体装置において、
前記変換演算回路は、中間値の加算を繰り返す演算法を用いて整数型データを浮動小数点型データに変換演算する。
【請求項１０】
請求項１の半導体装置において、
前記変換演算回路はさらに整数型データの乗算器を備え、
前記整数型データのビット長をｎ、前記浮動小数点型データがとり得る範囲をRange、Range／２ｎをLsbとし、
前記変換演算回路は、前記Lsbを用いて整数型データから浮動小数点型データに変換演算する。
【請求項１１】
半導体装置はＣＰＵとプログラムを格納するメモリとを有する制御装置を備え、
前記制御装置は（ａ）中間値との比較を繰り返す二分法を用いて浮動小数点型データを整数型データに変換演算する手段を備える。
【請求項１２】
請求項１１の半導体装置において、
前記（ａ）手段は前記浮動小数点型データがとり得る最大値と最小値から中間値を求めて変換演算を行う。
【請求項１３】
請求項１２の半導体装置において、
前記（ａ）手段は、
（ａ１）第１記憶手段と、
（ａ２）第２記憶手段と、
（ａ３）第３記憶手段と、
（ａ４）第４記憶手段と、
（ａ５）変換対象の浮動小数点型データがとり得る最大値を前記第１記憶手段に格納する手段と、
（ａ６）前記変換対象の浮動小数点型データがとり得る最小値を前記第２記憶手段に格納する手段と、
（ａ７）前記第１記憶手段に記憶されている値と前記第２記憶手段に格納されている値との中間値を計算し前記第３記憶手段に格納する手段と、
（ａ８）前記変換対象の浮動小数点型データの値が前記（ａ７）手段によって前記第３記憶手段に格納された中間値よりも大きい場合は前記第４記憶手段に記憶される整数型データの最上位ビットを“１”にし、前記第３記憶手段に記憶されている中間値を前記第２記憶手段に格納する手段と、
（ａ９）前記変換対象の浮動小数点型データが前記第３記憶手段に記憶されている中間値よりも小さい場合は前記記憶手段に記憶される整数型データの最上位ビットを“０”にし、前記第３記憶手段に記憶されている中間値を前記第１記憶手段に格納する手段と、
を備える。
【請求項１４】
請求項１１の半導体装置において、
前記整数型データのビット長をｎ、前記浮動小数点型データがとり得る範囲をRange、前記浮動小数点型データがとり得る最小値をOffsetとし、Range／２ｎをLsbとし、
前記（ａ）手段は前記Lsbおよび前記Offsetを用いて変換演算する。
【請求項１５】
請求項１４の半導体装置において、
前記（ａ）手段は、
（ａ２１）第２１記憶手段と、
（ａ２２）第２２記憶手段と、
（ａ２３）第２３記憶手段と、
（ａ２４）変換対象の浮動小数点型データから前記Offsetを引いて前記第２１記憶手段に格納する手段と、
（ａ２５）前記Rangeを前記第２２記憶手段に格納する手段と、
（ａ２６）前記第２２記憶手段に格納されている値を２で割って前記第２２記憶手段に格納する手段と、
（ａ２７）前記第２２記憶手段に格納されている値が前記第２１記憶手段に格納されている値以下の場合は前記第２３記憶手段に記憶される整数型データの最上位ビットを“１”にする手段と、
（ａ２８）前記第２２記憶手段に格納されている値が前記第２１記憶手段に格納されている値よりも大きい場合は前記第２３記憶手段に記憶される整数型データの最上位ビットを“０”にする手段と、
を備える。
【請求項１６】
請求項１５の半導体装置において、
前記（ａ２７）手段は、前記第２２記憶手段に格納されている値が前記第２１記憶手段に格納されている値と等しい場合は前記第２３記憶手段に記憶される整数型データの最上位ビットを“１”にし、他のビットを“０”にする。
【請求項１７】
請求項１１の半導体装置において、
前記制御装置は（ｂ）中間値の加算を繰り返す演算法を用いて整数型データを浮動小数点型データに変換演算する手段を備える。
【請求項１８】
請求項１７の半導体装置において、
前記（ｂ）手段は、
（ｂ１）第３１記憶手段と、
（ｂ２）第３２記憶手段と、
（ｂ３）第３３記憶手段と、
（ｂ４）第３４記憶手段と、
（ｂ５）浮動小数点型データがとり得る最大値を前記第３１記憶手段に格納する手段と、
（ｂ６）浮動小数点型データがとり得る最小値を前記第３２記憶手段に格納する手段と、
（ｂ７）前記第３１記憶手段に記憶されている値と前記第３２記憶手段に格納されている値との中間値を計算し前記第３記憶手段に格納する手段と、
（ｂ８）変換対象の整数型データの値の最上位ビットが“１”の場合は前記第３４記憶手段に前記第３３記憶手段の値を加算して前記第４記憶手段に格納し、前記第３１記憶手段に前記第３３記憶手段の値を格納する手段と、
（ｂ９）変換対象の整数型データの値の最上位ビットが“０”の場合は前記第３１記憶手段に前記第３３記憶手段の値を格納する手段と、
を備える。
【請求項１９】
請求項１５の半導体装置において、
前記整数型データのビット長をｎ、前記浮動小数点型データがとり得る範囲をRange、Range／２ｎをLsbとし、
前記制御装置は（ｃ）前記Lsbを用いて整数型データを浮動小数点型データに変換演算する手段を備える。
【請求項２０】
請求項１９の半導体装置において、
前記（ｃ）手段は、
（ｃ１）前記Lsbを指数と仮数に分解する手段と、
（ｃ２）前記仮数を整数（仮整数）に変換し、前記指数をシフトする手段と、
（ｃ３）変換対象の整数データと前記仮整数とを掛ける手段と、
（ｃ４）前記（ｃ３）手段で求めた値を仮数に変換し、前記（ｃ２）手段でシフトした指数をシフトする手段と、
を備える。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は半導体装置に関し、例えば浮動小数点演算機能を内蔵する半導体装置に適用可能である。
【背景技術】
【０００２】
車載エンジンの制御等に用いられる電子制御装置においても、各種演算の実行に、整数型データ（固定小数点型データ）を用いる代わりに、浮動小数点型データを用いるタイプのものがある（例えば、米国特許出願公開第２００４／１８６８６６号明細書）。この浮動小数点型データを用いることにより、整数型データを用いたものと比較して、より高精度な演算を行うことができるようになる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００４／１８６８６６号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００４】
浮動小数点型データと整数型データとの数型変換演算処理をソフトウェア（中央処理装置（ＣＰＵ）によるプログラムの実行）で実施すると、ＣＰＵへの負荷が大きくなる。一方、専用の浮動小数点演算プロセッサを用いると回路規模が大きくなる。
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００５】
本開示のうち、代表的なものの概要を簡単に説明すれば、下記のとおりである。
すなわち、半導体装置に搭載される変換演算回路は、浮動小数点型データの加減算器と整数型データの加減算器とシフト演算器とを備え、浮動小数点型データの乗算器および除算器を用いないで浮動小数点型データを整数型データに変換演算し、または、整数型データを浮動小数点型データに変換演算する。
【発明の効果】
【０００６】
上記半導体装置によれば、ＣＰＵの負荷を低減することができる。
【図面の簡単な説明】
【０００７】
【図１】単精度記憶形式の浮動小数点データのフォーマットを示す図
【図２】比較例に係る変換演算の概念を示す図
【図３】圧縮演算の具体例を説明するための図
【図４】圧縮演算の具体例を説明するための図
【図５】解凍演算の具体例を説明するための図
【図６】解凍演算の具体例を説明するための図
【図７】専用の浮動小数点演算プロセッサを有さないマイクロコントローラの構成を示すブロック図
【図８】専用の浮動小数点演算プロセッサを有するマイクロコントローラの構成を示すブロック図
【図９】実施形態に係る圧縮演算のアルゴリズムを説明するための図
【図１０】実施形態に係る圧縮演算を説明するためのフローチャート
【図１１】実施形態に係る解凍演算のアルゴリズムを説明するための図
【図１２】実施形態に係る解凍演算を説明するためのフローチャート
【図１３】変形形態１に係る圧縮演算のアルゴリズムを説明するための図
【図１４】変形形態１に係る解凍演算のアルゴリズムを説明するための図
【図１５】変形形態２に係る圧縮演算のアルゴリズムを説明するための図
【図１６】実施例１に係るシステムの構成を示すブロック図
【図１７】実施例２に係るマイクロコントローラの構成を示すブロック図
【図１８】実施例２に係る変換演算回路の構成を示すブロック図
【図１９】ディスクリプタの構成を示す図
【図２０】動作フローチャート
【図２１】実施例３に係るマイクロコントローラの構成を示すブロック図
【図２２】実施例３に係る変換演算回路の構成を示すブロック図
【図２３】ディスクリプタの構成を示す図
【図２４】動作フローチャート
【発明を実施するための形態】
【０００８】
以下、比較例、実施形態および実施例について、図面を用いて説明する。ただし、以下の説明において、同一構成要素には同一符号を付し繰り返しの説明を省略することがある。
【０００９】
アプリケーションによっては変数を浮動小数点型データで持つことが多いが、浮動小数点型データの表現可能な値に対して実際にとりうる値は限定的である。例えば温度センサは外気温を表現するのに浮動小数点型データを使用しているが、実際に取りうる値の範囲は−２７３℃〜１，２００℃である。これをそのまま通信回路（ＣＡＮ（Controller Area Network）、Ｉ２Ｃ（Inter-Integrated Circuit）、ＳＰＩ（Serial Peripheral Interface）、Ethernet等）で扱うには通信レイテンシが悪い。よって、浮動小数点型データ（float）を符号なし整数型データ（uint）に変換することでデータを圧縮し、信号の精度が下がることを引き換えに通信レイテンシを向上させることを検討した。
【００１０】
まず、浮動小数点型データのフォーマットについて図１を用いて説明する。図１はＩＥＥＥ７５４規格の単精度記憶形式の浮動小数点型データのフォーマットを示す図である。単精度記憶形式のデータは、４バイトからなり、１ビットの符号部（Ｓ）と、８ビットの指数部（Ｅ）と、２３ビットの仮数部（Ｍ）とを有している。これにより、表される値は、
（−１）Ｓ×２（Ｅ−１２７）×（１＋Ｍ）
である。ここで、Ｍは小数点以下の数である。仮数部が２３ビットで構成されるため、この浮動小数点型データを用いることで、「１／２２３≒０．００００００１」の精度、すなわち小数点以下７桁の精度で演算が実施されることとなる。
【００１１】
次に、本願発明者が検討した（以下、「比較例」という。）浮動小数点型データと符号なし整数型データとの数型変換演算処理（以下、「変換演算」という。）について図２〜９を用いて説明する。浮動小数点型データから符号なし整数型データへの変換を「圧縮」といい、符号なし整数型データから浮動小数点型データへの演算変換を「解凍」という。図２は比較例に係る変換演算の概念を示す図である。図３、４は圧縮演算の具体例を説明するための図である。図５、６は解凍演算の具体例を説明するための図である。
【００１２】
＜変換演算の概念＞
図１に示すように、浮動小数点型データは３２ビット長である。この浮動小数点型データをfloat32とする。float32とｎビット長の符号なし整数型データ（unitｎ）と変換演算を行う。図２ではｎ＝８の場合が示されているが、ｎ＝１〜３２の範囲で可変である。ただし、データを圧縮する観点からはｎは小さいほどよく、精度の観点からはｎは大きいほどよい。
【００１３】
浮動小数点型データ（float32）の最大値（Signalの最大値）をSignalＭＡＸとし、浮動小数点型データの最小値（Signalの最小値）をSignalＭＩＮとする。unitｎの最大値は２ｎ−１で、最小値は０である。
【００１４】
＜初期定義＞
まず、Signalの最小値をOffsetとする。
Offset＝SignalＭＩＮ
次に、Signalの取りうる値の範囲をRangeとする。
Range＝SignalＭAX−SignalＭＩＮ
最後に、Rangeを２のｎ乗で割り、Lsbとする。
Lsb＝Range/２ｎ
例えば、重みを０〜２５５とするのであれば、ｎは８である。以下、ｎ＝８の場合について説明する。初期定義は、圧縮演算（float32のSignalをunit８のＵ１に変換する場合）と解凍演算（unit８のＵ１をfloat32のSignalに変換する場合）とで共通である。
【００１５】
float32のSignalをunit８のＵ１に変換する場合は、まず、SignalをOffsetで引き、Lsbで割り、これをＦ４とする。
Ｆ４＝(Signal−Offset)/Lsb
Ｆ４は必ず０〜２５５の値に収まる。次に、浮動小数点数のＦ４を整数のＵ１に変換する。
Ｕ１＝（unit８）Ｆ４
unit８のＵ１をfloat32のSignalに変換する場合は、まず、整数のＵ１を浮動小数点数のＦ４に変換する。
Ｆ４＝（float）Ｕ１
次に、Ｆ４にLsbを掛け、Offsetを足すとSignalとなる。
Signal＝(Ｆ４＊Lsb)＋Offset
＜float32⇒unit８の具体例＞
（OffsetとLsbの準備）
図３に示すように、Signal（float32）に関して、最小値“-273(d)”、最大値“120,000(d)”の場合、ステップＳ１により“最小値”を“Offset”として、ステップＳ２、Ｓ３により“取り得る範囲の絶対値(Range)/256”を“Ｌｓｂ”として、データテーブル内に準備する。ここで、Offset＝SignalＭＩＮ＝-273(d)、Range＝SignalＭＡＸ−SignalＭＩＮ＝120,273(d)、Lsb＝Range/256＝469.8…である。なお、(d)はこの前の数が１０進数であることを示している。
【００１６】
（圧縮）
図４に示すように、浮動小数点型データ（Signal(float32)）の値(Value)を“16,500.52”とすると、データテーブルからLsbおよびOffsetを取得し、ステップＳ１１１によりValueからOffsetを減算して（Sub(Value-Offset)）、Sub＝16,773.52を得る。ステップＳ１１２によりSubをLsbで除算して（Div(Sub/Lsb)）、Div＝35.7022…を得る。ステップＳ１２によりDivの小数点以下を切り捨てて整数に変換して（Int(Div)）、Int＝35（unit８）を得る。
【００１７】
＜unit８⇒float32の具体例＞
（OffsetとLsbの準備）
図５に示すように、Signal（float32）に関して、最小値“３億(d)”、最大値“３億７千(d)”の場合、ステップＳ１により“最小値”を“Offset”として、ステップＳ２、Ｓ３により“取り得る範囲の絶対値(Range)/256”を“Lsb”として、データテーブル内に準備する。ここで、Offset＝SignalＭＩＮ＝3000,000,000(d)、Range＝SignalＭＡＸ−SignalＭＩＮ＝7000(d)、Lsb＝Range/256＝27.3…である。
【００１８】
（解凍）
図６に示すように、整数データ（Int(unit８)）の値(Int)を“91”とすると、ステップＳ２１により単精度浮動小数点に変換して（Cast(float32)）、Cast＝91を得る。ステップＳ２２１によりCastにLsbを乗算して（Mul(Cast*Lsb)）、Mul＝2488.28125を得る。ステップＳ２２２によりMulにOffsetを加算して（Add(Mul+Offset)）、Add＝300,002,488.28125を得る。これにより、単精度浮動小数点データ（Signal(float32)）を得る。
【００１９】
次に、変換演算を行うマイクロコントローラの構成について図７、８を用いて説明する。図７は専用の浮動小数点演算プロセッサを有さないマイクロコントローラの構成を示すブロック図である。図８は専用の浮動小数点演算プロセッサを有するマイクロコントローラの構成を示すブロック図である。
【００２０】
図７のマイクロコントローラ１０Ｒは中央処理装置（ＣＰＵ）１１とデータ転送装置／ダイレクトメモリアクセス制御装置（ＤＴＣ／ＤＭＡＣ）１２とランダムアクセスメモリ（ＲＡＭ）１３とフラッシュメモリ（ＦＬＡＳＨ）１４とアナログ／デジタル変換回路（ＡＤＣ）１５と通信回路１６とバス１７とを備える。上記変換演算のプログラムやデータテーブルはＦＬＡＳＨ１４に格納される。上記変換演算はＣＰＵ１１がＦＬＡＳＨ１４に格納されたプログラムを読み出して実行し、変換演算のデータはＲＡＭ１３に格納される。
【００２１】
図８のマイクロコントローラ１０Ｓは中央処理装置（ＣＰＵ）１１とデータ転送装置／ダイレクトメモリアクセス制御装置（ＤＴＣ／ＤＭＡＣ）１２とランダムアクセスメモリ（ＲＡＭ）１３とフラッシュメモリ（ＦＬＡＳＨ）１４とアナログ／デジタル変換回路（ＡＤＣ）１５と通信回路１６とバス１７と浮動小数点演算プロセッサ（ＦＰＵ）１８Ｓを備える。上記変換演算のプログラムやデータテーブルはＦＬＡＳＨ１４に格納される。ＦＰＵ１７ＳがＦＬＡＳＨ１４に格納されたプログラムを読み出して実行し（またはＣＰＵ１１がＦＬＡＳＨ１４に格納されたプログラムを読み出してＦＰＵ１８Ｓに実行させて）、変換演算のデータはＲＡＭ１３に格納される。
【００２２】
上述したように、比較例に係る変換演算では、浮動小数点型データの除算および乗算が必要である。この浮動小数点型データの除算および乗算をマイクロコントローラ１０ＲのＣＰＵ１１で実施すると、ＣＰＵ１１への負荷が大きくなる。一方、マイクロコントローラ１０Ｓの除算器および乗算器を有するＦＰＵ１８Ｓで実施するようにすると回路規模が大きくなる。
【００２３】
＜実施形態＞
実施形態に係る変換演算について図９〜１２を用いて説明する。図９は圧縮演算のアルゴリズムを説明するための図である。図１０は圧縮演算を説明するためのフローチャートである。図１１は解凍演算のアルゴリズムを説明するための図である。図１２は解凍演算を説明するためのフローチャートである。
【００２４】
（圧縮演算）
浮動小数点数を整数に変換する際には中間値との比較を繰り返す、二分法を用いる。
【００２５】
まず、Signalの最大値（SignalＭＡＸ）とSignalの最小値（SignalＭＩＮ）との中間値を計算する。
ステップＳ３１：変換対象データのSignalをＳｉｇに入れ、SignalＭＡＸをＭａｘに入れ、SignalＭＩＮをＭｉｎに入れる。整数のビット位置を示すｎ−１をｉに入れる。ｉは繰り返し回数も表している。
ステップＳ３２：ＭａｘとＭｉｎの中間値を計算し、Ｍｉｄに入れる。中間値は浮動小数点型データの減算と指数部の減算で行うことができる。
【００２６】
次に、Signalが中間値よりも大きければＩｎｔのビットを“１”にし、Signalが中間値よりも小さければＩｎｔのビットを“０”にする。図９では１回目はSignalが中間値よりも大きい場合、２回目はSignalが中間値よりも小さい場合が示されている。
ステップＳ３３：ＳｉｇがＭｉｄよりも大きいかどうかを判断する。ＹＥＳの場合はステップＳ３４に移動し、ＮＯの場合はステップＳ３６に移動する。
ステップＳ３４：Ｉｎｔのｎ−１ビット目に“１”をセットする。２回目のときはｎ−２ビット目に“１”をセットする。以下、同様にして、ｎ回目のときは０ビット目に“１”をセットする。
ステップＳ３５：ＭｉｎにＭｉｄの内容を入れる。
ステップＳ３６：Ｉｎｔのｎ−１ビット目に“０”をセットする。２回目のときはｎ−２ビット目に“０”をセットする。以下、同様にして、ｎ回目のときは０ビット目に“０”をセットする。
ステップＳ３７：ＭａｘにＭｉｄの内容を入れる。
ステップＳ３８：ｉの内容を１つ小さくする。
【００２７】
次に、上記処理をｎ回繰り返してfloatをunitｎに変換する。
ステップＳ３９：所定回数（ｎ回）繰り返したか（ｉ＜０）どうかを判断する。ＹＥＳの場合は終了し、ＮＯの場合はステップＳ３２に移動する。
【００２８】
（解凍演算）
整数を浮動小数点数に変換する際には中間値の加算を繰り返す、演算法を用いる。
【００２９】
まず、Signalの最大値（SignalＭＡＸ）とSignalの最小値（SignalＭＩＮ）との中間値を計算する。
ステップＳ４１：SignalＭＡＸをＭａｘに入れ、SignalＭＩＮをＭｉｎに入れる。整数のビット位置を示すｎ−１をｉに入れる。ｉは繰り返し回数も表している。
ステップＳ４２：ＭａｘとＭｉｎの中間値を計算し、Ｍｉｄに入れる。中間値は浮動小数点型データの減算と指数部の減算で行うことができる。
【００３０】
次に、Ｉｎｔのビットが“１”であれば、Ｍｉｄの値をＳｉｇに加算し、Ｉｎｔのビットが“０”であれば、Ｍｉｄの値をＳｉｇに加算しない。
ステップＳ４３：Ｉｎｔのｎ−１ビット目が“１”であるかどうかを判断する。ＹＥＳの場合はステップＳ４４に移動し、ＮＯの場合はステップＳ４５に移動する。
ステップＳ４４：ＳｉｇにＭｉｄの値を加算する。
ステップＳ４５：ＭａｘにＭｉｄの内容を入れる。
ステップＳ４６：ｉの内容を１つ小さくする。
【００３１】
次に、上記処理をｎ回繰り返してunitｎをfloatに変換する。
ステップＳ４７：所定回数（ｎ回）繰り返したか（ｉ＜０）どうかを判断する。ＹＥＳの場合は終了し、ＮＯの場合はステップＳ４２に移動する。
【００３２】
実施形態に係る変換演算では、比較例のような浮動小数点型データの除算および乗算を行う必要がない。これにより、マイクロコントローラ１０ＲのＣＰＵ１１で実施する場合、ＣＰＵ１１の負荷を低減することが可能となる。また、マイクロコントローラ１０ＳのＦＰＵ１８Ｓの代わりに除算器および乗算器を有しない変換演算回路を用いることにより、回路規模の増大を抑えることができる。
【００３３】
＜変形形態１＞
次に、変形形態１に係る変換演算について図１３、１４を用いて説明する。図１３は圧縮演算のアルゴリズムを説明するための図である。図１４は解凍演算のアルゴリズムを説明するための図である。
【００３４】
変形形態１に係る変換演算は、の実施形態の初期定義と同様なOffsetとLsbとを用いた２分法である。OffsetとLsbを以下のように定義する。
Offset＝SignalＭＩＮ
Range＝SignalＭＡＸ−SignalＭＩＮ＝SignalＭＡＸ−Offset
Lsb＝Range/２ｎ
ここで、浮動小数点型データ（float32）の最大値（Signalの最大値）がSignalＭＡＸであり、浮動小数点型データの最小値（Signalの最小値）がSignalＭＩＮである。
【００３５】
（圧縮演算）
ＸnをRangeとし、
Ｘn-1＝Ｘn/２＝Ｘn×２−１、
Ｘn-２＝Ｘn-1/２＝Ｘn/４＝Ｘn×２−２、
・・・、
Ｘ1＝Ｘn×２−(ｎ−１) 、
Ｘ0＝Ｘn×２−ｎ
とする。Ｘn-1はＸnと０との間の中間値であり、Ｘn-2はＸn-1と０との間の中間値である。ここで、Ｘn＝Range＝Lsb×２ｎ（Ｘnの指数部はLsbの指数部＋ｎ）であるので、
Ｘn-1＝Lsb×２ｎ−１（Ｘn-1の指数部はLsbの指数部＋ｎ−１）、
Ｘn-２＝Lsb×２ｎ−２（Ｘn-２の指数部はLsbの指数部＋ｎ−２）、
・・・、
Ｘ1＝Lsb×２１（Ｘ1の指数部はLsbの指数部＋１）、
Ｘ0＝Lsb×２0＝Lsb
となる。最初の比較に用いる中間値はＸn-1＝Lsb×２ｎ−１となり、最後の比較に用いる中間値はＸ0＝Lsbとなる。
【００３６】
変換対象のSignalもOffsetを引いて用いる。これをO_Signal（＝Signal−Offset）とする。
【００３７】
ｉ＝ｎ−１の場合：Ｘn-1とO_Signalとを比較し、Ｘn-1がO_Signal以下であるときはＩｎｔのｎ−１ビット目に“１”をセットし、O_SignalからＸn-1を引いた値をO-Signalとする。Ｘn-1がO-Signalより大きいときはＩｎｔのｎ−１ビット目に“０”をセットする。
【００３８】
ｉ＝ｎ−２の場合：Ｘn-2とO_Signalとを比較し、Ｘn-2がO_Signal以下であるときはＩｎｔのｎ−２ビット目に“１”をセットし、O_SignalからＸn-2を引いた値をO-Signalとする。Ｘn-2がO_Signalより大きいときはＩｎｔのｎ−２ビット目に“０”をセットする。
【００３９】
以下、ｉを１つずつ引いて同様に演算する。
【００４０】
ｉ＝１の場合：Ｘ1とO_Signalとを比較し、Ｘ1がO_Signal以下であるときはＩｎｔの１ビット目に“１”をセットし、O_SignalからＸ1を引いた値をO_Signalとする。Ｘ1がO-Signalより大きいときはＩｎｔの１ビット目に“０”をセットする。
【００４１】
ｉ＝０の場合：Ｘ0とO_Signalとを比較し、Ｘ0がO_Signal以下であるときはＩｎｔの０ビット目に“１”をセットし、O_SignalからＸ0を引いた値をO_Signalとする。Ｘ0がO_Signalより大きいときはＩｎｔの０ビット目に“０”をセットする。
【００４２】
ｉが負数になったら演算を終了する。Ｉｎｔには変換された整数が格納される。これにより、中間値を求める演算が実施形態よりも簡単になる。
【００４３】
（解凍演算）
整数（unit）にLsb（float）を掛けることにより、整数型データ（unit）を浮動小数点型データ（float）に変換することができる。浮動小数点の乗算を用いないで、整数（unit８）から浮動小数点（float32）への変換を例にして以下説明する。
【００４４】
まず、Lsb（float）を指数と仮数に分解する。
signal（float32）＝unit８×Lsb（float32）
signal（float32）＝unit８×符号×２（指数−１２７）×（１．仮数）
なお、ＩＥＥＥ７５４規格の単精度記憶形式の浮動小数点型データは、
（−１）符号×２（指数−１２７）×（１．仮数）
である。
【００４５】
次に、仮数を整数（仮整数）に変換する。
符号×signal（float32）＝unit８×仮整数（２４ビット）×２−２３×２（指数−１２７）
これは指数のシフト演算で行うことができる。
【００４６】
次に、整数（unit）と仮整数を掛ける。
符号×signal（float32）＝unit32×２（指数−２３−１２７）
これは整数の乗算で行うものである。
【００４７】
次に、掛け算した値を仮数に変換する。
符号×signal（float32）＝unit24×２（シフトした数）×２（指数−２３−１２７）
ここで、unit24は最上位の１の位置までシフトしたものである。これは指数のシフト演算で行うことができる。
【００４８】
最後に、仮数と指数で求めたい値（float）となる。
符号×signal（float32）＝（１．仮数）×２（指数−１２７）
signal（float32）＝符号×２（指数−１２７）×（１．仮数）
ここで、仮数はunit24の下位２３ビットである。指数は（最初の指数−２３−シフトした数）である。変形形態１に係る変換演算では、実施形態と同様に、比較例のような浮動小数点型データの除算および乗算を行う必要がない。
【００４９】
＜変形形態２＞
次に、変形形態２に係る変換演算について図１５を用いて説明する。図１５は圧縮演算のアルゴリズムを説明するための図である。
【００５０】
変形形態２に係る変換演算は、Ｘi（ｉ＝０〜ｎ−１）がO_Signalと一致した場合に演算を終了する点を除いて、図１３の圧縮演算のアルゴリズムと同様である。
【００５１】
ｉ＝ｎ−１の場合：Ｘn-1とO-Signalとを比較し、Ｘn-1がO_Signalと同じであるときはＩｎｔのｎ−１ビット目に“１”をセットし、ｎ−２ビット以下をすべて“０”にして演算を終了する。Ｘn-1がO_Signalより小さいときはＩｎｔのｎ−１ビット目に“１”をセットし、O_SignalからＸn-1を引いた値をO_Signalとする。Ｘn-1がO_Signalより大きいときはＩｎｔのｎ−１ビット目に“０”をセットする。
【００５２】
ｉ＝ｎ−２の場合：Ｘn-2とO_Signalとを比較し、Ｘn-2がO_Signalと同じであるときはＩｎｔのｎ−２ビット目に“１”をセットし、ｎ−３ビット以下をすべて“０”にして演算を終了する。Ｘn-2がO_Signalより小さいときはＩｎｔのｎ−２ビット目に“１”をセットし、O_SignalからＸn-2を引いた値をO_Signalとする。Ｘn-2がO_Signalより大きいときはＩｎｔのｎ−２ビット目に“０”をセットする。
【００５３】
以下、ｉを１つずつ引いて同様に演算する。
【００５４】
ｉ＝１の場合：Ｘ1とO_Signalとを比較し、Ｘ1がO_Signalと同じであるときはＩｎｔの１ビット目に“１”をセットし、０ビット目に“０”をセットして演算を終了する。Ｘ1がO_Signalより小さいときはＩｎｔの１ビット目に“１”をセットし、O_SignalからＸ1を引いた値をO_Signalとする。Ｘ1がO_Signalより大きいときはＩｎｔの１ビット目に“０”をセットする。
【００５５】
ｉ＝０の場合：Ｘ0とO_Signalとを比較し、Ｘ0がO_Signalと同じであるときはＩｎｔの１ビット目に“１”をセットして演算を終了する。Ｘ0がO_Signalより小さいときはＩｎｔの０ビット目に“１”をセットし、O_SignalからＸ0を引いた値をO_Signalとする。Ｘ0がO_Signalより大きいときはＩｎｔの０ビット目に“０”をセットする。
【００５６】
ｉが負数になったら演算を終了する。Ｉｎｔには変換された整数が格納される。変形形態２に係る変換演算では、実施形態と同様に、比較例のような浮動小数点型データの除算および乗算を行う必要がない。
【実施例１】
【００５７】
実施例１に係るシステムについて図１６を用いて説明する。図１６は実施例１に係るシステムの構成を示すブロック図である。
【００５８】
実施例１に係るシステム１はマイクロコントローラ１０とセンサ３０とマイクロコントローラ２０とを備える。マイクロコントローラ１０は中央処理装置（ＣＰＵ）１１とデータ転送装置／ダイレクトメモリアクセス制御装置（ＤＴＣ／ＤＭＡＣ）１２とランダムアクセスメモリ（ＲＡＭ）１３とフラッシュメモリ（ＦＬＡＳＨ）１４とアナログ／デジタル変換回路（ＡＤＣ）１５と通信回路１６とバス１７とを備える。マイクロコントローラ１０は１つの半導体チップ（半導体基板）に形成される半導体装置である。実施形態または変形形態１または変形形態２に係る変換演算のプログラムやデータテーブルはＦＬＡＳＨ１４に格納される。変換演算はＣＰＵ１１がＦＬＡＳＨ１４に格納されたプログラムを読み出して実行し、変換演算のデータはＲＡＭ１３に格納される。ＣＰＵ１１とＦＬＡＳＨ１４とを含むものを制御装置ともいう。ＡＤＣ１５には温度センサ等のセンサ３０が接続される。例えば温度センサで検知した外気温はＡＤＣ１５を介して浮動小数点数型データでＲＡＭ１２に格納される。通信回路１６は、例えばＣＡＮ、Ｉ２Ｃ、ＳＰＩ、Ethernet等であり、マイクロコントローラ２０の通信回路と接続される。例えばＣＰＵ１１は、ＲＡＭ１３に格納された浮動小数点数型データの外気温を整数型データに変換してＲＡＭ１３に格納する。ＣＰＵ１１またはＤＴＣ／ＤＭＡＣ１２はＲＡＭ１２に格納された整数型データの外気温を通信回路１６に送出し、通信回路１６は整数型データの外気温をマイクロコントローラ２０に送信する。逆に、ＣＰＵ１１またはＤＴＣ／ＤＭＡＣ１２は、マイクロコントローラ２０から通信回路１６を介して受信した整数型データをＲＡＭ１３に格納する。ＣＰＵ１１はＲＡＭ１３に格納された整数型データの外気温を浮動小数点型データに変換しＲＡＭ１３に格納する。
【００５９】
実施例１では、実施形態または変形形態１または変形形態２に係る変換演算は浮動小数点型データの除算および乗算が必要ないので、ＣＰＵの負荷を低減することができる。また、変換演算のための特別な回路を備えないので、半導体装置の回路規模の増大を抑制することができる。また、浮動小数点型データを符号なし整数型データに変換することでデータを圧縮することにより通信レイテンシを向上させることができる。
【実施例２】
【００６０】
実施例２に係るシステムについて図１７を用いて説明する。図１７は実施例２に係るシステムの構成を示すブロック図である。
【００６１】
実施例２に係るシステム１Ａはマイクロコントローラ１０Ａとセンサ３０とマイクロコントローラ２０とを備える。マイクロコントローラ１０Ａは中央処理装置（ＣＰＵ）１１とデータ転送装置／ダイレクトメモリアクセス制御装置（ＤＴＣ／ＤＭＡＣ）１２とランダムアクセスメモリ（ＲＡＭ）１３とフラッシュメモリ（ＦＬＡＳＨ）１４とアナログ／デジタル変換回路（ＡＤＣ）１５と通信回路１６とバス１７と変換演算回路１８Ａを備える。マイクロコントローラ１０Ａは１つの半導体チップ（半導体基板）に形成される半導体装置である。実施形態または変形形態１または変形形態２に係る変換演算は変換演回路１８Ａで行う。
【００６２】
変換演算回路１８Ａについて図１８〜２０を用いて説明する。図１８は実施例２に係る変換演算回路の構成を示すブロック図である。図１９はディスクリプタの構成を示す図である。図２０は動作フローチャートである。
【００６３】
変換演算回路１８Ａはバススレーブ１８１とデマルチプレクサ１８２とレジスタ１８３とマルチプレクサ１８４と割り込み制御回路１８５と演算回路１８６とを備える。バススレーブ１８１はバスマスタ１１２（ＣＰＵ１１またはＤＴＣ／ＤＭＡＣ１２）からのアクセスのインタフェースであり、後述するディスクリプタがバススレーブ１８１、デマルチプレクサ１８２を介してレジスタ１８３に書き込まれる。レジスタ１８３の内容および演算回路１８６の変換演算結果はマルチプレクサ１８４、バススレーブ１８１を介して読み出される。割り込み制御回路１８５はレジスタ１８３を介して制御情報が書き込まれる。割り込み制御回路１８５は演算回路１８６からの変換終了信号および変換エラー信号に基づいてレディ割り込み信号およびエラー割り込み信号を生成する。レディ割り込み信号はＤＴＣ／ＤＭＡＣ１２に、エラー割り込み信号はＣＰＵ１１に送られる。
【００６４】
演算回路１８６はデマルチプレクサ１８６１と浮動小数点型データ（float）比較器（加減算器）１８６２と整数型データ（unit）加減算器１８６３と整数型データ（unit）乗算器１８６４とシフト演算器１８６５とマルチプレクサ１８４とを備える。演算回路１８６は実施形態、変形形態１および変形形態２の変換演算を行う。なお、実施形態、変形形態１および変形形態２の変換演算のいずれか一つを実施する場合に不要な演算器は備えなくてもよい。
【００６５】
図１９に示すように、変換演算回路１８Ａを実行するためのディスクリプタは“signal_disclip”と“signal_type”と“signal_lsb_float”と“signal_offset_float”とを有する。“signal_disclip”はfloatとunitとの変換選択（圧縮、解凍のいずれかの選択）を指定する。“signal_type”は変換する前の信号の型（浮動小数点、整数のいずれか）とビット長を指定する。“signal_lsb_float”は変換する前のLsbを指定する。“signal_offset_float”は変換前のOffsetを指定する。
【００６６】
ステップＳ５１：バスマスタ１１２はＦＬＡＳＨ１４に格納されているディスクリプタをレジスタ１８３に書き込む。
ステップＳ５２：バスマスタ１１２はＦＬＡＳＨ１４に格納されている変換開始のトリガをレジスタ１８３に書き込む。
ステップＳ５３：バスマスタ１１２はＲＡＭ１３に格納されている変換前の信号をレジスタ１８３に書き込む。
ステップＳ５４：演算回路１８６はディスクリプタの情報に基づいて変換演算を実行する。
ステップＳ５５：変換終了割り込み要求に応答して、バスマスタ１１２は演算回路１８６が変換したデータを読み出し、ＲＡＭ１３に格納する。
【００６７】
ＡＤＣ１５には温度センサ等のセンサ３０が接続される。例えば温度センサで検知した外気温はＡＤＣ１５を介して浮動小数点数型データでＲＡＭ１２に格納される。通信回路１６は、マイクロコントローラ２０の通信回路と接続される。例えば変換演算回路１８Ａは、ＲＡＭ１３に格納された浮動小数点数型データの外気温を整数型データに変換してＲＡＭ１３に格納する。ＤＴＣ／ＤＭＡＣ１２はＲＡＭ１２に格納された整数型データの外気温を通信回路１６に送出し、通信回路１６は整数型データの外気温をマイクロコントローラ２０に送信する。逆に、ＤＴＣ／ＤＭＡＣ１２は、マイクロコントローラ２０から通信回路１６を介して受信した整数型データをＲＡＭ１３に格納する。変換演算回路１８ＡはＲＡＭ１３に格納された整数型データの外気温を浮動小数点型データに変換しＲＡＭ１３に格納する。
【００６８】
実施例２では、実施形態または変形形態１または変形形態２に係る変換演算には浮動小数点型データの除算器および乗算器が必要ないので、変換演算回路の回路規模の増大を抑えることができる。また、変換演算を備えるので、ＣＰＵの負荷を低減することができる。また、浮動小数点型データを符号なし整数型データに変換することでデータを圧縮することにより通信レイテンシを向上させることができる。
【実施例３】
【００６９】
実施例３に係るシステムについて図２１を用いて説明する。図２１は実施例３に係るシステムの構成を示すブロック図である。
【００７０】
実施例３に係るシステム１Ｂはマイクロコントローラ１０Ｂとセンサ３０とマイクロコントローラ２０とを備える。マイクロコントローラ１０Ｂは中央処理装置（ＣＰＵ）１１とデータ転送装置／ダイレクトメモリアクセス制御装置（ＤＴＣ／ＤＭＡＣ）１２とランダムアクセスメモリ（ＲＡＭ）１３とフラッシュメモリ（ＦＬＡＳＨ）１４とアナログ／デジタル変換回路（ＡＤＣ）１５と通信回路１６とバス１７と変換演算回路１８Ｂを備える。マイクロコントローラ１０Ｂは１つの半導体チップ（半導体基板）に形成される半導体装置である。実施形態または変形形態１または変形形態２に係る変換演算は変換演算回路１８Ｂで行う。
【００７１】
変換演算回路１８Ｂについて図２２〜２４を用いて説明する。図２２は実施例３に係る変換演算回路の構成を示すブロック図である。図２３はディスクリプタの構成を示す図である。図２４は動作フローチャートである。
【００７２】
変換演算回路１８Ｂはバススレーブ１８１とデマルチプレクサ１８２とレジスタ１８３とマルチプレクサ１８４と割り込み制御回路１８５Ｂと演算回路１８６とバスマスタ１８７とを備える。バススレーブ１８１はバスマスタ１１２（ＣＰＵ１１またはＤＴＣ／ＤＭＡＣ１２）からのアクセスのインタフェースであり、後述する変換開始のトリガがバススレーブ１８１、デマルチプレクサ１８２を介してレジスタ１８３に書き込まれる。レジスタ１８３の内容および演算回路１８６の変換演算結果はマルチプレクサ１８４、バススレーブ１８１を介して読み出される。割り込み制御回路１８５Ｂはレジスタ１８３を介して制御情報が書き込まれる。割り込み制御回路１８５は演算回路１８６からの変換終了信号および変換エラー信号に基づいてレディ割り込み信号およびエラー割り込み信号を生成する。レディ割り込み信号はＤＴＣ／ＤＭＡＣ１２に、エラー割り込み信号はＣＰＵ１１に送られる。演算回路１８６は実施例２と同様である。
【００７３】
バスマスタ１８７はＦＬＡＳＨ１４からディスクリプタを読み出して演算回路１８６に送る。また、演算回路１８６からの変換演算の結果をディスクリプタで指定された場所（ＲＡＭ１３、通信回路１６等）に書き込む。
【００７４】
図２３に示すように、変換演算回路１８Ｂを実行するためのディスクリプタは“signal_disclip”と“signal_type” と“signal_from_gram” と“signal_to_gram”と“signal_lsb_float”と“signal_offset_float”とを有する。“signal_disclip”はfloatとunitとの変換選択（圧縮、解凍のいずれかの選択）を指定する。“signal_type”は変換する前の信号の型（浮動小数点、整数のいずれか）とビット長を指定する。“signal_from_gram”は変換前の信号の格納アドレスを指定する。“signal_to_gram”は変換後の信号の格納アドレスを指定する。“signal_lsb_float”は変換する前のLsbを指定する。“signal_offset_float”は変換前のOffsetを指定する。
【００７５】
ステップＳ６１：バスマスタ１１２はＦＬＡＳＨ１４に格納されている変換開始のトリガをレジスタ１８３に書き込む。
ステップＳ６２：変換開始のトリガに基づいてバスマスタ１８７はＦＬＡＳＨ１４に格納されているディスクリプタを読み出して演算回路１８７に送る。
ステップＳ６３：バスマスタ１８７は、ディスクリプタの内容に基づいた場所に格納されている変換前の信号を読み出して演算回路１８７に送る。
ステップＳ６４：演算回路１８６はディスクリプタの情報に基づいて変換演算を実行する。
ステップＳ６５：バスマスタ１８７は演算回路１８６が変換したデータを読み出し、ディスクリプタの情報に基づいた場所に格納する。
【００７６】
ＡＤＣ１５には温度センサ等のセンサ３０が接続される。例えば温度センサで検知した外気温はＡＤＣ１５を介して浮動小数点数型データでＲＡＭ１２に格納される。通信回路１６は、マイクロコントローラ２０の通信回路と接続される。例えば変換演算回路１８Ｂは、ＲＡＭ１３に格納された浮動小数点数型データの外気温を整数型データに変換して、通信回路１６に送出し、通信回路１６は整数型データの外気温をマイクロコントローラ２０に送信する。逆に、変換演算回路１８Ｂは、マイクロコントローラ２０から通信回路１６を介して受信した整数型データを読み出し、浮動小数点型データに変換しＲＡＭ１３に格納する。
【００７７】
実施例３では、実施形態または変形形態１または変形形態２に係る変換演算には浮動小数点型データの除算器および乗算器が必要ないので、変換演算回路の回路規模の増大を抑えることができる。また、変換演算回路にバスマスタを備えるので、ＣＰＵやＤＴＣ／ＤＡＭＣのバスマスタの負荷を低減することができる。また、浮動小数点型データを符号なし整数型データに変換することでデータを圧縮することにより通信レイテンシを向上させることができる。
【００７８】
以上、本発明者によってなされた発明を実施形態、変形形態および実施例に基づき具体的に説明したが、本発明は、上記実施形態、変形形態および実施例に限定されるものではなく、種々変更可能であることはいうまでもない。
【００７９】
例えば、単精度記憶形式の浮動小数点型データについて説明したが、倍精度記憶形式の浮動小数点型データにも適用できる。
【００８０】
実施例３では、変換演算回路１８Ｂはバス１７を介して通信回路１６とデータのやり取りを行う例について説明したが、変換演算回路１８Ｂはバス１７を介さずに通信回路１６と直接データのやり取りを行ってもよい。
【符号の説明】
【００８１】
１・・・システム
１０・・・マイクロコントローラ
１１・・・ＣＰＵ
１２・・・ＤＴＣ／ＤＭＡＣ
１３・・・ＲＡＭ
１４・・・フラッシュメモリ
１５・・・Ａ／Ｄ変換回路
１６・・・通信回路
１７・・・バス
１８Ａ、１８Ｂ・・・変換演算器
１８１・・・バススレーブ
１８２・・・デマルチプレクサ
１８３・・・レジスタ
１８４・・・マルチプレクサ
１８５・・・割り込み制御回路
１８６・・・演算回路
１８６１・・・デマルチプレクサ
１８６２・・・float比較器
１８６３・・・unit加減算器
１８６４・・・unit乗算器
１８６５・・・シフト演算器
１８６６・・・マルチプレクサ
１８７・・・バスマスタ
２０・・・マイクロコントローラ
３０・・・センサ
【図１】
2017199167.tif 000003
【図２】
2017199167.tif 000004
【図３】
2017199167.tif 000005
【図４】
2017199167.tif 000006
【図５】
2017199167.tif 000007
【図６】
2017199167.tif 000008
【図７】
2017199167.tif 000009
【図８】
2017199167.tif 000010
【図９】
2017199167.tif 000011
【図１０】
2017199167.tif 000012
【図１１】
2017199167.tif 000013
【図１２】
2017199167.tif 000014
【図１３】
2017199167.tif 000015
【図１４】
2017199167.tif 000016
【図１５】
2017199167.tif 000017
【図１６】
2017199167.tif 000018
【図１７】
2017199167.tif 000019
【図１８】
2017199167.tif 000020
【図１９】
2017199167.tif 000021
【図２０】
2017199167.tif 000022
【図２１】
2017199167.tif 000023
【図２２】
2017199167.tif 000024
【図２３】
2017199167.tif 000025
【図２４】
2017199167.tif 000026