Tchスタッフの奮闘記

   For STEP 一歩先の自分へ


 

WELLCOME

 株式会社テクニカとは>>

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開発は、テクニカにお任せ下さい!!
にほんブログ村 海外生活ブログ ベトナム情報へブログランキング・にほんブログ村へ


Nios2を試してみる4

2010年11月19日 | FPGAって美味しい?
前回は、Nios2のC言語ソースプログラムを一から
記述して、7セグLEDをぐるぐるさせることが出来た
ところで終了してました。

前回のプログラムを見直して一つ修正というか改善
したい部分があるみたい。
前回は、7セグLEDの各桁毎にFor文を重ねていってましたが、
そもそもFor文を何段も重ねるのは、良くないみたいです。
で、ちょっとFor文を見直してみました。


これでも、厳密に言えば各桁を出力するときに計算が入るので、
タイミングずれるんだろうなー。でも、明らかに簡潔、見やすい。
初心者的な視点でいうと、"if (++i > 9999){"の部分がなんとなく
気持ち悪い。
"++i; //(i = i + 1;)
if (i > 9999){"
って感じにしたい。"++i"っていうのもなんとなく慣れそうにない・・・
こういう記述ってVerilogHDLにもあったっけ??

Nios2プログラミングは、この辺にしてまた、FPGAプログラミングに
戻そうかなと・・・・
Nios2では、なんとなく意識せずに使用できているSDRAMですが、FPGAで
回路を構成してアクセスとなると、結構大変そう。
その辺をやってみようかなと考えていたりします。

「SDRAMの使い方」 このあたりの資料が参考になりそうです。

では、また次回。




基板設計・FPGA開発は、テクニカにお任せ下さい!!


にほんブログ村 海外生活ブログ ベトナム情報へブログランキング・にほんブログ村へ