今回の実験は、2回の実験とする。 乗除算の演算のうち、少なくとも一方は実装することとする。除算を選択した場合、たとえ完動まで達しなくても選択した時点で加点の対象とする。 乗除算の両方を一つの回路で完動させた場合はさらに加点の対象とする(スタッフによる実機チェックがあることが望ましいが、間に合わなかった場合でも報告書において完成したことを示せばよい)。
データパス部のテスト/結合テストのチェック手順
表1の手順を連続して行う。途中でリセットしないと動作しない状態であるというのは設計に不備がある。
表1. データパス部テスト・結合テストチェック手順
手順 | 動作 | |
1 | リセット | CLR信号によりレジスタ等をクリア |
2 | セットA | 0xBEEFをAレジスタに格納 |
3 | セットQ | 0xCAFEをQレジスタに格納 |
4 | 加算 | ⼊⼒データを0x1000にして加算を繰り返し、上位桁がC→D→E→…→A→B→Cと1周変化する間に、キャリー・オーバーフローの値を確認する。 |
5 | 減算 | ⼊⼒データを0x1000のままにして減算を繰り返し、上位桁がダウンして1周するとともにキャリー・オーバーフローを確認する。 |
6 | クリアA、クリアQ | それぞれ0になることを確認。 |
7 | (乗算テスト)セットQ | 0x0064をQレジスタにセット |
8 | (乗算テスト)乗算 | スイッチを0x0064のままにして乗算し、乗算結果が0x00002710になることを確認。さらにクリアA・乗算を繰り返し、結果が順に0x000F4240、0x0019E100になることを確認。 |
9 | (除算テスト)クリアA、セットQ | Aをクリアし、0xE400をQレジスタにセット |
10 | (除算テスト)除算 | スイッチを0x0064にして除算を⾏い、商が0x0247、余りが0x0044になることを確認。 |
11 | ホールド | Aレジスタ、Qレジスタが変化しないことを確認 |
12 | リセット | レジスタ等が0になることを確認 |
ここまでリセット以外、同期で動作していればOK。非同期で動作する部分があるものは不可。
実験レポートの構成について
実験原理や実験方法までに設計や実験回路すら出て来ないまま、実験結果にいきなりデータパス部のタイミング図とか制御部の動作結果とかが出てくる報告書があります。読み手に対して、どのような設計方針で設計されているのか、どのような演算スイッチにより演算を切り換えるように設計してあるのか、どんな回路で実装してあるのかを提示しないまま実験結果を提示されても、正しいかどうか判断できません。
何も知らない読み手の立場に立って、レポートを読み直してみてください。その結果が本当に正しい動作なのか、設計仕様通りの動きをしているのか、わかりますか? その書き方で本当に正しい動作であることを説明できますか? 設計どおりの回路で設計通りに動きましたということを説明できますか? それぞれの制御信号線の論理式が求められていますか? それはどこから出てきたのか説明されていますか?
論理式を求めずに回路ができているものは設計をする実験結果として認めません。
目次の例を以下に示す。必ずしも、この項目に従う必要はないが、読み手にとって順を追って情報を提示され、トップダウンに全体構造を理解できる書き方が望ましい。
1. 実験の目的
2. 実験の原理、方法、使用装置および機器
この章の最後までには、このレポートで使用するすべての用語の説明・解説は終了しておく必要がある(データパス部、制御部、演算スイッチ、各種レジスタ、演算の仕様や動作、FFの動作タイミングなど)。
2.1 四則演算の仕組み
実現するアーキテクチャ(ブロック図)について説明し、そのアーキテクチャの上で、加減乗除等の演算を行う仕組みなどを解説する必要があるでしょう。
2.2 実験の実施方法
今回の実験のそれぞれの日に何をしましたか?どのようなスケジュールで実施するつもりでしたか?→実際にどのように実施したかは実験結果(または考察)。 具体的にどのような実験方法をするのか?テストケースの設計などは以前どこに書きましたか?
2.3 使用装置および機器
2.4 (その他)
上記の解説で、用語の定義が不十分であると感じたら「用語の定義」などの節を設けて、レポートを読む準備としての用語の定義,用語の意味,用語の解説などは済ませておく方がよい。
3. 実験結果
今回の実験は何が実験結果として必要なのかを、まず考えて欲しい。回路の設計は実験なのかどうか、実験に入らないとすれば、この実験結果の提示までに何を読者に示しておく必要があるのか?実験に入るとするとどのような順で説明をされるとわかりやすいか?
3.1 実験回路の設計
全体から詳細に説明が進むようにまずは、全体から説明。そこで、どのような部分に分解することができるのか、等を解説
3.1.1 実験回路の要求分析,機能仕様
実験として、何を目的に、何を実現するのか、実現しなければならない機能は何かを明確にする。つまり、これができてなければ実験として失敗でしょ。これができていればOKでしょ、と言うものを明らかにしておき、実験結果中にそれらがちゃんとできあがっていますよね、ということをアピール・証明・提示しながらレポートを書き進めていけばよい。
3.1.2 設計方針,設計思想
なにを考えて、実験回路を設計するの?早いもの?簡単な(ゲート数が少ない)もの?使いやすいもの?正確な(正確とは?)もの?なにを基準に回路を設計しようと考えたのか。実現方法が複数ある場合に、選択の基準になる考え方・ポリシーは何か?
3.2 実験回路のアーキテクチャ
いろいろと試行錯誤を繰り返して、最終的な実験回路にたどり着いたとは思うが、レポートでは試行錯誤は検討事項・考察にし、最終的な実験回路・アーキテクチャにした理由等を交えて回路のアーキテクチャについて解説する。
3.2.1 実験回路の部分
全体の動作や解説が終わったところで、だんだんと詳細な内容に移っていく。皆さんのレポートは、いきなりなんの予備知識もなく詳細な回路の説明や解説になってしまっている。
データパス部:データパス部の主な動作,主な構成要素,主な機能などの解説,実回路図の提示
制御部:制御部の役割、位置づけ,設計方針の解説などを記載するとともに実回路図を提示する
インターフェース:演算スイッチ,CLR,CLKなどの人とのインターフェース、ALUやシフトレジスタの制御信号等のインターフェースにかかわる信号の意味や動作にかかわる解説 などを行う
3.2 各部の動作(単体テスト)
各部の単体動作の確認を実験データにより提示することになるが、何をもって正しい結果なのかを意識して記載する必要がある。どうしてその結果で正しいということがわかるのか?それぞれどのモードでなにを期待しているかなどの前提の入出力の提示などが必要だと思いませんか?また、それぞれの単体テストをしてみて、単体での動作が正しく動作していることを確認できた根拠はどこにあるかなどを示す必要がある。 単体テストで観測した信号をここで掲載するのは、結合までできなかった場合に意味がある。単体テスト結果を観測したからと言って結合テストで各種制御信号やキャリ信号などを観測しなくて良いわけではない(単体テストがうまく動いたら結合テストでインターフェースの信号などを観測しなくて良いわけではなく、単体テストの時と信号が変わっていないことを確認しなければならない)。実験としては、結合テストの結果が重要である。
3.2.1 データパス部
データパス部のテストとして、何を期待してどんなテストケースをいれたのかを説明した後、実験結果の説明・提示をすること。主に、演算結果中心にそれぞれどのような入力を期待しているのか→その通りに入力信号があれば演算ができることを示すことになるであろう。
3.2.2 制御部
制御部は、データパス部と異なり、直接演算の結果を見ることはできない。つまり、「こうなるはず」的な情報を先に提示し、実験結果としてその情報と一致していることを述べる必要が有ると思われる。
3.3 加減乗除算器全体動作(システムテスト)
上記の単体テストがうまく言っていれば、全体動作も無事に動くはず。ここまでに、実験として、これができていなければダメでしょという前述の条件や目標に対して、実験データを示してできていることを示し、「だから、実験として求められているものが実装できた」という主張をすべきではないでしょうか?
3.4 制御部,データパス部,全体のそれぞれのcompileレポートの結果
設計した回路の規模などQuartusのcompile reportを記録しておくこと。
例 QuartusII の Compile Report
Flow Status Successful - Fri Nov 29 18:04:30 2013
Quartus II 64-Bit Version 13.0.1 Build 232 06/12/2013 SP 1 SJ Web Edition
Revision Name arith_op
Top-level Entity Name arith_unit
Family Cyclone II
Device EP2C35F672C6
Timing Models Final
Total logic elements 789 / 33,216 ( 2 % )
Total combinational functions 786 / 33,216 ( 2 % )
Dedicated logic registers 54 / 33,216 ( < 1 % )
Total registers 54
Total pins 101 / 475 ( 21 % )
Total virtual pins 0
Total memory bits 0 / 483,840 ( 0 % )
Embedded Multiplier 9-bit elements 2 / 70 ( 3 % )
Total PLLs 0 / 4 ( 0 % )
4. 実験の検討・考察
4.1 回路の設計方針・過程について
主要な回路の設計については、実験結果のところで述べてあるはず。ここでは、実験結果中に書けなかった、設計の過程や試行錯誤などについて、主要な過程や考察・検討した内容などについて記載することになる。 設計の過程で、迷ったこと、つまづいたこと、やってみて理解できたこと、想定と異なっていて実装中に軌道修正や訂正をしなければならなかったことについて経緯を報告する。「ああした,こうした」的な事実だけの報告ではなく、なぜそうしなければならなかったのか/なぜそうしたのか、そうした理由は何かを明らかにすること。そこが重要!!。
4.2 回路の高速化について
設計した回路と同じ機能(加減・セット・クリア)は、そのままに乗算/除算の演算を高速にするための方法について検討する。ここで期待しているのは、乗算器/除算器を調べて来いと言うものではなく、どのような仕組みがあって、どんな仕組みで演算が行われているのかを理解した上で、それぞれの方法の利害得失、利点・欠点を整理し、比較することを期待している。複数の実現手段があったとき、そのうち一つを選択する際に、何をもって選択するのかという基準となる項目を整理するスキルを身につけるためである。「なんとなく」とか「よさげだから」などという漠とした理由で選択すべきではない。選択理由を人に説明するためには、合理的な理由が必要です。
4.3 考察
実験を通して想定通りにできたのか、想定どおりにならなかったところは、何故か?
もっと改善できる点はあったのではないか?いつそれに気がついて、設計時になぜそれに気が付かなかったんだろうか?
5. 検討事項
以上のような、レポートの構成にすれば、不明な点が少なく、先頭から順に読んでいけるレポートになると思います。
実験結果の記述について
タイミングチャートは実験結果を表現する手段の一つである。今回の実験では、「正しく実験ができています」ということを示すための実験結果であり、読み手にとってそれがわかりやすいものでなくてはならない。例えば、Aレジスタ,Qレジスタの内容をそれぞれ8本のタイミングチャートのラインで示されて、それがいくつといくつに対して、どの演算を施して結果としていくつになったのかが「わかりやすく」示されていると言えるだろうか?読めない読者が未熟者ということか?
また、今回の実験では(今回だけではありませんが)、設計の設計過程,設計思想,なぜそうしたのか,なぜそうなったのかを問われています。結果だけを示して過程や理由が示されていません。 「ああした」、「こうした」等のやったことの提示を求めているわけではなく、「こう考えた」その結果として「こうなった」という過程を期待していることを理解して報告書を作成して欲しい。
検討事項(高速化)に関する記述について
設計した回路と同じ機能(加減・セット・クリア)は、そのままに乗算/除算の演算を高速にするための方法について検討する。ここで期待しているのは、乗算器/除算器を調べて来いと言うものではなく、どのような仕組みがあって、どんな仕組みで演算が行われているのかを理解した上で、それぞれの方法の利害得失、利点・欠点を整理し、比較することを期待している。複数の実現手段があったとき、そのうち一つを選択する際に、何をもって選択するのかという基準となる項目を整理するスキルを身につけるためである。「なんとなく」とか「よさげだから」などという漠とした理由で選択すべきではない。選択理由を人に説明するためには、合理的な理由が必要です。
注意事項
今回の実験は、班の中で2つのパートに分かれて実装を行うこと。1つは「制御部」、もう一つは「データパス部」である。
「データパス部」は演算の過程で数値の演算を行う主要な経路の部分である。入力のスイッチとシフトレジスタの出力から、ALUを経て、シフトレジスタにデータが格納される経路の設計である。
「制御部」はデータパス部のALUやシフトレジスタなどの制御信号を決定する論理を生成する部分である。状態を管理する状態遷移図と、それぞれの状態に基づいて制御信号を決定する組み合わせ回路からなる。
レポートの評価も2回分の重み付けをする。
実験の方法
今回の実験は2回で行う。
指導書にあるように、1日めは、役割分担の決定、データパス部と制御部のインターフェース信号の決定、各部の設計を行うとよい。2日めは、設計が正しいことを確認し、各部をそれぞれの実験ボードに実装し、各部の単体チェックを行い、各部の動作を実験結果として記録しておく。2日めに結合を終了させる。2日めは、データパス部と制御部を実際に結合して、全体の結合テストを行う。回路全体が正しく動作することを確認の後、全体の動作を観測・記録すること。
設計はなるべく一人の人に任せるのではなく、複数で設計を行い、設計結果を突き合わせてどの回路がよさそうか班で話合いなさい。
2回分の時間が確保されているが、配線の時間や回路の確認の時間を考えると余裕は少ない。
2回分の時間を有効に活用し、問題を先送りにすることなく、時間をかけて正しくて、かつゲートが少ない回路を設計するとよい。簡略化・最適化に費した時間くらいは、実装・デバッグで取り戻せると思う。 簡略化や最適化が不十分だと回路を作成する際にミスが起こる確率が高く、デバッグも難しい。
レポート(報告書)のチェックシート(H6用)
共通項目
□ 章や節の構成を意識して、文章を構成する。
□ 段落を意識して文章を構成すること。1文が1段落のような文章は良くない。
□ 段落のはじめは1文字字下げする (Wordでは空白を入れなくてもスタイルで調整することができる)。
□ コピーを使用していないこと。回路図を書く練習を目的にしているので、 指導書等の図のイメージを取り込んで張り付けるのもダメ。
□ 実験結果を一目で理解できるように観測データを整理し実験した証として提示保存する。
□ 観測データを見やすいように、表やグラフとして提示する。
□ 図表には全体の通し番号と説明文(キャプション)を付ける(図2 xxxx,表1 ~~~ のように)。
□ キャプション(図のタイトル・説明文)は、図の場合は図の下側、表の場合は表の上側に付ける。
□ 図表は必ず本文から参照し、本文では簡単な説明を書く。「~の実験結果を図●に示す。図●は~」のように本文から参照すること。
□ 一つの図表はページをまたがらないように配置する。
□ 論理回路図の書き方に従い、定められた記号を用いて正しい回路図を記載する。
□ 論理式も標準的な書き方/記法に従い正しい論理式を記載する。
□ レポート用紙の周囲1インチ(2.5cm)程度、余白を設ける。
□ 作成した回路の回路図にはピン番号やIC番号が正確に記されているか?
□ 使用した論理素子や測定機器等の実験装置は正確に記載されているか?
□ 実験データは入力・出力が正しく分かりやすく示されていること。
個別項目
□ 今回の実験は動作結果よりも設計の過程が重要。 間違いなく、論理的に設計の過程が記述されているか?
□ クロックのどこ(立ち上がり/立ち下がり)で出力の値が変化するかが正しく書かれているか?
□ 見やすい位置に表やグラフが配置されているか?
□ 測定したデータがそのまま記載されているか?
□ 表のデータに誤りはないか?
□ 観測方法に誤りはないか?LEDを使用して観測した入出力か?
□ 各部の単体テストの結果は記載されているか?(特に未完成の場合)
□ 結合後の動作(レジスタの値だけでなくすべての構成要素の制御信号,キャリ信号,カウンタの値など単体テストで観測した値のすべて)は記録されているか?→これに基づいてタイミングチャートを記載することになる。
□ 検討事項(3)については、なぜ高速に演算ができるのかが説明されているか?