ぱたへね

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

s1_coreのリセット

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

リセット関係の信号について、topでの接続を図に整理しました。

リセットを完全に理解するためにはsparcの中まで追わないといけませんが、動作自体はveritakで簡単に確認出来ます。

中の回路では単純にカウンターを回し、リセット信号を生成しています。
最初にadbginit_o、cmp_arst_oがディアサートされ、次にcluster_cken_o、ctu_tst_pre_grst_o、続いてgdbginit_o、cmp_grst_o、最後にsys_reset_final_oがディアサートされます。

クロック信号(gclk_o)はゲーテッドクロックになっており、rst_ctrl.vの中でこのようにassignされています。cluster_cken_o、ctu_tst_pre_grst_oにあわせてクロック供給を開始しています。

assign gclk_o = (cycle_counter>`GCLK_CYCLES) & sys_clock_i;

シミュレータでは問題無く動きますが、FPGAではこの書き方はいろいろと問題があります。
少しFPGA向けに修正してみましょう。(続く)