前川/研究のための/Java Processor/picoJava
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[前川/研究のための/Java Processor]]
#contents
*新しくFRAMEを割り当てることにおいて(p385-387) [#na6161fc]
-状況によるがFRAMEは以下の情報を保持している
--Object reference
--Incoming arguments(in_arg)
--Local variables(l_var)
--Invoker's method context
--Operand stack
--Return value from a method invocation
&ref(http://aslweb.u-aizu.ac.jp/~s1130205/Gallery/FRAMEstructure.png);
**Incoming arguments [#n1114071]
-コンパイラのはいて命令によって呼び出し側がオペランドスタックに割り当てる。
-nonstatic method invocationのときは、local variable 0にobject referenceが割り当てられ、local variable 1にはfirst argumentが割り当てられる。
-static method invocationの時には、local cariable 0にfirst argumentが割り当てられる。
**Local variable [#g496fdbf]
-JavaCompilerが決めたサイズ分のエリアが確保される。
**Invoker's Method Context [#va4f62f2]
-現在のmethodが新しくframeを作る時に、この情報は新たに割り当てられたフレームに格納される。そしてこの情報はreturnしてくる前にinvoker's method contextを格再配置するために使われる。
-Method contextには以下のものが含まれている。
--return PC
--VARS
--FRAME
--CONST_POOL
--Current method pointer
---現在実行中のmethod structureを参照するためのぽいんた。
---呼び出し側のmethod structureでないところがポイント。
*Invoking a Method [#s54d49ed]
**method invoking の手順 [#t465a50c]
+method referenceをリゾルブする。
+method structureにアクセスする。
+新しくmethod frameを割り当てる。
+invokerのmethod contextをセーブする。
+methodのentry pointにたいして分岐することによって制御をinvoked methodに渡す。
***Resolving a Method Reference [#v1c48aa0]
-symbolic informationを用いてソフトウェアエミュレーションは以下の2つを決定する。
++method vectorに対するindex。coreがmethod structure pointerを調べるためにこれを使います。
++method structureへの直接ぽいんた。
***Accessing a Method Structure [#gdcc8283]
-classをロードする際にinvoked methodのために作られたmethod structureからcoreはmethod informationを得ることができる。
-coreはこの現在のmethod structure pointerをセーブしている。
***Allocating a New Method Frame [#w133347f]
-Coreがmethodを起動するする際、新しくframeを割り当て、以下のレジスタを初期化します。
++VARS
---calleeの引数の位置を示す。object referenceもしくはcallerの第一引数。
++FRAME
---invokerのmethod contextの1つめのワードを示す。
---この位置はVARS+(incoming arguments + local variables)により導き出せす。
---(incoming argument + local variables)はCode属性内のローカル変数の最大値を使えばよいのでは?
++OPTOP
**Operand stack [#r47c5334]
-変数命令のソース、ターゲットオペランドとして使用。
-引数の保持、現在のメソッドからほかのメソッドへの返り値として使用。
&ref(http://aslweb.u-aizu.ac.jp/~s1130205/Gallery/Allocation_of_a_New_Frame.png);
**Saving the Invoker's Method Context [#qee58839]
-Coreは実行中のメソッドに戻ってきたときにinvoker's frameを再配置することができるようにinvoker's contextを新たに割り当てられたframeに保存します。
-method contextは以下の5つに分類されます。
--Return PC
*命令セット [#j102ab0b]
-[[ISA>前川/研究のための/Java Processor/picoJava/ISA]]
-226 bytecode instruction + 115 extended instruction
**115 extended instructions [#hd9b12b2]
***Direct memory access [#x620e6ad]
***C language interface [#p112f3ae]
***Cache manipulation [#y3a59626]
*Trap [#waba30ea]
**Instruction emulation [#hc08ebdf]
**Hardware origin [#baabc365]
**Monitor cache interface [#m8315083]
**Garbage collection interface [#ua4b8473]
*リゾルブ [#u9464c38]
-エミュレーションで対応。
*特徴 [#kc61bb9d]
**Stack Cache [#c56eb7a4]
-64 word entries
-スタックポインタがハードウェアの限界を超えたとき、Stack Dribbleが発動する。
**Stack Dribble [#e70db4a5]
***Spill [#abbaad64]
-stack cacheのデータをdata cacheに移動
***Refill [#x87c6eea]
-data cacheのデータをstack cacheに移動
**Instruction floding [#g47975d7]
-特定の命令を一括処理する方法。
**Write Barrier Support [#jbc25c59]
-ガベージコレクションを行うのに利用させる方法。
**C Function Interface [#h041ceeb]
-C言語のためのインターフェースをいくつか実装。
*[[Registers>前川/研究のための/picoJava/Registers]] [#yc6f311b]
*Core Diagram [#t2b227e6]
**Instruction Cache Unit(ICU) [#e025ce78]
>動作
-I-Cacheから命令をフェッチして、それらをdecode unitへ送る。
-IUにて先に送った命令が処理させるまでメモリからフェッチした命令を保持するためにinstruction bufferを使用する。
-I-BufferはI-Cacheから8bytesまたはBUIから4bytesのデータを受け取る。
-I-Cache lineは16bytesで0-16KBの大きさ。
-cache miss時にはミスしたラインのためにメモリリクエストを送る。
-I-Bufferが空っぽで、instruction cache missが起こったとき、decode unitはストールする。
<
>構造
-I-Cacheについて
--direct-mapped
--16-byte line seze cache
--single cycle latency
--それぞれのラインは18bit cache tag entryとassociated valid bitを持つ。
**Integer Unit(IU) [#lcdabd5f]
**Floating Point Unit(FPU) [#k19c3293]
**Stack Manager Unit(SMU) [#ve298438]
***何をしているのか? [#y92ae6b4]
-stack cacheがoverflowまたはunderflowの時にstackにあるデータをメモリに移動させる。
-dribblingによるspillやfillの操作
-stack cacheがoverflowやunderflowを起こしているときにパイプラインをストールさせる操作
-data cacheのためにリクエストのtrackを保持する。
-IUのstack cache write missを操作する。
***Stack Cache [#q6c8c675]
-64-entry register file
-3 read ports
-2 write ports
-operand stackのtop few entriesをキャッシュに格納する。
-2read portsとone write portはIUからoperandをフェッチしたり格納したりする。
-唯一のreadとwrite portsはdribblingように使われている。
-OPTOP,VARS,またFRAMEからoffsetとして作られたすべてのメモリアドレスはstack accessです。
-その他のすべてのメモリアクセスは直接data cacheへ向かいます。
**Data Cache Unit(DCU) [#z3ed308b]
***何をしているのか? [#g2ae726a]
-SMUまたはpipelineからのデータキャッシュリクエストの調停をする。
-dataまたはtag RAMsのためにaddress, data, control signalを作る。
-Cache hit時に正しいデータを供給できるようにdata RAM outputの順番を並び替える。
-キャッシュ不可能なリクエストの処理のためのデータパスや制御論理を提供する。
-キャッシュミスのためにデータパスやデータパスの制御機能を提供する
***構造 [#o0f7338d]
-2wayセットアソシアティブ方式
-write-back
-write-allocate
-16-byte line
-Cache size: 0,1,2,4,8 and 16Kbyte
**Bus Interface Unit(BIU) [#y9e4baa2]
*パイプラインステージごとの動作 [#f42c8d0c]
**Fetch Stage [#t75e9fbe]
-ICUがinstruction cacheもしくはexternal memoryから命令をフェッチする。
**Decode stage [#wd80c815]
-Instruction Folding Unit(IFU)にて命令のフォルダリングを行う。
**Register stage [#l89d9917]
-IUがstack cacheからoperandをフェッチし、load-use conditions, bypass conditions, またstack cache miss conditionを決定する。
-Register Control Unitにて制御。
**Execution stage [#g3636270]
-IUが演算、DCU用にloadまたはstoreのアドレスを計算どちらかを行う。
-全てのmulticycle operationsはmicrocode datapathを使う。
-制御フロー命令の場合、IUはbranch addressまたはブランチによる依存関係の条件を計算。
-floating-point命令の場合、IUはFPUにoperandsを供給する。
**Cache stage [#x25e8037]
-IUはdata cacheからデータにアクセスし、優先順位をつけ、サイクルの終りにtrapを実行する。
**Write stage [#j11f6366]
-IUがstack cacheに結果を書き込む。
終了行:
[[前川/研究のための/Java Processor]]
#contents
*新しくFRAMEを割り当てることにおいて(p385-387) [#na6161fc]
-状況によるがFRAMEは以下の情報を保持している
--Object reference
--Incoming arguments(in_arg)
--Local variables(l_var)
--Invoker's method context
--Operand stack
--Return value from a method invocation
&ref(http://aslweb.u-aizu.ac.jp/~s1130205/Gallery/FRAMEstructure.png);
**Incoming arguments [#n1114071]
-コンパイラのはいて命令によって呼び出し側がオペランドスタックに割り当てる。
-nonstatic method invocationのときは、local variable 0にobject referenceが割り当てられ、local variable 1にはfirst argumentが割り当てられる。
-static method invocationの時には、local cariable 0にfirst argumentが割り当てられる。
**Local variable [#g496fdbf]
-JavaCompilerが決めたサイズ分のエリアが確保される。
**Invoker's Method Context [#va4f62f2]
-現在のmethodが新しくframeを作る時に、この情報は新たに割り当てられたフレームに格納される。そしてこの情報はreturnしてくる前にinvoker's method contextを格再配置するために使われる。
-Method contextには以下のものが含まれている。
--return PC
--VARS
--FRAME
--CONST_POOL
--Current method pointer
---現在実行中のmethod structureを参照するためのぽいんた。
---呼び出し側のmethod structureでないところがポイント。
*Invoking a Method [#s54d49ed]
**method invoking の手順 [#t465a50c]
+method referenceをリゾルブする。
+method structureにアクセスする。
+新しくmethod frameを割り当てる。
+invokerのmethod contextをセーブする。
+methodのentry pointにたいして分岐することによって制御をinvoked methodに渡す。
***Resolving a Method Reference [#v1c48aa0]
-symbolic informationを用いてソフトウェアエミュレーションは以下の2つを決定する。
++method vectorに対するindex。coreがmethod structure pointerを調べるためにこれを使います。
++method structureへの直接ぽいんた。
***Accessing a Method Structure [#gdcc8283]
-classをロードする際にinvoked methodのために作られたmethod structureからcoreはmethod informationを得ることができる。
-coreはこの現在のmethod structure pointerをセーブしている。
***Allocating a New Method Frame [#w133347f]
-Coreがmethodを起動するする際、新しくframeを割り当て、以下のレジスタを初期化します。
++VARS
---calleeの引数の位置を示す。object referenceもしくはcallerの第一引数。
++FRAME
---invokerのmethod contextの1つめのワードを示す。
---この位置はVARS+(incoming arguments + local variables)により導き出せす。
---(incoming argument + local variables)はCode属性内のローカル変数の最大値を使えばよいのでは?
++OPTOP
**Operand stack [#r47c5334]
-変数命令のソース、ターゲットオペランドとして使用。
-引数の保持、現在のメソッドからほかのメソッドへの返り値として使用。
&ref(http://aslweb.u-aizu.ac.jp/~s1130205/Gallery/Allocation_of_a_New_Frame.png);
**Saving the Invoker's Method Context [#qee58839]
-Coreは実行中のメソッドに戻ってきたときにinvoker's frameを再配置することができるようにinvoker's contextを新たに割り当てられたframeに保存します。
-method contextは以下の5つに分類されます。
--Return PC
*命令セット [#j102ab0b]
-[[ISA>前川/研究のための/Java Processor/picoJava/ISA]]
-226 bytecode instruction + 115 extended instruction
**115 extended instructions [#hd9b12b2]
***Direct memory access [#x620e6ad]
***C language interface [#p112f3ae]
***Cache manipulation [#y3a59626]
*Trap [#waba30ea]
**Instruction emulation [#hc08ebdf]
**Hardware origin [#baabc365]
**Monitor cache interface [#m8315083]
**Garbage collection interface [#ua4b8473]
*リゾルブ [#u9464c38]
-エミュレーションで対応。
*特徴 [#kc61bb9d]
**Stack Cache [#c56eb7a4]
-64 word entries
-スタックポインタがハードウェアの限界を超えたとき、Stack Dribbleが発動する。
**Stack Dribble [#e70db4a5]
***Spill [#abbaad64]
-stack cacheのデータをdata cacheに移動
***Refill [#x87c6eea]
-data cacheのデータをstack cacheに移動
**Instruction floding [#g47975d7]
-特定の命令を一括処理する方法。
**Write Barrier Support [#jbc25c59]
-ガベージコレクションを行うのに利用させる方法。
**C Function Interface [#h041ceeb]
-C言語のためのインターフェースをいくつか実装。
*[[Registers>前川/研究のための/picoJava/Registers]] [#yc6f311b]
*Core Diagram [#t2b227e6]
**Instruction Cache Unit(ICU) [#e025ce78]
>動作
-I-Cacheから命令をフェッチして、それらをdecode unitへ送る。
-IUにて先に送った命令が処理させるまでメモリからフェッチした命令を保持するためにinstruction bufferを使用する。
-I-BufferはI-Cacheから8bytesまたはBUIから4bytesのデータを受け取る。
-I-Cache lineは16bytesで0-16KBの大きさ。
-cache miss時にはミスしたラインのためにメモリリクエストを送る。
-I-Bufferが空っぽで、instruction cache missが起こったとき、decode unitはストールする。
<
>構造
-I-Cacheについて
--direct-mapped
--16-byte line seze cache
--single cycle latency
--それぞれのラインは18bit cache tag entryとassociated valid bitを持つ。
**Integer Unit(IU) [#lcdabd5f]
**Floating Point Unit(FPU) [#k19c3293]
**Stack Manager Unit(SMU) [#ve298438]
***何をしているのか? [#y92ae6b4]
-stack cacheがoverflowまたはunderflowの時にstackにあるデータをメモリに移動させる。
-dribblingによるspillやfillの操作
-stack cacheがoverflowやunderflowを起こしているときにパイプラインをストールさせる操作
-data cacheのためにリクエストのtrackを保持する。
-IUのstack cache write missを操作する。
***Stack Cache [#q6c8c675]
-64-entry register file
-3 read ports
-2 write ports
-operand stackのtop few entriesをキャッシュに格納する。
-2read portsとone write portはIUからoperandをフェッチしたり格納したりする。
-唯一のreadとwrite portsはdribblingように使われている。
-OPTOP,VARS,またFRAMEからoffsetとして作られたすべてのメモリアドレスはstack accessです。
-その他のすべてのメモリアクセスは直接data cacheへ向かいます。
**Data Cache Unit(DCU) [#z3ed308b]
***何をしているのか? [#g2ae726a]
-SMUまたはpipelineからのデータキャッシュリクエストの調停をする。
-dataまたはtag RAMsのためにaddress, data, control signalを作る。
-Cache hit時に正しいデータを供給できるようにdata RAM outputの順番を並び替える。
-キャッシュ不可能なリクエストの処理のためのデータパスや制御論理を提供する。
-キャッシュミスのためにデータパスやデータパスの制御機能を提供する
***構造 [#o0f7338d]
-2wayセットアソシアティブ方式
-write-back
-write-allocate
-16-byte line
-Cache size: 0,1,2,4,8 and 16Kbyte
**Bus Interface Unit(BIU) [#y9e4baa2]
*パイプラインステージごとの動作 [#f42c8d0c]
**Fetch Stage [#t75e9fbe]
-ICUがinstruction cacheもしくはexternal memoryから命令をフェッチする。
**Decode stage [#wd80c815]
-Instruction Folding Unit(IFU)にて命令のフォルダリングを行う。
**Register stage [#l89d9917]
-IUがstack cacheからoperandをフェッチし、load-use conditions, bypass conditions, またstack cache miss conditionを決定する。
-Register Control Unitにて制御。
**Execution stage [#g3636270]
-IUが演算、DCU用にloadまたはstoreのアドレスを計算どちらかを行う。
-全てのmulticycle operationsはmicrocode datapathを使う。
-制御フロー命令の場合、IUはbranch addressまたはブランチによる依存関係の条件を計算。
-floating-point命令の場合、IUはFPUにoperandsを供給する。
**Cache stage [#x25e8037]
-IUはdata cacheからデータにアクセスし、優先順位をつけ、サイクルの終りにtrapを実行する。
**Write stage [#j11f6366]
-IUがstack cacheに結果を書き込む。
ページ名: