加藤/研究/進捗状況/QSoCの理解
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
単語検索
|
最終更新
|
ヘルプ
|
ログイン
]
開始行:
[[加藤/研究/進捗状況]]
***QSoCの理解 [#d408303c]
~
だいだい終了
~
7/8
-mvr, mvq, mvrr命令
--SPRにはa_reg, d_regの他に、PRRが8個存在する
--r2は、アセンブリで適切なビット(10100000?)に変換してくれる。はず
mvr r2
意味: r2 <= QH
mvq r3
意味: QT <= r3
mvrr r2 d0
意味: r2 <= d0
--indexなどの待避のために使う
--QREGは基本的にデータの処理にしか使わない
-ISA
--シフト命令のミス
--アセンブリでは
sll -> sl
sla -> srl
sr -> sra
--------------
7/7
-アセンブラ
--データセグメント(.data)は、.textより上に書かなければならない!
--------------
6/27
-set命令
--16進数で入れるときは、8ケタ(32bit)で入れなければならない
--10進数のときは大丈夫
--プログラム内のラベルは、seta(0〜3)命令じゃないとできない
例
seta0 0x00001234
seta1 1234
-.data
--dataを入れるときは、10進数でしか入れられない
--ラベルをつけてもアドレス入ってくれない?
例
.data
.word 1234
×.word 0x1234
-setd(0〜3)
--ラベルをとってくることができないみたい?
--直接、値をオフセットで入れなければいけない?
-Memoryにデータを入れるためにC言語でプログラム作ってみたがうまくいかない
--''memgen_data.c''
----------------
6/26
-set命令
例
seta0 value
のとき
bitごとにseta0HH, seta0HL, seta0LH, seta0LLの命令がそれぞれ実行される
-Queue ISAの間違い
--jmp(0〜3)→jump(0〜3)
-simulationで波形をみると
--クロックが1にならずに変な不定値になっている
--0.5ぐらい?
--立ち上がるまでの時間が足りないのか?
-----------------
6/25
-Comp命令がよくわからない
--Ex Unit でコンディションコードにからんでる~
→''オペランドを比較して分岐、Condition Codeを決める''~
-Branch命令はExじゃないと分岐が分からないのか?
--Branchは、PC <= PC+address で次のPCを決めるので、EUでALU必要
-Jumpと同じようにDecodeでは判断できないのか?
--Condition Codeについてもっと理解する
-PC_Selとは何か?
--仕様書に書いていない
--調べる
--Ex Unit内ではEU_O_Branchという信号~
→''FUでの分岐(Jump or Branch)の判定の信号を生成している''~
-Write Back Unitのデータパスがない!~
→メモリ(Memory Unit)があるからいらないのか?~
→Memory UnitとWrite Back Unitのデータパス一緒になってる!たぶん~
----------------
6/24
-ldw, stwでoffset<<2をしているのはなぜ?~
→SPR(Special Purpose Register)が32ビットのため(データメモリが32ビット)、2つ先のデータに行くためには8バイトアドレスを加算しなければならない~
→そのため2ビットシフトしている~
例
0x00002000 data1 <- base address
0x00002004 data2
0x00002008 data3 <- ほしいデータ
※offset<<2を行う
-branch, jmpではaddress<<1をしている。なぜ?~
→2つ先の命令にジャンプしたいとき、命令は2バイト(16bit)のため、2つ先に行くためにはPCを4バイトずらさなければならない~
→そのため1ビットシフトしている~
例
jump address <- 現在の命令
ldw1
ldw2 <- 飛びたいところ
※address<<1を行う
-SPR(Special Purpose Register?)は何のために使うのか?~
→d_reg, a_regが4つずつ~
→ベースアドレスを保存しておくためのレジスタ(SPR)?→Issue Unitでレジスタある~
※Decode UnitでSPR_Selを生成~
-QCUユニットのデータパスの"|"は何だ?~
→Operand のORをとる~
→Operand (offset)がひとつでも1 (0より大きい)ときは、→Src2addressはQH + offset→''pure Queue''という~
→offsetない(0)とき→Src2addressはQH + 1→''produced Queue''
-QCUユニット、QH, QTの最上位ビット(32ビット目)に0を入れている理由は?~
-----------------
6/15〜16
-アセンブリから機械語への変換方法などのやり方理解した
-キュープロセッサのデコードユニットまではとりあえず見ていった
--動きやそれぞれの信号線の意味は分かった気がしたが、
--実際、Jump命令などがどのように動いて行くのかが分かっていないので、
---要理解
--set命令の意味がよく分からない
---特にseta, setdの違いも
---要理解~
→キュープロセッサはオフセットを8ビットしか使えないため、ベースアドレスを用意して加算することで実現している~
→そのため、set命令でベースアドレスを設定している
-setやldw, stw命令にldw0やldw1, ldw2, ldw3などのようにそれぞれ4つ用意されているのは、%%4命令まで並列実行できるから??%%~
→ベースアドレスが1つだけあっても困るため、4つ用意してそれぞれのベースアドレスに対して命令を適用する~
→Jumpはa0〜a3レジスタにアドレスを加算して行う~
→ldw, stwはd0〜s3レジスタにオフセットを加算して行う~
~
-------------
終了行:
[[加藤/研究/進捗状況]]
***QSoCの理解 [#d408303c]
~
だいだい終了
~
7/8
-mvr, mvq, mvrr命令
--SPRにはa_reg, d_regの他に、PRRが8個存在する
--r2は、アセンブリで適切なビット(10100000?)に変換してくれる。はず
mvr r2
意味: r2 <= QH
mvq r3
意味: QT <= r3
mvrr r2 d0
意味: r2 <= d0
--indexなどの待避のために使う
--QREGは基本的にデータの処理にしか使わない
-ISA
--シフト命令のミス
--アセンブリでは
sll -> sl
sla -> srl
sr -> sra
--------------
7/7
-アセンブラ
--データセグメント(.data)は、.textより上に書かなければならない!
--------------
6/27
-set命令
--16進数で入れるときは、8ケタ(32bit)で入れなければならない
--10進数のときは大丈夫
--プログラム内のラベルは、seta(0〜3)命令じゃないとできない
例
seta0 0x00001234
seta1 1234
-.data
--dataを入れるときは、10進数でしか入れられない
--ラベルをつけてもアドレス入ってくれない?
例
.data
.word 1234
×.word 0x1234
-setd(0〜3)
--ラベルをとってくることができないみたい?
--直接、値をオフセットで入れなければいけない?
-Memoryにデータを入れるためにC言語でプログラム作ってみたがうまくいかない
--''memgen_data.c''
----------------
6/26
-set命令
例
seta0 value
のとき
bitごとにseta0HH, seta0HL, seta0LH, seta0LLの命令がそれぞれ実行される
-Queue ISAの間違い
--jmp(0〜3)→jump(0〜3)
-simulationで波形をみると
--クロックが1にならずに変な不定値になっている
--0.5ぐらい?
--立ち上がるまでの時間が足りないのか?
-----------------
6/25
-Comp命令がよくわからない
--Ex Unit でコンディションコードにからんでる~
→''オペランドを比較して分岐、Condition Codeを決める''~
-Branch命令はExじゃないと分岐が分からないのか?
--Branchは、PC <= PC+address で次のPCを決めるので、EUでALU必要
-Jumpと同じようにDecodeでは判断できないのか?
--Condition Codeについてもっと理解する
-PC_Selとは何か?
--仕様書に書いていない
--調べる
--Ex Unit内ではEU_O_Branchという信号~
→''FUでの分岐(Jump or Branch)の判定の信号を生成している''~
-Write Back Unitのデータパスがない!~
→メモリ(Memory Unit)があるからいらないのか?~
→Memory UnitとWrite Back Unitのデータパス一緒になってる!たぶん~
----------------
6/24
-ldw, stwでoffset<<2をしているのはなぜ?~
→SPR(Special Purpose Register)が32ビットのため(データメモリが32ビット)、2つ先のデータに行くためには8バイトアドレスを加算しなければならない~
→そのため2ビットシフトしている~
例
0x00002000 data1 <- base address
0x00002004 data2
0x00002008 data3 <- ほしいデータ
※offset<<2を行う
-branch, jmpではaddress<<1をしている。なぜ?~
→2つ先の命令にジャンプしたいとき、命令は2バイト(16bit)のため、2つ先に行くためにはPCを4バイトずらさなければならない~
→そのため1ビットシフトしている~
例
jump address <- 現在の命令
ldw1
ldw2 <- 飛びたいところ
※address<<1を行う
-SPR(Special Purpose Register?)は何のために使うのか?~
→d_reg, a_regが4つずつ~
→ベースアドレスを保存しておくためのレジスタ(SPR)?→Issue Unitでレジスタある~
※Decode UnitでSPR_Selを生成~
-QCUユニットのデータパスの"|"は何だ?~
→Operand のORをとる~
→Operand (offset)がひとつでも1 (0より大きい)ときは、→Src2addressはQH + offset→''pure Queue''という~
→offsetない(0)とき→Src2addressはQH + 1→''produced Queue''
-QCUユニット、QH, QTの最上位ビット(32ビット目)に0を入れている理由は?~
-----------------
6/15〜16
-アセンブリから機械語への変換方法などのやり方理解した
-キュープロセッサのデコードユニットまではとりあえず見ていった
--動きやそれぞれの信号線の意味は分かった気がしたが、
--実際、Jump命令などがどのように動いて行くのかが分かっていないので、
---要理解
--set命令の意味がよく分からない
---特にseta, setdの違いも
---要理解~
→キュープロセッサはオフセットを8ビットしか使えないため、ベースアドレスを用意して加算することで実現している~
→そのため、set命令でベースアドレスを設定している
-setやldw, stw命令にldw0やldw1, ldw2, ldw3などのようにそれぞれ4つ用意されているのは、%%4命令まで並列実行できるから??%%~
→ベースアドレスが1つだけあっても困るため、4つ用意してそれぞれのベースアドレスに対して命令を適用する~
→Jumpはa0〜a3レジスタにアドレスを加算して行う~
→ldw, stwはd0〜s3レジスタにオフセットを加算して行う~
~
-------------
ページ名: