2017年04月09日

Lattice/XO2へのデータ焼きこみ

5Vの電源を準備して、FPGAの焼きこみを完了した。

IMG_6801.JPG

正常な接続が確認されると、ispDOWNLOAD CableのSTATUSが赤になる。 旧型の中華製コピーモデルだが、動作に問題はなかった。。

IMG_6803.JPG

ブレッドボードを中継点として電源を供給している。 基板側の接続方法の選択を悩んだが、丸ピン型のICソケットを流用している。 接続ケーブルをブレッドボード準拠にすると、いろいろと作業がやり易い。 

IMG_6802.JPG

WS000973.JPG

専用のIDEソフトを立ち上げて書き込みを行う過程で、初回は電源の接続を間違えてエラーが出た。 

WS001004.JPG

凡ミスをリカヴァーした後にSTATUSが赤く変化したことを確認して、再度書き込みを行うと一連の作業は瞬時に完了した。

WS001003.JPG

書き込み完了時のIDE。 失敗すると緑の部分が赤くなりFAILの文字が表示される。

FPGAの動作確認は明日以降に行う予定だが、まずはクロックの分周をチェックすることから始めよう。
posted by Yasuski at 04:21| VHDL

2017年01月31日

FPGA試作基板の製作

FPGA試作基板に部品を実装し、ひとまずJTAGからデータを書き込める形になった。

IMG_6611.JPG
posted by Yasuski at 23:11| VHDL

2015年11月18日

dacHandler@MCKとSCK

ADATのAD基板に分周カウンタの導入を失念していた件の影響で、FPGAに組む予定のdacHandlerに内装するSCK信号ラインの仕様が変更になった。

具体的には、64Fsの入力を想定していたSCK入力端子を廃止し、これを256Fs対応のMCK入力とする。 仕様の変更に伴い、FPGA内部で64分周を行っていた6bitカウンタを8bitに拡張し、マスタークロックを256分周したWCKを出力する仕様とした。カウンタは同時に64Fsのクロックを内部出力して、データ読み出し用のSCKを供給する。

WS000537c.JPG

コンパイルはすんなり通った。 リソースの消費にはまだ余裕があり、多少の機能変更があってもなんとか対応できそうだ。

WS000536c.JPG

pin配置は以下のように変更された。

WS000691.JPG
posted by Yasuski at 18:41| VHDL

2015年11月09日

Lattice系FPGAへの乗り換え

Xlinx系でipfファイルが生成出来ない問題が解決不能な雰囲気になってきたので、ここは潔くプラットフォームの乗り換えを検討することにした。

回路構成がもはやCPLDの規模から外れつつある状況から、より許容量の大きなFPGA系のチップを探していたところ、XO2というのを発見した。 

ターゲットとなるデバイスはパッケージがSMT32と極小で、端子数もよい感じにまとまっている。

FPGAチップ一個で、4ch/DAC2個分のハンドリングが可能。 チップ2個で、ADATにフル対応できる。(という想定) サイズが倍にはなるが、処理能力が高い上位機種ではチップ1個で8chを捌ける可能性がある。

QFN32と、チップサイズが極小になったのはOpenTheremin的視点から嬉しい。」

で、Latticeのツールに乗り換えた途端に丸一日悩んでいたことがウソのように解決した。 

WS000525c.JPG

FPGA側に64分周回路を仕込むと、クロックラインがシンプルになる。要はWCKとSCKを一系統のラインに纏めるのだが、リソースの消費が分周回路分増える一方で、ReadClockが1端子減って、物理的に余裕が出来ることになる。

WS000526c.JPG

ちなみに、ADAT系のチップはWCKからビットクロックを内部生成できるので、出力信号のラインはWCKとデータライン4本だけで成立する。ADAT以外のデバイスを使用する場合の汎用性を確保するためにSCKは外部入力とし、それを分周したWCKを出力する。 データ送出タイミングの精度さえ確立していればよいので、やはりFPGA内部で分周を行うのが正解と思われるが、厳密にはこの部分で「完全同期」を行う必要があるかもしれない

dacHandlerPart.jpg

SCKはFPGAの送出系のマスタークロックとして扱われる。WCKは出力端子に変更する。

dacHandler(仮)のシミュレーションを行う段階で、ハンドリングするデータの規格を統一する必要があるのだが、設計自由度の高い3線方式を採用するのが現実的だ。

これには、動作が確認されているAD420用の仕組みを採用するとして、データの扱いはDAC1単位を4ch分=12pinの信号を捌かなければならない。

ADATへの送信フォーマット準拠でデータを出力する場合は、WCKは1chで良いので、送り側はADATへのデータの読み出しに合わせて、2chペアで信号を送出することになる。

送出側の送信タイミングを外部から入力されるWCK準拠とした場合、現在は受け側でクロック数をカウントして発生させているいるラッチ信号を、送出側から供給した方がデータの取りこぼしが発生し難い。

安全策として、新たに受け側のシステム内部にD-FFによるデータ固定機構を構築するのが理想的だが、リソースに余裕がない場合は、現在の回路でW/Rのタイミングを詰めることになる。とはいえ、AD420用に書かれたスケッチでは、32クロックを生成後に送信側のタイミングでLatch信号を出力しているので、原理的に間違いは発生しないだろう。

Latticeにチップを乗り換えた結果、実装可能な回路規模が判明したので、これからはより汎用性の高そうな送受信のフォーマットを決定しなければならない。

プログラミングツールを探していて見つけたのがコレで、3kチョイと安かったので迷わず購入。

22_013.jpg

手持ちのXlinx製を転用するのに掛かりそうな手間を考えると、専用機を揃えるのが正解か。

VHDLコードの方は、SCKを64分周する回路を加えて(内部でクロックを32カウントしていたカウンターを復活させた)WCKを出力に回すように改装したものを論理合成できた。 

WS000526c.JPG

動作スピードが落ちることとトレードオフで、ピン配列もそれ風にまとめてある。

dacHandlerAll.jpg

信号の極性など、間違えている可能性があるのでシミュレートしたいところではあるが、Webpack ISEから起動していたシミュレーターをスタンドアロンで扱う方法が判らず、起動方法を探しているところ。
posted by Yasuski at 05:13| VHDL

2014年11月06日

ISE Webpack 最終版のインストール

CPLDにデータを焼くためのツール、ISE Webpack をインストールするのに14GBも要るという驚愕の事実が発覚。
 
インストーラーが既に8Gを専有しているので、合計22G以上の空きスペースがないと、システムを組めない。 

WS000096.JPG

勿論、自分の使うチップのデータのみを予め選択すればよいのだろうが、多分あれこれいじると失敗するので、コレは仕方が無さそう。

で、案の定Fittingで撥ねられるケースが発生する。 特にTimingDrivenを優先すると、以下のようなアラートが出る。

Xst:737 - Found 1-bit latch for signal . Latches may be generated from incomplete case or if statements. We do not recommend the use of latches in FPGA/CPLD designs, as they may lead to timing problems.

指摘されている部分を回路図上で示すと、、、

WS000089.JPG

さらに展開すると、、、

WS000090.JPG

VHDLコード上で確認すると、この部分がアウトということになる。

WS000095.JPG

ノリッジベースによると、昔は通っていたコードがその後の仕様変更でエラー扱いになったらしい。

全体の回路構成はこんな感じ。

WS000091.JPG

WS000092.JPG

その後、Implement と Fitting の設定を変更して、なんとかコードを吐き出せるようになった。

WS000093.JPG

WS000094.JPG

旧式のCPLDに拘る最大の理由は「基板を再設計するのが邪魔臭い」から。 そもそも数が出る物件ではない上に、最近はebayでディスコン部品の調達が楽になっているので、物理的な制約はほとんど存在しないといえる。

どちらかというと、開発アプリ側の仕様変更がイロイロと悪さをするので、ソフトウエアの保守を行っておくのが順当だと思う。




posted by Yasuski at 05:56| VHDL

2014年11月05日

burningCPLD

久しぶりにCPLDの書き込みを行った。 

IMG_5093.JPG

旧版のアプリでインプリメンテーションを行っているため、現在使用中の日本語OS上に新たにアプリをインストールすることは避けたい。 従って、旧版がインストールされている英語版のOSを立ち上げてツールを接続することになった。 

WS000613.JPG

書き込みにはCPLD側にも電源が必要なので、専用電源コードの製作を行っていたら作業が一日遅れてしまった。



CPLDは基板直付なので、失敗すると全部がパアになってしまう可能性がある。

WS000612.JPG 

画像は書き込み失敗時に表示されるアラート。 不具合の原因は、JTAG通信ライン間の半田ヒゲによる短絡だった。 ショート箇所を取り除いた後は、無事にファームウエアを書き込めた。

この基板は、4✕4=16マトリックスのmidiスイッチを駆動するために製作したもので、

WS000050.JPG

H8基板のPort#8から入力される4bitの信号に因ってモードが切り替えられて横一列毎に4✕1の後着優先スイッチに変身する。 

WS000166.JPG

これはプログラムチェンジを送出する際のモードで、通常使用するコントロールチェンジ・モードでは、個別にLatch/Momentaryの切り替えが行える仕様となっている。

IMG_5094.JPG
posted by Yasuski at 13:36| VHDL

2013年11月25日

16chSignalSelectorのPin配列

怪談スイッチ製作用に購入したXilinx用の試作ボードを発掘して、電源を確保した後に書き込みを行った。

IMG_4479.JPG

このボードの電源プラグはRoland方式の外側が正極になるという、この手の機器としては珍しい仕様。しかも、安定化電源ICを搭載せずに素で直結というトンチキな造りなので、RolandのAD/DCをそのまま転用することは出来ない。 仕方がないので、新たに遊んでいるスイッチング電源をRoland方式専用に配線して作業を開始した。

IMG_4480.JPG

本来ペアで使っていたのはParallel接続のアダプターだったが、ebayでXlinxのJTAGユニットを購入済だったので、それを直結してBoundaryScanを行ったところ、問題なくチップを認識できた。

WS000459.JPG

初回はすんなりと書き込みが終了。 所要時間は1分以内とかなり速い。 その後、フリップフロップのSelect端子への追加を忘れていた事を思い出して、修正した内容に焼き直そうとしたところ、一度だけエラーが出た。 赤いアラートにビビりつつ、二度目は何事も無く書き込みが終了。

端子の配置は以下のようになった。


****************************** Device Pin Out *****************************


WS000460.JPG


WS000461.JPG


Legend : NC = Not Connected, unbonded pin
PGND = Unused I/O configured as additional Ground pin
TIE = Unused I/O floating -- must tie to VCC, GND or other signal
VCC = Dedicated Power Pin
GND = Dedicated Ground Pin
TDI = Test Data In, JTAG pin
TDO = Test Data Out, JTAG pin
TCK = Test Clock, JTAG pin
TMS = Test Mode Select, JTAG pin
PROHIBITED = User reserved pin
posted by Yasuski at 19:09| Comment(0) | VHDL

怪談スイッチのVHDLコード

春のライヴで物凄く使い辛かったRocktron/Allaccessの中身を「怪談スイッチ」と同等のスイッチマトリックスに積み替える計画を実行する前に、スイッチマトリックスの回路構成をエディターからアウトプットして、自分の考えた仕組みのおさらいを行っている。

WS000387.JPG

構成した回路のうち、リセット回路やプリセット回路の理解は問題ないのだが、列ごとの機能の切り替え(4ch単位で完全独立と後着優先セレクタースイッチをセレクトする)等、作った本人が忘れている仕組みを今一度洗い出す為に、データを漁っているところ。

WS000154.JPG

来るべきカーボンファイバー製のRev.Bの製作に備えて、基板発注をOlimexからFusionに移行する過程で、Errorが発生した件についての備忘録を書いておく。

最初にFusionのEagle用DesignRuleをサイトからダウンロードしておく。 

FusionはGERBERファイルのみに対応していて、OlimexのようにEagleで生成される.brdファイルを直接扱ってくれない。 

EagleのCAMプロセッサーからGERBERファイルを出力し、それをZipしたものを注文時に送信する。

Olimexとの違いは、外形ファイル(Outlines)を設定なしでは注文を受け付けてもらえないこと。 基板にはWireにてDimensionレイヤーに外形を描いておく必要が有る。

とにかく安いので、PCBの試作が楽になるのが嬉しい。


以下、コードを備忘録としてアップ。 
VHDL code
posted by Yasuski at 19:00| Comment(0) | VHDL