使いながら覚える!CPLD Part 1 ~第2部第4章~
トランジスタ技術2008年12月号とMAX II Micro Kitを実際に使ってCPLDとVerilog HDLを習得していこうという企画です。
ことの始まりは
日記『CPLD始めます! 02月20日 』からです。
『使いながら覚える! CPLD』の最終ゴールはMAX IIとVerilog HDLの習得です。
トラ技2008年12月号の特集にしたがって進めて行きます。
注意! 普通の会社員ですので仕事の都合によって、間が開いたり場合によってはやむを得ず中断する場合があります。温かい目で見守ってください^^;
さてさてでは早速本題に。
第2部第3章までは読めばいいだけのないようですのでここでは割愛します。
今回は第2部第4章を実際にやってみます。
第4章の流れは以下の通り
1.ブロック図を確認する。
2.PICテストプログラムをコーディングする
3.PICテストプログラムのビルド
4.MIFの作成
5.FlashMemモジュールの作成
6.自前フラッシュモジュール(ブロック図と同じもの)の作成
この章からいきなりMAX IIとQuartus IIそしてVerilogの世界へどっぷりと入します。
初心者の私は4と6に嵌りました(汗
4と6はかなり説明が省略されている感じですので、じっくり読んでその意味をかみ締めないとはまってしまいます。
4についてはMPLABとQuartus II の仕様の違いのため致し方ないですが、MPLAB出力のHEXファイルをQuartus IIへ簡単に読み込ませることが出来ないらしいです。
記事中ではLstファイルをMIFへ手修正するとありますが、実際やろうとしてあきらめました。
というのも分岐の絶対アドレスはLstファイル中では??となっているためMIFにするためには絶対アドレスを確認して手打ちしなければいけないからです。
とりあえずは、トラ技のDLサービス(http://toragi.cqpub.co.jp/tabid/128/Default.aspx )から落としたMIFを使用することにしました。
また実際にQuartus II 8.1でHEXファイルを読んでMIFを読んだときとFlashMem.vの中身を見ましたが確かにHEXファイルの場合は読み込めていないようでした。
今回の目的はHEXファイルの読み込みではないので、今後必要時に対応できればと思います。
とりあえず今回は参考リンクを残す程度にして、時間のあるときにじっくり考えたいと思います。
http://plaza.rakuten.co.jp/pressgreenbutton/diary/200708020000/
http://www.neo-tech-lab.com/QuartusII.htm
http://www.pastelmagic.com/tips/hexform/hexform.html
http://www40.atwiki.jp/system-ed/pages/14.html
http://www2.neweb.ne.jp/wc/pastelmagic/hexform.htm
続いて6について
6は『製作したモジュールをリスト3に示します』という説明だけで自前フラッシュモジュールのソースが記載されているだけで、初心者の私にとっては少々というかかなり戸惑いました。
まぁとりあえずこれを書けということなんでしょうが^^;
Verilogソースコードの記述の仕方は関連Webサイトや書籍を参考にして解読したいと思います。
参考までにVerilogの構文で簡単なところだけ用語解説しておきます。
(トランジスタ技術SPECIAL 改訂版わkるVerilog HDL入門 木村真也著 を参考にしました)
・コメントの記述 //以降 もしくは/* */の間 (C/C++と同じですね)
・モジュールの定義 modele endmoduleで定義
・module構文
module モジュール名( ポート・リスト);
endmodule
・入出力ピン定義 input output
・内部信号名 wire (ローカル信号) reg (レジスタ型信号)
符号ありの場合 reg signed [7:0] bus;
・バス信号
input [7:0] i_bus;
・組み合わせ回路機能の定義 assign文
assign文で使用できる式
算術演算> + - * / % **(べき乗)
関係演算> < <= > >=
等号> == !=
シフト演算> << >> <<<(算術左シフト) >>>(算術右シフト)
論理演算> ! && ||
ビット演算> ~(NOT) &(AND) |(OR) ^(EXOR) ~^(EXNOR)
リダクション演算> &(AND) ~&(NND) |(OR) ~|(NOR) ^(EXOR) ~^(EXNOR)
そのほか> ?:(条件式) { }(連結演算)
数の表現
1'b0 ・・・ 1ビット2進数で0
4'b1100 ・・・ 4ビット2進数で1100
4'sb1100 ・・・ 4ビット2進数で1100(符合付き扱い)
8'bZZZZ_ZZZ ・・・ 8ビット2進数でハイ・インピーダンス
4'bXXXX ・・・ 4ビット不定値
16'h12AB ・・・ 16ビット16進数で12AB
123 ・・・ 32ビット10進数で123
・always@
記憶素子を持つモジュール(フリップフロップ)などの記述
posedge クロック信号のポジティブエッジで動作
・if文
else省略は非推奨
if ( 式 )
ステートメント;
else bigin;
ステートメント;
end
他にも構文はありますが、とりあえずこれで128ページのリスト3を読むことが出来そうです。
今日はこのくらいまで。
NANDやNOR演算子はPLDならではですね^^
Quartus IIの場合Verilogソースからブロック図をRTL Viewerといので見れるみたいなんですが、まだ使い方がよくわかっていないのでどうやってみるかが分かりません。
次回までの宿題ですね。
それではまた次回!