Tchスタッフの奮闘記

   For STEP 一歩先の自分へ


 

SDRAMコントローラ(1)

2010年11月19日 | FPGAって美味しい?

今となっては、古いメモリー規格なんでしょうかねぇ
SDRAMのコントローラを FPGAで構築してみたいと思います。

今までNios2でも使用してきたDE1ボードをターゲットにして話すすめます。
と、言ってもいきなりボード上でデバッグするわけにも行かないので、
最初はシミュレータで記述したロジックがあってるかなーって確認しながら進めて行きたいと。。。

シミュレータは、ModelSIM AEとかでもいいんだろうけど、Veritakをなぜか所有しているのでこちらを使用していきます。

MegaWizerdで生成したPLLを使用するとVeritakのシミュレータがおかしな動き(時間単位がfsになっちゃう)になるので、
とりあえずPLLは使用しないことに。

今回は、とりあえず初期化の部分を記述してシミュレーションしてみた。

メインとなるステートマシーンの部分はたぶんこんな感じになるんだろうか??

case (r_main_status)
   p_main_poweron_rst : begin
                                     
r_main_status <= p_main_200us_wait ;
                                 
end

   p_main_200us_wait   : begin
                                      if (r_200us_end) begin
                                         r_main_status <= p_main_pall ;
                                     
end
                                      else begin
                                         r_main_status <= p_main_200us_wait ;
                                      end
                                   end
    
   p_main_pall              : begin
                                       r_main_status <= p_main_trp ;
                                    end
    
   
p_main_trp              : begin
                                      if (r_trp_end) begin
                                         r_main_status <= p_main_autoref8 ;
                                      end
                                      else begin
                                         r_main_status <= p_main_trp ;
                                      end
                                   end
 
  
p_main_autoref8        : begin
                                       if (r_autoref8_end) begin
                                           r_main_status <= p_main_trc ;
                                       end
                                       else begin
                                           r_main_status <= p_main_autoref8 ;
                                        end
                                     end
 
   p_main_trc               : begin
                                     if (r_trc_end) begin
                                        r_main_status <= p_main_mrs ;
                                     end
                                     else begin
                                        r_main_status <= p_main_trc ;
                                     end
                                   end
 
   p_main_mrs              : begin
                                     r_main_status <= p_main_tmrd ;
                                  end
 
   p_main_tmrd            : begin
                                    if (r_tmrd_end) begin
                                       r_main_status <= p_main_idle ;
                                    end
                                    else begin
                                       r_main_status <= p_main_tmrd ;
                                    end
                                  end

   p_main_idle             : begin
                                    r_main_status <= p_main_idle ;
                                 end
endcase

シミュレーションするとこんな感じになった。おおむね予定通り?


次回は、ライト・リードに挑戦??
では、今回はこの辺で。。。



基板設計・FPGA開発は、テクニカにお任せ下さい!!
にほんブログ村 海外生活ブログ ベトナム情報へブログランキング・にほんブログ村へ



最新の画像もっと見る