吉田/覚書/第14回ASICデザインコンテストレポート草稿
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[吉田>吉田]]/[[覚書>吉田/覚書]]
忘れる前に。
五十嵐さんもよろしければ。または作業用ページに新規リンク張ってそっちに作るかな。
#contents
*第14回ASICデザインコンテストレポート草稿 [#x170eab9]
**1、設計の目標 [#z0e463d0]
-今回のコンテストにあたり、
**2、設計内容 [#l6dc80e8]
-%%本設計では、IP ARCH Ink.[1] より配布されているSN/Xの例題パッケージを基に PICO16プロセッサ[2] をベースとした 16bitCPU 及びそのコンパイラの作成と改良を行った。%%
--うちが一から作ったわけではなし、はて
-改良の方針としては、
-
***2.1 CPUアーキテクチャ [#yfb6cc09]
+使用可能な命令
+
+
***2.2 コンパイラ [#jffb41da]
+ロード(LD)命令の最適化
--コンパイラがアセンブラを機械的に生成することにより生じる冗長なロード命令を抑制するために、コンパイラ上にレジスタの管理テーブルを作成した。
--これは各レジスタの使用状況、格納している値の種類(定数or変数インデックス)とその値、過去の参照回数を配列として管理するものである。
--変数のロード時にレジスタの使用状況を確認し、既にレジスタに同じものがロードされている場合はそちらから値を取得できる。
+インクリメント・デクリメント操作の最適化("++", "--", "+=", "-=")
--インクリメント・デクリメント操作時、SN/Xでは2つのレジスタに対象変数と定数値を入れてからADD,SUB命令で実装していたが、定数値をコンパイラ上で解釈することでこれをADDI,SUBI命令で行えるようにした。これにより使用レジスタ数を節約できる。
--また余興として "+=", "-=" の形式も認識可とした。
+変数&定数の式の最適化
--2変数の式の処理時、片方が定数の場合にその値をコンパイラ上で処理することにより、例えばADD命令がADDI命令で代替可となり使用レジスタ数の節約につながる。
+比較命令の最適化
--比較処理時に「0か1か」では無く「0か0で無いか」で判断させることで1を用意する分の命令数を削減した。
--今回の課題では特に問題は無いが、言語仕様として考えると元のままの方が汎用性は高いものと思われる。
+%%乗算・除算の実装%%
--%%余興。シフト命令を使いたいが為に実装したようなものである。%%
--%%ゼロによる除算に対するリカバリが不十分。%%
+
--
+定数の畳み込み
--定数の畳み込み処理とは、定数同士の計算をコンパイル時に処理してしまうものである。
--ここでは構文木を辿り、演算子の木の子がともに定数の場合はコンパイラ上で処理をし、その結果を定数ノードで置き換えている。
+配列の添字の最適化。
--SN/Xでは変数はメモリ上の1番地から順に格納される大域変数のa~zと関数の引数であるargのみが許されており、本CPUもそれに準じている。
--変数には配列として添字を付けることができ、a[i]はaからi番地目のメモリ上の変数を表す。
--これにより配列変数のアドレスはその変数のベースアドレスに添字の値を加えることで求めている。例えばa[2]は変数cと等価となる。
--このことを利用して、配列のアドレスを求める際、添字が定数、または添字に定数の加減算を加えているときには先に変数のベースアドレス値と定数の処理をコンパイラ上で行うことで命令数を削減できる。
--
+
--
**3、動作検証 [#ic739249]
**4、結果の評価 [#tfaa9f29]
**5、結論 [#xbe7aa66]
**6、今後の目標 [#g2f38e93]
**引用・参考文献 [#c14004b6]
_______________________________________________________________________________________
#comment
終了行:
[[吉田>吉田]]/[[覚書>吉田/覚書]]
忘れる前に。
五十嵐さんもよろしければ。または作業用ページに新規リンク張ってそっちに作るかな。
#contents
*第14回ASICデザインコンテストレポート草稿 [#x170eab9]
**1、設計の目標 [#z0e463d0]
-今回のコンテストにあたり、
**2、設計内容 [#l6dc80e8]
-%%本設計では、IP ARCH Ink.[1] より配布されているSN/Xの例題パッケージを基に PICO16プロセッサ[2] をベースとした 16bitCPU 及びそのコンパイラの作成と改良を行った。%%
--うちが一から作ったわけではなし、はて
-改良の方針としては、
-
***2.1 CPUアーキテクチャ [#yfb6cc09]
+使用可能な命令
+
+
***2.2 コンパイラ [#jffb41da]
+ロード(LD)命令の最適化
--コンパイラがアセンブラを機械的に生成することにより生じる冗長なロード命令を抑制するために、コンパイラ上にレジスタの管理テーブルを作成した。
--これは各レジスタの使用状況、格納している値の種類(定数or変数インデックス)とその値、過去の参照回数を配列として管理するものである。
--変数のロード時にレジスタの使用状況を確認し、既にレジスタに同じものがロードされている場合はそちらから値を取得できる。
+インクリメント・デクリメント操作の最適化("++", "--", "+=", "-=")
--インクリメント・デクリメント操作時、SN/Xでは2つのレジスタに対象変数と定数値を入れてからADD,SUB命令で実装していたが、定数値をコンパイラ上で解釈することでこれをADDI,SUBI命令で行えるようにした。これにより使用レジスタ数を節約できる。
--また余興として "+=", "-=" の形式も認識可とした。
+変数&定数の式の最適化
--2変数の式の処理時、片方が定数の場合にその値をコンパイラ上で処理することにより、例えばADD命令がADDI命令で代替可となり使用レジスタ数の節約につながる。
+比較命令の最適化
--比較処理時に「0か1か」では無く「0か0で無いか」で判断させることで1を用意する分の命令数を削減した。
--今回の課題では特に問題は無いが、言語仕様として考えると元のままの方が汎用性は高いものと思われる。
+%%乗算・除算の実装%%
--%%余興。シフト命令を使いたいが為に実装したようなものである。%%
--%%ゼロによる除算に対するリカバリが不十分。%%
+
--
+定数の畳み込み
--定数の畳み込み処理とは、定数同士の計算をコンパイル時に処理してしまうものである。
--ここでは構文木を辿り、演算子の木の子がともに定数の場合はコンパイラ上で処理をし、その結果を定数ノードで置き換えている。
+配列の添字の最適化。
--SN/Xでは変数はメモリ上の1番地から順に格納される大域変数のa~zと関数の引数であるargのみが許されており、本CPUもそれに準じている。
--変数には配列として添字を付けることができ、a[i]はaからi番地目のメモリ上の変数を表す。
--これにより配列変数のアドレスはその変数のベースアドレスに添字の値を加えることで求めている。例えばa[2]は変数cと等価となる。
--このことを利用して、配列のアドレスを求める際、添字が定数、または添字に定数の加減算を加えているときには先に変数のベースアドレス値と定数の処理をコンパイラ上で行うことで命令数を削減できる。
--
+
--
**3、動作検証 [#ic739249]
**4、結果の評価 [#tfaa9f29]
**5、結論 [#xbe7aa66]
**6、今後の目標 [#g2f38e93]
**引用・参考文献 [#c14004b6]
_______________________________________________________________________________________
#comment
ページ名: