ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
Main Menu
Tweet
Facebook
Line
:-?
(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
webadm
投稿日時: 2006-9-5 5:49
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
XilinxのCPLD Starter Kitではまる
前にXilinxのWeb shopから購入したCPLD Starter Kitに搭載されているCoolRunner-IIで万年時計のデザインを試してみようと引っ張り出す。

先日秋葉原に行ってマルツパーツ館を覗いたら店頭で販売しているのね。CPLD Starter KitもSpartan3E Starter Kitも。他にもいろいろおもしろいものを扱っている。ここで買えばよかった。

で最低限クロックとかピンアサインを設定しないといけないのでその辺のところを添付資料から読み取ろうとした。

ところがオンボードのクロックはXC2C256のP38(GCLK2)につなげられるようになっているが別の図ではLEDの出力につながっている。

なんだこれは?

それとは別にそれぞれのCPLDのピンアサインが載った表があるのでそれを見ると確かにP38(GCLK2)にはXCCLKと太字で書いてある。これは間違いなさそうだ。とするとLEDがつながっているという回路図が間違っているようだ。資料の日付を見ると2003年11月6日改訂とある、未だに直してないのか、ゴラー

LEDは表を見るとP92(LD2)とあるのでこちらが正解ぽい。とりあえずどうつないでも壊れることが無いようになっている。入力と出力がぶつかるとまずいのでスイッチ入力がつながっているところはnPRESET入力に割り当てLEDはどっか出力に割り当てることにする。

良く見ると表もおかしい。P100以降がピン番号が上位2桁しか表示されていない。こんなのも直していないのか。

それに図の方もXC9572XL-VQ44のLEDはP92につながっているように描かれているが44pinのデバイスになんでP92なんてあるんだ。表を見るとこれはXC2C256-TQ144のLED出力ピンであることがわかる。

英語版なら直っているのかも。
webadm
投稿日時: 2006-9-5 6:50
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
とりあえず動いている感じ
LEDスイッチ基板をつないでないので表示を確認できないがオシロで出力信号を観測する限りにおいては動作している感じ。

ピンヘッダとCPLDのピンの関係が表を見ないとわからないのとピンヘッダのピン番号とCPLDのピン番号の昇順が正反対なので大変ややこしい。

たぶんLEDスイッチ基板とつなげばちゃんと動くはず。

Coolrunner-IIであればまったくタイミング的にも余裕で77MHzまで動くという。

CPLD Starter Kitの基板にはXC9572XLが搭載されているけどこれにはさすがに万年時計は入らない。

時間に余裕があったら大きいXC9500シリーズの基板とかを作ってみたい気もする。そこでModelSimとVeritakのどちらが正しいか判明することに。
webadm
投稿日時: 2006-9-5 9:22
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
iMPACT
デザインをコンパイルして結果を確認していざボードにダウンロードしようと思ってISEのあちこち探してもダウンロードツールの手段が見あたらず。

そういえばプログラミングツールはISEとは統合されていななくてアクセサリのiMPACTを使うのだと思い出す。

起動するとProjectを作るダイアログが表示される。作ろうと思ったけども何かファイルが無いらしい。

仕方ないのでデフォルトProjectを開く。

とりあえずスキャンをするためにinitialize chainボタンをポチっと押すとJTAGチェインが表示され、続いて各デバイス毎にダウンロードする.jedファイル指定のダイアログが現れる。ここでISEのprojectのディレクトリにある.jedファイルを指定。ダウンロードしないデバイスはcancelで何も指定しない。

指定したデバイスXC2C256を選択して右クリックするとProgramというメニューがあるのでそれを選択するとダウンロードが開始されProgram Successの表示が出る。するともうダウンロードされたデザインが動いている。

慣れればこれも簡単かもしれない。基本的にデザインの現場とプログラミングの現場が違うということを前提としていると思われる。それはそれで正しい。けどISEから起動できてもいいと思うけどね。
webadm
投稿日時: 2006-9-5 10:50
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
CPLDのGSRピン
CPLDデザインキット基板の押しボタンを利用しようとピンを割り当てたらそこはデフォルトでGSR(Global Set/Reset)信号入力に割り当てられるらしい。

確かに押しボタンを押している間は万年時計の出力が停止する。

ボタンを放すとまた0000年0月0日0時0分0秒から表示し始める。

レジスタがリセットされている。

GSRピンをI/O用に使うには何か設定が居るらしい。
コンパイルレポートを見てもnPRESETが割り当てられたFBの当該ピンはunusedになってGSRのまま。

ロジアナで観測するとクロックが1.842MHzなので1秒より少し短い周期で0以外の表示桁がだんだん増えていく様子が観測できる。

とりあえずXilinxのデバイスでも修正せずに動くということを確認。
marsee101
投稿日時: 2006-9-5 14:30
Just popping in
登録日: 2006-8-16
居住地:
投稿: 3
Re: iMPACT
こんにちは。お邪魔します。
iMPACTはISEから起動することが出来ます。それでもアクセサリから動かすのとあまり手間は変わりませんが。。。
ProcessesペインからConfigure Device(iMPACT)をダブルクリックすると起動します。
http://marsee101.blog19.fc2.com/blog-entry-149.html
webadm
投稿日時: 2006-9-10 21:24
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
Re: iMPACT
あちゃ、確かにありますね。前に見覚えが(´Д`;)

EclipsベースなのでこういうGUIにならざるを得ないのでしょうかね。

時々どこだっけとあちこち探すことがしょっちゅうです。
webadm
投稿日時: 2006-11-30 9:45
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
I2C Port_Expander_XAPP799_FinalVer.iseではまる
せっかくCoolrunner IIが載っているCPLD基板を活用しようと思い立って、I2Cインターフェースのとあるチップをエミュレーションするデザインをしようと思ってXilinxのサイトからI2Cのリファレンスデザインをダウンロード。

Port Expander XAPP799というやつ。

I2Cインターフェースと8bitの入出力ポートの変換回路という感じ。

実はこれ書き込みは8bitなんだけど読み出しは何故か8bit信号ピンがありながらそのうち下位2ビットしか読み出せないアンバランスな仕様。残り6ビットは1固定読み出しとなっている。

//###############################################################
// Put data from internal reg to GPIO or to SDA
//###############################################################
always @ (negedge scl or posedge i2c_rst)
begin
if(i2c_rst)
sda_out <= 2'b1;
else if (out_en)
begin

if (index == 6)
sda_out <= gpio_input[1];
else if (index == 7)
sda_out <= gpio_input[0];
else
sda_out <= 1'b1;
end
end

なら8ビット全部入力できるようにと修正してシミュレーションしてみると、驚愕の事実が発覚。

実はgpio_inputの全ビットを順にsda_outへくりだすようにしてもタイミングが1クロックずれてしまい01101001と出ていくべきところが10110100などという具合になってしまう。

綺麗に直すにはかなり全体を直さないといけない雰囲気。これを書いた人はきっと軽い気持ちで書き始めてポートの読み出しの際にハタと問題にぶつかってすべてのビットを出力するのはやめにして2ビットだけ出力するようにお茶を濁したと想像される。どうせ無償だし無保証なのでそれで構わないのであるが。

これを使おうとした人は皆ここではまったに違いない。
webadm
投稿日時: 2006-12-2 11:03
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
結局2ビットしか出力できない
デザインをちょっと修正して8ビット出力できるようにしてみたところ、Behavioral SimulationではMSBを除いて7bitは出力しているように見える。

しかし、Post-fit Simulationをしてみると最後の2bitしか正しく出力されなていないことが判明。

だから2ビットしか出力しない仕様にしてあるのか。

もともとSCLの立ち下がりでデータを変化させるのだが同時にビット位置のカウンタも進めなければならない。論理的にHold time 0の設計になってしまうし、しかも1ビットクロックずれている。

最初のMSBの出力はその直前のACKを出力するビット位置カウント(9)の時に出せばよいがどうもうまくいかない。根本的にまずいのだろう。

もともとSCLとSDAの2つの信号の立ち上がりと立ち下がりの両方のエッジで動作する複数クロック設計(非同期設計ともいう)なので簡単なようで難しい。

むしろゼロから単一クロックでSCLとSDAをサンプルしてその状態変化をトラッキングして動くステートマシンとして設計すれば楽だが、面倒。高速のレートで動作させる場合には基本クロックをその10倍ぐらいにしておかないと出力信号が遅れてホスト側のデータサンプル時のsetup時間を満たせなくなってしまいかねない。

今回は市販されていない1MHzぐらいのレートで動くI2Cデバイスをエミュレートしたいので10MHzぐらいの基本クロックを使用することになる。

あと単一クロックにすると非同期設計よりも回路規模は大きくなりがち。
webadm
投稿日時: 2006-12-2 12:37
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
何故2ビットなのか
原因を知ろうとModelSimのノードリストからgpio_inputを探そうとしたらgpio_input[1:0]しか合成されていなことが判明。

2ビットしか出ないはずだ。

しかしどこで2ビットだけにされてしまっているのか?

RTL viewerで見るとちゃんと8ビット全部合成されている。

となるとFitterによって省かれてしまったことになる。

しかしレポートには8ビット全部生成されている。

すると2ビットしかないのはModelSim上だけということになる。

ModelSim用に生成されたVerilogソースを見るとtopのところでgpio_input_pinsが2本しか無いことになっている。

これか。

しかしこれはどこから来てるのだろう。

更に調べるとtop_timesim.vというPost-fitシミュレーション用のverilog netlistがオリジナルのままであることが判明。ネットリスト上でgpio_input_pinsが2本しかない。しかしその元になっているはずのtop.vはオリジナルからして8本になっている。ということはタイムスタンプに矛盾がある。

試しにtop.vのタイムスタンプを更新してみてtop_timesim.vが新しく生成されるか試してみる。

同じだった。

Post-Fit Simulation reportを見てみるとちゃんと新しいシミュレーション用のネットリストが生成されている。

Writing Verilog netlist file 'F:\Xilinx\i2c\netgen\fit\top_timesim.v' ...

が場所が違う。思い出した、ちゃんとModelSimでPost-fitシミュレーションするにはnetgen\fitの中のtop_timesim.vをプロジェクトディレクトリにコピーしないとだめだったのだ。

今度はやっとgpio_input_pinsが8本になった、しかしシミュレーション結果はダメダメだった..orz

肝心のホストからの読み出しのところがほとんど出力が不定になってしまっている。この原因はまた後で調べよう。
webadm
投稿日時: 2006-12-4 22:42
Webmaster
登録日: 2004-11-7
居住地:
投稿: 3068
オリジナルのままでも同じだった
変更を加える前の状態でPost-fitシミュレーションしてみたらどうだろうかと思いやってみた。

しかしオリジナルはISE 8.1iで作成されたものだがISE 8.2iに変換してもシミュレーション関係のファイルは完全に変換されない。

それでも.doファイルの中のModelSimの絶対パス名とかを変更したり、ファイルタイプが.timesim_twfとかだったのを.twfに変更したり、top_timesim.vのパスをカレントではなくnetgen/fit配下に変更するなどしてシミュレーションが出来るようになった。

結果は、やはり同じくカウンタが後半のホストからの読み出しサイクルで途中から不定になってしまっている。

もともと設計がまずいのだから仕方がない。

だめだこりゃ。
(1) 2 3 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
ページ変換(Google Translation)
サイト内検索