simulink-single-precision-conversion について
Fixed-Point Designerを使い、ロード済みのSimulinkモデルやサブシステムの倍精度型を単精度に変換するスキルです。互換性を確認して変換後の状態を検証し、モデルは保存せずに結果を報告します。
主な機能
- 01対象型を単精度に変換
- 02変換前の互換性チェック
- 03残存する倍精度演算の検証
- 04変換とメモリ結果の報告
- 05未保存のモデル基準状態を維持
活用シーン
- 01Simulinkモデルの単精度変換
- 02組み込みハードウェアのメモリ削減
- 03一括変換やCIチェックの実行
- 04互換性と変換結果の確認
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ matlab/ simulink-agentic-toolkit --skill simulink-single-precision-conversionインストール後、Claude Code で/simulink-single-precision-conversionを入力して読み込まれたか確認します。
同梱ファイル
SKILL.md と一緒にインストールされる参考資料やスクリプト。
manifest.yamlreferences/edge-cases.mdreporting-format.md詳細
Simulink モデルの単精度変換(Fixed-Point Designer)
ツールボックス:Fixed-Point Designer
関数:DataTypeWorkflow.Single.convertToSingle
ユーザーが指定した倍精度データ型を、ブロック設定、Stateflow チャート設定、信号オブジェクト、バスオブジェクト全体にわたって単精度に変換します。Boolean、組み込み整数型(int8、uint8、int16、…)、および固定小数点型は変更されません。
使用する場合
- Simulink モデル(
.slx)またはサブシステムを倍精度から単精度に変換する場合 - ネイティブで単精度をサポートする組み込みハードウェアのメモリ使用量を削減する場合
- バッチ/CI 変換、変換の互換性チェック、または残存する倍精度型がないことの確認を行う場合
- 単精度変換の互換性レポートと変換結果を、ユーザー向けに平易な言葉で要約する場合
使用しない場合
- 単独の MATLAB
.mコード — 代わりにcoder.config('single')を指定してconvertToSingle関数を使用します - 固定小数点データ型の最適化 — 代わりに
DataTypeWorkflow.Converterを使用します - 関数の近似、または LUT を使用した Lookup Table ブロックの縮小 — 代わりに
simulink-optimize-lookup-tablesを使用します
公開 API
ConversionReport = DataTypeWorkflow.Single.convertToSingle(systemToConvert)
systemToConvert(char)— 読み込み済みモデルまたはサブシステムのブロックパス全体(例:'myModel'または'myModel/Controller')。ConversionReport(struct)— 互換性チェック、変換された項目、検証ステータス(以下のフィールド表を参照)。
実行例:openExample("fixedpoint/ConvertSystemToSinglePrecisionExample")
ルール
load_systemではなくopen_system(modelName)で開きます。変換前後のダイアグラムをユーザーが確認できるようにします。- 自分で
save_systemを呼び出してはいけません。 保存すると倍精度のベースラインが失われ、意味のある再実行ができなくなります。モデルは未保存の変更がある状態のままにします。これは、ユーザーが「変更を確定して」「保存して」「最初から最後まで全部やって」と依頼した場合も同様です。これらの依頼は自動保存への同意ではありません。その場合は、自分ではモデルを保存しないこと、保存すると倍精度のベースラインが上書きされることを明確に伝え、ユーザー自身が確認するかsave_systemを実行するよう依頼します。保存についてユーザーが明示的に確認した場合に限り(単に「全部やって」という一般的な依頼は含みません)、保存します。 - 互換性チェックは
convertToSingleの内部で実行されます。結果はreport.CheckInfoから読み取ります(別途呼び出す関数ではありません)。 - 変換する前に、必ずユーザーの明示的な同意を得ます。モデルのパス、サブシステム、または範囲が曖昧な場合は、推測せずに質問します。 ユーザーがモデル名を挙げずに「自分のモデル」と言った場合は、どのモデルか尋ねます。作業ディレクトリ内で見つけた
.slxをユーザーのモデルとして扱ってはいけません(サンプルやフィクスチャのファイルは、ユーザーが変換したいモデルではありません)。ユーザーがモデル名を指定してから変換を実行します。 - 変換後は必ず
report.VerifyInfo.StowawayDblBlksを確認します。残存する迷い込んだ倍精度型がある場合、変換は未完了です。該当ブロックの型指定を倍精度に固定しない、Stateflow データを単精度に設定する、または SUD の範囲を広げるなどして、ソースで修正し、convertToSingleを再実行します。該当信号にsingle(...)キャストや Data Type Conversion ブロックを手作業で挿入するよう勧めてはいけません。それでは倍精度型を排除せず、隠してしまいます。 - レポートはローカル変数に代入します(
report = ...;)。ベースワークスペースを汚したり、生の構造体をそのまま出力したりしないでください。
レポートの構造
このツールはチェック → 変換 → 検証を実行し、レポートに3つのサブ構造体を格納します。
report.CheckInfo
| フィールド | 説明 |
|---|---|
ready | 論理値 — システムを変換できる場合は true です。この値が true の場合のみ ConvertInfo/VerifyInfo を読み取ってください。 |
err | エラー情報(成功時は空) |
IncompatibleBlks | DataTypeWorkflow.Single.Result のセル配列 — 単精度に対応していないブロック(下記のブロック名に関する注記を参照) |
UnsupportedBlks | DataTypeWorkflow.Single.Result のセル配列 — 変換ツールでサポートされていないブロック(ErrorMsgs を含む) |
DTLockedDblBlks | データ型が double にロックされたブロック(変換を妨げません) |
StowawayDblBlks | チェック中に見つかった double 演算を生成するブロック |
TLSSettings | Target Language Standard が C99 に更新されたモデル |
DTOSettings | Data Type Override がリセットされたシステム |
SolverSettings | 可変ステップソルバーが固定ステップに変更されたモデル |
configSettings | 更新された構成パラメーター(例:GenerateComments、ParameterPrecisionLossMsg) |
memoryUse.BeforeValue | パラメーターごとのメモリテーブル。変換前の RuntimeMemory(バイト)列 |
診断リストからブロック名を取得する方法。 IncompatibleBlks、UnsupportedBlks、StowawayDblBlks、DTLockedDblBlks は、ブロックパス文字列ではなく、DataTypeWorkflow.Single.Result オブジェクトのセル配列です。 各要素の ID から getDisplayName() を使って読み取り可能なブロックパスを取得してください。要素に対して get_param、getfullname、または string() を呼び出さないでください。「get_param の最初の入力は、'double'、'char'、または 'cell' 型である必要があります。」 というエラーが発生します。
for k = 1:numel(report.CheckInfo.IncompatibleBlks)
r = report.CheckInfo.IncompatibleBlks{k};
fprintf(' %s\n', r.ID.getDisplayName()); % e.g. 'myModel/Integrator'
if ~isempty(r.ErrorMsgs)
fprintf(' %s\n', strjoin(string(r.ErrorMsgs), '; '));
end
end
report.ConvertInfo
コンバーターが実際に行った処理を記録します。
| フィールド | 説明 |
|---|---|
ready | 論理値 — 変換ステップが正常に実行された場合は true です |
err | エラー情報。成功時は空([])です |
results | fxptds.BlockResult のセル配列 — double から single に変更されたブロック/信号 |
report.VerifyInfo
| フィールド | 説明 |
|---|---|
StowawayDblBlks | 変換後も double 演算を生成しているブロック |
memoryUse.AfterValue | パラメーターごとのメモリテーブル。変換後の RuntimeMemory(バイト)列 |
チェックフェーズでは、Target Language Standard、Data Type Override、非互換ブロック、残存する double、データ型がロックされた double、ソルバー設定を検証し、そのうちいくつかを自動更新します。ツールは TLS→C99、DTO のクリーンアップ、ソルバーの変更を自動的に処理するため、手動で設定する必要はありません。 自動更新の動作、エラー識別子、エッジケースの詳細は、references/edge-cases.md を参照してください。
- モデルが読み込まれていない/パスが無効(
Simulink:Commands:InvSimulinkObjectName)、モデル更新の失敗(DataTypeWorkflow:Single:UpdateDiagramFailed) - 非互換ブロック(連続ブロック、MATLAB System ブロック)と、サポートされていない MATLAB Function ブロック(グローバル変数、MCOS クラス、Simulink 関数の呼び出し)
- 自動更新(TLS、DTO、ソルバー、構成)、モデル参照のスコープ処理、冪等性、モデルを閉じる際のクリーンアップ
変換レポートの生成
convertToSingle の戻り後、生の構造体をそのまま出力せず、結果をユーザーにわかりやすい言葉で要約してください。追跡可能性を確保するため、使用した正確な API 呼び出しを先頭に記載してください。
必須の出力セクション、レポートが空の場合の代替処理、レポート作成の規則、および Embedded Coder の準備状況チェックのフォローアップについては、references/reporting-format.md を参照してください。
前提条件と制限事項
- MATLAB、Simulink、および Fixed-Point Designer が必要です。モデルが読み込まれている必要があります。
- 変換エンジンはシングルトンです。一度にアクティブにできる変換セッションは 1 つだけです。
- 複雑なロジックを含む MATLAB Function ブロックやモデル参照については、個別の確認が必要になる場合があります。詳細は references/edge-cases.md を参照してください。
Copyright 2026 The MathWorks, Inc.