1han @ ウィキ
http://w.atwiki.jp/1han/
1han @ ウィキ
ja
2007-04-13T18:42:13+09:00
1176457333
-
simulator 最新版
https://w.atwiki.jp/1han/pages/25.html
とりあえずjall, jal, jl, j 命令の命令命とそのジャンプ先を出力しました。
出力先はdebug用jump_addr.txtに設定してます。
使用例:
$./asl min_. ....
$make
$./sml base.bin base.ppm
ジャンプ命令に会うたびに、ラベルリスト(アセンブラが用意したもの)
を調べなきゃいけないので、シミュレータのスピードがすげえ落ちました。
申し訳ないです!
2007-04-13T18:42:13+09:00
1176457333
-
やってること
https://w.atwiki.jp/1han/pages/14.html
**現在進行中
・USBコントローラ(完成)
・SRAMコントローラ (完成)
・FPU(完成)
・RS232Cコントローラ(完成)
**今後の予定
・USBエコーテスト(完了)
・USB→SRAM、SRAM→USBテスト(完了)
・FPUテスト(簡易テスト完了、本体への組み込みは完了した模様)
・RS232Cテスト(ほぼ完了)
・レイトレ実機テスト~USB~(未完了)
・レイトレ実機テスト~RS232C~(未完了)
**進捗状況↓
1/30 : USBエコーテスト完了、とりあえずは動きます。
2/14 : SRAM 動いたぽ。でもまだバグありそうなので頑張るぽ。
2/16 : FADD制作開始。
暇つぶし(?)にfloat ⇔ 32bit列の変換をする超簡単なプログラムを作りますた。なんとなくデバッグに使えるとか使えないとかなので、わざわざそんなもん実装する3分が勿体ねえぜ、という方にはあげます笑
2/20 : FADD完成。とりあえず動くものはできた。
2/21 : ちょい適当だったFADDの丸めをしっかりしたものに。コーディングが冗長だけど無視。無限大とか無限小とかの扱いをどうするのか良く分からんので無視。計算できる物を作るのが先決。
2/22 : FSUB制作開始。ADDをちょこっと変えればいいかなと思ってたら意外に罠が・・・ADDとSUBを一気に扱うコンポーネントにしても良かったがコード量が多くなるので別にして、FPUの側で符号とオペコードを見てから分岐させるようにしようと思いました。
FMULはできたらしいので、2月中にFPU完成することを目標に頑張ります。
2/23 : FSUBほぼ完成しますた。丸めとかも多分だいじょぶ。
あとはADD、SUBを振り分けていく回路を書けば大丈夫かと思われます。
これからFTOIとITOFに着手したいと思います。
コードが冗長なんで適宜短く出来るとこは短くしていきたいですわ。
2/25 : ITOF完成、その他ADD、SUBの軽いデバッグ。
2/26 : FTOIも完成。ぼちぼちFPU自体を書きはじめたいところ。
しかしオペコードとかどうなってるかなぞなので、そこらへんを煮詰めたい。
あと割り算についてもソフト側でのサポートが欲しいので、まぁ何ともいえないが、、、ハード側でもある程度できるようにはしておきたい。
あと、ライブラリの実装とか・・・けど俺そこまでできるんだろうかorz
早田さんが来ない。FPU付きのCPUまでが。。。遠いorz
手が空いたら俺の方でもCPU本体に手を付けていったほうが良いのだが、
形式言語の試験がもうすぐorz
なんというかorz
3/4 : ちょっと間あいたけど、FTOIのちょこっとしたミスを修正。
FMULをやや修正。
FLOORが意外にめんどくさそうな気がしてきた。
今考えていること
・SHRやらSHLやらを使わずに手でバレルシフタを書いたほうがいいのだろうか。
しかし書くとしたら24ビット用とかプライオリティエンコーダみたくそれぞれ書かなきゃいけないので3つくらい必要になる。ルーチンワークなのでやろうと思えばすぐにできるが、、、
とりあえずの所はつかえるもんは使っとけってことで・・・。
・明日にはUSBからSRAMにデータ送らなきゃ・・・
・FPU用のオペコードは適当につくっちゃっていいんでせうか?
FLOORできますた!
とりあえず俺の見解としては
FTOI→小数点以下を四捨五入してINTに
FLOOR→小数点以下を切捨ててFLOATに
という意味だと解釈しているんですが・・・
大丈夫っすよね(^^;
だいぶVHDLに慣れてきたのでサクサクいきたいところ(おせえだろww)。
今からFPU書きます。
FPU書いてて思ったこと
・やっぱADD、SUBまとめちゃった方が楽かしら(^ω^;)
・何かどの命令が何nsかかるとかちゃんと考えてないんだけど、
きっとだめだめなんだろうな・・・
・しょぼーん・・・
3/6 : とりあえずFPU完成。割り算まだだけどorz
正直ソフト側でどうしたらいいのか分かってないのでだめぽ。
かくなる上はハードウェア実装・・・!?
FPUの精度は全く問題ないと思われます。
ただFPUで結果を出力するタイミングが微妙です。順序回路でひたすら計算流すように作っただけなので何クロックかかるか分からないので、どうしたらいいやら・・・
クロック同期で計算するようにしたとしても1クロックでどこまで計算終わるか分からないので結局同じことだと思ったり。
FADDとかをステートマシンで書くのはだいぶまんどくさいと思うので、
とりあえずFPUを実機で動かしてみて対策してみたいと思ってます。もう自分でも良く分かってないので模索中。
一応fnegとかできるようにしときました。
3/7朝 : SRAMの内容をUSB経由で落としてバイナリファイルに書き込むようにしたんだけど、
ステートマシンがややこしくなったのでうまく読めなくなりましたーーーー
やばいやばい。
データ→SRAMへWRITE→SRAMからREAD→USBへWRITE→PC
流れはあっているはずなんだけど・・・
つうかデータが1つとかなら大丈夫だったんですけどねぇ。
眠くてわけわかんなくなってきたので続きはまた午後に・・・
水・木曜日中にはその辺を確実に仕留めたいところ。
金曜までにFPUを実機で走らせてみます。
やばいやばい。やること盛りだくさん。
CPUのデバッグに時間をかけられるのだろうか・・・
3/8と3/9 : USB関係でストール。。。orz
ものすごい勢いで色々試して、なんとかちゃんとした4Mの値を読めるように。
しかしステートマシンでめちゃくちゃ待たないと正しい値を読めないってのは
いかがなものかと。
クロックを落とせばできるんだけど、待ちステートを増やすって実にアドホックなやり方。どうしたらバッファ詰まりっぽい現象を根本から解決できるか分からない。
他の班はどういうUSBのコードを書いてるんだろう。orz
3/10、3/11 :
ものすごい勢いでUSBを全て書き直す。エコーテストからやり直しorz
USBがようやくデレを見せてくれたので何とかSRAMを読み込むことに成功。
しかしUSB→SRAMができない。
一晩悩んだ末、USBREADサイクルに問題あり。再びUSBを書き直すorz
3/12早朝 : ようやく長い戦いに終止符。SRAMに書き込みも完璧。
しかし何故かSRAMの0番地にUSBから書き込めない。
なんどやっても同じで、しかも他の班からも同様との報告を受けたので、
0番地は使用しないという意見で一致(脳内会議)
かくしてSRAMとUSBの2穴同時調教は完了した。
次回、「FPUはデレデレ!?」に続く。
3/12
FPUほぼ完成。ISEでのコンパイルだと計算に39nsかかっている模様。
50MHzなら2CLKでいけるぽ。
一応計算結果をSRAMに書き込むようにしたところ、正しい値が書き込まれている。
しかし簡易テストなので絶対的な保証はない。
「バグは、一時の成功に浮かれた我々の脳内に存在する。」
FPUでは
FADD
FSUB
FMUL
FTOI
ITOF
FLOOR
FABS
FNEG
FHALF
を実装。全てクロック非同期の組み合わせ回路。
入力とOPCODEをもらって動きます。出力は2CLK後の値をとってください。
FDIVとかSQRTとかに関してはソフトウェアの方が頑張ってくれたみたいなんで、期待してます><
今後の予定としては、RS232Cの制御回路、CPU本体のデバッグにあたりたいと思ってます。
よろしこ。
3/14昼間
RS232Cのコントローラをとりあえず書いてみる。
これからエコーテストに入る予定。
14日中にはエコーテストその他を終わらせ、全力でCPU本体のデバッグに手を付けたいと思います。
やばいやばいやばいやばい。
俺の精神状態もやばいやばい。
3/14夜
RS232Cが動かない、というよりもむしろポートすら開かない。
拡張基板から見直すも特に目立ったミスはない。
・・・原因はケーブルが死んでたせいでしたorz
また罠か。
教訓「罠は常に目の前に存在する。」
とりあえずエコーテスト一体型のコントローラを書いて、
同じような感じでREADサイクル、WRITEサイクルを持つコントローラを作り、
READについてはLEDで1バイト光らせて確認。
WRITEについてはタイミングよくPCでデータを受け取るようにするにはどうしたらいいのか分からないので停止中。
3/15朝寝起きから猛烈な腹痛、死にそうになりながらストッパをぶち込み、なんとか持ちこたえた。しかし脳さえ動けばなんとかなるので戦線復帰。皆無言でキーボードを叩く。
すでに完動している5、6班がやけに楽しそうだ。orz
とりあえずModelSim上でRS232Cっぽい動きをするものを作って動かしてみた。
予想通りの動きだが、予想があっているとは限らない。
同日夕方、RS232Cコントローラはおそらく完成、動作も問題ない。
1バイトずつ読むようにしたので、今日中に4バイト一気に読めるものに作り変える予定。→4バイトのエコーも完了、これでおそらく本番の通信は無問題、使う所までいければの話だがorz
3/16早朝
ものすごい勢いで実機デバッグ、数々の罠にはまりながらも何とかひとつずつ潰しつつある。
3/30昼
だいぶあいたけど・・・
早田氏の尽力でCPU実機デバッグが着々と進行中。
ぶっちゃけ俺のできることは全てやった感があるわけだが、
後はレイトレを動かすのみ。
FPUの精度とかあやしい所もあるかもだけど、とにかく動けばいいと思っている。
RS232Cもせっかく作ったし、使ってみたいなと思ってはいる。。。
がんばりませう!
2007-03-30T14:21:33+09:00
1175232093
-
あらい予定
https://w.atwiki.jp/1han/pages/12.html
毎日地下にいるお(^ω^)
FPUデキタヨー!(多分)
SRAMデキタヨー!(きっと)
USBウゴイタヨー!(おそらく)
RS232?ツクッタヨー!(OwO)ウェイ
↓地下出没予定↓
・4/2までちょくちょく出没。
2007-03-30T14:17:46+09:00
1175231866
-
トップページ
https://w.atwiki.jp/1han/pages/1.html
**春休み 3/20 18:52
みなさまいかがお過ごしでしょうか
しばらく休み、疲れも癒えたことと思います。
今後レイトレ完全動作のために必要なこと、
など、考えていることを記します。
ハードウェア係はとにかくCPUを書く、
そしてデバッグするということに尽きると思います。
そこでソフトウェア側からのサポートとして、
ソフトウェアによるデバッグ環境の整備、
コンパイラ、アセンブラ、シミュレータの使用方法の伝達が必要と考えています。
つきましては、明日の午後、地下にてそれらの作業を行いたいと思います。
**↓の変更を受けて、命令セットにlws,sws命令追加
lw,sw命令においてベースレジスタがsp(r16)の場合は、lws,sws命令とする。即値の減算でアドレス計算をする。こうすることにより、lw,lws,sw,sws命令のいずれにおいても、即値部は必ず正の数となる。
**FPU命令の追加
|fabs(111010) $rd,$rs|rd = abs(rs)|
|fiszero $rd, $rs(111001)|if rs = 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fispos $rd, $rs(111000)|if rs >= 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fisneg $rd, $rs(111011)|if rs < 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fless $rd, $rs, $rt(111100)|if rs < rt then $rd = 1(0x1) else $rd = 0(0x0)|
|setl $rd(31-26), label(25-0) (000011)|$rd = label|
*ライブラリ完成 3/10 17:57
sqrtの実装が完了
print_int,print_char,read_int,read_floatに関しては、
PPM(画像データ)の出力をバイナリで行うことでprint_byte,read_word以外は不要になりました。
*out命令の変更 3/05 1:40
out命令をByte出力用のoutb、4Byte(Word)出力用のoutwに分けました。
*命令セット一部変更 2/27 22:26
ジャンプ命令において、
ジャンプ先がラベルである場合と、レジスタの内容である場合があるので、
今まで j, jal 命令であったものを、
|j rs|pc = rs|
|jl label|pc = label|
|jal rs|pc = rs|
|jall label|pc = label|
の4命令に分割しました。
またjr命令の引数を無しとしました。
|jr|pc = $ra|
----
**では
とりあえずソースとかをアップするための
UPLOADERとしてでも使ってください。
[[うぷろだ]]
全員分のページを用意しときました。
こんなことやったよ~とか、
いついるよ~とか書いたらいいかな~と思いまして。
なので、適当に書き換えといてください。
wikiについての要望は森口に伝えてくれれば何とかします。
**今後の予定
関数呼出規約の制定
SRAM,USBを月曜までにできるといいな。
発表資料作成
**SPIM MIPS simulator
[[SPIM homepage>http://www.cs.wisc.edu/~larus/spim.html]]
こんなのありますた。
Win版しか試してないけど、アセンブル、シミュレーションをやってくれます。
2007-03-20T18:54:36+09:00
1174384476
-
進捗
https://w.atwiki.jp/1han/pages/15.html
<p>
一応SRAM、USB関連以外の命令はすべて書きました。命令の先頭に点が付いてるものを書きました。点が2つ付いている命令に関しては、実機での動作を確認済です。点が3つ付いている命令は、50MHzでの動作を確認済みです。</p>
<br>
<p>*命令数<br>
contest.sldにて</p>
<table border="1" cellspacing="0" cols="3" frame="void" rules="groups">
<colgroup>
<col width="70">
<col width="70">
<col width="78"></colgroup>
<tbody>
<tr>
<td align="left" height="17" width="70">・・・</td>
<td align="left" width="70"><font face="Arial">Lw</font></td>
<td sdval="860079910" sdnum="1041;" align="right" width="78"><font face=
"Arial">860079910</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">sws</font></td>
<td sdval="519916237" sdnum="1041;" align="right"><font face=
"Arial">519916237</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">lws</font></td>
<td sdval="440224316" sdnum="1041;" align="right"><font face=
"Arial">440224316</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fmul</font></td>
<td sdval="227461722" sdnum="1041;" align="right"><font face=
"Arial">227461722</font></td>
</tr>
<tr>
<td align="left" height="17">・</td>
<td align="left"><font face="Arial">Bne</font></td>
<td sdval="209685920" sdnum="1041;" align="right"><font face=
"Arial">209685920</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">cmpi</font></td>
<td sdval="195078876" sdnum="1041;" align="right"><font face=
"Arial">195078876</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">addi</font></td>
<td sdval="160411954" sdnum="1041;" align="right"><font face=
"Arial">160411954</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">add</font></td>
<td sdval="132794259" sdnum="1041;" align="right"><font face=
"Arial">132794259</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">subi</font></td>
<td sdval="126965969" sdnum="1041;" align="right"><font face=
"Arial">126965969</font></td>
</tr>
<tr>
<td align="left" height="17">・・</td>
<td align="left"><font face="Arial">jr</font></td>
<td sdval="124747200" sdnum="1041;" align="right"><font face=
"Arial">124747200</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">llo</font></td>
<td sdval="105809186" sdnum="1041;" align="right"><font face=
"Arial">105809186</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">jall</font></td>
<td sdval="101920116" sdnum="1041;" align="right"><font face=
"Arial">101920116</font></td>
</tr>
<tr>
<td align="left" height="17">・</td>
<td align="left"><font face="Arial">jl</font></td>
<td sdval="96323694" sdnum="1041;" align="right"><font face=
"Arial">96323694</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">slli</font></td>
<td sdval="89715071" sdnum="1041;" align="right"><font face=
"Arial">89715071</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fsub</font></td>
<td sdval="79587675" sdnum="1041;" align="right"><font face=
"Arial">79587675</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">fadd</font></td>
<td sdval="59686473" sdnum="1041;" align="right"><font face=
"Arial">59686473</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">cmp</font></td>
<td sdval="42337435" sdnum="1041;" align="right"><font face=
"Arial">42337435</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">lhi</font></td>
<td sdval="42233392" sdnum="1041;" align="right"><font face=
"Arial">42233392</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">Sw</font></td>
<td sdval="36911668" sdnum="1041;" align="right"><font face=
"Arial">36911668</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fless</font></td>
<td sdval="36786150" sdnum="1041;" align="right"><font face=
"Arial">36786150</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fcmp</font></td>
<td sdval="29814662" sdnum="1041;" align="right"><font face=
"Arial">29814662</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fbe</font></td>
<td sdval="29814662" sdnum="1041;" align="right"><font face=
"Arial">29814662</font></td>
</tr>
<tr>
<td align="left" height="17">・</td>
<td align="left"><font face="Arial">bl</font></td>
<td sdval="26987744" sdnum="1041;" align="right"><font face=
"Arial">26987744</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fabs</font></td>
<td sdval="25984135" sdnum="1041;" align="right"><font face=
"Arial">25984135</font></td>
</tr>
<tr>
<td align="left" height="17">・</td>
<td align="left"><font face="Arial">jal</font></td>
<td sdval="22827083" sdnum="1041;" align="right"><font face=
"Arial">22827083</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fiszero</font></td>
<td sdval="11192320" sdnum="1041;" align="right"><font face=
"Arial">11192320</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fispos</font></td>
<td sdval="7854721" sdnum="1041;" align="right"><font face=
"Arial">7854721</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fisneg</font></td>
<td sdval="5006260" sdnum="1041;" align="right"><font face=
"Arial">5006260</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">j</font></td>
<td sdval="4497114" sdnum="1041;" align="right"><font face=
"Arial">4497114</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fneg</font></td>
<td sdval="3881481" sdnum="1041;" align="right"><font face=
"Arial">3881481</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">bg</font></td>
<td sdval="739318" sdnum="1041;" align="right"><font face=
"Arial">739318</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">floor</font></td>
<td sdval="189204" sdnum="1041;" align="right"><font face=
"Arial">189204</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">outb</font></td>
<td sdval="49168" sdnum="1041;" align="right"><font face=
"Arial">49168</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">ftoi</font></td>
<td sdval="49154" sdnum="1041;" align="right"><font face=
"Arial">49154</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">itof</font></td>
<td sdval="16625" sdnum="1041;" align="right"><font face=
"Arial">16625</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">sub</font></td>
<td sdval="16512" sdnum="1041;" align="right"><font face=
"Arial">16512</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">setl(ll)</font></td>
<td sdval="8826" sdnum="1041;" align="right"><font face=
"Arial">8826</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">andi</font></td>
<td sdval="3329" sdnum="1041;" align="right"><font face=
"Arial">3329</font></td>
</tr>
<tr>
<td align="left" height="17">・・・</td>
<td align="left"><font face="Arial">be</font></td>
<td sdval="3329" sdnum="1041;" align="right"><font face=
"Arial">3329</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">in</font></td>
<td sdval="325" sdnum="1041;" align="right"><font face="Arial">325</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fbg</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">ble</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">stop</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fbne</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">outw</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">bge</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fdiv</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><font face="Arial">fble</font></td>
<td sdval="0" sdnum="1041;" align="right"><font face="Arial">0</font></td>
</tr>
<tr>
<td align="left" height="17"><br></td>
<td align="left"><br></td>
<td sdval="3857613195" sdnum="1041;" align="right"><font face=
"Arial">3857613195</font></td>
</tr>
</tbody>
</table>
<br>
2007-03-15T00:35:19+09:00
1173886519
-
命令セット
https://w.atwiki.jp/1han/pages/9.html
**擬似命令
----
|fhalf(101100) rd(26-21) rs(20-16)|rd=rs/2|
3/06追加命令
|[111110](31-26)|andi rd rt Imm|rd = rt & Imm|
|[011001](31-26)|in rd|外部からの入力|
|[011010](31-26)|outb rs|出力(Byte) 下位1Byteをcharで出力|
|[011100](31-26)|outw rs|出力(4Byte)下位4Byteをintで出力|
|[111101](31-26)|floor rd rs|rd = rs切捨て|
----
|move rd rs|add rd rs r0|
|neg rd rs|sub rd r0 rs|
以下3/03廃止
|li rd Imm|llo rd Lo(Imm)|
||lhi rd Hi(Imm)|
|ll label|llo rd Lo(Address[label])|
||lhi rd Hi(Address[label])|
**命令
----
|ビット表現|アセンブリ|実行内容|
|fabs(111010) $rd,$rs|rd = abs(rs)|
|fiszero(111001) $rd(25-21), $rs(20-16)|if rs = 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fispos(111000) $rd(25-21), $rs(20-16)|if rs >= 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fisneg(111011) $rd(25-21), $rs(20-16)|if rs < 0 then $rd = 1(0x1) else $rd = 0(0x0)|
|fless(111100) $rd(25-21), $rs(20-16), $rt(15-11)|if rs < rt then $rd = 1(0x1) else $rd = 0(0x0)|
|setl $rd(31-26), label(25-0) (000011)|$rd = label|
3/03追加(lhi,llo)
|[011110](31-26)|lhi rd Imm|Hi(rd) = Imm|
|[011111](31-26)|llo rd Imm|Lo(rd) = Imm|
3/03追加
|[101111]|fneg rd rs|rd = -.rs|
|000001(31-26) rs(25-21) rt(20-16) rd(15-11)|add rd rs rt|rd = rs + rt|
|000010(31-26) rs(25-21) rt(20-16) Imm(15-0)|addi rt rs Imm|rt = rs + Imm|
|[001110]|sub rd rs rt|rd = rs - rt|
|[001111]|subi rd rs Imm|rd = rs - Imm|
||mov|rd = rs(addi)|
|[010000](31-26) rs(25-21) rd(20-16) Imm(15-0) |slli rd rs Imm|rd = rs << Imm|
|[010001](31-26) rs(25-21) rd(20-21) Imm(15-0)|lw rs Imm(rd)|rs = mem[rd + Imm](修正しました)|
|[010010](31-26) rs(25-21) rd(20-16) Imm(15-0)|sw rs Imm(rd)|mem[rd + Imm] = rs|
|[100001](31-26) rs(25-21) rt(20-16) rd(15-11)|fadd rd rs rt|rd = rs + rt|
|[100010] [100011] [100100]|fsub fmul fdiv||
||fmov rd rs|rd = rs(結局movと同じ?)|
|001101(31-26)|jr|pc = ra|
|001100(31-26) target(19-0)|jall target|ra = [pc+1]; pc = target|(jalとjallを入れ替えた!?)
|[010011](31-26) (25-21)|jal rs|pc = rs|
|000111(31-26) rs(25-21) rt(20-16)|cmp rs rt|cr = cond[rs - rt]|
|[010100](31-26) rs(25-21) Imm(15-0)|cmpi rs Imm|cr = cond[rs - Imm]|
|000100(31-26) target(19-0)|jl target|pc = target|
|[010101](31-26) rs(25-21)|j rs|pc = rs|
|001000(31-26) target(19-0)|be target|(if [cr = Equal]) pc = target|
|001011(31-26) target(19-0)|bne target|...|
|001001(31-26) target(19-0)|bg target|...|
|001010(31-26) target(19-0)|bl target|...|
|[010110](31-26) target(19-0)|ble target |...|
|[010111](31-26) target(19-0)|bge target|...|
|[100101](31-26) rs(25-21) rt(20-16)|fcmp rs rt|cr = cond[rs - rt]|
|[100110](31-26) target(19-0)|fble target||
|[100111] [101000] [101001]|fbg fbe fbne||
||nop|イラネ|
|000101(31-26) rd(25-21)|led rd|ピカーソ|
|000110(31-26)|STOP||
2/27追加
|jmp(31-26) rd(25-21)|jmp rd|pc = [rd] レジスタを引数に取るジャンプ|
----
**ライブラリ用命令
|[011000](31-26) rd(25-21)|dec rd|rd--|
|[101010](31-26) rd(25-21) rs(20-16)|ftoi rd rs||
|[101011](31-26) rd(25-21) rs(20-16)|itof rd rs||
----
**sparcだとプリミティブな命令
putchar
printf
fprintf
fputc
scanf
cos
sin
atan
floor
----
2007-03-14T17:37:13+09:00
1173861433
-
レジスタ
https://w.atwiki.jp/1han/pages/10.html
*レジスタ構成
----
|00000 - 01111|整数レジスタ|r0 - r15 (r0 は常にゼロ)|
|10000|スタックポインタ|sp|
|10001|フレームポインタ|fp|
|10010|コンディションレジスタ|cr|
|10011|リンクレジスタ|ra|
|10100|コンパイラ予約用レジスタ|lib0|
|10101 - 11111|浮動小数点レジスタ|f0 - f10|
----
2007-03-14T02:51:45+09:00
1173808305
-
メニュー
https://w.atwiki.jp/1han/pages/2.html
メニュー
-[[トップページ]]
-[[メニュー]]
-[[うぷろだ]]
-[[ぐぇん]]
-[[そうだ]]
#treemenu(title=あらい,[[近況報告]],[[あらい予定]],[[やってること]])
#treemenu(title=もりぐち,[[予定>もりぐち]],[[進捗]],[[実機テスト]],none)
#treemenu(title=仕様,[[命令セット]],[[レジスタ]])
----
更新履歴
#Recent(20)
//yesterday:&counter(yesterday)
//today:&counter(today)
//all:&counter()
-[[@ウィキ ガイド>http://atwiki.jp/guide/]]
-[[@wiki 便利ツール >http://atwiki.jp/tools/]]
-[[@wiki>http://atwiki.jp]]
// リンクを張るには "[" 2つで文字列を括ります。
// ">" の左側に文字、右側にURLを記述するとリンクになります
2007-03-13T20:00:54+09:00
1173783654
-
実機テスト
https://w.atwiki.jp/1han/pages/24.html
**USB経由のテスト
流れはusb_readme.txt
P6(binary)形式のデータを扱えるように変更されたmin-rt.mlを
コンパイルして用意する必要あり。
菅原さんのページから
cpuex-2006/cserver-usb/ 以下のファイルをダウンロード
$ gcc cserver.cc -o server
などしてコンパイル
使用方法は以下になる。
usage : ./server [options] [input SLD file(default stdin)]
options :
-i filename : specify binary file for initialization(default none)
-o filename : specify output PPM file name(default stdout)
-b : send SLD data in big-endian format.
-h : print this help.
inputのバイナリファイルの生成に必要なファイルは、
min-rtをコンパイルしたmin-rt.s,アセンブリで書かれたライブラリlib.s
min-rt.s,lib.sをリンク、アセンブルしたバイナリの実行ファイル
が必要になります。
2007-03-13T19:52:18+09:00
1173783138
-
assembler
https://w.atwiki.jp/1han/pages/19.html
lwsとswsが誕生したから、lwとswはスタックポインタ以外のレジスタだけ取り扱ってますので、
lwとswを元に戻しました。
アセンブラはリンクレジスタなどの初期値を明記しなければならないようですが、
位置とかまだはっきり分かってないので、まだ書き込んでいません(すぐできる)
一様アップしておきます。
今日はもう限界なんで、しかもだれも来ていないから、帰ります。
明日の午前中に来ます。
2007-03-13T16:59:18+09:00
1173772758