diaryこの広告は、90日以上更新していないブログに表示しています。リターンアドレス)に「PC+4」を格納しつつ、即値で与えられたアドレスにPCを切り替える。selectorを拡張する実装が多い。方(31番のレジスタを指定する、5bitアドレスの方)は同じように実装している。「PC+4」はフォワーディングの方を絡めて実装している。値「8」をフォワードALUに計算させた結果をレジスタファイルに書き込み(MemToRegはmux2のまま拡張なし)という感じで実装しているようだ。Consoleあとは適当にデータを読み書きすればよい。Panelを使うここから落とすだけ。ようなテンプレートデザインを使用すると、DRAMピンが露出している。UFMへのrwは可能っぽいが、CPUから直接は難しい?素直にNiosを使おう。8MB)とかにkernelmemfsを転送bootcode(カーネル展開コード)をROM(といいつつ実態は回路にする。fileを指定してそっちを使っても良さそう)に直接書き込んでおく。リセットしたらここから命令フェッチを始める。物理メモリへ再配置する。ELFヘッダのパースkernelmemfs、こいつをSDRAMにそもそもそのまま配置できるのか?割と余裕でできた。ゆずさん研究所xv6のfs.imgはルートファイルシステムkernelmemfsでビルドする場合、出力ファイルにfs.imgがくっついて完成するイメージ。気にせずELFヘッダに沿ってメモリ展開すれば良さそう。(8253/8254)説明http://softwaretechnique.jp/OS_Development/kernel_development04.html実装例https://github.com/AssemSadek/Intel-8254※GAIAでは自前のtimerを実装しており、kernelの機能は使ってない。architectureこれによってPICのIRR->ISRへの切替が行われるようになる。GitHub非常に分かりやすい。使用しないフラグもあるので、その辺は自分で作る時は排除しても良さそう。このリポジトリではCPUのInt(0)をUART用、Int(4:1)をSwitch用に使用している(PICは使っていない。この実装では割り込みはIDステージで検知する。stall中はReadyしない。ここもクロック立ち上がり時に判定、つまりIPに代入した次のクロックでここへ入ってくる。wireをassertする。それをCP0がInputとして受取り、検知する。使用していないようなので無視して良いだろう。上記CP0クラスに追加する必要あり。プログラム側でディスク読み取って、物理メモリに展開する際のdstアドレス。これはリンカスクリプトの設定と一致させればよい。自作する際はリセットベクタ付近に、bootasm.S(MIPSならレジスタ初期化とbootmain()へのjumpくらいしかやらなくてよい。)bootmain.c(まず、ディスクからカーネル本体のELFヘッダを読み取り、それに従って本体を物理メモリ上に順次展開していく)の双方を含むコードを配置しておけば良い。ブートローダ自体はコンフィギュレーションROM等に配置できそうだが、数百KBはある、カーネル本体(ELFイメージ)をどうやってFPGAに転送するのか要調査。entry.Sに定義されている。uartxv6プロセッサ側とポートを合わせなきゃいけないものと、kernel(ソフト側)で好き勝手に決めればいいものの境界線を探っている。0xb4000000;これはなぜこのアドレスなのかわからない。(kseg1の先頭)となる。i/OCPUで、「一体どのハードウェアからinterruptがきたのか」をどうやって判別するのか調べている。I/Oの理解もきちんと出来ていないので。「こっからここまではデバイス用I/Oメモリ!」って決めるのは誰?CPUなのかkernelなのか、はたまたデバイスなのか。decoderという回路)で制御しているっぽい。CPUが出力する物理アドレスを見て、それが特定のアドレス(I/Oにマップされている)の場合、向き先をデバイスに向ける。CPUに内蔵されているデバイスであれば、ボードが違っても同じアドレスに見えるはずだよね。デバイスを外付けした場合は、ボードの設計によるんだ。この場合は、ボードの仕様書にメモリマップが書かれているはずだよ。I/Oポートベース(qemuだとPhys0x1400_0000)もハードウェアで好きに設定してよい(xv6-mipsだと)ベースアドレスからのオフセットで、各周辺デバイスへのメモリマップを行う。しているのもPC/AT互換機のボード設定であり、MIPSおれおれボードで必ずしもこのアドレスに設定する必要はない。addressを決め打ちする(0x8000_0180)。例外ベクタは使用しない。いうのが読み出したいbyte分繰り返されることになり、その間CPUは他の仕事をできない。Controller)⇔RAM間で直接データ転送できるようにするのがDMAである。Controllerは回路であり、いわゆるマザボ等のハードウェア側で対応しなければ使用できない。WriteData[32]に分かれていたりする。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。