上プロIII後半(回路設計) 2020
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[研究関係資料]]
* History [#p3ef8e07]
[[上プロIII後半(回路設計) 2019]]
* HDLによる回路設計、FPGAを用いた実装 [#jbf1479a]
** 資料 [#p0d09567]
- [[ハードウェア記述言語]]
- [[CADツール]]
- [[Intel Quartus と CX-Trainer の使用法]]
** 演習1: シミュレーションと実機動作 [#c40b3fe6]
- 設計例を用いてツールとボードの使用法を学ぶ
*** 回路: stopwatch [#cb89c7ba]
- start/stop, lap 付きストップウォッチ
- 外部仕様
-- 入力: clock [1 bit], start_stop [1 bit], lap_reset [1 ...
-- 出力: 表示する数字 4 桁 [16 bits] (cx_frameでBCD->7seg...
- 動作
-- クロックを内部で分周し、ミリ秒を 4 桁の BCD コード (計...
-- start_stop スイッチ入力でカウント開始⇔停止
--- ラップ表示中なら解除して停止
-- カウント動作中に lap_reset 入力でカウント表示⇔ラップ表示
-- カウント停止中に lap_reset 入力でリセット
*** 設計例 [#e18dd0fb]
- プロジェクト &ref("stopwatch.tar.gz");
-- stopwatch.v: ストップウォッチ本体
--- シミュレーション時は1000倍速で動かすこと (32,33行目あ...
-- cx_frame.v: FPGAボードのスイッチ、LED 等のドライバ
--- このサンプルではボード右下のプッシュボタン 2 個を入力...
-- stopwatch.vt: ストップウォッチ本体のテストベンチ
-- stopwatch.sdc: タイミング制約
-- stopwatch.qpf: プロジェクトファイル
-- stopwatch.qsf: 各種設定、ピン配置など
-- stopwatch.cof: rbf 出力設定
*** レポート課題 [#nc8ffaf7]
+ 動作解析
-- 設計記述を見て状態遷移図を描け。
-- 各状態で、入力に対し出力と遷移がどうなるか説明せよ。
+ コンパイル
-- stopwatch.v 単体でコンパイルせよ。
--- top-level entity を一時的に stopwatch に変更してコン...
-- 使用 LE 数、最大動作クロック周波数を確認せよ。
+ シミュレーション
-- stopwatch.v 単体でシミュレーションせよ。
-- テストベンチのテンプレートとして stopwatch.vt を用いる...
-- 波形を観測し、仕様通り動作していることを確認せよ。(ク...
+ ボードでの動作
-- stopwatch.v のインスタンスを含む cx_frame.v をトップモ...
--- top-level entity を cx_frame に戻す。
-- FPGA ボードに回路をダウンロードして動作を確認せよ。
- 演習1レポート締切: 7/2 17:00
** レポートのチェックポイント [#h3fe6d40]
+ 本文
++ 本文の文章が書かれているか
--- 式、図表、図表のタイトル等しかないものは不可
++ 完結した文 (常体) で書かれているか
--- 体言止めや箇条書きのみは不可
++ 章・節が適切に構成されているか
+ 図・表・回路記述
++ 図・表に番号を付け本文から参照しているか
++ 図・表中の文字は読める大きさか
--- 必要な文字のみ読めれば (CAD の文字が小さい場合追記し...
++ 図・表中の値の単位や見出しは正しく記述されているか
++ 図・表の説明を本文でしているか
+ 課題内容
++ アルゴリズムを説明しているか。
++ 設計した回路のコンポーネント、状態遷移、接続関係等を説...
++ シミュレーションでテストを通ったことを確認しているか。
++ 回路規模、クロック周波数、サイクル数、計算時間を記録し...
++ ボードでの正常動作を確認しているか。
- チェックシート &ref("checksheet.txt");
** 演習2: 回路設計 [#fd13c56b]
- 回路を設計し動作を確認する
*** 回路: prime [#f1a604fc]
- 素数を順に出力する順序回路
- 外部仕様
-- 入力: clock [1 bit], reset [1 bit]
-- 出力: 表示する数字 4 桁 [16 bits] (cx_frameでBCD->7seg...
- 動作
-- 9999 以下の素数を昇順に 4 桁の BCD コード (計 16 bit) ...
-- 1 個の素数判定に数クロック消費してもよい
-- 大きな表を記憶することは禁止
-- 素数 2、3 や、最大 9999 であること等をハードコードして...
-- 除算/剰余演算子の利用は可だが、回路規模と動作周波数へ...
*** テンプレート [#y22fa149]
- プロジェクト &ref("prime.tar.gz");
-- prime.v: 回路本体のテンプレート
-- prime.vt: 回路本体のテストベンチ
-- prime_table.v: 素数のリスト (prime.vt から参照)
-- cx_frame.v, prime.qpf, prime.qsf, prime.sdc, prime.cof...
*** レポート課題 [#ofa53113]
+ 回路を設計し、シミュレーションにより動作を確認せよ。
-- prime.v 単体でコンパイルする。
--- top-level entity を一時的に prime に変更してコンパイ...
-- prime.v 単体で、prime.vt をテストベンチとしてシミュレ...
-- ゲートレベルシミュレーションで、テストベンチのエラーが...
-- 下の表に諸元を記録する。
+ FPGA ボード上で動作を確認せよ。
-- cx_frame.v をトップモジュールとしてコンパイルする。
--- top-level entity を cx_frame に戻す。
-- 目視で観測する際はクロックを分周する。
-- ボードのクロック周波数 48 MHz で動作しない場合も分周す...
--- 配布ファイルでは分周済。
+ (発展課題) 回路規模が小さく、計算時間が短かくなるようチ...
-- ボードのクロック周波数 48 MHz 以上で動作するよう設計す...
-- 計算時間 100 ms 以内を目標とする。
- 演習2レポート締切: 8/10 ?
*** 設計のヒント [#j3b56242]
- 設計と最適化の方法
-- 全体の処理フローを組み立てる
-- ブロック図と、各ブロックの状態遷移図を描く
-- クリティカルパスを特定する
-- 1クロックサイクルで何を処理できるか見積もる
-- 各クロックサイクルの処理がバランスするように処理を分割...
- 回路規模
-- Total logic elememts: 使用ロジックエレメント数
-- Total RAM block bits: 使用メモリビット数
-- Embedded Multiplier 9-bit elements: 使用乗算器数
- 計算時間
-- 最大動作クロック周波数: Quartus 上の Fmax (Restricted ...
-- 本課題でのサイクル数: "2" を表示してから "9973" を表示...
--- prime.vt では "******** Finished in %d cycles *******...
--- サイクル数を表示せず 12 msec ぐらいで終了する場合は、...
*** 回路諸元の記録 (演算回路単体) [#q05d89f2]
- LEs: Total logic elements
- RAM: Total RAM block bits
- Mult: Embedded Multiplier 9-bit elements
- Fmax (MHz): Quartus 上の動作周波数
- cycles: サイクル数
- 計算時間 (msec): cycles / Fmax
|設計日|設計者|LEs|RAM|Mult|Fmax|cycles|計算時間|備考|h
|2020-07-31|安藤|286|0|0|26.63|57075|2.068|ひとまず実装で...
|2020-08-5|安藤|1113|0|0|58.59|285129|4.86|ひたすら引き算...
||||||||||
|2020-08-03|伊藤|1326|0|0|18.12|62059|3.425|一旦完成|
|2020-08-05|伊藤|385|0|0|52.26|286380|5.480|BCD変換をDoub...
|2020-08-09|伊藤|436|0|0|75.95|286378|3.771|除算を別alway...
||||||||||
|2020-07-31|大東|1310|0|0|19.01|3603605|189.563|クリア|
|2020-07-31|大東|1290|0|0|20.23|3602378|178.071|10進数化...
|2020-08-03|大東|1285|0|2|19.44|62061|3.192|アルゴリズム...
|2020-08-05|大東|2267|0|2|17.33|22800|1.315|modを1cに4回|
|2020-08-07|大東|726|0|2|50.02|321290|6.423|mod部を6cで実...
|2020-08-08|大東|701|0|2|50.33|564674|11.219|mod部を10cで...
||||||||||
|2020-08-03|加藤|1301|0|0|18.81|1452133|77.200|とりあえず...
|2020-08-03|加藤|1286|0|0|19.23|57075|2.968|とりあえず完成|
|2020-08-06|加藤|2369|0|2|16.18|17814|1.100|1cに4回mod|
||||||||||
|2020-07-13|齊藤|1023|0|0|19.19|5776214|301.001|とりあえ...
|2020-08-05|齊藤|1105|0|0|18.28|5776214|315.984|タイミン...
||||||||||
|2020-07-28|島村|1832|0|0|11.45|2890600|252.454|なし|
|2020-07-31|島村|1830|0|0|11.74|2890601|246.218|余裕をも...
|2020-08-05|島村|1874|0|0|11.0|57075|5.1886|余裕をもって...
|2020-08-05|島村|1868|0|0|11.28|57075|5.0733|余裕をもって...
||||||||||
|2020-08-03|高山|1307|0|0|17.29|5776214|334.078|ひとまず...
|2020-08-05|高山|1298|0|0|18.74|118518|6.324|高速化させた|
|2020-08-07|高山|1297|0|0|18.59|118518|6.375|reset後の挙...
||||||||||
|2020-08-06|長谷川|1295|0|0|21.56|57074|2.647||
||||||||||
|2020-08-07|林|1336|0|0|18.0|2908631|161.591|とりあえず完...
|2020-08-07|林|1295|0|0|18.68|2908631|155.708|とりあえず...
||||||||||
|2020-08-07|宮原|1321|0|0|19.91|5776213|290.116||
|2020-08-07|宮原|1322|0|0|20.89|5776213|276.506|クロック...
|2020-08-07|宮原|1325|0|0|21.91|2885614|131.703|偶数は除...
|>|>|>|>|>|>|>|>|LEFT:~2019最速 (<48MHz)|
|2019-07-29|鈴木|1291|0|0|25.05|40698|1.624|とりあえず改...
|2019-07-31|山本隼|1458|0|2|20.34|33714|1.657|小さく(クロ...
|2019-06-11|佐々木|2616|0|2|15.63|30292|1.938|1stepに2cyc...
|>|>|>|>|>|>|>|>|LEFT:~2019最速 (>=48MHz)|
|2019-06-12|中村|6762|0|0|51.12|103762|2.029|modを4c, 16...
|2019-07-18|稲益|2735|0|1|52.4|115996|2.213|除算を16並列...
|2019-08-08|山本隼|1319|0|1|57.0|175881|3.086|modを4cycle|
|>|>|>|>|>|>|>|>|LEFT:~2019最小|
|2019-08-01|山本理|351|0|0|112.46|41594070|369.9|BCD変換...
|2019-08-07|鈴木|355|0|0|87.38|16205532|185.46|クリアした|
|2019-06-27|稲益|411|0|0|55.65|691432|12.424|BCD変換、除...
** 演習2のコマンドラインでの進め方 [#p6b37ba7]
*** コンパイル [#w319ffe3]
- 用意するもの
-- 設計ファイル: prime.v cx_frame.v
-- 環境: prime.qpf prime.qsf prime.sdc
- コマンド
-- quartus_sh --flow compile prime
--- 設計ディレクトリに移動して上記でコンパイル (プロジェ...
--- 任意のディレクトリから qpf のパス (~/jikken/prime_v0/...
- 結果
-- 端末に表示される内容は output_files/ に分割保存されて...
- 同じディレクトリで GUI とコマンドを併用しても問題ない
*** RTLシミュレーション [#ld89f782]
- 用意するもの
-- 設計ファイル: prime.v
-- テストベンチ: prime.vt prime_table.v
- コマンド
-- vlib work (ライブラリ作成、最初に1回だけ)
-- vlog prime.v prime.vt (シミュレーション用にコンパイル...
-- vsim -c prime_vlg_tst (シミュレーション、動作を確認し...
--- メガファンクション等を使う場合は必要に応じて -L alter...
-- VSIM のプロンプトに対して run -all など
-- VSIM は exit で終了
- 結果
-- コマンドも含め transcript にログが保存されている
-- prime.vt の $display などで必要な情報を表示
- 一度 Quartus から ModelSim を呼び出したのと同じ環境でシ...
-- ディレクトリは simulation/modelsim/
-- modelsim.ini に各種設定あり (work -> rtl_work など)
-- msim_transcript に保存されているコマンドラインを実行
終了行:
[[研究関係資料]]
* History [#p3ef8e07]
[[上プロIII後半(回路設計) 2019]]
* HDLによる回路設計、FPGAを用いた実装 [#jbf1479a]
** 資料 [#p0d09567]
- [[ハードウェア記述言語]]
- [[CADツール]]
- [[Intel Quartus と CX-Trainer の使用法]]
** 演習1: シミュレーションと実機動作 [#c40b3fe6]
- 設計例を用いてツールとボードの使用法を学ぶ
*** 回路: stopwatch [#cb89c7ba]
- start/stop, lap 付きストップウォッチ
- 外部仕様
-- 入力: clock [1 bit], start_stop [1 bit], lap_reset [1 ...
-- 出力: 表示する数字 4 桁 [16 bits] (cx_frameでBCD->7seg...
- 動作
-- クロックを内部で分周し、ミリ秒を 4 桁の BCD コード (計...
-- start_stop スイッチ入力でカウント開始⇔停止
--- ラップ表示中なら解除して停止
-- カウント動作中に lap_reset 入力でカウント表示⇔ラップ表示
-- カウント停止中に lap_reset 入力でリセット
*** 設計例 [#e18dd0fb]
- プロジェクト &ref("stopwatch.tar.gz");
-- stopwatch.v: ストップウォッチ本体
--- シミュレーション時は1000倍速で動かすこと (32,33行目あ...
-- cx_frame.v: FPGAボードのスイッチ、LED 等のドライバ
--- このサンプルではボード右下のプッシュボタン 2 個を入力...
-- stopwatch.vt: ストップウォッチ本体のテストベンチ
-- stopwatch.sdc: タイミング制約
-- stopwatch.qpf: プロジェクトファイル
-- stopwatch.qsf: 各種設定、ピン配置など
-- stopwatch.cof: rbf 出力設定
*** レポート課題 [#nc8ffaf7]
+ 動作解析
-- 設計記述を見て状態遷移図を描け。
-- 各状態で、入力に対し出力と遷移がどうなるか説明せよ。
+ コンパイル
-- stopwatch.v 単体でコンパイルせよ。
--- top-level entity を一時的に stopwatch に変更してコン...
-- 使用 LE 数、最大動作クロック周波数を確認せよ。
+ シミュレーション
-- stopwatch.v 単体でシミュレーションせよ。
-- テストベンチのテンプレートとして stopwatch.vt を用いる...
-- 波形を観測し、仕様通り動作していることを確認せよ。(ク...
+ ボードでの動作
-- stopwatch.v のインスタンスを含む cx_frame.v をトップモ...
--- top-level entity を cx_frame に戻す。
-- FPGA ボードに回路をダウンロードして動作を確認せよ。
- 演習1レポート締切: 7/2 17:00
** レポートのチェックポイント [#h3fe6d40]
+ 本文
++ 本文の文章が書かれているか
--- 式、図表、図表のタイトル等しかないものは不可
++ 完結した文 (常体) で書かれているか
--- 体言止めや箇条書きのみは不可
++ 章・節が適切に構成されているか
+ 図・表・回路記述
++ 図・表に番号を付け本文から参照しているか
++ 図・表中の文字は読める大きさか
--- 必要な文字のみ読めれば (CAD の文字が小さい場合追記し...
++ 図・表中の値の単位や見出しは正しく記述されているか
++ 図・表の説明を本文でしているか
+ 課題内容
++ アルゴリズムを説明しているか。
++ 設計した回路のコンポーネント、状態遷移、接続関係等を説...
++ シミュレーションでテストを通ったことを確認しているか。
++ 回路規模、クロック周波数、サイクル数、計算時間を記録し...
++ ボードでの正常動作を確認しているか。
- チェックシート &ref("checksheet.txt");
** 演習2: 回路設計 [#fd13c56b]
- 回路を設計し動作を確認する
*** 回路: prime [#f1a604fc]
- 素数を順に出力する順序回路
- 外部仕様
-- 入力: clock [1 bit], reset [1 bit]
-- 出力: 表示する数字 4 桁 [16 bits] (cx_frameでBCD->7seg...
- 動作
-- 9999 以下の素数を昇順に 4 桁の BCD コード (計 16 bit) ...
-- 1 個の素数判定に数クロック消費してもよい
-- 大きな表を記憶することは禁止
-- 素数 2、3 や、最大 9999 であること等をハードコードして...
-- 除算/剰余演算子の利用は可だが、回路規模と動作周波数へ...
*** テンプレート [#y22fa149]
- プロジェクト &ref("prime.tar.gz");
-- prime.v: 回路本体のテンプレート
-- prime.vt: 回路本体のテストベンチ
-- prime_table.v: 素数のリスト (prime.vt から参照)
-- cx_frame.v, prime.qpf, prime.qsf, prime.sdc, prime.cof...
*** レポート課題 [#ofa53113]
+ 回路を設計し、シミュレーションにより動作を確認せよ。
-- prime.v 単体でコンパイルする。
--- top-level entity を一時的に prime に変更してコンパイ...
-- prime.v 単体で、prime.vt をテストベンチとしてシミュレ...
-- ゲートレベルシミュレーションで、テストベンチのエラーが...
-- 下の表に諸元を記録する。
+ FPGA ボード上で動作を確認せよ。
-- cx_frame.v をトップモジュールとしてコンパイルする。
--- top-level entity を cx_frame に戻す。
-- 目視で観測する際はクロックを分周する。
-- ボードのクロック周波数 48 MHz で動作しない場合も分周す...
--- 配布ファイルでは分周済。
+ (発展課題) 回路規模が小さく、計算時間が短かくなるようチ...
-- ボードのクロック周波数 48 MHz 以上で動作するよう設計す...
-- 計算時間 100 ms 以内を目標とする。
- 演習2レポート締切: 8/10 ?
*** 設計のヒント [#j3b56242]
- 設計と最適化の方法
-- 全体の処理フローを組み立てる
-- ブロック図と、各ブロックの状態遷移図を描く
-- クリティカルパスを特定する
-- 1クロックサイクルで何を処理できるか見積もる
-- 各クロックサイクルの処理がバランスするように処理を分割...
- 回路規模
-- Total logic elememts: 使用ロジックエレメント数
-- Total RAM block bits: 使用メモリビット数
-- Embedded Multiplier 9-bit elements: 使用乗算器数
- 計算時間
-- 最大動作クロック周波数: Quartus 上の Fmax (Restricted ...
-- 本課題でのサイクル数: "2" を表示してから "9973" を表示...
--- prime.vt では "******** Finished in %d cycles *******...
--- サイクル数を表示せず 12 msec ぐらいで終了する場合は、...
*** 回路諸元の記録 (演算回路単体) [#q05d89f2]
- LEs: Total logic elements
- RAM: Total RAM block bits
- Mult: Embedded Multiplier 9-bit elements
- Fmax (MHz): Quartus 上の動作周波数
- cycles: サイクル数
- 計算時間 (msec): cycles / Fmax
|設計日|設計者|LEs|RAM|Mult|Fmax|cycles|計算時間|備考|h
|2020-07-31|安藤|286|0|0|26.63|57075|2.068|ひとまず実装で...
|2020-08-5|安藤|1113|0|0|58.59|285129|4.86|ひたすら引き算...
||||||||||
|2020-08-03|伊藤|1326|0|0|18.12|62059|3.425|一旦完成|
|2020-08-05|伊藤|385|0|0|52.26|286380|5.480|BCD変換をDoub...
|2020-08-09|伊藤|436|0|0|75.95|286378|3.771|除算を別alway...
||||||||||
|2020-07-31|大東|1310|0|0|19.01|3603605|189.563|クリア|
|2020-07-31|大東|1290|0|0|20.23|3602378|178.071|10進数化...
|2020-08-03|大東|1285|0|2|19.44|62061|3.192|アルゴリズム...
|2020-08-05|大東|2267|0|2|17.33|22800|1.315|modを1cに4回|
|2020-08-07|大東|726|0|2|50.02|321290|6.423|mod部を6cで実...
|2020-08-08|大東|701|0|2|50.33|564674|11.219|mod部を10cで...
||||||||||
|2020-08-03|加藤|1301|0|0|18.81|1452133|77.200|とりあえず...
|2020-08-03|加藤|1286|0|0|19.23|57075|2.968|とりあえず完成|
|2020-08-06|加藤|2369|0|2|16.18|17814|1.100|1cに4回mod|
||||||||||
|2020-07-13|齊藤|1023|0|0|19.19|5776214|301.001|とりあえ...
|2020-08-05|齊藤|1105|0|0|18.28|5776214|315.984|タイミン...
||||||||||
|2020-07-28|島村|1832|0|0|11.45|2890600|252.454|なし|
|2020-07-31|島村|1830|0|0|11.74|2890601|246.218|余裕をも...
|2020-08-05|島村|1874|0|0|11.0|57075|5.1886|余裕をもって...
|2020-08-05|島村|1868|0|0|11.28|57075|5.0733|余裕をもって...
||||||||||
|2020-08-03|高山|1307|0|0|17.29|5776214|334.078|ひとまず...
|2020-08-05|高山|1298|0|0|18.74|118518|6.324|高速化させた|
|2020-08-07|高山|1297|0|0|18.59|118518|6.375|reset後の挙...
||||||||||
|2020-08-06|長谷川|1295|0|0|21.56|57074|2.647||
||||||||||
|2020-08-07|林|1336|0|0|18.0|2908631|161.591|とりあえず完...
|2020-08-07|林|1295|0|0|18.68|2908631|155.708|とりあえず...
||||||||||
|2020-08-07|宮原|1321|0|0|19.91|5776213|290.116||
|2020-08-07|宮原|1322|0|0|20.89|5776213|276.506|クロック...
|2020-08-07|宮原|1325|0|0|21.91|2885614|131.703|偶数は除...
|>|>|>|>|>|>|>|>|LEFT:~2019最速 (<48MHz)|
|2019-07-29|鈴木|1291|0|0|25.05|40698|1.624|とりあえず改...
|2019-07-31|山本隼|1458|0|2|20.34|33714|1.657|小さく(クロ...
|2019-06-11|佐々木|2616|0|2|15.63|30292|1.938|1stepに2cyc...
|>|>|>|>|>|>|>|>|LEFT:~2019最速 (>=48MHz)|
|2019-06-12|中村|6762|0|0|51.12|103762|2.029|modを4c, 16...
|2019-07-18|稲益|2735|0|1|52.4|115996|2.213|除算を16並列...
|2019-08-08|山本隼|1319|0|1|57.0|175881|3.086|modを4cycle|
|>|>|>|>|>|>|>|>|LEFT:~2019最小|
|2019-08-01|山本理|351|0|0|112.46|41594070|369.9|BCD変換...
|2019-08-07|鈴木|355|0|0|87.38|16205532|185.46|クリアした|
|2019-06-27|稲益|411|0|0|55.65|691432|12.424|BCD変換、除...
** 演習2のコマンドラインでの進め方 [#p6b37ba7]
*** コンパイル [#w319ffe3]
- 用意するもの
-- 設計ファイル: prime.v cx_frame.v
-- 環境: prime.qpf prime.qsf prime.sdc
- コマンド
-- quartus_sh --flow compile prime
--- 設計ディレクトリに移動して上記でコンパイル (プロジェ...
--- 任意のディレクトリから qpf のパス (~/jikken/prime_v0/...
- 結果
-- 端末に表示される内容は output_files/ に分割保存されて...
- 同じディレクトリで GUI とコマンドを併用しても問題ない
*** RTLシミュレーション [#ld89f782]
- 用意するもの
-- 設計ファイル: prime.v
-- テストベンチ: prime.vt prime_table.v
- コマンド
-- vlib work (ライブラリ作成、最初に1回だけ)
-- vlog prime.v prime.vt (シミュレーション用にコンパイル...
-- vsim -c prime_vlg_tst (シミュレーション、動作を確認し...
--- メガファンクション等を使う場合は必要に応じて -L alter...
-- VSIM のプロンプトに対して run -all など
-- VSIM は exit で終了
- 結果
-- コマンドも含め transcript にログが保存されている
-- prime.vt の $display などで必要な情報を表示
- 一度 Quartus から ModelSim を呼び出したのと同じ環境でシ...
-- ディレクトリは simulation/modelsim/
-- modelsim.ini に各種設定あり (work -> rtl_work など)
-- msim_transcript に保存されているコマンドラインを実行
ページ名: