Modelsimテストベンチを外部刺激とインターフェースできますか


10

私は、ドライバーソフトウェアとFPGA開発の両方を行っているチームに取り組んでいます。FPGAシミュレーションはModelsimで行われ、ドライバーソフトウェアはCで記述されています。統合リスクを最小限に抑えるために、ハードウェアに配置する前に製品の2つの半分の間の相互作用をモデル化できるようにしたいと思います。

Modelsimが、時間と値を入力するテキストファイルの形式で刺激を提供できるテストベンチをサポートしていることを知っています。Modelsimに、パイプを外部アプリケーション(ドライバーなど)に接続し、ソフトウェアが値をテストベンチにプッシュして、後で結果を観察できるような分散シミュレーションを実行できるモードがあるかどうか疑問に思います。

私がテキストファイル入力で行うことができないトリックは、製品の2つの半分を相互作用させることです。ソフトウェアで値をFPGAシミュレータに「書き込み」、結果を読み取ってから、読み取った結果に応じて新しい値をFPGAに書き込む必要があります。テキストファイルでは、入力が出力から独立している必要があります。

StackExchangeとgoogleの両方で検索を実行しましたが、探している動作を特定したり、存在しないと判断したりするために検索を絞り込むためのキーワードセットを思い付くことができませんでした。

回答:


9

Unix名前付きパイプを介したModelSimシミュレーションの外部制御

要約:この論文では、外部プログラムを介してModelSimシミュレーションを制御する方法を紹介します。ModelSimと外部プログラム間の通信は、名前付きパイプ(「FIFO」)を使用して行われます。名前付きパイプは、各アプリケーションに通常のファイルとして表示されます。プロセス間通信(IPC)でのFIFOと通常のファイルの主な違いは、FIFOへの書き込みを試みるアプリケーションは、別のアプリケーションがFIFOからの読み取りを試みるまで一時停止され、その逆も同様です。これにより、IPCの信頼性が向上します。この方法の主な利点は次のとおりです。1)一般的なファイル操作のみが使用されるため、外部アプリケーションはほぼすべてのプログラミング言語で記述できます。2)検証エンジニアは、最小限の書き換えで標準検証ソフトウェアパッケージを再利用できます。3)複数の被試験デバイス(DUT)が互いに通信することにより、最終システムのより正確なシミュレーションを作成できます。4)ModelSimのシミュレーションエンジンがマルチスレッド化されていなくても、シミュレーション全体のパフォーマンスをシングルシステムイメージ(SSI)クラスターまたはマルチプロセッサーコンピューターで簡単に向上させることができます。ビヘイビアーVHDLのファイル入力/出力(I / O)の実装により、ModelSimはこれらのFIFOを直接読み書きできません。この制限の回避策は、ModelSimの外国語インターフェイス(FLI)を使用して示されます。このペーパーでは、VHDLの次世代浮動小数点ルーチンの検証に使用されているこのメソッドの実際の例も示します。具体的には、C ++で記述されたオープンソースのIEEEコンプライアンスチェッカーソフトウェアパッケージ、

また、外部プログラミングインターフェイスを必要とするFIFOの問題は、VHDLファイルI / Oがデータが利用可能になるまでブロックを適切に処理できないことです。

残念ながら、論文はウェブ上で利用できません。

Model Sim®Foreign Language Interfaceバージョン5.6d、PDF 3.4 MB。

c – VHDLコシミュレーションおよびLinux x86プラットフォームのシミュレータ制御用のModelSim外国語インターフェイスの使用Andre Pool-fli@andrepool.com-バージョン1.5-2012年11月作成、最終更新2013年9月、PDF、320KB(FIFOについては言及していません) 。

c – VHDL協調シミュレーションおよびLinux x86プラットフォームのシミュレータ制御(対応するgithubコードリポジトリ)でのModelSim外部言語インターフェイスの使用

もう少しオープンソースがあり、ghdlのVHPI外部関数呼び出しを使用します: vhdl / src / sim / ghdlex_mein at master・texane / vhdl・GitHub

そして、GHDL_discussリストのMartin Strubelによる更新のように見えます:http : //www.section5.ch/downloads/ghdlex-0.051.tgz 2014年4月14日のfifo.cの日付を示しています。

FLIは定義上、VHPIサポートの状態(IEEE Std 1076-2008、VHDL LRMの一部です)がわからないModelsimに固定します。

ソケットまたはファイルFIFOを使用すると、レートバッファリングを提供することにより、ソフトウェアおよびハードウェアプロセスを異なるレートで実行できます。ソフトウェアシステムがハードウェアシミュレーションよりも桁違いに速い場合は、必ずしもそうである必要はありません(通常はそうです)。

VHDL、参照に機能をUNIX(POSIX)を提供するための努力がありますパブリックドメインのVHDLパッケージ以前の紙へのポインタが含まれ、SNUGサン・ホセは2002 VHDLテストベンチのVHDLテストベンチC / UNIX関数の1 C / UNIXの機能スライドと一緒にUnixパイプとrshに関する追加のメモを設定ます。これは、名前付きパイプを開いたままにする方法を示しています。すべてのVHDLコードもダウンロードできます。これはあなたの目標を達成する最も簡単な方法につながるだろうと私は思います。

では、Modelsimにネイティブでパイプに接続できるものはありますか?おそらくそうではありませんが、Windowsではもっとそうです。できますか?はい、しかし方法は気弱な人のためではありません。データの可用性を待って、一方または他方、あるいは両方をデッドロックすることができます。

理論的には、外部プログラミングインターフェイスを使用すると、「パイプ」の一方または他方の端に子プロセスを生成できます。これは、共有メモリモデルを使用して2つの端の間で通信できることも意味します。


素晴らしく研究された答えをありがとう!「Foreign Language Interface」は、私が必要とするリファレンスドキュメントをプルアップするために必要なフレーズでした。早い段階でここに統合されます。
Cort Ammon 2014

5

あなたはCocotbを見てみたいかもしれません。これはPythonベースの協調シミュレーションライブラリであり、設計目標の1つは、記述された方法論を有効にし、変更されていないプロダクションソフトウェアとRTLを簡単にシミュレーションすることでした。

リポジトリpingに対して変更されていないコマンドを実行する例と、コードをウォークスルーするチュートリアルがあります。

ユーザースペースドライバー、構成ユーティリティなどの場合、ソフトウェアを変更せずに実行するためのオプションがいくつかあります。

  1. デバイスへのアクセスがいくつかの関数(たとえば、読み取りと書き込みの呼び出し)に要約される場合、シミュレーションに対するアクセスを実行中にブロックするシミュレーションライブラリに対してリンクできます。これは構成に非常に適しています。

  2. ソフトウェアがメモリマップIOを使用し、ポインターを逆参照してデバイスにアクセスする場合、状況は少し複雑になります。保護ビットを設定してアクセストラップする共有メモリ領域を作成する必要があります。

ネットワークを使用している場合は、TUN / TAPなどの仮想インターフェースを使用できます(上記のチュートリアルを参照)、USB転送または他の一般的なホストインターフェースにも同様のオプションがあるのではないかと思います。

Cocotbは、さまざまなシミュレーターとVHDL(VHPI経由)またはVerilog / SystemVerilogデザイン(VPI経由)で動作します。残念ながら、ModelsimはVHPIを実装していないため、VHDLユーザーとしてFLIに悩まされていますが、FLIはインターフェイスとしてはそれほど有用ではありません。あなたは可能性がメンターでうめき声、業界標準のインターフェースを実装しようと彼らを説得するために、またはあなたがVHPIをサポートする別のシミュレータを評価することができます。

残念なことに、VHDL関連の機能を実装するのにかかる時間から判断すると、ツールベンダーは一般的にVHDL市場に特に関心を示していないようです...

免責事項:私はCocotb開発者です。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.