今さら聞けない高位合成 ~ 一から学ぶ高位合成 ~ シャープ株式会社電子デバイス事業本部副参事山田晃久 1
ハードウェア設計と抽象度 要求仕様 動作仕様設計制約 ( コスト 性能 消費電力 ) システムの実現方式を決定システム設計 ( 動作レベル設計 ) ( アーキテクチャ アルゴリズム ) システム分割 (HW/SW) 機能ブロック RTL 記述 機能設計 (RTL 設計 ) 論理合成 ハードウェアの処理を設計 ( データ処理回路と制御回路 ) クロックレベルのタイミング設計 ゲートレベル記述 論理設計 論理素子 (AND/OR/NOT など ) と記憶素子 ( フリッフ フロッフ ) による回路設計 レイアウト設計 フロアプラン決定配置配線 2
ハードウェア設計と抽象度 要求仕様 動作仕様設計制約 ( コスト 性能 消費電力 ) 動作レベル記述 RTL 記述ゲートレベル記述 システムの実現方式を決定システム設計 ( 動作レベル設計 ) ( アーキテクチャ アルゴリズム ) システム分割 (HW/SW) 機能ブロック高位合成 ( 動作合成 ) ハードウェアの処理を設計機能設計 (RTL 設計 ) ( データ処理回路と制御回路 ) クロックレベルのタイミング設計論理合成 論理設計 論理素子 (AND/OR/NOT など ) と記憶素子 ( フリッフ フロッフ ) による回路設計 レイアウト設計 フロアプラン決定配置配線 3
動作レベル設計と RTL 設計 動作レベル設計 動作 ( アルゴリズム ) を設計 How のみを設計 ハードウェアによる実装とは独立 RTL(Register Transfer Level) 設計 クロック毎のレジスタ間のデータ転送を設計 How と When と by What を設計 レジスタや演算回路とそれらの制御を設計 ( ある程度ハードウェアが見えている ) 4
高位合成とは 設計対象の回路の動作 アルゴリズムか らレジスタ転送レベル (RTL) の回路を自 動で合成する技術 High level synthesisの和訳 動作合成 (Behavioral synthesis) とも 呼ばれる 5
高位合成処理 HDL 中の演算の 1. 実行するサイクルを決定し ( スケジュー リング ) 2. 各演算を演算器に割り当て 必要に応 じて接続し ( アロケーション ) 3. それらの回路要素を制御する回路を 生成する ( 制御回路生成 ) 6
スケジューリング Y = a * b * c * d; データフローグラフ Step 0 a b a bc d * * * Mult Step 1 * c d 1 Step 2 * 1 Step 3 * 1 Reg 2 3 2 1 リソース制約 : 使用できる乗算器数は 1 個 7
アロケーション Step 0 a b Mult Reg Step 1 * c d 1 Step 2 * 1 Step 3 * 1 2 3 2 b a c d s1 s2 s3 Q R1 Q R2 Q R3 s4 s5 * 1 データパスの構成 スケジューリング結果 演算器やレジスタなどの演算資源をどのように割当て 共有するか ( リソースシェアリング ) を決定 8
制御回路生成 Step 0 a b Mult Reg 2 Step 1 * c d 1 3 Step 2 * 1 2 Step 3 * 1 1 スケジューリング結果 b a c d s1 s2 s3 Q R1 Q R2 Q R3 s4 s5 * s1 s2 s3 s4 s5 R1 R2 R3 Step 0 1 0 X X X 1 1 0 Step 1 0 1 0 0 0 1 1 1 Step 2 X X 1 1 1 0 0 1 Step 3 X X X 0 1 0 0 1 9
RTL 設計 設計の焦点 クロック毎のレジスタ間のデータ転送をどのように するか?( 同期設計 ) レジスタ間のデータ処理と制御を検討 設計手法 RT レベルのハードウェア記述言語を使用 論理合成を利用 - コストや性能の制約にもとづいてさまざまな組合せ回路 を合成 ( レジスタ構造は固定 ) 10
RTL 記述 レジスタや演算回路とそれらの制御を記述 クロック毎のレジスタ間のデータ転送を記述 レジスタ レジスタ 外部入力 組合せ回路 クロックク外部出力データ処理回路 ( データパス ) 制御回路 ( 状態遷移機械 ) 11
動作レベル設計 設計の焦点 どのようなアルゴリズムで機能を実現するか? データフローを検討 設計手法 システム全体をまとまった機能ブロックに分割 動作レベルのハードウェア記述言語を使用 高位合成を利用 - コストや性能の制約 入出力の制約 ( 順序制約やタイミング制約 ) を与えてさまざまな構成の回路を合成 12
設計抽象度の差 (1) 動作レベル Y = a * b * c * d; RT レベル 動作レベルではハードウェア実装を意識しない Q Q Q Q * * * Q Q Q コントローラ * 回路 1 回路 n 13
設計抽象度の差 (2) 動作レベル architecture t behavior of MUL4 is begin MULT:process(a,b,c,d) begin y <= a * b * c * d; end process ; end behavior; 7 行 行数で数 ~10 倍 architecture RTL1 of MUL4 is signal aa, bb, cc, dd: unsigned(7 downto 0); begin MULT:process(CLK) begin if CLK event and CLK = 1 then aa <= a; bb <= b; cc <= c; dd <= d; y <= (aa * bb) * (cc * dd); end if; end process ; 11 行 end RTL1; RT レベル architecture RTLn of MUL4 is signal mul: unsigned(7 downto 0); signal m1, m2: unsigned(7 ( downto 0);.. begin MULT:process(CLK) begin if CLK event and CLK = 1 then mul <= m1 * m2; end if; end process ; SEL1:process(CLK) begin if CLK event and CLK = 1 then if stage = 1 then m1 <= a; else 48 行 m1 <= mul; end if; ; end if; end process ;. y <= mul; end RTLn; 14
動作レベル設計と RTL 設計 動作レベル設計 How のみを設計 RTL 設計 どのような処理を行うか? How と When と by What を設計 いつその処理を どの演算器がその処理を 行うか? 行うか? スケジューリング アロケーション 15
Cベース設計 C HW/SW 分割 ( アルゴリズム / 仕様設計 ) HW 仕様 C (SW) Cコンハ イラ RTL 記述 オフ シ ェクトコート 論理合成 SoC 16
Cベース設計 C HW/SW 分割 ( アルゴリズム / 仕様設計 ) C (HW) HW/SW 検証 C (SW) Cコンハ イラ RTL 記述 オフ シ ェクトコート 論理合成 SoC 17
Cベース設計 C HW/SW 分割 ( アルゴリズム / 仕様設計 ) 高位合成 C (HW) HW/SW 検証 C (SW) Cコンハ イラ RTL 記述 オフ シ ェクトコート 論理合成 SoC 18
Cベース設計 C ( アルゴリズム / 仕様設計 ) C ベースの動作レベル設計 HW/SW 分割 高位合成 C (HW) HW/SW 検証 C (SW) Cコンハ イラ RTL 記述 オフ シ ェクトコート 論理合成 SoC 19
C ベースの動作レベル設計のメリット 期待できるメリット 記述量が少なくなる 高速に機能検証が行える 検証した機能がそのまま回路になる 早い段階で回路規模 性能が見積もれる たくさんの C プログラム資産が利用できる 20
高位合成のターゲット回路 外部入力 データ処理用の回路 ( データパス ) 外部出力 演算結果 制御信号 制御回路 21
高位合成技術の適用範囲 (1) 入力処理 1 処理 2 出力 イベントハンドラ 疑問 : どの部分に高位合成を適用すべきか? 22
高位合成技術の適用範囲 (2) 各ブロックの処理が簡単な場合 入力処理 1 処理 2 出力 一つの動作で記述して高位合成 イベントハンドラ 各ブロックの処理が複雑な場合 別々のブロックにした方が考えやすい 23
シャープでの取り組み システムの並行性を CSP (Communicating Sequential Processes) として表現 各逐次プロセスを高位合成技術で合成 入力 処理 1 par 入力 ; 処理 2 出力 処理 1; 処理 2: 出力 ; イベント イベントハンドラ ; ハンドラ 24
上流設計の考え方 設計対象を CSP として表現 ( 設計者の仕事 ) 各ブロックの高位合成ブロック間の接続 ( 計算機の仕事 ) 入力処理 1 動作仕様 処理 2 出力 イベントハンドラ 論理合成可能な RTL 回路 このような上流設計が可能となる設計環境を構築する 25
Bach システム Bach C 言語 Bach コンパイラ 入力処理 1 動作仕様 処理 2 出力 イベントハンドラ 論理合成可能な RTL 回路 Bach C シミュレータ サイクル精度 C シミュレータ 26
Bach を用いた設計フロー 仕様 Bachシステム Untimed 検証動作の確認 Bachシミュレーションション Bach C 記述テ ハ ック 入出力のチェック高位合成 (Bachコンパイ Timed 検証ラ ) サイクル精度 C 回路スペックの確認シミュレーションサイクル精度 RTL 記述スループット RTLシミュレーション C 記述レイテンシのチェックテ ハ ック 既存 RTL 記述 RTL シミュレーション 既存設計手法 論理合成 レイアウト LSI 27
適用事例 MPEG-4 コーデック LSI IrSimple フォトアダプタ用画像処理エンジン CCD カメラ CMOS センサカメラ用 DSP ワンセグ受信用マルチメディア処理 LSI 28
フレームレート変換 LSI 設計への適用 60 フレーム / 秒の入力動画を 120 フレーム / 秒に変換 60 フレーム / 秒 120 フレーム / 秒 外部仕様 入力 :60 フレーム / 秒 出力 :120 フレーム / 秒 中間のフレームを生成 画像サイズ : フルスペック HD (1920 x 1080) 29
FRC LSI の設計 / 検証フロー R&D 部門 アルゴリズム検証 C シミュレーションションテ ハ ック C ソース デバイス開発部門 Untimed 検証 Bach C シミュレーションテ ハ ック BachC 記述 Bach システム Timed 検証 RTL シミュレーション RTL 記述 高位合成 既存設計手法 エミュレーション 既存 RTL 記述 RTL 検証 論理合成 レイアウト LSI 30
動作レベル設計 (C Bach C) 1. C 言語で設計する部分とそれ以外の切り分け C 言語で設計しなかった回路 - アナログ回路 - 単相片エッジのクロックで動作しない回路 - 既設計の回路 - テスト回路 2. 全体のデータ 制御の流れを決定 C 言語ベース設計といえどもトップダウンのアプローチは必要 31
FRC アルゴリズム Motion vector estimation Input 60p Pre-processing Motion vector estimation Interpolation Frame interpolation Up-converted output 120p 32
動作レベル設計 (C Bach C) 1. C 言語で設計する部分とそれ以外の切り分け C 言語で設計しなかった回路 - アナログ回路 - 単相片エッジのクロックで動作しない回路 - 既設計の回路 - テスト回路 2. 全体のデータ 制御の流れを決定 C 言語ベース設計といえどもトップダウンのアプローチは必要 3. サブモジュールの詳細化 固定小数点化 ビット幅指定 並列化 33
FRC LSI の設計 / 検証フロー R&D 部門 アルゴリズム検証 C シミュレーションションテ ハ ック C ソース デバイス開発部門 Untimed 検証 Bach C シミュレーションテ ハ ック BachC 記述 Bach システム Timed 検証 RTL シミュレーション RTL 記述 高位合成 既存設計手法 エミュレーション 既存 RTL 記述 RTL 検証 論理合成 レイアウト LSI 34
Bach C RT レベル回路 1. Bach C レベルで untimed な検証 2. 高位合成 3. 単体でRT レベル検証し 処理サイクルを確認 4. スループット 回路規模のチューニングが必要なら Bach C コードを修正し 1 へ 5. システム全体で RT レベル検証 35
各工程の検証時間 Original ANSI C Bach C Emulator RTL simulator 79 秒 49 秒 45 秒 228 時間 ( 見積もり ) 入力 5フレーム分の検証時間 CPU: インテル Xeon5160 36
FRC LSI の設計 / 検証フロー R&D 部門 機能検証テストテ ータ コート カハ レーシ 100% 機能カハ レーシ 100% アルゴリズム検証 C シミュレーションションテ ハ ック C ソース デバイス開発部門 Untimed 検証 Bach C シミュレーションテ ハ ック BachC 記述 Bach システム Timed 検証 RTL シミュレーション RTL 記述 高位合成 出力結果の完全一致 1.. 2.. 3.. 4.. チェックリスト (500 項目以上 ) を作成して確認 エミュレーション 出力タイミンク 仕様 既存 RTL 記述 アサーションヘ ース検証で一致を確認 RTL 検証 論理合成 レイアウト 既存設計手法 一発動作 LSI 37
設計結果 回路全体の 90% 以上を Bach C 言語で設計 アルゴリズムが Fix してから約 2 ヶ月でテープアウト完了 38
設計工程 アルゴリズム設計 (C 言語 ) アルゴリズムと回路の並行開発 動作レベル設計 (Bach C 言語 ) 論理合成 RTL 検証 仮レイアウト 本レイアウト 時間 レイアウトまで含めた並行開発 時間 39
設計結果 回路全体の 90% 以上を Bach C 言語で設計 アルゴリズムが Fix してから約 2 ヶ月でテープアウト完了 リスピンなしで量産化 当社製アクオスに搭載し フレームレート変換機能付きフル スペック HD 液晶テレビを 世界で初めて 商品化 40
C+ 高位合成を使った設計の課題 タイミング収束 高位合成時の見積り精度 静的検証 動作レベルと RT レベル等価性検証 ECO への対応 抽象度と解析容易性のトレードオフ 記述スタイルの確立 41
C+ 高位合成を使った設計での注意点 すべての回路を C 言語で設計するのが良いと は限らない 良い合成ツールがあれば良い回路ができるわ けではない C 言語を使えば高速に検証できるわけではない 42