http://www.play21.jp/board/formz.cgi?ac ... 8476#48364
上記で少し話した擬似プロセッサですが、とりあえずある程度のコードが書けたのでアップロードしておきます(テストはまだ不十分です)。
ドキュメント(というよりたぶんスライド)はこれからですが、たぶん着手は3月後半になりそうです。
今回はC++のクラスを使って実装しています。
レジスタはbool型の配列としてビット単位で表現しており、加算は半加算器・全加算器のレベルから作り上げています。
シングルサイクルデータパスなので作りとしては簡単ですが、果たしてこのままで理解してもらえるのか、もっと簡略化しないといけないのか、落としどころをこれから探ることにします。
ところで、擬似プロセッサという名前はちょっと変で、本当は仮想プロセッサのほうがふさわしいのですが、別のものを想像しがちなのであえてこう呼んでいます。
【雑談】擬似プロセッサのプログラム
Re:【雑談】擬似プロセッサのプログラム
参考にします。
現在プロセッサのアーキテクチャを勉強中なので、コレでどんな機能を実装するか考えて
SuperHプロセッサのアーキテクチャ
http://ssl.ohmsha.co.jp/cgi-bin/menu.cg ... 74-20260-7
出来るところまでやってみてからたかぎさんのものを読ませていただきます。
きじねこで紹介されてる擬似プロセッサPP0906はなるべく実装例を見ないで書きましたが、とてもわかりやすく簡単でよかったです!これならC言語を習ったばっかりの演習でも大丈夫ですね。
例外をどう表現するかは見なきゃわからなかったですけど。
本当はテキストファイルからCASLⅡの命令を読み込んで動かしたかったんですけど、ニーモニックを変換するのが面倒だから諦めました^^;
現在プロセッサのアーキテクチャを勉強中なので、コレでどんな機能を実装するか考えて
SuperHプロセッサのアーキテクチャ
http://ssl.ohmsha.co.jp/cgi-bin/menu.cg ... 74-20260-7
出来るところまでやってみてからたかぎさんのものを読ませていただきます。
きじねこで紹介されてる擬似プロセッサPP0906はなるべく実装例を見ないで書きましたが、とてもわかりやすく簡単でよかったです!これならC言語を習ったばっかりの演習でも大丈夫ですね。
例外をどう表現するかは見なきゃわからなかったですけど。
本当はテキストファイルからCASLⅡの命令を読み込んで動かしたかったんですけど、ニーモニックを変換するのが面倒だから諦めました^^;
Re:【雑談】擬似プロセッサのプログラム
> SuperHプロセッサのアーキテクチャ
SHはイミディエイト値をPC相対で指定するなど、ちょっとわかりにくくなっています。
慣れれば理解は問題ないでしょうが、アセンブリのコードを読みにくいのは確かですね。
> これならC言語を習ったばっかりの演習でも大丈夫ですね。
ポインタさえわかることを前提にしていませんからね。
逆に、自分で作ってみればポインタが何なのか、手にとるようにわかるはずです。
> 例外をどう表現するかは見なきゃわからなかったですけど。
今回のものはIRQも4本用意しましたし、それぞれマスクもできます。
さらにリセットやNMIもあります。
さすがに、キャッシュやパイプラインやスーパースカラは盛り込んでいませんが、今回のものを理解できれば、どんなCPUにでも応用が効くと思います。
SHはイミディエイト値をPC相対で指定するなど、ちょっとわかりにくくなっています。
慣れれば理解は問題ないでしょうが、アセンブリのコードを読みにくいのは確かですね。
> これならC言語を習ったばっかりの演習でも大丈夫ですね。
ポインタさえわかることを前提にしていませんからね。
逆に、自分で作ってみればポインタが何なのか、手にとるようにわかるはずです。
> 例外をどう表現するかは見なきゃわからなかったですけど。
今回のものはIRQも4本用意しましたし、それぞれマスクもできます。
さらにリセットやNMIもあります。
さすがに、キャッシュやパイプラインやスーパースカラは盛り込んでいませんが、今回のものを理解できれば、どんなCPUにでも応用が効くと思います。