スレッド表示 | 古いものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
webadm | 投稿日時: 2006-12-31 4:16 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
トラ技付録MAX II(EPM240T100C5)にも入った 最初FLEX10K10でコンパイルした時はLE数が305と大きくLE数がそれより少ないトラ技付録MAX II基板(EPM240T100C5)には入らないだろうと諦めていたが、やってみると所要LE数がFLEX10Kよりも少ない209という結果になって余裕で入った。
MAX IIの中身はコンフィグレーション用FLASHとALETRAのFPGAが一緒に内臓されたような感じだが、FPGA部分は古いFLEXシリーズのものよりも使用効率が良いようである。 これなら大きいXILINXのCPLDデザインキット基板よりも小さくて良い気がする。 |
webadm | 投稿日時: 2006-12-30 18:02 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
実際にCPLDで動いた さっそくXILINXのCPLDデザインキット基板用にISEでコンパイルしてみた。
XC2C256だとSpeed優先では余裕がないということでArea優先にしたら余裕で入った。 シミュレーションしようとしたらうっかりしてシミュレーターをISEシミュレーターのままでプロジェクトを作ってしまい、にっちもさっちもいかず。ISEシミュレーターは珍しくコンパイル型のシミュレーターなのでネットリストをC/C++コードに変換されて実行される。しかしその変換がバグっていて多くの場合シミュレーションすらできない場合が多い。 諦めてそのまま動かしてみることにした。すんなり動いた。これでまだ手に入らない新しいI2Cインターフェースのデバイスを使ったマイコンのデバッグが可能になる。 結果はAlteraのQuartus IIのシミュレーターで出てきた結果と寸分違わぬ波形が出てきた。ACKの前に微妙にヒゲが出てしまうところまでシミュレーターは忠実に再現していたことになる。これはSCLがLowの区間なのでSDAが変化して良いので問題ない。 とりあえずPICのI2Cで1Mbpsでつないでみて問題ないようだ(あらかじめCPLD基板についているクロックは1.843224MHzと低速なので手持ちの24MHzのものに交換してある)。 |
webadm | 投稿日時: 2006-12-30 5:22 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
シミュレーション結果も良好 単相クロック同期なので十分なクロック数分入力信号がサンプルされるようにテストベンチを作成すれば問題なく期待通り動いてくれた。
使い慣れたQuartus IIでやったのだがISEでも問題なくできると思われる。 AlteraやXilinxから提供されているMPU I/Fを前提としたリファレンスデザインよりもかなり扱い易い。これに好きなステートマシンとかを追加すれば好みの機能をもったI2Cスレーブデバイスが作れる。 すばらしい。 |
webadm | 投稿日時: 2006-12-29 21:13 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
エレツール株式会社のFreeIP 改めて探してみたらエレツール株式会社さんのところで昔から同期式のI2CスレーブデバイスのデザインがFreeIPとして公開されてました。
作りたかったものと寸分違わないのでそのまま使わせて頂くことに。同期型設計なのでかなり綺麗な作りである。 Quratus IIでコンパイルしたらスレーブアドレスの比較のところで7ビットのスレーブアドレスと9ビットのシフトレジスタを比較しているところがあって警告が出た。比較したいところはシフトレジスタの上位7ビット(最初に送られてくる7ビット)なのでそのように修正。そのままにすると常に一致しない論理が生成されてしまうらしい。 まだシミュレーションはこれから。 (2010/4/11) 検索でi2cスレーブのfreeipを探しにこちらへやってくる方が結構多いので確認したらここで使用したi2cスレーブの優れた実装コードをずっとFPGAインフォメーションさんからダウンロードしたものと記憶違いをしていたことが判明。FPGAインフォメーションさんのところはi2cスレーブのipコアは有償でしか提供されていないので改めて探したところ、エレツール株式会社さんのWebページで今もFreeIPとして公開されているものを利用したことがソースコードを見比べて確認した次第。タイトルや本文を訂正しました。こちらへ検索サイト経由で来られた方には大変申し訳ありませんでした。 |
webadm | 投稿日時: 2006-12-12 9:56 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
Xilinxにも同じのがあった 出所は同じと思われるまったく同じリファレンスデザインがXilinxからも提供されていた。
uPインターフェースなMaster/Slave両用のcore。 でもとりあえずI2CでつながるRAMみたいなものを作るにはちょっと趣向が違う。uP無しでハードウェアだけで買ってに動いてくれるのを作りたいのだけれども。 やはり自分で仕様決めてデザインした方が早いかも。 |
webadm | 投稿日時: 2006-12-6 9:36 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
AlteraのI2Cリファレンスデザイン AlteraもI2Cリファレンスデザインを提供している。
こちらは68Kのようなホストバスインターフェースを備えたMaster/Slave両用IP coreという本格的なもの。 しかもテストベンチとしてMasterとSlaveを対向接続したものがついている。小規模でありながら売り物のIP Coreとなんら変わらないパッケージングである。小規模すぎるので売り物にならないということでリファレンスデザインとして公開されたのかもしれない。もちろん使用条件としてAltera社以外のデバイスには使わないことというのがあるのは当然。 AlteraのI2C IP coreは完全な単一クロックによる同期設計で、Xilinxの複数クロックの非同期設計とは大違い。 XilinxのはもともとI2Cのような劣悪なシリアルバス信号をそのままクロック信号として使うというあり得ない設計ではあるが、スレーブ専用にして単純化してあるので理解しやすいことはある。 AliteraのはMaster/Slave両モード兼用なのと単一クロック設計なので規模は大きい。Slaveだけに縮小したいと言っても簡単に直せるものではないと思う。それでもリソースはそれほど食わない。MAX-IIのようなCPLDにも収まる。もちろんそれ以外のロジックを追加する余地は無いけど。 Aletraのは汎用MPUインターフェースなのでシミュレーションするにもMPUのバスサイクルを生成するテストベンチが必須になる。それらは収録されているので利用することができる。 さてどうするか。 |
webadm | 投稿日時: 2006-12-4 23:19 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
3stateバスはPost-fitシミュレーションが面倒 あまり使いたくない3stateバス。I2Cはそれだから困る。
Post-fitシミュレーションではタイミングバイオレーションこそ出ないのでBehaviorシミュレーション通りに動くはずだが不安は残る。 テストベンチを変更してstart conditionの際にはHightからLowへsdaが遷移するように変更するとアドレス照合サイクルは正しく動作している。後続するデータ出力サイクルはこれまたsdaがHi-z状態になるので(バス上はpull up抵抗によってHighになるはず)それが入力としてフィードバックされるとsdaで駆動する内部信号が全滅となる。なんてこった。 |
webadm | 投稿日時: 2006-12-4 22:58 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
Post-fitシミュレーションではpull-up抵抗が問題 後半のホストからのリードサイクルがおかしい原因はstart conditionのテストベンチパターンがsdaをHi-Zからlowにしているのが原因。
最初のライトサイクルはHi-Zから一旦Highにしてそれからlowにしているので問題無い。 本来は外部にpull-up抵抗があるのでHi-Zからlowにして正しいのだが、Post-fitシミュレーション時にはPULL-UP抵抗の記述が無視されてしまうのでうまくいかない。Behavioralシミュレーションでは有効なので問題無い。 ということはテストベンチを修正すればなんとかなるかも。 |
webadm | 投稿日時: 2006-12-4 22:42 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
オリジナルのままでも同じだった 変更を加える前の状態でPost-fitシミュレーションしてみたらどうだろうかと思いやってみた。
しかしオリジナルはISE 8.1iで作成されたものだがISE 8.2iに変換してもシミュレーション関係のファイルは完全に変換されない。 それでも.doファイルの中のModelSimの絶対パス名とかを変更したり、ファイルタイプが.timesim_twfとかだったのを.twfに変更したり、top_timesim.vのパスをカレントではなくnetgen/fit配下に変更するなどしてシミュレーションが出来るようになった。 結果は、やはり同じくカウンタが後半のホストからの読み出しサイクルで途中から不定になってしまっている。 もともと設計がまずいのだから仕方がない。 だめだこりゃ。 |
webadm | 投稿日時: 2006-12-2 12:37 |
Webmaster 登録日: 2004-11-7 居住地: 投稿: 3094 |
何故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 肝心のホストからの読み出しのところがほとんど出力が不定になってしまっている。この原因はまた後で調べよう。 |
« 1 (2) 3 » |
スレッド表示 | 古いものから | 前のトピック | 次のトピック | トップ |
投稿するにはまず登録を | |