2016.07.26OpenCoresに登録したwf3dをZedBoardとDE0-Nano-SoCに移植しました。wf3dの外部インターフェースはデフォルトでWISHBONEバスなのですが、ZedBoardやDE0-Nano-SoCに搭載されているFPGAでは、インターコネクトとしてAXIが使用されています。このため、非常に簡単なAXIのブリッジモジュールを仮作成してwf3dを組込みました。実機で動作確認を行うと、どうも様子が変です。所々、ポリゴンが正常に処理されていません。基本的な設計に問題があるとすると、すぐにフリーズしてしまうはずなのですが。Verilogシミュレーションでは問題ないので、シミュレーション・モデルでは省略している実機の振る舞いに原因がありそうです。修正前後の動作比較まとめAXIの4KBルールロジック・アナライザでデバックを行うと、頂点データについて、期待通りの値がAXIからリードできていないことがわかりました。ここで、4KBルールをまだ実装していなかったことを思い出しました。AXIの仕様書には、次のような記載があります。boundary.ルール自体は非常にシンプルです。別の言い方をすれば、「AXIのバースト中に、バーストの最初と最後のアドレスのビット[31:12]が変化してはいけない」ということです。このルールは、AXIのアクセスが、ある前提を満たしていれば気にする必要がありません。DMAを行うモジュールについて、DMAの先頭アドレスは、必ず4KBの境界になっているバーストは、先頭アドレスからリニアにアクセスする。バースト長は、偶数のバースト長(例えば16)で固定このような前提がある場合、AXIのバーストが4KBのアドレス境界をまたぐことはありません。正常なAXIアクセス例えば、キャッシュを内蔵したIPコアの場合、通常はキャッシュ・ライン単位でバーストを行うので、このような前提が成り立ちます。LCDコントローラなども、一般的にはこのような前提が成り立ちます。wf3dの頂点リードのバースト長は3しかし、wf3dはこのような設計上の前提が当てはまりません。wf3dの頂点データのリードは少し変則的です。AXIのデータ・バス幅は64ビットリード時のバースト長は2で固定。連続する2つのバーストは最後のアドレスがオーバーラップするAXIのバースト長は2で固定なのですが、場合によっては4KBの境界をまたいでしまいます。間違ったAXIアクセスwf3dがこのような変則的なアクセスを行うのは、処理パフォーマンスよりも小回路規模を優先したためです。原因がわかれば、AXIブリッジの修正は簡単です。AXIのアクセスを4KB境界で分割するだけです。修正前後の動作比較まず修正前の動作です。AXIブリッジの修正で、正常な動作を確認できました。まとめ4KBルールをうっかり忘れているとデバッグが大変。Modeは、Verilogのキーワードを色付けして見やすくしたり、またインデントを自動的に調整したりしてくれます。起動し...設計yosysで論理合成ANDやORといった基本ゲートで構成されたネットリストを生成したくて、yosysを試してみました。license)のVerilog-HDL合成ツールです。Veriligで回路設計を行った時、最終的には論理合成ツ...設計IcarusVerilogのPLI1.0で浮動小数点入力IcarusVerilogのPLI1.0サンプルです。浮動小数点の値をバイナリ値に変換するtaskをPLI1.0で定義し、テストベンチで使用するサンプルです。動作環境はCentOS7です。サンプルの内容は、以下のCver版と同じです。Cve...設計VerilogとVHDLの記述比較ModelSimコマンドライン実行用シェルスクリプトのサンプル・データを使って、Verilog-HDLとVHDLの記述を比較しました。このサンプル・データは、シミュレータの実行スクリプトの動作確認を目的としているため、設計データは次のように...設計ModelSimコマンドライン実行用シェルスクリプト(VHDL)ModelSimコマンドライン実行用スクリプトのVHDL版です。ModelSimは、コマンドラインで直接実行することができます。次のようなシェル・スクリプト作ってModelSimの処理を記述しておくと、LinuxのターミナルやWin...設計LinuxのUSB-BlasterエラーQuartus20.1のprogrammerでFPGAにデータを書き込もうとするとエラーになりました。環境はCentOS7です。StartをクリックしてもProgressがFailedと表示されます。キットOpenCoresその他ダウンロードホーム検索トップサイドバータイトルとURLをコピーしました。