今となっては、古いメモリー規格なんでしょうかねぇ
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
シミュレーションするとこんな感じになった。おおむね予定通り?
次回は、ライト・リードに挑戦??
では、今回はこの辺で。。。
前回は、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開発は、テクニカにお任せ下さい!!
記述して、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開発は、テクニカにお任せ下さい!!