スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

テスラーのCPLD入門

自作回路にさせたい動作を考え、論理を整理し、回路図を書き出す。そのとき、使用する論理ゲートの数が増えるとICをどう配置しても配線が収まらなくなってくる。特にフリップフロップなどは一つのゲートへの配線が何本も出るのでジャンパー祭りかスパゲッティになる他ない。そういうとき、自分の好きなように中身をつなぎ変えられるロジックICがあればいいのになぁと誰しも一度は考えたことがあるだろう。
マイコンを条件分岐だけで回し続けることもできるだろうが、それではクロックの制約によって時間が離散的になってしまい、周波数の高い信号を扱うにはあまり向かない。
では何を使えばよいのか。秋月で110円で売られているアレを使えばよい。

cpld.png

プログラマブルなロジック!!これぞまさに求めていたものと言わんばかりの名前!しかも安い!110円!
これなら買って放置しても損にはならん、ってことで買ってみた(数か月前に)。

面実装パッケージなのでユニ基板党員は適宜変換基板を買わねばならない。変換基板とピンヘッダによってCPLD一つあたりのコストは300円弱まで上がってしまう。あれ、意外とそこまで安くない・・・??
秋月の変換基板はピンヘッダが四角形を描く配置で使いにくそうなので当方はaitendoの変換基板を使うことにした。
IMG_0853.jpg

・・・当然こんだけじゃ何もできない。

PLDの本質はマイコンとかなり違うといえど、やはり開発ツールと書き込み機が無ければ話にならないのは一緒である。
CPLDに手を出してみようか迷ってやめた人は凡そ書き込み機の値段を見てあきらめたのではないだろうか。
でもそこはご心配なく。秋月が以前に販売していた「PICの周辺回路をCPLDで作るキット」の説明書に書き込み回路の回路図が乗っている。
それによると、パラレルポートと3ステートバッファICといくらかの基本素子があればJTAGケーブルになるとのこと。
さらに言えばそれすら必要ない。なんとチップ自体とシリアルポートの直結で書けてしまう。これにはArduinoもびっくり。
シリアル書き込みについてはこちらのブログを参考にするとよい。

お次は開発環境をでっちあげる。xilinx提供のwebpack iseを使うのだが・・・
これを取りに行った人の何割が間違ったツールを取ってきたことか。
xiliiseeee.png
最初に入るとvivadoデザインツールのページになるのだが、それではなくちゃんとiseデザインツールのタブを選んでDLする。その前にアカウント作らされるけど会社名とかそういうのは無職の場合はそれっぽい何かを入れて通過しよう。
なおこのツール、ダウンロードデータだけで8GBあるというそこらのOSよりでかい化け物である。
インストール後のディスク使用量は17GBになるのでサブのノートPCにインストールするのは少々ためらわれる。

長い長いインストールが終了したらめでたく開発開始となるが・・・なぜかうちのPCでは64bitのデザインツールが起動しない。とりあえず32bitのほうは使えるので32bitで使うことにした。
ISEの使い方はこちらのページで図入りで解説されているのでそちらを参照すれば最低限のことはできる。

と思いきや「・ひな形をもとに(VHDL)ソースファイルを作成します。」とか
ハイレベルすぎんだろおい。
まあ題名が「ISEの使い方」であって「VHDLの書き方」じゃないからしょうがないのだけど。でもコードを書けないと意味ないのでそちらの解説ページとして「ハードウェア記述言語 -VHDL入門- 」を参考にさせていただくことにした。

書き方についてはまあその・・・自分で見様見真似でやってみると意外となんとかなるから。
当方プログラミングはifとwhileとforしか知らないのだが一日でロジック回路の代替程度の用途のそれっぽいものをコンパイルに通すことができるようになった。
フリップフロップは検索するとモジュールのコードが出てくるのでそれをコピってきて適宜いじればよい。
小さいモジュールを作って次第に包括して大規模になってゆくというのが全体のイメージかしら。ぶっちゃけソフトウェア記述言語より理解しやすいかもしれない。

さて、テスラーのためのと題したのでそれに準じた内容にしてゆくとしよう。
かくいう私自身、CPLDに手を出した発端が半年前くらいに考えたQCWDRSSTCのロジックの配線が面倒くさすぎるということにあるからだ。
今回手始めとして標準的なDRSSTC制御回路をCPLDに詰め込んでみることにする。
まずは目的の回路図からロジック部分だけを抽出し、入力と出力とワイヤーに名前を振ってゆく。
logicud25.png
これは某なんちゃらエンジニアリングさんのユニバーサルドライバ。
お好みのペイントソフトで字を貼り付けて画像を作っておくとよいだろう。てかこれがないと一瞬で何が何か分からなくなる。
ぶっちゃけパズルみたいに組み合わせるGUIのツールがあればそんな名前振りなんていらなくなるんだけど、そんな都合のよいものはないみたいなので素直に名前を振っていこう。
↑記号を並べるモードもちゃんとある
この場合、エンティティでDFFを二つ作り、一つ上の階層でコンポーネントとしてDFFを使う。

一連の作業を行い、コンパイルや各種整合性チェックに通ったvhdlがこちら。
UD2_5

なお、ISEの使い方の解説ページではピンとポートの割り当てを手動で行っていたが、それを行わない場合は内部リソース使用量を最小限にするピン配置が自動で割り振られる。

コンパイル等が済むとこのようなレポートが出てくる。
resultud25pld.png
まあほんと、コンパイラがエラー吐かなかったってだけで、実際使うと何か問題がでるかもしれない。それはいいとして。
表にあるマクロセルというのはつまりフリップフロップのことで、使用頻度の高いフリップフロップのためにあらかじめそういうゲートが中に用意されているのだ。DRSSTCドライバにはDフリップフロップが2つしかないが、なぜか6つも消費したらしい。
その下を見てみると、位相入力がただの入力ではなくグローバルなクロックとして扱われていることが分かる。
つまりもともと記述したDFF二個の論理回路を最適化したところ、一つのDFFの出力を分けるより2つ以上のFFを用意して全てに同時にクロックを流し込んだほうがCPLDのゲート数が一番少なくなると判断されたのだろう。
また、OCD入力がグローバルに出力の有効無効をつかさどることになっているのも割と納得のいく割り当てではないだろうか。ただ、OCD入力が入った瞬間にオフしたいわけではないのでこの言い方に引っかかるところがあるのもまた事実。
とりあえず開発ツールにシミュレーションツールがあるらしいのだけど、これまた使い方がすっげぇ意味わからないのでそのうち実物の信号を入れてみるしかない。

--------------------------
訂正
PhasePositiveが直接ワイヤーに入るのがおかしい。フィッティング後のピン配置を見ると入力が一つ抜けていたのでこいつが飛ばされたらしい。ORゲートを使用して結ぶとちゃんとフィッティング後にも出た。
ただし入力にインバーターが挟まったためグローバルクロックの扱いではなくなった。
しかし、いざ信号を入れるとうんともすんとも言わず。
AND一個だけの回路だと動くので書き込み自体は正常にできている模様。やっぱり一歩一歩検証していくしかないっすねぇ
スポンサーサイト

Comment

非公開コメント

上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。