S1coreの動作方法が分かってきたのだが、S1coreとOpenSPARC T1のコアは分離されているが、SPARCコアの部分は共通のものを利用しているので、使いようがあるはずだ。
S1coreの起動方法をトレースすると、OpenSPARC T1も動作させることが出来るに違いないと思い、S1Coreの動作方法について調査を行った。
S1coreは以下のような階層構成を取っている。
ここでsparc_0
と表記されているのがOpenSPARCのコア1つ分で、それを包んでいるのがs1_top_0
という階層になる。
ここでは、以下の外部ポートが制約されており、駆動しないようになっている。
- s1_top.v
/* * Continuous assignments */ assign const_cpuid = 4'h0; assign const_maskid = 8'h20; // sscan assign ctu_tck = 1'b0; assign ctu_sscan_se = 1'b0; assign ctu_sscan_snap = 1'b0; assign ctu_sscan_tid = 4'h1; // bist assign ctu_tst_mbist_enable = 1'b0; // efuse assign efc_spc_fuse_clk1 = 1'b0; // Activity assign efc_spc_fuse_clk2 = 1'b0; // Activity assign efc_spc_ifuse_ashift = 1'b0; assign efc_spc_ifuse_dshift = 1'b0; assign efc_spc_ifuse_data = 1'b0; // Activity assign efc_spc_dfuse_ashift = 1'b0; assign efc_spc_dfuse_dshift = 1'b0; assign efc_spc_dfuse_data = 1'b0; // Activity // scan and macro test assign ctu_tst_macrotest = 1'b0; assign ctu_tst_scan_disable = 1'b0; assign ctu_tst_short_chain = 1'b0; assign global_shift_enable = 1'b0; assign ctu_tst_scanmode = 1'b0; assign spc_scanin0 = 1'b0; assign spc_scanin1 = 1'b0;
これをOpenSPARC側にも移植すれば良いのではないか?ということで移植して際シミュレーションしてみたのだが、どうやらそれだけではSPCパケットはまだ発行されない。
まだリセット解除に問題があるようだ。