※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

--- yastak ---


とりあえず自分のページを作ってみました。
作業の進行・メモなど書いていこうと思います。

予定概略

  • レイトレ
    • USB通信 → 失敗…原因不明 → 通信自体はO.K.ぽい → 完動12.5,25MHz
    • シリアル回路

  • CPU
    • シリアルコントローラを組み込む

  • IO
    • rs232cのコントローラ作成 → コード完了 → コンパイルO.K.
→ 修正中 → ModelSim用VHDL作成完了

作業進行


2007.03.17

お疲れ様でした。
動作確認のためのアンケートよろしくお願いします。
私がいけないときになった場合に備えて、
トップページに必要なファイル群と使い方をまとめてあげておきました。

  • rs232cのコントローラのソース(echo除く)を読んでみたのですが、
    いくらか気になる点があります。
    upload filesのところにアップされていたものを読んだので、
    すでに修正済みかもしれませんが、一応気になった点を書き出しておきます。
    全てserial.vhdに関するものです。

    ・case STATE isの、when "0000"のところで、読み込み指令が来たときには、"1111"でなく"1110"ステートに移行すべきなのでは?

    ・case STATE isの、when "1011"のところで、CLKCNTW = CLKSのときには、CLKCNTでなくCLKCNTWを0にすべきなのでは?

    ・何カ所かRCNTやCNTが「256より大きければ」という条件文がありますが、「256以上であれば」の間違いでは?

    ・非常に低い確率で、バッファへ書き込み要求と読み込み要求が同時に入ると思うのですが、その場合どちらかの要求がかき消されてしまうのでは?

    あと、そもそも、バッファのサイズって256byteで足りますかね?contest.sldのデータ全てを入れるとなると数KBくらいになりますけど…。シリアルは遅いから、バッファがあふれる前に読み出されるということでしょうか? -- buyobuyon (2007-04-02 22:30:13)
  • 修正版をあげます! -- yastak (2007-04-06 12:42:20)
  • う~ん…、とりあえず何も変更を加えない状態で、レイトレを実機で動かそうとしているのですが、
    うまく動かすことができません…。何か心あたりありませんか?
    sldppm.binは正常に動作したのですが、min-rt.binを実行すると、
    PPMのヘッダ書き込み時に不明な文字'?'が送られてきてしまい、
    そこでcserverの実行がストップしてしまいます…。
    確かそんなエラーが以前にも生じたと思うのですが…。cpu0316.zipが最新版ではないということでしょうか?
    何か25MHz版になっていないような気がするのですが…。
    それとも私がどこか設定でミスをしているのですかね?
    もしよろしければ、最終的にレイトレが動いたときのバージョンのVHDファイル、UCFファイルをまとめたものを
    あげていただけるとうれしいのですが…。 -- buyobuyon (2007-04-17 18:20:04)
  • あ、おそらく最新版でない気がします…
    動かすだけなら、TOPページにbitファイルだけ置いてあります。
    最新版のファイルもこのページにあげますね! -- yastak (2007-04-17 18:51:40)
  • CPU0417.lzhです。.lzhで大丈夫ですか?
    余計なファイルも入っていますが、(.bakとか)
    ご容赦くださいー!

    その他不要ファイルは、
    mrsrams.vhd(mrsram.vhdは必要)
    *_old.vhd
    usbword.vhd
    cpu_sim.vhd(シミュレーション時に使用)
    imusb.vhd
    以下rs232c用に準備していたファイル
    (途中でコントローラに集中したので多分未完…)
    cputopcom.vhd
    cpucom.ucf -- yastak (2007-04-17 18:58:32)
  • 助かります。
    すでにできているものをただ実機で動かすだけでも一苦労で、
    この大変な作業を全てyastakさんに任せっきりにしていたのだなとつくづく思いました。
    本当にありがとうございます。 -- buyobuyon (2007-04-18 12:19:18)
  • いやいや、作業量はみんなに比べてそんなに多くなかったと思いますよ!
    こちらこそ仕事が遅い中見守ってくれて(?)ありがとうです(>_<) -- yastak (2007-04-21 00:20:21)
名前:
コメント:

2007.03.16 13:25

発表中ですが。
とりあえずModelSim用VHDL作成が完了してしまいました。
ModelSimが動かせないのでストール…。

2007.03.16 0:34

本日はお疲れ様でした。
とりあえず、ALUのWarningを見てみたところ、shiftをなくすとひとつ怪しげなWarningが消えることが判明しました。
コメントアウトして大丈夫ですかね?
だめなようなら修正を試みますー。

  • 上記のWarningを1つ消すことに成功しましたー。
    (それに意味があったかどうかは微妙です…) -- yastak (2007-03-16 01:03:04)

2007.03.15 22:52

進捗:
CPU…FPUのタイミングは良いらしい。
一部命令にタイミングなどの不備あり?→コード検討・明日テスト
OUT命令はどうやら正しく動作している模様。
USBserverでは抽象画が送信されてきた…

rs232cコントローラ…まずCPUかなぁと。
とりあえずecho用ファイルが書きあがっていて、コンパイルも通っているが
反応なし。原因不明…。

間に合うのかも不明。


2007.03.15 06:44

min-rtのharryのアセンブリが出力するようなファイルが必要になっています。
ModelSimで動かすためです。
アセンブリコードか1/0テキストのコードファイルをくださいm(_ _)m

sldppm.binは、実行したもののデータが帰ってこない状況…
やっぱりoutに問題がある気がします…。

SRAMからデータ読み出す回路を入れた状態でサーバを起動すると言うミスをしました。
なんだかデータを読んでいます…w

ちょっと休憩させてくださいー。3時間もしたら戻ってくる予定。

  • buyobuyon氏のコメントと入れ違いでした。

    えと、メモリの値を比べると、
    書いてある番地はO.K.で、
    最初のint,floatの個数はあってました。

    ですが、具体的なint,floatの値が全然違って、
    書き込まれた値は何故か数え上げた値になっていました。
    (intの書かれる最初の番地 0x00000000,その次0x00000001,0x00000002,...)
    floatも同様です…。
    ここにも何かおかしなことが…orz -- yastak (2007-03-15 07:02:17)
  • そんなわけで、勝手ながら休憩します。
    基盤等は出しっぱなしで、電源等はきっていきます。
    拡張基盤も取り出し済みですー。

    では、後ほど!
    色々仕事お願いしておいて恐縮ですが、
    buyobuyon氏も休憩してください… -- yastak (2007-03-15 07:05:49)
  • 一応、min-rtの最新版アセンブリコードmin-rt02.sと
    harry形式のバイナリmin-rt02.binを載せておきました。
    というわけで、私も休みます。
    お昼すぎに、そちらにむかうと思いますので。 -- buyobuyon (2007-03-15 07:26:54)
  • ありがとうございますー!
    3時間で戻ってくると言いつつ、2時間over…。
    寝過ごしましたorz -- yastak (2007-03-15 12:29:30)
  • 私のページのところにmin-rt02.sをアセンブラに入力して
    できたコードファイル(new-code.txt)とアセンブリコード
    のテキストファイル(new-out.txt)をアップしました。
    new-out.txtとbuyobuyon氏のmin-rt02.binが一致
    したので、恐らく大丈夫だと思います。 -- はりー (2007-03-15 12:42:18)


2007.03.15 05:56

rs232cはコンパイルに失敗しています。
ピンが認識されていないみたいです。
拡張基盤をつないでいないからだと思います。
harry氏からの返事がきてからつなぐ気なので…。
(自分で通電テストはしないつもりです。回路よくわかってないので不安なのです。)

擬似USB作りました。
最初にバッファにデータを全部書き込んでおいて、
読み出し命令があったら順番に出していく、というもの。
書き込み命令は特になにもしない。(波形を観察すればいいので…)

sldを01のテキスト列に書き換えるプログラムとかってありますかねぇ。
1行に8文字(1byte分)が書かれている、感じで。
因みにbuyobuyonサブページのプログラムは、
yaccがなかったらしくコンパイルに失敗…。
MINGW対応yaccってあるんですかねぇ。yaccにMINGW対応も何もないんですか?

  • とりあえず、SLD(バイナリ)を読み取り、
    青と緑のグラデーションっぽい画像をppm形式で出力するプログラムができましたので、
    このページに載せます。 -- buyobuyon (2007-03-15 06:06:43)
  • 審判サーバをつけた状態で、sldppm.binを実機で動かしてみてください。
    sldデータを受け取り、そのデータをint値とfloat値に分けて
    SRAMに書き込み、審判サーバ側には適当なppm画像を送ります。
    SRAMの書き込まれる番地や内容は後で知らせます。 -- buyobuyon (2007-03-15 06:10:50)
  • あとyacc, lexに関しては、私はbisonとflexを使っています。 -- buyobuyon (2007-03-15 06:13:05)
  • なるほど…
    とりあえず手っ取り早くできそうなものを手動で変換しちゃいましたw
    結果が正しいか以前の問題だと思うので…。 -- yastak (2007-03-15 06:22:04)
  • ええと、一応、sldppm.binの実行結果(on シミュレータ, with pika.sld)を報告します。
    まず、

    MEM[0x00000ffd] : 0x00000011
    MEM[0x00000ffe] : 0x00000023

    ffd, ffeはメモリの番地(ワードアドレッシング)で、
    0x00000011, 0x00000023がその値です。
    これらの値はint値の個数とfloat値の個数に相当します。

    続いて、fff番地から100f番地まで、int値が続きます。

    MEM[0x00000fff] : 0x00000001
    MEM[0x00001000] : 0x00000001
    MEM[0x00001001] : 0x00000002
    MEM[0x00001002] : 0x00000000
    MEM[0x00001003] : 0x00000003
    MEM[0x00001004] : 0x00000001
    MEM[0x00001005] : 0x00000000
    MEM[0x00001006] : 0x00000000
    MEM[0x00001007] : 0xffffffff
    MEM[0x00001008] : 0x00000001
    MEM[0x00001009] : 0xffffffff
    MEM[0x0000100a] : 0xffffffff
    MEM[0x0000100b] : 0x00000063
    MEM[0x0000100c] : 0x00000000
    MEM[0x0000100d] : 0x00000001
    MEM[0x0000100e] : 0xffffffff
    MEM[0x0000100f] : 0xffffffff

    その後、しばらくとんで、float値が続きます。

    MEM[0x000013ff] : 0x00000000
    MEM[0x00001400] : 0x00000000
    MEM[0x00001401] : 0x00000000
    MEM[0x00001402] : 0x00000000
    MEM[0x00001403] : 0x41f00000
    MEM[0x00001404] : 0x00000000
    MEM[0x00001405] : 0x00000000
    MEM[0x00001406] : 0x437f0000
    MEM[0x00001407] : 0x00000000
    MEM[0x00001408] : 0x42c80000
    MEM[0x00001409] : 0x3f800000
    MEM[0x0000140a] : 0x42c80000
    MEM[0x0000140b] : 0x00000000
    MEM[0x0000140c] : 0xc1f00000
    MEM[0x0000140d] : 0x00000000
    MEM[0x0000140e] : 0x3f800000
    MEM[0x0000140f] : 0x3e4ccccd
    MEM[0x00001410] : 0x42800000
    MEM[0x00001411] : 0x00000000
    MEM[0x00001412] : 0x437f0000
    MEM[0x00001413] : 0x00000000
    MEM[0x00001414] : 0x00000000
    MEM[0x00001415] : 0x41f00000
    MEM[0x00001416] : 0x42200000
    MEM[0x00001417] : 0x41f00000
    MEM[0x00001418] : 0x00000000
    MEM[0x00001419] : 0x41200000
    MEM[0x0000141a] : 0x00000000
    MEM[0x0000141b] : 0x3f800000
    MEM[0x0000141c] : 0x3f800000
    MEM[0x0000141d] : 0x437f0000
    MEM[0x0000141e] : 0x437f0000
    MEM[0x0000141f] : 0x437f0000
    MEM[0x00001420] : 0x00000000
    MEM[0x00001421] : 0xffffffff

    一応、このデータをsldファイルの内容と照らし合わせたところ、矛盾はなさそうでした
    (あまりまじめに見ていないので、正しいとは言い切れないのですが…)。

    審判サーバ側にはout命令でppm形式(バイナリ形式)の画像が転送されるはずです。
    一応、はじめに0xaaを送るようになっています。 -- buyobuyon (2007-03-15 06:29:47)

2007.03.15 03:59

引き続きテスト中です。
そういえば、rs232cのコントローラが書きあがりました。
echoテスト用の回路と、PC側のドライバ(?)も書いたので
(PC側ドライバは、レイトレ用サーバをちょっと書き換えただけだけど)
テストしようと思います。
あ、また.ucf忘れてた。書きます。

CPUに乗せたカウンタが動いていません。
プログラムが動こうが動くまいが、CLKで数えているのだから
動くはずなのになぁ…。

  • 動きました。
    早すぎて見えていなかったか、何らかのバグがあったか、のようです。
    現在、のんびり動いています。 -- yastak (2007-03-15 04:10:15)
  • スタックとヒープはいつも同じところまで延びてきています。
    diffをとったわけではないですが、毎回同じような感じの値になっています。
    「どこか」で停止?しているようですね…。

    ・OUT命令が、echoにはたえられるが連続書き込みに耐えられない。
    ・その他の命令に何か不備が!?
    という可能性を考えています。
    ModelSim上で動かすことを考えるべきか…。
    眠くなってきた… -- yastak (2007-03-15 04:29:49)
  • out命令…、
    print_int関数で、遅延スロットにout命令を入れているのですが、
    もしかして問題あります?
    -- buyobuyon (2007-03-15 04:31:16)
  • ない…と思います。 -- yastak (2007-03-15 05:08:48)
  • う~ん、とりあえず、sldデータを受け取って、
    真っ黒画像を返すプログラムでも作ってみますか。
    必要なら、受け取ったデータをSRAMに書き込むことにして…。 -- buyobuyon (2007-03-15 05:23:02)
  • お願いしますー。SRAMへの書き込みもよろしくです。 -- yastak (2007-03-15 05:51:36)


2007.03.14

テスト中です。
とりあえず、審判サーバUSB版を動かしてみて、強制終了して
SRAMの中身を読み出したところ、スタックに値が書かれているっぽいので
動いてはいるようですが…。
これってどれくらい時間がかかるものなんですかねぇ。
動作していることが確認できないのが微妙です…。
このあいだカウンタつけたら動かなくなったしなぁ…。

  • 最新版のコンパイラで作成した実行ファイル
    min-rt01.binをこのページにあげておきました。
    pika.sld&新バージョンの実行ファイルで実行すると、
    シミュレータ上で10秒程度で終了します。 -- buyobuyon (2007-03-15 00:46:01)
  • ありがとうございます!
    現在実行中ですが、10秒のわりにはなかなか終わりません…。

    とりあえず、0xaaの受け取りは完了していて、
    データ送信も完了しているようですが…。 -- yastak (2007-03-15 01:25:50)
  • このページに途中で終了したときのスタックとヒープの値のファイルをUPしました。
    ご確認頂ければ幸いですー -- yastak (2007-03-15 01:35:41)
  • う~ん…、これだけ見てもよくわかりません…。
    一応、pika.sldで実行したときには、
    実行命令数は248457579命令、
    SPが最小になったときで0x000fff3e、
    HPが最大になったとき(終了時)で0x00013b1fと
    なるようなのですが。
    カウンタはやっぱり動きませんか? -- buyobuyon (2007-03-15 02:26:22)
  • カウンタテスト中です。乗せられそうな予感。
    SPは0x000fff80,HPは0x0000fef3でした。
    なんだか足りないですね…。 -- yastak (2007-03-15 03:33:39)

2007.03.13

divの仕様(@ 0<= ans < 10)を書き換えました。buyobuyon氏サンクス!
で、シリアルコントローラの概形ができあがりました。
ビッグエンディアンの場合、
送信ビット・受信ビットは「上(通常表記左側)から順」であってますよね?
頭がこんがらがってきたー…

  • あっていると思います、たぶん…。

    DIVの件、お疲れ様でした。
    一応、その仕様のDIVをシミュレータに組み込んで、
    min-rtを実行してみたところ、
    正常に動きましたので、今度こそ実機でも何とかなるかと…。 -- buyobuyon (2007-03-13 23:44:40)
  • ありがとうございます…。
    ビッグエンディアンとリトルエンディアンはあっている気がするのに
    考えるとぐにゃぐにゃしてくるのが憎らしいですw

    今後の予定は
    USBレイトレ → シリアルコントローラのせる → シリアルレイトレ
    という順番で進めようと思います。
    -- yastak (2007-03-13 23:52:51)
  • 拡張基盤を預かっています。私のいない間に必要になってはいけないので、
    鍵を開けたロッカーの中に入れておきます。一番下の段の奥側、620Wです。 -- tsuy (2007-03-14 22:43:33)


2007.03.12

out命令の動作を確認しました。
現時点でのCPUファイルをUPしておきます。(FPUも混入されています)
では、ご飯買いに行ってきますー!

  • とりあえず、div10は無くなりました。
    一応、"div r1, r2, r3"に関してもう一度仕様を確認したいのですが、

    1. r3が2のときには、r2/r3の小数点以下を切り捨てた値
    (r2が正でも負でも、絶対値が小さくなる方向へ丸める)が返される

    2. r2, r3が正で、r2/r3が0以上10未満なら、その値の小数点以下を切り捨てた値を返す

    この2つの条件は満たされるのですよね? -- buyobuyon (2007-03-13 08:57:26)
  • レイトレ実行可能ファイルraytrace.binをこのページにあげておきました。
    DIVの使用は/2か答えが0以上10未満になるもののみに限定し、
    また最初にout命令で外部デバイスに0xaaを送るようになっています。
    これで実行できると良いのですが…。 -- buyobuyon (2007-03-13 10:37:38)
  • 2.が、違ってr2/r3は0-9までの整数値である場合に正しい答えを返す、
    仕様にしていました…(すみません、勘違いですね…)
    上記のように仕様を変更してみます!
    -- yastak (2007-03-13 18:31:15)


2007.03.11

学校に行きそびれました。申し訳ないです。
outのテストは明日の午前中に行おうと思います。
rs232c、資料をちょっと読んでみたのですが、いろいろよくわからない…。
何とか間に合うよう頑張ります…

  • 一つ確認なのですが、JMPL, JMPRL命令で、
    リンクレジスタr127にPCの値が入るのは、
    遅延スロット実行前であってます? -- buyobuyon (2007-03-12 08:28:47)
  • あってますー。
    書き込んでから、遅延スロット部の実行に移ります! -- yastak (2007-03-12 11:12:51)
  • 了解です。さっきシミュレータのソースを見直している時に気になったもので。 -- buyobuyon (2007-03-12 11:51:08)

2007.03.09

CPUの命令ですが、使わないものは省いていこうと思うのですが、いかがでしょう?
バグの元は少ない方がいいので…。
ただいま、MUL,MULH,MULI,DIVはコメントアウト済みです。
LOAD,STOREもコメントアウトしました。

  • メモ:
    LOAD,STOREのコメントアウト、微妙かも。
    他の命令と共通動作まで消してないか確認すべし -- yastak (2007-03-10 00:36:03)
  • ファイルありがとうございます
    使わせていただきます☆ -- はりー (2007-03-10 13:01:31)
  • あ、ごめんなさい。
    MULとDIVは戻してください。
    print_intで使うようになりましたので。 -- buyobuyon (2007-03-10 13:08:23)
  • 了解ですー。
    -- yastak (2007-03-11 00:02:01)
  • DIV、入れてコンパイルしたところ、
    「/」の演算子は、オペランドが定数or被除数が2冪でないといけない、
    というエラーが生じてしまいました…
    対策案
    ・何とかする
    ・FDIV,FTOIで代替
    で、何とかする、方を検討中です… -- yastak (2007-03-11 01:17:21)
  • 実はよく見てみたところ、min-rt中でもDIV演算は使用されていました。
    ただ、min-rt中では割る数が常に2なので、コンパイラの仕様として
    割り算の引数に制限をかけ、内部でシフトに変換するというような
    応急処理を施すことは可能です。
    (あれ、でも被除数が負の時、割り算とシフトとで結果が違うから多少複雑か…)

    現在のprint_int内部でDIVを使う際には、割られる数・割る数はともに正で
    かつ割り算の結果は0~9のどれかとなります。
    といっても、あまり良い制限にはなりませんね…。
    いいかげんな実装なので、print_intを書き直すのは構いませんが、
    div10とか、多少制限はついても何らかの除算命令があるとうれしいです。 -- buyobuyon (2007-03-11 02:31:11)
  • A/2だとコンパイルが通って、
    A/10だと通りませんでした…。
    とりあえず、min-rtに対応はできそうですね…。

    print_intの結果が0~9であれば、
    愚直に乗算+比較で実装することができそうですね。
    とりあえずやってみますー。 -- yastak (2007-03-11 22:12:57)
  • とりあえず、2で割る割り算と、
    演算結果が0~9になる割り算には対応できるような実装になりました。(=コンパイルは通りました。)
    (18*18乗算器を13個使っていますが…大丈夫ですか?>tsuy氏)

    制限があれば、拡張していくことは可能っぽいので、
    その都度対応していく、ことにしたいのですが、それで大丈夫ですか? -- yastak (2007-03-11 22:23:37)

2007.03.09

昨日はすみませんでした…m(_ _)m
回路作成手伝えなかったかわりというわけでもないですが、
コントローラ頑張ろうと思います。

で、Fibが実機で動きました。
数え上げは40の動作を確認(40動けば他も動くだろう)
再帰は3,10,15,20で確認しました。

  • harryに約束していたバイナリへの変換ファイル、
    アップしたつもりでしてませんでした…。
    今あげましたのでご確認を。

    因みに、成功してもエラーがあります、と表示されます。 -- yastak (2007-03-09 12:47:40)
  • では、out命令はそのようにお願いします。
    in命令の方は今まで通り32bit読み込む方がこちらとしては都合が良いですが、
    もしoutに合わせて8bit読み込みにした方がハード的に都合が良ければそれでも構いませんので。 -- buyobuyon (2007-03-09 14:34:42)
  • いえ、inとoutは別物なので大丈夫です~。

    その後、inの動作は確認しました。
    が、PC側のドライバが何か変になっていて、
    outの命令の確認ができません…
    次回までに改善します~。今日はこの辺で…。 -- yastak (2007-03-09 14:41:54)


2007.03.06

結局火曜ですみません…。
コンパイルしたところ、謎のクロックのエラーが(Warning)生じていて、
動きません…。

  • 菅原さんに救われました。
    無事コンパイルが通ったので、次は木曜に… -- yastak (2007-03-07 00:55:39)
  • 周波数について、まずは25MHzという話でしたが、
    おそらく基盤が出来る頃までにはFPUを50MHzで
    動かせるようになるはずなので、いきなり50MHz
    でも大丈夫です。 -- tsuy (2007-03-08 22:53:41)
  • out命令のことなのですが、
    「指定されたレジスタの値の下位8bitを、指定されたデバイスに書き込む」
    というように仕様を変更することってできます?
    print_int関数を修正したら、out命令で送るデータは
    下位8bitしか意味を持たないようになってしまったもので…。 -- buyobuyon (2007-03-09 10:06:36)
  • それと、昨日の打ち合わせでシリアル回路について話し合って、
    TL16C550(シリアルコントローラ)は入力が多く、
    全ての入力について調べるのが大変で、配線も大変になるため、
    TL16C550を使用せず、FPGAの方で直接rs232cのプロトコルを扱って
    データをやりとりしてもらう、という方向で話が進んだのですが、いかがでしょうか。
    (正しい説明になっているか自信がない…、ハードウェアは苦手です…)
    直接rs232cのプロトコルを扱う分、ハードウェア係が多少大変になるとは
    思うのですが、一方で、プロトコルがわかっているなら得体の知れないICに
    頼るよりも直接やりとりした方がバグではまる可能性が低くて良いかなと
    いうのもありまして。
    配線も少なくて済んで都合が良いのですが、
    その方向性でrs232cのコントローラの作成をお願いできますか? -- buyobuyon (2007-03-09 10:55:34)
  • out命令の件はUSBについては可能です。
    rs232cは実装がこれからなのでそのようにします。

    rs232cのコントローラは、
    これから資料を読んで作成するのではっきりお返事できませんが、
    その方向で頑張ってみます。 -- yastak (2007-03-09 11:49:42)


2007.03.02

いよいよ実機のはずが、先日のバグが取れたつもりでとれていなかったので、
(原因をわかっていたはずだったのに、勘違いでした…)
それを解消するのに苦戦しました…。
結局、バブルが入るときのストールのタイミングが間違っていたと言う結論。
再帰Fib、3,10,15,20の動作を確認しました。
数え上げだと40とか。(前回と同じ)
再帰で20以上は根性が足りないのでやってません。(時間かかるので…)

で、肝心の実機は日曜の朝か月曜当たりの予定です。
(今日は疲れたので…orz)
もしかしたら明日来るかも?
例によって.ucfを書いていないので、それもやらなくちゃというところです。

  • ごめんなさい、懺悔いたします。

    現時点で使用していない命令が結構ありまして、
    まず、LOAD/STOREはもう一つオペランドをとる命令で代用してしまったので使っていません。
    それから、MUL/MULH/DIV/MULIは、使ってはいますが、min-rtをコンパイルしても出てこないので、省略可能です。
    他にも現時点で使っていない命令がいくつかありますが、
    それらはたぶんライブラリ作成時や最適化時に使うことになると思います。

    実装してもらった後で使わないということになってしまって申し訳ないです。

    もしこれらのうちどれかを消すと解決するような問題があれば、
    言ってください。 -- buyobuyon (2007-03-04 05:18:52)
  • そうだ、あと、IN, OUT命令で指定するポート番号は何番にします? -- buyobuyon (2007-03-04 06:08:11)
  • どれもたいした手間をかけていないので大丈夫です☆
    でも、使わない命令はコメントアウトした方が回路サイズ等で有利になるかもしれないですね…。

    ポート番号は、何でも構わないです~。
    USB->1、rs232c->0とかにしてみますか?
    (後者をまだ実装していないけど…都合の良い番号があればそれに変更してください)
    -- yastak (2007-03-04 23:24:44)
  • 了解です。
    こちらとしては、runtime.sにあるin, out命令の引数(4ヶ所)を変更すれば良いだけですので、いつでも変更はOKです。 -- buyobuyon (2007-03-07 00:38:11)

2007.03.01

ついに3月ですね…。
てか、拡張基盤どうしましょう…。
ハードウェアの方でもコントローラ書かなくちゃ(>_<)
本日テストしてきました。
いくつかバグがあったものをとり、
再帰Fibの2,10,15の動作に成功しました。
明日はいよいよ実機!

2007.02.26

buyobuyon氏のページにある再帰fibをシミュレータで動作させています。
(あ、今まで出てきたシミュレータはModelSimのことでした。
今名を上げたのはソフトウェア係さんの作るシミュレータの方です。
まぎらわしいことに気づきませんでしたm(_ _)mすみません。)

とりあえず10まで動きましたが、40に時間がかかりすぎです。
次に学校に行けるのは木曜日なので、木曜日にテストします。
テスト予定は、
ModelSim:再帰fib
実機:数え上げfib,再帰fib(ModelSim上で動いたら。)
です。

  • SPを1023に変えて行ったため、
    スタックのスペースが足りない疑惑やらなんやらのエラーで、
    結局40は無理でした。
    その後修正して、15はできました。 -- yastak (2007-02-26 21:42:59)
  • 24に成功しました。
    まぁ大丈夫でしょう、うん。
    スタックのスペースは50個くらいしかつかってなかったので、
    40もいけるのかもしれません。 -- yastak (2007-02-27 02:17:15)


2007.02.25

シミュレータ上で数え上げのfibが動きました。
(4,10,20,30,40)
次は再帰型です。harryアセンブラよろしく!
(あと数え上げを実機でもやらなくちゃ…。)

最後のバグは、自分で書いたアセンブリに混入されていましたorz

2007.02.23

そういえば、21日の進度報告を忘れていました。
SRAM初期化→CPU動作の流れは作れました。
fibを動かしていたのですが、プログラムカウンタの動きはいい感じなのに、
なぜか動作してなくて、どうやらALUに原因があることが発覚した、
というあたりで作業終了。

遅ればせながら、本日ALUの構造を書き換えました。
次に学校に行けるのが日曜になりそうなので、その時にテストします。

後、命令フェッチにミスがある感じがするので、
これから修正します~。

  • 日曜って試験日で入校禁止だったりしませんか? -- buyobuyon (2007-02-23 19:45:24)
  • 入構規制はとられるみたいだけど、
    事務室からのメールからすると、
    学生証あれば大丈夫だと思われます~。
    -- yastak (2007-02-23 20:51:38)
  • 命令フェッチは多分大丈夫なことが判明したので修正なし…。
    なんか、
    おかしい?→確認→おかしくない(+別のところがおかしいorz)
    っていうパターンが多い気がする…。 -- yastak (2007-02-23 20:54:27)


2007.02.21

あの、いまさらなんですけど、SRAMはエントリが1Mなので、
アドレスは(19 downto 0)の20bitです。
したがって、
「immは、上位7ビットがimm7、下位19ビットがimm19の符号つき整数」
(命令セットより)というときは、imm7の最下位ビット+imm19としています。
レジスタからアドレスを取るときは下位20bitをとっています。

…でも、符号付にするならもう1bit多くとるべき?
ジャンプの幅が、「disp19」のところは符号コミで19bitだったりするんだけど、
(因みに符号拡張して20bitにしています)
そんなに大ジャンプはしなくて良い、ってことで大丈夫ですかね…。

2007.02.20 part2

帰り道でタイミングの問題ではないことに気づいたので、
考え直す方向を改めまして。
SRAM擬似回路etc.を書き直しました。
また明日テストします!

2007.02.20

シミュレーションしてみました。
コンパイルに時間かかった(汗)
どうやらSRAM擬似回路か、シミュレーション用のテストベンチに問題があるらしく、
うまくいきませんでした…。
色々直しているうちにわけのわからないことになったので、
タイミングやらなにやら、考え直してみようと思います。
(ファイル操作はどうやら問題なかったようです。)

2007.02.18 again

シミュレーション回路書き終えました。(多分)
ファイル操作にやっぱりちょっと自信がないですが、
とりあえずやってみよう、という状態になったので、
2/19か2/20にやってみます。(結局週内には収まらなかったorz)
ここまでのCPUファイル群をUPします。
usbword.vhdは、作ろうと思って作らなかったごみファイルです。
(消すの忘れてましたm(_ _)m)

2007.02.18

ただ今IN命令(USB対応)を組み込み終えました。
外部デバイスはこれからrs232cの研究ですかね…。

シミュレータ、SRAM擬似回路の初期化を
ファイルからSRAM擬似回路へ内容書き込み(→CPU実行)
を考えていたのですが、
vhdlでのファイル操作が細やかに出来なくて微妙。
方針転換をすべきか否か…。

  • 連続命令間の制約、了解です。
    とりあえずは、STOREDと直後のLOAD/LOADD/LOADIの間に
    NOPを挟んでおけば良いですね。
    遅延スロット中のSTOREDも避けた方が良いか…。

    END命令は…、このまま停止状態になるので良いような気がします。 -- buyobuyon (2007-02-18 19:32:56)
  • Stored、よろしくお願いします。

    Endも了解しました☆ -- yastak (2007-02-18 20:36:25)

2007.02.18 コメント返信

皆様、返信遅くなってすみません。

☆buyobuyon氏
1.連続命令間の制約
(問題になるのは)連続する書き込みとかの話ですよね?
レジスタに関するものはないです。
現在命令の結果を書き込んでから次の命令の読み出しを行うので…。

メモリに関するものは、
読み出し→書き込み
読み出し→読み出し
書き込み→書き込み
に関しては制約なしで、

書き込み→読み出し
の連続になるとき、同一アドレスでない時と、
同一アドレスでも、書き込み命令がSTOREDでないなら大丈夫です。

同一アドレスで、STORED命令の直後だとおそらくまずいです。

SRAMの読み出し(アドレスを入れた2clock後にデータが出てくる)が、
「アドレスを入れたタイミングでのSRAMの内容」を読み出すときはまずくて、
「アドレスを入れた2clock後のSRAMの内容」を読み出すのなら大丈夫、
なのですが、SRAMのマニュアルからは
どちらなのかよくわかりませんでした…。
(読み込み不足かもしれないのでもちょっと探してみます)
でもフツウに考えたらまずそうだよね、というのがとりあえずの結論です。

遅れた割に判明しきらず申し訳ない…m(_ _)m

という感じです。

2.遅延スロットが入るのは、全てのジャンプ系命令です。
因みに、コードは
if 現在命令(機械語)の最上位2つ = "11" then
  次の次のPCは現在命令の結果による(分岐)
else
  次の次のPCは現在命令+1(通常)
end if;
というようになっております~。
因みに、ENDがきたら回路は停止状態になるようにしていることに気づきました。
ひょっとして、リセットがくる、と言う方が正しい動作ですかね?
レイトレだけ動けばそれで良いだろうという感じで作っていたので…。
リセット、にした方がいいですかね?

☆harry

ありがとう~。
OUTだけでO.K.です!

2007.02.15

初期化用回路、完成しました!
これでSRAMとUSBの通信に問題はないはずです。
USBを使ったSRAM操作をまとめたファイルをあげておきます。(sram0215.zip)
CPUのシミュレーション回路は、現在ちょこちょこ書き始めているところです。
(多分SRAMの初期化をする部分を書くのがちょっと手間)
今週中にはシミュレーション回路は完成して、シミュレーションができる予定。
目標はFibのシミュレーション上動作です…(すごい遅れだ汗)

  • 着々と進んでいるじゃないですか。

    ところで、どの命令の直後何命令が遅延スロットになるかと、
    またその他に連続する命令間の制約などがあれば、まとめておいていただけますか? -- buyobuyon (2007-02-15 20:12:35)
  • 遅延スロットは全て1つとして実装しています~。
    それ以上必要なとき(命令実行に時間がかかるとき)にはバブル挿入で対応しています。

    命令間の制約はあまり深く考えていませんでした汗
    整理してまとめておきますね。(土曜日までには!)

    -- yastak (2007-02-16 00:43:55)
  • あ、了解です。
    こちらもしばらくレジスタ割り付けの実装で手間取っていると思うので、
    まとめるのは時間のあるときで良いですよ。

    あともう一つ。
    初歩的な質問で申し訳ないのですが、遅延スロットが入るのは、全てのジャンプ系命令
    (BEQ, BNE, BGT, BGE, JMP, JMPL, JMPR, JMPRL, RET, END)
    の直後でしたっけ? -- buyobuyon (2007-02-16 01:00:39)
  • 修正部分はOUTだけでいいのかな?
    直しました☆
    また変更あったらどんどん言ってね -- harry (2007-02-17 13:50:16)
  • 返信は02.18の日記にてしますm(_ _)m -- yastak (2007-02-18 16:13:01)

2007.02.14

ところで、中間レポートって、出題されてますっけ?
出題予告はあったような気がしますが…。
具体情報って出てないです、よね?
(私の見落としかな汗)

  • 一月の中間発表を知らせるメールに出題予告がありますね
    具体的な情報は今のところメールにも掲示にもなかったかと思います -- tsuy (2007-02-15 02:00:16)
  • そうかぁ。やっぱり出てないっぽいんだね。
    ありがとう~! -- yastak (2007-02-15 13:17:08)

2007.02.12

皆さん元気ですか?
そういえば私は試験疲れなのか何なのか、土曜日に寝込んだのですが、
皆さんは体調大丈夫ですか?
とりあえず、初期化用回路テストを木曜日に行う予定です。
告知だけしておきます。

  • 同じく、倒れていました…。
    もう大丈夫なのですか?お大事に。 -- buyobuyon (2007-02-13 01:29:38)
  • 1日寝たら治りました♪
    buyobuyon氏もお大事に! -- yastak (2007-02-13 01:57:31)

2007.02.11

お久しぶりです。試験お疲れ様でした。
現在CPUに外部デバイスとの接続(てかUSB操作)を組み込もうとしているところです。
それに伴って、また命令セットに変更を要求しています。
本当にすみません。主に被害を受けるだろうharryさんには今度ケーキでもおごりましょうw

USBとの通信は1word単位になるんですけど、
それで問題ないですかね?
コンテストのサーバとの通信のreadmeに、
通信開始信号で、0xaa(1バイト)を送る、とかあったような気がしますが…。

外部デバイスの指定がほとんど必要ないと思うんで、
(USBorシリアル基盤)
即値部に「何バイト(1-4)通信する」という指定があるようにしても良いかと思うんですけど、
どうでしょう?

  • とりあえず、OUT命令だけ完成させました。
    IN命令の前に、初期化回路の完動を目指します。
    なぜかって、動作的に似ているからです。 -- yastak (2007-02-11 18:47:01)


2007.01.31

TOPレベルの回路を書きました。
って、接続関係書いただけだけど。
これから、シミュレーション用の回路を書いたりして、
シミュレーションします。

そういえばUSBを組み込むのを忘れていたことに気づきました。
それもやります。

2007.01.30

SRAMの回路、どうやらテスト回路にバグがあった模様です。
微妙に書き換えたテスト回路で行ったところ、
無事4Mの読み出しが出来ました。
初期化用回路はうまく動かなかったので、
失敗検討と書き直しを急ぎます。

2007.01.27

EXW書き終わりました…。
あとはトップレベルの回路を書いて、
(レイトレテスト用のUSB通信回路もかかなくちゃ?)
(FPUをのせれば)完成です。
FPUの前に動作テストをしようと思います。

というところで、そろそろテスト勉強に移ります。
SRAMのテストやらなにやら残っていますが、テスト後にやりますー。

ところでみなさん、シリアル通信回路の製作、どうしましょう?
そろそろ考え始めないとまずい、ですよね…。

  • あ゛…、存在自体すっかり忘れていました…。
    どうする…、というか何をすればよいか全くわかっていなかったり…。
    とりあえずテスト後…ですかね。 -- buyobuyon (2007-01-27 19:30:39)


2007.01.26 part2

IFDRがほぼ書き終わった感じです。
即値の符号拡張を考えるのに億劫な気持ちになっていますw
単純に肩が凝ったからです。休憩してみます。

  • 書き終わりました!
    が、終了状態のことを考えていないことに気づきました。 -- yastak (2007-01-27 01:06:29)
  • それくらい面倒がってちゃだめだよね!
    …追加しました。
    ぼちぼちEXWも書いていきます。 -- yastak (2007-01-27 01:11:46)
  • だいぶ完成が近づいてきていますね。
    コンパイラも頑張らないと…。 -- buyobuyon (2007-01-27 15:13:02)


2007.01.26

CPUを書く予定が、register fileでブロックRAMの呼び出しと
IFDR/EXWのアクセス競合とかで混乱していたら、
時間がいつのまにか過ぎてしまった…
めげずにちょっとでも書こうと思います。

2007.01.25

進捗報告したら、アドバイスをもらえたので、
今度テストします。
ついでにテスト回路にちょっと改変を加えた別物をつくったり。
SRAMを模倣する回路も作ってみました。(シミュレーション用)

ところで、SRAM操作が入る命令には時間がかかるけど(1clockじゃ終わらない)、
そのときにはパイプラインはバブル入れてストール、であってますよね?
って考えると、FPUに2clockとか要しても大丈夫だと思うのですが…。

2007.01.19

sramのファイルが大きすぎてupできませんでした…。
大きかったのは、sramから読んできたデータ(4MB)でした。
それをのぞいてupします。

そういえば、usbから4MのデータをSRAMに送り込むような
回路も必要だなぁと気づいたので、それとCPUと平行して作ります。
でもぼちぼちテスト勉強に移行するかも…

2007.01.18

こっそり木曜日の事情聴取を期待していたけど、ないようですね…。
メール送らなきゃ。

第二次SRAMテストしました。
どうやら通った見込みです。(50MHz)
何がいけなかったのか、いまいち定かでないですが、
致命的に間違っていたところもあったので、それが主原因?
ただ、4Kbyteを読むと、最後の1bitの値が変です。
(前と同じ値…)
アドレスを000...から、111...まで読んでいるのですが、
count upで読むとだめで、count downでよむと最後の1bitまで大丈夫…。
とりあえず、ここまでのファイルを固めてupします。

2007.01.16

下に書いた鯖落ちは、緊急メンテナンスだったようです。
SRAMの回路をちょっと書き直しました。
マイナーチェンジですが。
echo回路がまだかけておりません…。
でもまぁ、再テストしてみます。
多分明日はできないので、木曜日にやります。
あ、でも事情聴取あるんだっけ?

2007.01.14

一昨日はwikiがおちていたらしく、書き込めませんでしたが…。
金曜日にSRAMのテストをしました。
回路は動いているような気配を見せたのですが、
書き込み&読み込みが出来ていないようです…。

どこができていないのかなどは詳細にはわからないので、
とりあえず、クロック速度を落とす(金曜日は50MHzでやりました)、
別のテスト回路(多分echo)を書く、などの方法で再実験したいと思います…。


2007.01.11

あけましておめでとうございます。
CPUのサイクル整理(の詳細化)をやっとしました。
サイクル整理って言うか、ほぼコードの構想ですけど…。
その関係で命令セットの機械語部分をちょっと書き換えさせていただきました。
アセンブリ命令は変えていないので、被害はharryに集中するかと…ごめんなさい。

レジスタの値を読み出すときに、R2,R3の部分に書かれたアドレスを機械的に与えているので
読み出し対象のレジスタはR2,R3の部分に書いてもらった方が便利だからですー。

明日はSRAMのテストをします。
本当は今日の予定でしたが…睡眠不足で挫折しました。
SRAMテストが終ったら、タイミングチャートの確認をして(自分がSRAMの動作を勘違いしていないか)
IFDR,EXWの回路を書いて、とりあえずfibを動かすための準備に入ります。
予定より大分遅れてしまいました…。ちょっと焦って頑張ります。

今日はこのあと連続系のLU分解のレポートを今頃書いて、
余裕があったらIFDR,EXWをちょっと書き始めようかなぁと。
投機的実行wですが。分岐予測がはずれませんように。

2006.12.31 part2

ALUが書き終わりました。
今年中にfibも無理でした…。
年明けに急ピッチでテストなどしていく予定です…。
みなさん調子はどうですか?

  • ごめんなさい、全く進んでいない感じです。 -- buyobuyon (2006-12-31 23:45:30)
  • パイプライン化について。言われてみれば、確かにReadを前段に含めてしまった方が良さそうですね。 -- buyobuyon (2006-12-31 23:48:34)

これ以前の作業進行
yastak古