ハードウェア設計記録XilinxのFPGAをVHDLで設計しModelSimでシミュレーションしている開発者の備忘録2010年02月08日SystemVerilog対応はいつ?XilinxのXSTがSystemVerilogに対応するのは一体いつなのだろうか?今年4月リリース予定のISE12.1でサポートする見られていたのだが、どうやら見送られたらしい。不景気で開発要員をリストラしたのか?残念だ...もう期待しません。ファミリデザイン」と題したトレーニングコースが追加されている。(Sparten−6も追加されている!)無料キャンペーンでお得感を出しているが、Virtex−5の無料キャンペーンが今でも続いているので今回もずっと無料なのだろう。事で、早速申し込んでみた...が何の応答も無い。そのうちメールでも送られてくるのかな?それと、申し込んでから気づいたけど、1日間って書いてあるのに日程は2日間あったりリンクをクリックしてもコースの詳細情報が無かったりと不備が多い。Multi-Threading]と言うオプションがあった。これはマルチコアCPUで分散処理をさせてルータを高速化するオプションで、個人的には、昔から待ちに待っていた機能だ。いう事で、早速試して見た。32Bit/Virtex5LX50T(80%程度の使用率)でオプションOFF時とON時でどのくらいルータ時間が短縮されるかを計測する方法で行った。結果は、オプションOFF:38分オプションON:36分...と残念ながらほとんど変わらなかった。処理中にタスクマネージャからCPU使用率を見ていたがMAPの中の一部処理だけ分散処理している様でPARは分散処理されているようには見えなかった。Xilinxが大々的にアピールしていない事で既に怪しいと思ったが、今後の改良を願いたい。投稿時刻(20:43)│コメント(2)│XilinxツールISE11.4ISE11.4がリリースされています。リリースノートを見る限り、そんなに変わってはいない様ですが、とりあえずアップデートして見ます。ちなみに、ISE12は2010年4月頃だと聞いたことがあります。これで、やっとSystemVerilogが使える?投稿時刻(10:02)│コメント(0)│Xilinxツール2009年12月09日ModelSimでビットマップのリードライト(完成)以前、「ModelSimでビットマップのリードライト」で紹介したモジュールがやっと完成した。これを使えば簡単にビットマップをテストベクタとして利用できるので画像処理なんかには便利だと思う。FLI等は使わずVHDLの記述だけで実現しているので修正も出来るし応用も出来る。いう事で、他の人にも使って貰えればと思うのでソースコードを公開します。ModelSimにPathが通っていれば、解凍したファイルの「sim.bat」を実行すればサンプルが動きます。このサンプルは、解凍したファイルの「read.bmp」を読み出しピクセルデータを反転して「write.bmp」に書き込むだけです。後は適当にソースコードを見て下さい。ドキュメントが少ないので申し訳ないが要望があれば整備します。投稿時刻(20:54)│コメント(9)│ModelSim2009年04月08日ISE11.1ここ最近こんな話題ばかりだが、ISE11.1が4月末発表らしい。XSTがSystemVerilog対応か!と思われたが正式対応は見送られたようだ。ないと勉強する気にならないしねぇ〜あと、ISE11移行はノードロックがかかるような話もある。次期ハードコアプロセッサ?マイコミジャーナルにXilinxのインタビューが掲載されていた。この話の中で、Virtex6にPowerPCが搭載されないって事と何らかのCPUを検討している事が書かれているが、次期SpartanでARMがハードコアプロセッサで搭載されるって話を聞いたことがある。Tralla氏が「ノーコメント」としているのはコレの事だろうか?投稿時刻(10:21)│コメント(0)│Xilinxデバイス2009年01月29日Xilinx新デバイスVirtex−6とSpartan−6が2月発表?噂のMGT入りSpartanには期待!PCIeのGen2はVirtexは当然としてSpartanはどうなのかな?HD−SDIは出来るのかな?DDR3は?、IOの最大転送レートは?、新機能ブロックは?...期待がふくらむばかりだ!それからISEも新しくなれば念願のSystemVerilog対応も!投稿時刻(14:47)│コメント(0)│Xilinxデバイス2008年11月14日DesignWaveMAGAZINE休刊とても貴重な情報源だったので残念でしかたがありません。何らかの形で復活する事を期待しています。投稿時刻(17:29)│コメント(0)│書評2008年02月19日Virtex5FXTVirtex5FXTが4月発表らしい。PPC440がハードマクロで入っているので、これの開発環境としてEDKもリリースされるのかな?Virtex5はVirtex4の教訓からESで、ある程度評価してから発表するとの事なので実際に使える日も近そうだ。投稿時刻(17:30)│コメント(0)│Xilinxデバイス2008年02月18日ISE10.1このアンサーによると、ISE10.1が2008年3月にリリース予定らしい。いつものようにSPなしだとバグだらけで使い物にならないと思うが、SVには期待している。さぁ、予定通りに3月SVサポートのISE10がリリースされるか?投稿時刻(09:48)│コメント(0)│Xilinxツール2008年01月08日XSTでSystemVerilogサポートXilinxのアンサー#15390に、こんな記述がある。Editorは、Blogをオフラインで書くことが出来る。画像の添付なども簡単にできるらしいし、テンプレートを設定すればBlogのイメージを確認しながら編集できる。ソースコードなんかも今までのように表示されれば最高なのだが、どうだろう?今回の投稿で初めて使うので、ちょっとおためし。Kitが半額の$24.97になると言うメールが来た。興味が無かったが、ふと「この基板からJTAGのピンをコネクタに出せばUSBダウンロードケーブルになるのでは?」と思った。USBダウンロードケーブルは25000円位するのでもし使えるなら相当お買い得だと思う。誰かこの件に関して情報を持っている方いますか?後でSpartan3Eスタータキットでは試してみる事にする。KitはUSBダウンロードケーブルとしては使用できそうになかった。今日、Xilinxから「高速メモリインターフェイスソリューションと設計手法」のウェブセミナの案内が来た。受講しようと思いアクセスしてみたが一向に再生されない...?仕方がないので家で見ることにしてとりあえずPDFをざっくり見てみた。内容はいつものリアルセミナとほぼ変わらずと言ったところだ。これを見て、TEDとDENALIがDFI準拠「DDR2PHYデザイン」を発表してデータも入手していた事を思い出した。これは、DDR2PHY部分をブラックボックス(DFI仕様)にしてASICへの移植性を高めようとする物だ。うちの会社でもたまにFPGAで評価してG/A等を作ったりする事があるので、このような共通仕様があるととても助かる。逆に移植が無くFPGAが最終デザインの場合は自分でPHY部分も作った方が良いと思う。それは、後で問題があった場合にブラックボックスよりは調べやすいし、PHY部分は往々にしてビットエラーなどが起こりやすいからだ。新プロジェクト最近、仕事が忙しくてBLOGの更新が滞っている。言うのも、進行中のプロジェクトがあるのに、新しいプロジェクトが立ち上がって、更にもう一つ案件があり、これも動き出しそうな雰囲気だ。今後もBLOG更新のペースは上がらないと思うが、なるべく技術的な情報を投稿していきたいと思う。物理タイプとは、時間や電圧、電流、距離などの物理的な物を表すために使用するデータタイプだ。VHDLには元々「time」が物理タイプとして定義されており内容はスタンダードパッケージに書かれている。この「time」を代表とする物理タイプはpsやnsなどの単位を指定できるのが大きな特徴で、新しい単位を持ったデータタイプを作成する事も出来る。以下の例は距離の物理タイプを新たに定義して、その距離を遅延時間に変換する関数も用意した。distance_pkg;このように最小単位からの係数を変えることで、ミリやインチなどを混在して記述出来る事も便利な点だ。距離を遅延時間に変換する関数は、「time」がシミュレーションのレゾリューションによって最小単位が変わる特殊な物理タイプのため、まずレゾリューションを取得してから変換している。「双方向バスの遅延モデル」の遅延値を入力する部分を、距離を入力する様に簡単に置き換えることが出来るので、ケーブルのモデリングなどに使用するとおもしろいと思う。投稿時刻(08:58)│コメント(0)│VHDL2007年09月29日PC故障!家で使っているPCのOS(WinXP)が起動しなくなった。Windowsの起動ロゴ直後にブルー画面で「C0000218」のエラーになる。ネットでコレを調べたら、Windows最凶クラスのエラーらしい...データだけでも復活させようと試せる事は山ほどやってみたがやっぱり無理だった。調べていくうちにエラーの原因はどうやらHDDにある事が分かった。悪いことにこのHDDはオンボードのRAIDコントローラでRAID0(2台)を組んでいるのでHDDだけ他のPCに持って行ってデータを抜く事も出来ない。仕方なく、領域解放&フォーマット、あぁ元の環境に戻すのにどれだけ時間がかかるのやら...投稿時刻(22:27)│コメント(2)│日記2007年09月28日ChipScopeもどき?今日、OPENCORESに「openVeriFLA」というロジアナ機能のIPが公開されているのを知った。詳細を見てはいないが、想像ではChipScopeの様な物では無いかと思う。ChipScopeまでの機能があるとは思えないので、現状コレを試そうとは思わないがソースコード(残念ながらverilog)が公開されているのでChipScopeでは出来ない事が出てきた場合、コレをベースに作り込む事は出来ると思う。ChipScopeを個人で購入する人は少ないと思うが、コレはGPLなので、お金がかからなくてすむ。openVeriFLAのさらなる進化に期待したい。「双方向バスの遅延モデル」FPGAとメモリモデルを接続する場合等に「双方向バスでネットの遅延を挿入したい」と思った事が何度かある。安直に「after文」でお互いを代入しても'X'になった以降はずっと'X'のままでうまくいかない。すれば双方向バスに遅延を挿入する事が出来るのだろうか?簡単な様で、これが結構難しい。考えた末に、双方向バスの遅延モデルを作成できたので紹介する。モデルの動作を確認した回路。双方向の遅延モデルだが、テストで入力は使用しないので出力のみを入れた。このPORTAとPORTBに対してテストベンチから波形を入力する。波形を入力するテストベンチはこれ。BEHAVIOR;そして動作結果の波形はこんな感じ。PORTAから出力した値は、すぐにPORTA_Sに反映されるがPORTB_Sには遅延が入っている事が分かる。逆にPORTBから出力した値は、すぐにPORTB_Sに反映されるがPORTA_Sには遅延が入っている。同時にPORTA_SとPORTB_Sの値を変化させても遅延時間分のショートが'X'で再現されている。次に肝心なモデルのソースがこれ。BEHAVIOR;PORTA_XとPORTB_Xに、それぞれの双方向ポートの値をコピーし、それを遅延させて反対側のポートに代入している。この双方向ポートの値をコピーする時、一度モデル側のドライバを'Z'にして本当の相手側ポートの値を取得する必要がある。変な「WAIT文」、これは双方向ポートのトランザクションは時間単位あたり1度しか動作させたく無いのに対し反対側の双方向ポートをコピーした値のイベントは何回でも動作させるための条件だ。双方向ポートのトランザクションを時間単位あたり1度しか動作させたくない理由は、自分でトランザクションを発生させているためこの条件が無いとループに陥ってしまうからである。双方向ポートの一番最初のトランザクションで動作させているため、トランザクションが発生したデルタ時間の後のデルタ時間に値が変化するような信号ではうまく動作しない。「アナログスイッチのモデリング」もそうだが、この手の手法はこの制限がつきまとってしまう。「属性"DRIVING_VALUE"の使用法」VHDLでは出力ポートに割り当てた値を内部で参照する事は出来ない。所が、VHDL93でコレを可能にするアトリビュート「DRIVING_VALUE」が追加された。以下に使用例を紹介する。rtl;これは単純な8ビットのカウンタで、クロックを入力するとカウントアップするだけの回路だ。通常は内部にカウント信号を定義してその信号をカウントアップし、出力ポートに割り当てるような記述になると思うが「DRIVING_VALUE」を使用すると出力ポートの値を直接参照してカウントアップし、そのまま出力ポートに代入する事が出来る。便利と言えば便利だが、自分は出力ポートに出ている信号は内部参照されていないことを前提にソースコードを追いかけるので、出来るだけ使用しないようにしている。使用しない決定的な理由として、XSTではサポートしていないと言う事がある。それでも、シミュレーションモデル等で出力ポートを直接チェックしたい時には便利に使えるかもしれない。投稿時刻(21:34)│コメント(0)│VHDL2007年09月20日ISE9.2のインストール急遽、ISE9.2を使う必要が出てきた。インストールしたいのだがXPおよびVISTAが入った適当なPCが見つからない。仕方が無いのでサポート外のWindows2000にインストールしてみた。DVDを挿入し、インストーラでOSチェックが入っていないことを祈りながらセットアップを開始.....どうやらチェックしていないようだ。次に、「ダウンロードケーブルのドライバ」これは気持ちが悪いのでインストールのチェックを外した。コピーを開始し問題なく終了。次に、サービスパック、IPアップデート、Chipscopeを入れて無事最新の状態に....と思いきや「エラーメッセージ」が!何だこのメッセージ...Webアップデートでネットワークが切断されたと出ている。IEでは問題ないのでネットワークがおかしいとは思えない。...色々調べたらHDDの残り容量が少ないようだ。空き容量を増やし再チャレンジしたら無事完了した。それにしてもISE9.2フルインストールで7Gbyte近く消費している。ん!「.backup」フォルダこれが約1.5Gbyteこれって消して良いのかな?フォルダの中を見てみると消しても良さそうなので全部削除!それでも、約5.5Gbyte...ちなみに最新の状態でISE9.1は約4.5Gbyte、ISE8.2は約3.8Gbyteなのでバージョンアップ毎に1Gbyteずつ増えている計算になる。EDK8.2は約800Mbyte、EDK9.1は約900Mbyte...なんか、かわいく思えてくる。無事、夏休みを終了して今日から仕事に復活した。山のようなメールの処理と休みぼけが重なってまともに仕事できません。そうそう、今日たった3日休んだだけなのに情報社会から一人取り残された気分になった。これって高校生が携帯電話取り上げられた時と同じような感覚なのかな?そうだとすると、ちょっとノイローゼ気味!?投稿時刻(21:06)│コメント(0)│日記2007年09月11日1週間くらい更新できないかも...遅い夏休みです!家族サービスする予定。雨だ...台風よりましだけど。variableの使用法」VHDL93から「共有変数」が使用可能になりVHDL2002で使用方法が変更になった。XSTはVHDL93をサポートしており限定的ではあるが、共有変数を使用できるみたいなのでVHDL93とVHDL2002両方の使い方を紹介する。(ただし今回、紹介する例はXSTで合成出来ない。合成するためには同じアーキテクチャ内から共有変数にアクセスする必要がある。b;この例では、2つのアーキテクチャからパッケージで宣言した共有変数にアクセスしている。b;VHDL2002では単純にアクセスするのでは無く、プロテクトタイプを宣言しデータにアクセスするための関数を定義してその関数を通してデータにアクセスする。C++のクラスでプライベートのデータにパブリックのメソッドからアクセスするようなイメージだ。今回、共有変数の使用例を紹介したがXSTでは同じアーキテクチャ内からでしかアクセス出来ない等の制限があり余り利用価値がない。別のアーキテクチャからアクセス出来ればデバッグ時に信号を引き出す手段として有効利用できたと思う。私はコレがやりたかったのでとても残念に思う。今回の例は変数の使い方としては良くない例で、同じ時間に違うプロセスからリードライトしているのでシミュレータによってはタイミングが変わるかもしれない。共有変数の動作を確認する目的で作成している。SH_INT;"でイベントが発生しないのでCLKイベントにしました。配置と配線の指定XilinxのFPGAで配置と配線を指定し再インプリメントしてもそれを固定する方法を紹介する。・配置配線を指定したい回路を適当にインプリする・FPGAエディタで配置配線を編集する・配置配線の指定を行うUCFファイルを出力するこのような感じになる。画像を織り交ぜて解説すれば分かりやすいのだが、大変なのでテキストのみでご勘弁を。それでは、詳細のオペレーションを紹介する。その一(配置)�配置配線指定したい回路を作成し使用するFPGAにインプリする。�FPGAエディタでそのデザインを開く。�ここで、UCF等で配置固定していなければ当然適当に配置されている。�配置指定したいPINおよびSLICEで適当に配置されてしまったSITEと配置指定先のSITEを選択してSWAPボタンを押す。�これでSITEが入れ替わるので、これを繰り返し目的の配置を完了する。その二(配線)�現状適当に配線されていて配線指定したいネットを選択しUNROUTEボタンを押す。これでラッツネットになる。�ラッツネットのドライバからレシーバまで配線したい順番に選択して行き最後にROUTEボタンを押す。これで選択した順番に配線される。ここで注意点:・スイッチボックスは選択しても配線出来ないので配線に使用するネットを直接選択して行く。・レシーバが複数あっても順番に指定すればOK、配線指定しなくても良いレシーバは選択に含めず配線指定のネットを配線してからドライバ、レシーバを選択してAUTOROUTEボタンで配線する事もできる。・配線リソースが表示されていなければ選択も出来ないのでツールバーのレイヤーで配線が表示されるようにしておく。�これで配線が出来るので、これを繰り返し目的の配線を完了する。Constraintsを選択してダイアログを出す。�ダイアログのリストから配置配線指定を行いたいネットを選ぶ。Constraintを選択する。�これで、配置配線を固定するUCFが生成されたので再インプリすればFPGAエディタで編集した回路が再現出来る。これは単純な例だが、これの応用で色々出来ると思う。Routing制約には対応デバイスに制限がある。秀丸エディタV7.00リリース秀丸エディタのV7.00がリリースされた。今回の注目は補完機能だが、今まで補完マクロを使っていたのでそれほど魅力を感じなかった。試してみるとやはりネイティブの方が使いやすい。それでも、補完マクロの良いところもある。キーワードと雛形を登録すれば補完で一致した時、雛形を生成出来る。process;」まで補完出来る。ネイティブ補完と補完マクロは両方同時に使って使い分けるのが良さそうだ。V6.00から入っていたがアウトラインと折りたたみ機能も有効に使えそうだ。アウトラインや折りたたみ、補完辞書などをVHDL用に設定たら、こんな感じになる。テキストエディタが便利になりすぎると、言語のキーワードスペルを覚えられなかったり、忘れたりしそうだ。「バージョンレジスタを付けたけど更新するの忘れた!」なんて事ありませんか?私はよくあります...そこで!論理合成するたびに自動的にインクリメントしてくれる信号を作ってみました。これは合成時に値が決定するので回路のリソースは消費しませんし、自動なので更新を忘れることもありません。使い方は、FPGAのトップから本パッケージの関数を呼び出すだけです。以下に使用例を紹介します。FPGAのトップファイルにこのパッケージを宣言する。テストベンチから「SIM_MODE」を1にして呼び出す。合成の時はディフォルトの0が自動的に割り当たる。この呼び出しで論理合成する毎にインクリメントされた値を返す。top;動作の仕組みは、論理合成時に指定されたバージョンファイルからバージョンデータを読み出しインクリメントしたバージョンデータを書き込むだけです。詳しくはパッケージファイルにコメントを書いていますのでそれを見てください。参考ファイルはココ、バージョンファイルの参考例はココからダウンロードできます。「もっと良い方法しってるよ!」って人は是非教えてください。投稿時刻(20:14)│コメント(6)│VHDL熱対策の参考資料いつも楽しみにしているCQ出版社「組み込みネット」の技術解説で熱対策が紹介されていた。ここ数年FPGAの熱対策に泣かされることが多かったが、同じ問題を抱えている人が多いようだ。前にも書いたがFPGAの代理店などがファンメーカと組んで「熱対策ソリューション」ってな感じで売り出せば結構ニーズあると思うけど...ほしいの私だけ?そうそう、忘れていたが数年前「まず貼る一番」という製品が沖電気から発売された。これは熱を遠赤外線に変換して放熱するらしい。久しぶりに調べてみたら特性が良くなったらしい。試したことが無いので効果のほどはわからないがWebを読む限りある程度使えそうだ。ジェルテックにも色々な熱対策製品が発売されている。問い合わせ・連絡先ta_bo__@livedoor.com本サイトは以下のアクセス解析を使用しております。