ひさびさのCPLD
今日は久しぶりにCPLD(CoolRunner2)の論理合成をしました。
デュアルコアのCPUだと、60秒くらいしかかかりません。
あっという間です。速いっていいですね~
最近はよくVirtexをいじっているので、CPLDの論理合成時間が一瞬に感じられます。
FPGAと違ってCPLDは積和形式なので、たくさんの信号を見て出力を決定するロジックが気兼ねなく作れます。
FPGAの場合だと、十分に巨大なFPGAを使っていても、LUTのつながり方が・・・とかセコいことが頭の中に浮かんできてしまうのですが、その点、CPLDなら安心して書けます。
今日作ったのはAnalogDevicesのAD53xxという12bit/8chDAコンバータの値をセットするロジックです。
DACにはシリアルでデータを与えます。DACの中には8個の出力値レジスタと、いくつかのコントロールレジスタがあります。1回のデータ書き込みは、データレジスタまたはコントロールレジスタに対して行われ、16個のクロックとSYNC信号で行います。
こういう論理回路設計は最初に絵を描くのが大事です。
まずはじめにExcelでこんなタイミングチャートを書きます。
つまり、周期40で回るカウンタを作って、そのカウント値に応じて制御信号が動きます。
さらに、送信するデータを変えながら9回回すカウンタを上位に作ります。8チャネル分のデータとコントロールレジスタ1個で、9回です。何の変哲もない回路です。
さて、CoolRunner2の書き込みもMITOUJTAGでやりたいところなのですが、残念ながらMITOUJTAGはまだCoolRunner2には対応していません。なので、SVFファイルを経由させる必要があります。
最初、iMPACTでSVFファイルを生成していたのですが、GUIの操作性のため3回目で嫌になりました。
なのでiMPACTのバッチモードを使うことにしました。
iMPACTをGUIモードで普通に作業をしていると、いつのまにか_impact.cmdというファイルが作られています。実は、このファイルはiMPACTに実行させた作業が、コマンドとして書かれたものです。
このファイルを使えば、iMPACTのGUI画面を触らなくてよくなるのです!!
ファイルの内容を適当に編集して保存し、コマンドラインから
impact -batch hoge.cmd
のようにして実行すると、GUI画面を見ずに作業ができます。
JEDファイルをSVFファイルに変換するための記述は次のようにします。
------------------------ hoge.cmd ------------------------
setMode -bs
setCable -port svf -file "hoge_cpld.svf"
addDevice -p 1 -file "hoge.jed"
Program -p 1 -e -v -defaultVersion 0
quit
------------------------------------------------
最初のsetMode -bsの記述は、ISEのバージョンで若干異なるようです。
昔はsetMode -bsfileだったのですが、ISE9.2では-bsになっていました。
ISEのバージョン間で若干の違いはあるものの、だいたいこのような感じのコマンドを記述しておけば、GUI画面に触ることなくSVFファイルが生成できます。
このSVFファイルをMITOUJTAGで再生すると、CoolRunner2に書き込めます。
ところでCPLDは、中にRAMがないのでデバッグにChipScopeとか使えません。
今回のCPLDは、シリアルDAC操作なので、動作速度はいくら落としても問題ないアプリケーションです。
クロックを十分に落とすことでバウンダリスキャンで端子の状態が読めるようになりました。
本当は10μ秒くらいの間に起こる現象を、10秒くらいかけてサンプリングしています。
MITOUJTAGのCoolRunner2へのネイティブ対応は、今まで何度か挑戦してみたものの挫折してきた経緯があります。ですが、やはり直接書き込めると便利なので、5月中にまた挑戦してみます。だめなら、またあきらめます。
| 固定リンク
コメント