ぱたへね

はてなダイアリーはrustの色分けができないのでこっちに来た

sparc

RISCマシーンのデータパス

LispマシーンCADRのデータパスを調べているうちに、他のプロセッサのデータパスも整理したくなったので、まとめてみました。データパス(datapath)とは、プロセッサに限らず、デジタル回路のデータ処理を図にするときに、どこからデータが入ってきて、どこに…

Cygwinで動くsparc64クロス環境

cygwinで64bit SPARCのクロス環境を作りました。バイナリ一式はこちらです。 sparc64-elf_2009_2_26.zip ファイルを展開して、/usr/local/sparc64/binに実行ファイルが来るようにコピーし、/usr/local/sparc64/binにパスを通せばOKです。 クロス環境構築時の…

OpenSPARC用ROMファイルを逆アセする方法

Twitterでヘッダーファイルのないテキスト領域の逆アセ方法が分からないとつぶやいたところ、バイナリアンな人達からアドバイスをもらいました。ありがとうございます。http://twitter.com/yusk_/status/1240773710 http://shinh.skr.jp/m/?date=20090223 ob…

OpenSPARCのROM読み出し

WISHBONE I/F s1_coreはテストベンチのトップレベルで、WISHBONEのBusを経由してROMに接続されています。 WISHBONEはOpenCores.orgで推奨されているfreeに使用できるバスの規格です。http://www.opencores.org/projects.cgi/web/wishbone/wishbones1_coreで…

sparc_ifu その2

sparc_ifuの続きです。リセット時のPCの値を決めているtlu_ifu_trappc_w2を追いました。 tlu_ifu_trappc_w2 tlu_ifu_trappc_w2は、tlu(Trap logic unit)の中のtlu_misctl.vにあります。 同じ要領で信号を追っていきます。 dff_ny #(49) dff_trap_pc_w2 ( .di…

sparc_ifu

リセット時のPCの動きを調べるため、ifu(Instruction fetch unit)の中を追って見ました。 パイプラインの最初のフェッチ時のPCはt0pc_fなので、そこから追います。 t0pc_f への代入 sparc_ifu_fdp.vから // F stage thread PC regs; use low power thr flop …

s1_coreのリセットとクロック 続き

s1_coreのリセットの続きです。 sparc core内のリセットとクロック リセット回路とクロックをもう一階層下って整理しました。gclk、cluster_cken、cmp_grst_l、cmp_grst_lが、bw_clk_cl_sparc_cmpに入って、rclkとspc_grst_lを作っています。回路のブロック…

s1_coreのクロックを最適化

FPGAプロトタイピングにおけるゲーテッドクロックの扱い FPGAでプロトタイピングをするときは、クロックをFPGA向けに修正するという作業が入ります。具体的にはASIC向けPLLを、FPGA内蔵PLLに置き換えます。FPGAが複数にまたがりクロック系統が複雑な場合は、…

s1_coreのリセット

s1はオリジナルのT1と違いシンプルなリセット回路が使われています。 hdl\rtl\s1_top\の中にあるrst_ctrl.vがverilogソースです。rst_ctrlでは各ブロックへのリセット信号と、クロックの生成を行っています。リセット関係の信号について、topでの接続を図に…

FPGAプロトのベンチマーク

ベンチマークとは FPGAプロトタイピングを行う場合、一番最初に「ベンチマークを取る」という作業をします。「ベンチマーク」という表現は、一緒に仕事をした人しか使っていなかったので、一般的な言葉かどうかは分かりません。ベンチマークだけでなく、他の…

OpenSparc Code Ijiri

VeritakのたっくさんによるOpenSparcをいじるための素晴らしい環境の紹介です。 Code Ijiriとは まずはshinhさんの所を読んでください。 http://d.hatena.ne.jp/shinichiro_h/20081130#1228038576微妙に動いていないのが丁度良い難易度だと思います。 Verita…

7章 OpenSPARC T1 の Memory Hierarchy

OpenSPARC Internals からOpenSparc T1のメモリ階層をまとめてみました。パタヘネでは、第7章で出てくる話です。図の一番下にSPARCのcoreがあります。一つのT1チップには、8個のcoreが搭載されています。各coreについて、Iキャッシュが16Kバイト、Dキャッシ…

関数呼び出しまとめ

5つのプロセッサで、関数呼び出しの方法をまとめました。 MIPS sparc sh ARM x86 レジスタ渡し可能な引数 4個まで 6個まで 4個まで 4個まで スタックを使用 戻り先の格納先 register register stack register stack 関数の呼出し jal call jsr bl call 関数…

関数呼び出しsparc編

register window Sparcプロセッサは、register windowと呼ばれる一風変わったアーキテクチャを採用しています。プロセッサ自体は、64〜528個の汎用レジスタを持っており、ソフトウェアからは32個のレジスタにアクセスできます。32個のうち24個は汎用レジスタ…

2章 Ex2.4 即値の減算の比較

Exercise 2.4の発展で、他のCPUも調べてみました。とは言っても各CPUのデータシートを追っていくのは大変ので、Cソースをコンパイルして必要なところを抜き出しています。やっていることは、a = b + 10, a = b - 50; で、10の加算と50の減算です。フラグ関係…

2章 2.9 32bit即値のロード

教科書のSection 2.9に出てくる32bit即値の話。RISCプロセッサというのは、命令長が固定な為、命令長が32bitであれば、32bitの即値をそのまま入れることはできません。クロスアセンブラの環境ができたので、早速各CPUの比較をしてみましょう。各コマンドは本…

sparcのクロスコンパイル環境を用意する。

勉強用にcygwinで動くsparc向けのクロスコンパイル環境を作りました。 インストールは途中でエラー終了してしまいましたが、勉強には十分なので整理してみました。実際の開発に耐えられる物ではないので、注意してください。 gmp-4.1のインストール GCCの4.3…