PICO16o for PARTHENON
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[大和田]]
*PICO16o for PARTHENON [#u5ecdff9]
PICO16o for PARTHENONはパルテノン研究会が主催する第11-14回のASICデザインコンテストの規定課題のための、もう一つの例題パッケージです。
----
#contents
**背景 [#efdf1e75]
パルテノン研究会が主催するASICデザインコンテストは、今年度で第14回目を迎え、数多くの優秀な作品が応募、表彰されてきました。近年では、16bit CPUの設計が規定課題として設けられ、IP ARCH, Inc.からダウンロード可能な例題パッケージであるSN/X及びコンパイラセットをベースとして、改良を施した作品がいくつか応募されています。
第13回ASICデザインコンテストでは、会津大学の猪狩、増田、志賀らによって設計された"いずみかわ"が、ベースとなったSN/Xと比べて28倍の性能向上を達成し最優秀賞を受賞するなど、例年、過去の作品の記録を塗り替えるように優秀な作品が次々と表彰されています。ただし、SN/Xをベースとした作品では、評価式であるエネルギー・時間積を減少させるための効果的な改良が、過去の傾向からほとんど共通していることや、公開プログラムであるバブルソートと再帰呼び出しに偏った最適化を施している作品が見受けられるようになっています。
PICO16プロセッサは慶應義塾大学と東京工科大学で共同開発された教育用16ビットRISCプロセッサです。PICOは長崎大学や会津大学などでも、演習の教材として使用されています。SN/Xと比べてみると、PICOは2オペランドの16ビット固定長命令を持ち、SN/Xと比べて汎用レジスタが倍の8個になっています。命令セットもSN/Xにはない命令を数多く持ち、汎用性も高いことから、ASICデザインコンテストのもう一つの例題パッケージとして、コンテスト参加者により興味深い題材を提供できることが期待できます。
**設計概要 [#wb601325]
慶應義塾大学と東京工科大学で共同開発された教育用16ビットRISCプロセッサであるPICO16からLBとSB命令を削除し、メモリアクセスをワード単位に限定しています。さらに、内部動作が分かりやすいようにSFL記述の見直しを行いました。
**CPUアーキテクチャ [#u2c6621c]
8つの汎用レジスタを持ち、2オペランドの16ビット固定長の命令セットを持ちます。1つの命令は3クロックまたは4クロックのマルチサイクルで実行され、ステートマシンはIF、RF、EX、EX2の4つで構成されています。メモリアクセスはワード単位で可能で、バイト単位でアクセスする命令はサポートしていません。
***サブモジュール [#f6df1d9d]
PICO16oでは以下のサブモジュールを使用します。
-加算器(CLA)
--PARTHENONのライブラリに含まれるCLA16を呼び出して使用しています。
-ALU
--AND, OR, XOR, NOT, ADD, SUB, SHL(SHift Left), SHR(SHift Right)をサポートする16ビットの演算器で構成されています。
-レジスタファイル
--8つの汎用レジスタを含み、2ポートの読み込み、1ポートの書き込みが可能です。
***汎用レジスタ [#ua70c91f]
以下に、8つある汎用レジスタの役割とレジスタ番号の対応表を示します。
|レジスタ番号|役割|
|0|汎用レジスタ|
|1|汎用レジスタ|
|2|汎用レジスタ|
|3|汎用レジスタ|
|4|汎用レジスタ|
|5|汎用レジスタ|
|6|スタックポインタレジスタ|
|7|リターンアドレスレジスタ|
**コンパイラ [#rc23d161]
PICOが持つ8つの汎用レジスタを使用可能にするために最低限の機能を実装しています。また、それに伴い、簡単なレジスタ管理機構を実装し、無駄な変数ロードや即値ロードを行わないような最適化を施しました。それ以外は、例題パッケージのSN/Xに含まれるコンパイラセットと同等の機能を実装しています。
サブルーチンの実行などを実現するため、コンパイラ側で8つの汎用レジスタの役割を再定義します。以下に変更後の対応表を示します。
|レジスタ番号|役割|
|0|汎用レジスタ(インデックスレジスタ)|
|1|汎用レジスタ(引数を格納するレジスタ)|
|2|汎用レジスタ(戻り値を格納するレジスタ)|
|3|汎用レジスタ|
|4|汎用レジスタ|
|5|汎用レジスタ|
|6|スタックポインタレジスタ|
|7|リターンアドレスレジスタ|
**テストプログラム [#o88443cc]
過去のASICデザインコンテストに応募された作品が使用していたテストプログラムを用いて、CPUおよびコンパイラが正常に動作しているかを検討しました。
-compare.pc
--比較演算の検証
-direct.pc
--直接挿入法によるソーティング
-fibo.pc
--再帰法によるフィボナッチ数列の計算
-recur.pc
--再帰呼び出し課題プログラム
-sort.pc
--バブルソート課題プログラム
**評価 [#i46ae6d6]
以下に、IP ARCH, Inc.より配布されている例題パッケージであるSN/Xと今回作成したPICO16oの評価結果を示します。課題プログラムである再帰呼び出しとバブルソートの実行クロック数とプロセッサの最大遅延、消費電力からエネルギー・時間積を算出し、評価値として使用しました。
||SN/X|PICO16o|
|recur [クロック数]|323|879|
|sort [クロック数]|26,216|36,368|
|最大遅延[ns]|63.6|66.8|
|消費電力[μW/MHz]|5,680|12,097|
|エネルギー・時間積[nJ·s]|3.06|25.83|
**考察 [#v725392e]
結果として、エネルギー・時間積では大きく評価値を増やしてしまう結果になりました。以下では、それぞれのパラメータについてその原因について考察を行います。
***実行クロック [#p235ff78]
再帰呼び出しでは、サブルーチンコールの際に汎用レジスタのスタックへの退避を行いますが、退避すべきレジスタが多いため、再帰のコストが増加しています。また、命令の実行サイクルもPICOでは3または4サイクルであり、SN/Xの2または3サイクルより多くなっています。このことから同じ命令数でも、PICOの方が実行クロック数が多くなってしまいます。この問題はパイプライン化によって解決できそうです。また、PICOには汎用レジスタが8個あるため、コンパイラがうまくレジスタに変数を割り当てることができれば、ロード・ストアの回数を大幅に減らせることが期待できます。
***最大遅延 [#a2808e6d]
SN/Xと同様にPARTHENONのライブラリであるCLA16を使用しています。そのため最大遅延に大きな差は見られません。PARTHENONを使った合成結果のレポートによるとPICOのクリティカルパスはALU周辺に存在しているので、並列プレフィックス加算器を使用することで、最大遅延を改善することが可能です。
***消費電力 [#ca5e68f5]
汎用レジスタを8個確保したため、単純に考えるとSN/Xに比べると回路面積が2倍になります。また、SN/Xと比べてもPICOは多くの命令をサポートしているため、データパス部や制御回路の回路面積も増加しています。全体としてSN/Xと比べて2倍近くの消費電力になっていますが、コンパイラが発行しない命令を削除するなどでパフォーマンスの向上は十分に期待できます。
**パッケージのダウンロード [#uaf687d7]
以下からPICO16o for PARTHENONのパッケージがダウンロードができます。
&ref(pico16o.tar.gz);
***フォルダ構成 [#u7a395c5]
-pico16o
--bin
--rtl
--sim
---picoc
|ディレクトリ名|説明|
|pico16o|トップディレクトリ|
|bin|PICOアセンブラ(Perl)|
|sim|テストベンチとテストプログラム|
|rtl|回路記述(SFL)|
|picoc|コンパイラ|
***シミュレーション方法 [#u5d9de49]
simディレクトリ内でシミュレーションを行います。シミュレーションの実行にはmakeコマンドを使用します。
|コマンド|動作|
|make sim1|test.pcの実行|
|make sim2|sort.pcの実行|
|make sim3|recur.pcの実行|
|make sim4|compare.pcの実行|
|make sim5|fibo.pcの実行|
|make sim6|direct.pcの実行|
***論理合成方法 [#ddc4913f]
rtlディレクトリ内で論理合成を行います。論理合成の実行にはmakeコマンドを使用します。
|コマンド|動作|
|make auto|論理合成の実行|
|make sum|合成結果の表示|
**参考サイト [#h43aaf06]
-http://www.ip-arch.jp/
-http://www.am.ics.keio.ac.jp/picobook/
終了行:
[[大和田]]
*PICO16o for PARTHENON [#u5ecdff9]
PICO16o for PARTHENONはパルテノン研究会が主催する第11-14回のASICデザインコンテストの規定課題のための、もう一つの例題パッケージです。
----
#contents
**背景 [#efdf1e75]
パルテノン研究会が主催するASICデザインコンテストは、今年度で第14回目を迎え、数多くの優秀な作品が応募、表彰されてきました。近年では、16bit CPUの設計が規定課題として設けられ、IP ARCH, Inc.からダウンロード可能な例題パッケージであるSN/X及びコンパイラセットをベースとして、改良を施した作品がいくつか応募されています。
第13回ASICデザインコンテストでは、会津大学の猪狩、増田、志賀らによって設計された"いずみかわ"が、ベースとなったSN/Xと比べて28倍の性能向上を達成し最優秀賞を受賞するなど、例年、過去の作品の記録を塗り替えるように優秀な作品が次々と表彰されています。ただし、SN/Xをベースとした作品では、評価式であるエネルギー・時間積を減少させるための効果的な改良が、過去の傾向からほとんど共通していることや、公開プログラムであるバブルソートと再帰呼び出しに偏った最適化を施している作品が見受けられるようになっています。
PICO16プロセッサは慶應義塾大学と東京工科大学で共同開発された教育用16ビットRISCプロセッサです。PICOは長崎大学や会津大学などでも、演習の教材として使用されています。SN/Xと比べてみると、PICOは2オペランドの16ビット固定長命令を持ち、SN/Xと比べて汎用レジスタが倍の8個になっています。命令セットもSN/Xにはない命令を数多く持ち、汎用性も高いことから、ASICデザインコンテストのもう一つの例題パッケージとして、コンテスト参加者により興味深い題材を提供できることが期待できます。
**設計概要 [#wb601325]
慶應義塾大学と東京工科大学で共同開発された教育用16ビットRISCプロセッサであるPICO16からLBとSB命令を削除し、メモリアクセスをワード単位に限定しています。さらに、内部動作が分かりやすいようにSFL記述の見直しを行いました。
**CPUアーキテクチャ [#u2c6621c]
8つの汎用レジスタを持ち、2オペランドの16ビット固定長の命令セットを持ちます。1つの命令は3クロックまたは4クロックのマルチサイクルで実行され、ステートマシンはIF、RF、EX、EX2の4つで構成されています。メモリアクセスはワード単位で可能で、バイト単位でアクセスする命令はサポートしていません。
***サブモジュール [#f6df1d9d]
PICO16oでは以下のサブモジュールを使用します。
-加算器(CLA)
--PARTHENONのライブラリに含まれるCLA16を呼び出して使用しています。
-ALU
--AND, OR, XOR, NOT, ADD, SUB, SHL(SHift Left), SHR(SHift Right)をサポートする16ビットの演算器で構成されています。
-レジスタファイル
--8つの汎用レジスタを含み、2ポートの読み込み、1ポートの書き込みが可能です。
***汎用レジスタ [#ua70c91f]
以下に、8つある汎用レジスタの役割とレジスタ番号の対応表を示します。
|レジスタ番号|役割|
|0|汎用レジスタ|
|1|汎用レジスタ|
|2|汎用レジスタ|
|3|汎用レジスタ|
|4|汎用レジスタ|
|5|汎用レジスタ|
|6|スタックポインタレジスタ|
|7|リターンアドレスレジスタ|
**コンパイラ [#rc23d161]
PICOが持つ8つの汎用レジスタを使用可能にするために最低限の機能を実装しています。また、それに伴い、簡単なレジスタ管理機構を実装し、無駄な変数ロードや即値ロードを行わないような最適化を施しました。それ以外は、例題パッケージのSN/Xに含まれるコンパイラセットと同等の機能を実装しています。
サブルーチンの実行などを実現するため、コンパイラ側で8つの汎用レジスタの役割を再定義します。以下に変更後の対応表を示します。
|レジスタ番号|役割|
|0|汎用レジスタ(インデックスレジスタ)|
|1|汎用レジスタ(引数を格納するレジスタ)|
|2|汎用レジスタ(戻り値を格納するレジスタ)|
|3|汎用レジスタ|
|4|汎用レジスタ|
|5|汎用レジスタ|
|6|スタックポインタレジスタ|
|7|リターンアドレスレジスタ|
**テストプログラム [#o88443cc]
過去のASICデザインコンテストに応募された作品が使用していたテストプログラムを用いて、CPUおよびコンパイラが正常に動作しているかを検討しました。
-compare.pc
--比較演算の検証
-direct.pc
--直接挿入法によるソーティング
-fibo.pc
--再帰法によるフィボナッチ数列の計算
-recur.pc
--再帰呼び出し課題プログラム
-sort.pc
--バブルソート課題プログラム
**評価 [#i46ae6d6]
以下に、IP ARCH, Inc.より配布されている例題パッケージであるSN/Xと今回作成したPICO16oの評価結果を示します。課題プログラムである再帰呼び出しとバブルソートの実行クロック数とプロセッサの最大遅延、消費電力からエネルギー・時間積を算出し、評価値として使用しました。
||SN/X|PICO16o|
|recur [クロック数]|323|879|
|sort [クロック数]|26,216|36,368|
|最大遅延[ns]|63.6|66.8|
|消費電力[μW/MHz]|5,680|12,097|
|エネルギー・時間積[nJ·s]|3.06|25.83|
**考察 [#v725392e]
結果として、エネルギー・時間積では大きく評価値を増やしてしまう結果になりました。以下では、それぞれのパラメータについてその原因について考察を行います。
***実行クロック [#p235ff78]
再帰呼び出しでは、サブルーチンコールの際に汎用レジスタのスタックへの退避を行いますが、退避すべきレジスタが多いため、再帰のコストが増加しています。また、命令の実行サイクルもPICOでは3または4サイクルであり、SN/Xの2または3サイクルより多くなっています。このことから同じ命令数でも、PICOの方が実行クロック数が多くなってしまいます。この問題はパイプライン化によって解決できそうです。また、PICOには汎用レジスタが8個あるため、コンパイラがうまくレジスタに変数を割り当てることができれば、ロード・ストアの回数を大幅に減らせることが期待できます。
***最大遅延 [#a2808e6d]
SN/Xと同様にPARTHENONのライブラリであるCLA16を使用しています。そのため最大遅延に大きな差は見られません。PARTHENONを使った合成結果のレポートによるとPICOのクリティカルパスはALU周辺に存在しているので、並列プレフィックス加算器を使用することで、最大遅延を改善することが可能です。
***消費電力 [#ca5e68f5]
汎用レジスタを8個確保したため、単純に考えるとSN/Xに比べると回路面積が2倍になります。また、SN/Xと比べてもPICOは多くの命令をサポートしているため、データパス部や制御回路の回路面積も増加しています。全体としてSN/Xと比べて2倍近くの消費電力になっていますが、コンパイラが発行しない命令を削除するなどでパフォーマンスの向上は十分に期待できます。
**パッケージのダウンロード [#uaf687d7]
以下からPICO16o for PARTHENONのパッケージがダウンロードができます。
&ref(pico16o.tar.gz);
***フォルダ構成 [#u7a395c5]
-pico16o
--bin
--rtl
--sim
---picoc
|ディレクトリ名|説明|
|pico16o|トップディレクトリ|
|bin|PICOアセンブラ(Perl)|
|sim|テストベンチとテストプログラム|
|rtl|回路記述(SFL)|
|picoc|コンパイラ|
***シミュレーション方法 [#u5d9de49]
simディレクトリ内でシミュレーションを行います。シミュレーションの実行にはmakeコマンドを使用します。
|コマンド|動作|
|make sim1|test.pcの実行|
|make sim2|sort.pcの実行|
|make sim3|recur.pcの実行|
|make sim4|compare.pcの実行|
|make sim5|fibo.pcの実行|
|make sim6|direct.pcの実行|
***論理合成方法 [#ddc4913f]
rtlディレクトリ内で論理合成を行います。論理合成の実行にはmakeコマンドを使用します。
|コマンド|動作|
|make auto|論理合成の実行|
|make sum|合成結果の表示|
**参考サイト [#h43aaf06]
-http://www.ip-arch.jp/
-http://www.am.ics.keio.ac.jp/picobook/
ページ名: