********************************************************************** セッション:S2-c テーマ:Verilogスタイルガイドこんなコードもコンパイルエラーにならない 講師:小川清(名古屋市工業研究所) 日時:2008/9/5 9:20-10:50 参加人数:20人 ********************************************************************** ・自己紹介 名古屋市工業研究所の小川です。 昨日、ポスターセッションもVerilogスタイルガイドと言う内容で出させていただきました。 アンケートを用意してあるので、後日でもよいので提出をお願いします。 今日のコンセプトはCプログラマがHDLを書いてよいのか,ということです。 卒業研究ではFORTRANを用いて、連立微分方程式を解いていました。 工業研究所では、中小企業むけにC言語の教育とFPGAの教育をおこなっています。 担当しているものは、MISRA-Cとスタイルガイドです。 ・CプログラムとVerilogの類似点 ・CプログラムとVerilogの異なる点 の紹介 ・背景 FPGAが安価になり手軽に開発環境が手に入る。 プログラミング言語からの派生であり、何か動くものが作れてしまう。 FPGAでの開発はとにかく作るものを作るように依頼がある。 検証はクライアントが行う。そのため、検証作業を自分で行わなくなってきている。 ・スタイルガイドの勉強会を開始 富士通VLSIテクノロジー、ルネサステクノロジー、中央製作所、大同工業大学が参加。 日本語版のスタイルガイドは誤りが多い。英語版を用いて勉強。 ・スタイルガイドについて 600のルールを3つに分類している ○必須 ○推奨 ○参考 ・スタイルガイドの取り組み以前 C言語の教育を20年程実施。 C puzzle bookを用いて危険なコードを説明。 C言語のトリッキーなコードを勉強。それらを書いてはいけないことを勉強を通して確認。 MISRA-Cに沿って記述することを勧める。 ・言語教育の方式 母語方式:写経のように教科書をタイプして動かす。 外来語方式:文法と意味を学びながらプログラムをしていく。 ・CプログラマがVerilogHDLを書いてよいのか? 仮説1:教育する順番、動機付けを間違わなければ優秀な論理回路摂家技術者が養成できる。 仮説2:スタイルガイドを教えれば危険性がなく、動作するプログラムが書ける。 ただし似非Cプログラマは除外。 実装のあいまいさを注意して書けるプログラマを対象。 ・教える順番、動機付けが大事 動機付け:作業場ですぐ必要にことを前提に講義 ・教育のための準備 ルール体系の見直し ・ルールについて 大きく4つに分類 ○基本設計制約 ○RTL記述技法 ○RTL設計手法 ○検証技術 さらに細かく自分たちで分類を行った。 ルールには重複やオーバーラップがある。 ルールの重複はおかしいが、役に立つこともある。 ルールは自分たちが作業を行うための参考である。 ・道具の課題 開発環境で動作の確認を行いたいので、あいまいなものでも通してしまう。 プリプロセッサはC言語のような処理系を利用しているため、チェックが甘い。 シミュレータは電気的な現象を完全に再現しているわけではない。 ・道具の利用 Alint:規則チェッカ(評価版) 道具としての利点:実機がなくてもプログラムをチェックする。 難しいソフトウェアをインストールしなくてもプログラムをチェックする。 どのようなハードウェアかを設定せずにチェックできる。 不具合はあっても、チェッカを通すことで解決することがある。 **********演習開始********* ・Verilog経験者をリーダーにグループを作り議論。 ・1チーム5人程度 ・4チーム作成 内容 ・アンケートの各項目が、1(必須)、2(守って欲しい)、3(情報としては貴重)、 4(どちらでもいい)のどれに当てはまるかを議論する。 ・正解を導くのではなく、現状のルールでいいのかを考えてもらう。 雰囲気 ・それぞれのチームがリーダーを中心に議論を行っていた。 ・スタイルガイドを用いて話を行うグループもあった。 グループ1: ・クロック同期設計を行う:1 ・AND、ORなどのプリミティブセルでRSラッチ、FFを作成しない:1 ・組み合わせ回路のフィードバックは使用しない:1 ・同期リセット記述をしても、リセットされない回路が合成されることがある:3 ・レジスタに対する初期リセットは非同期リセットの方が問題が少ない:3 ・初期リセット以外では、非同期リセット、リセット端子を利用しない:1 ・非同期リセットを使用するときは 同期リセットの階層を使用しない:2 ・特定の論理合成ツールに依存する同期リセットディレクティブは使用しない:1 ・同一リセットラインで非同期リセットと同期リセットを混在させない:1 ・非同期セット、非同期リセット、両方つきのFFは使用しない:1 ・リセットラインには、ローカルな階層で論理素子(AND、OR、XOR)を挿入せず、 リセットを供給する回路は別モジュールに分離する:1 グループ2: ・可能であれば、単一クロック、単一エッジで設計する:1 ・条件演算のネストは一回までにする: ・同期RAMのセットアップ/ホールド・マージンを確保する:1 グループ3: ・可能であれば、単一クロック、単一エッジで設計する:2 ・AND、ORなどプリミティブセルでRSラッチ、FFを作成しない:1 ・組み合わせ回路のフィードバックは使用しない:分からない ・同期リセット記述をしても、リセットできない回路が合成されることがある:3 ・初期リセットは非同期リセットにする:1 ・リセットラインには、ローカルな階層で論理素子(AND、OR、XOR)を挿入せず、 リセットを供給する回路は別モジュールにぶんりする:3 ・初期リセット以外の信号をFFの非同期リセット端子に入力しない:3 ・リセットラインはボード上で注意しないと誤動作の危険がある:2 ・初期リセットの同期化、あるいはノイズ防止回路を考慮する:1 ・クロック生成回路はモジュール化する:1 →配線の遅延が起きる。 ・リセットラインを出力するタイミングを考慮して最適化する:2 ・クロック信号は、FFのクロック入力端子以外(D入力等)以外には供給しない:2 ・反転エッジのFFは使用をしない:2 ・同期RAMのセットアップ/ホールド・マージンを確保する:2 FPGAでは最初から配線されているクロックを利用したほうがよい。 モジュールでクロックを生成したほうがよいのではないか。 グループ4: ・可能であれば、単一クロック、単一エッジで設計する:2 ・組み合わせ回路のフィードバックは使用しない:1 ・同期リセット記述をしても、リセットできない回路が合成されることがある:2 ・レジスタに対する初期リセットは非同期リセットのほうが問題が少ない:2 ・同期リセット回路を利用する場合は、同期リセットつきレジスタの階層を設ける:2 ・同一リセットラインで非同期リセットと同期リセットを混在させない:2 ・非同期セット、非同期リセット、両方つきのFFは使用しない:2 ・リセットラインには、ローカルな階層で論理素子(AND、OR、XOR)を挿入せず、 リセットを供給する回路は別モジュールに分離する:2 ・リセットラインはボード上で注意しないと誤動作の危険がある:1 ・初期リセット信号が、クロック信号よりも先に確定するシステムもある:1 ・クロック生成回路は別モジュール化する:1 ・同一クロックライン上での反転、ゲーティッドクロックの使用、 エッジの異なるFFの使用は避ける:1 ・FFの出力ピンを他のFFのクロックピンに入力しない:1 ・クロック信号はFFのクロック入力端子(D入力等)以外には供給しない:1 ・クロック信号は、ブラックボックスや双方向端子、リセットラインに接続しない:1 ・反転エッジのFFを使用しない:2 *********演習終了********* ・C言語とHDLの違い Cはシーケンシャル、HDLは同時実行 HDLは素子、配線で遅延が発生 Cプログラマが同時実行をすると勘違いをしてしまうことがある。 回路を書いて、素子の数を確認する。 ・成果 学生の動かないプログラムはことごとく規則に違反していた。 大規模な開発では規則違反が足を引っ張る。 チェッカ、シミュレーション、実機の順がよい。 Cしかわからない人へのVerilog教育の指針がわかった。 ・課題 矛盾する規則への対応 ルールを破る際のドキュメントの記述方法 VerilogだけでなくVHDLへの対応 勉強会への希望者募集中 ・警告と理由 ハイインピーダンスを使わない 定数がどのような定数なのかを記述する。 ・演習の講評 スタイルガイドでは推奨としているものを、全参加者が必須としているルールがあった。 自分で書いたことがない方でもチェッカを使って欲しいです。 ・質問と回答 Q:ツールでは引っかからないものをスタイルガイドではどの程度まで改善できるのか? A:チェッカではチェックできないものは参照になっていることが多い。 実際には警告が多いので、優先度が高いものだけをチェッカでチェックしている。 その後、ツールの全ルールを適用している。 Q:お勧めの論理合成ツールは何でしょうか? A1:終了後に詳しい者に聞いてください。 A2:作成するものにあわせて、論理合成ツールを決めている。 ・参加者の感想 時間に関するガイドラインが2/3を占めている。機能が占めている割合が残りの1/3。 MISRA-Cと異なるので非常に楽しく参加できた。