問題タブ [system-verilog-dpi]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
verilog - DPI を使用してタスクを 'C にエクスポートする
DPI を使用して C ソースに接続された Verilog ベースのテストベンチがあります。現在、DPI を使用して、ファームウェア全体を作成する予定です。これを行うには、3つのことが必要です
- レジスタ読み取り
- レジスタ書き込み
- 割り込みハンドラ 理解したとおり、レジスタの読み取りと書き込みは、RTL テストベンチからエクスポートする必要があるタスクです。そして、割り込みハンドラー ('C から関数をインポートして実装しました)。
ほとんどのケイデンス ドキュメントを確認しましたが、有用なヒントは見つかりませんでした。ケイデンスユーザーコミュニティにも登録しましたが、登録が承認されるまで質問できないようです。
誰かがこれを知っている場合に備えて、助けていただければ幸いです。
c - システム Verilog コード内に fftw C 関数呼び出しを統合する
Linux システムに fftw C ライブラリを正常にインストールしました。fftw c の詳細はこちら => http://www.fftw.org/ fftw C 関数を正常に呼び出すことができるサンプル C コードがあります。以下は、C コードと C コードを実行するためのコマンドです。 コード:
以下の gcc コマンドでこのコードを正常に実行できます: gcc -g -Wall -I/home/usr/fftw/local/include -L/home/usr/fftw/local/lib fftw_test.c -lfftw3 -lm -o fftw_test
ここで、DPI メソッドを使用してシステム Verilog 内でこの関数を呼び出したいと思います。私の問題を示す前に、正常に実行できた DPI-C/systemverilog テストケースのサンプルを以下に示します。
DPI を使用してシステム Verilog から上記の C 関数を呼び出す:
最後に、これを irun コマンド irun -f run.f で正常に実行できました。ここで、run.f には次のコマンドが含まれています。
今、私の本当の問題は、 fftw C をシステム Verilog にリンクしようとすると、実行できないことです。以下は私の C コードです。これは、私が投稿した最初の C コードとかなり似ています: C コード:
上記の C 関数を呼び出す私のシステム Verilog は次のとおりです。
そして最後に、いくつかの方法で実行してみました。私が試したいくつかの方法について説明します。
しかし、これにより以下のエラーが発生します: building library run.sold: /home/usr/fftw/local/lib/libfftw3.a(mapflags.o): relocation R_X86_64_32 against `.rodata' can not be used when make a shared object ; -fPIC で再コンパイル /home/usr/fftw/local/lib/libfftw3.a: シンボルを読み取れませんでした: 不正な値 collect2: ld が 1 つの終了ステータスを返しました make: * [/home/usr/DPI/./INCA_libs/irun. lnx8664.12.20.nc/librun.so] エラー 1 ncsc_run: *E,TBBLDF: テスト ライブラリのビルドに失敗しました /home/usr/DPI/./INCA_libs/irun.lnx8664.12.20.nc/librun.so
2 番目の方法: 1.gcc -fPIC -O2 -c -g -I/home/ss69/fftw/local/include -I。-L/home/usr/fftw/local/lib -L. -o fftw_test_DPI.o fftw_test_DPI.c -lfftw3 -lm
2.gcc -shared -o libdpi.so fftw_test_DPI.o
3.irun -64bit -sv_lib libdpi.so fftw_test.sv
これにより、以下のエラーが発生します: Loading snapshot worklib.top:sv ................... Done ncsim> run Entering in SystemVerilog Initial Block
ncsim: シンボル検索エラー: ./libdpi.so: 未定義のシンボル: fftw_malloc
私の投稿をフォローするのはちょっと難しいことは承知していますが、助けていただければ幸いです。
c++ - DPIインポート機能を使用してオープン配列を介してSVとC++の間で双方向にデータを渡すにはどうすればよいですか
私の目標は、開いている配列を C++ で埋めることです。ステージは以下の通り。1. SV: サイズのアンパックされた配列を定義し、インポート関数でオープン配列を介して送信します。2. C++: 開いている配列を埋めます。3. SV: アレイを使用します。
サイズのアンパックされた配列の場合、問題はありません。しかし実際の状況では、配列のサイズは頻繁に変更され、コンパイルされた C++ 関数は毎回再コンパイルする必要があります。この状況を回避するには、オープン配列を使用して、C 関数がサイズをチェックし、それに応じてデータを埋める必要があります。
以下では、ソースを簡略化し、重要な部分のみを示します。インポート関数 svcpp は SV で呼び出され、C++ で実行されます。引数はオープン配列 i[] で、そのハンドルは C++ 側では h です。C++ ソースをコンパイルすると、"error LNK1120: unresolved externals" というエラーが発生します。
何が問題ですか?
SV側:
C++ 側:
c - SystemVerilog DPI-C ポインター
SystemVerilog と C の間の DPI 接続について質問があります。具体的には、次のような C 関数があります。
私がそれに渡したいのはbit[7:0] my_darray[];
それを行う最良の方法はどれですか?前もって感謝します。
c - DPI-C を使用して Systemverilog インタープリターを埋め込むには?
問題の説明:
SystemVerilog で設計し、同じ言語でテストベンチを作成します。インタープリターを e. 理想的には、シミュレーターが何らかの行にヒットしたときに、シミュレーション時にターミナル ポップアップが表示されるようにします。
考えられるアイデア:
DPI-C を調べたところ、インタープリターから実行するには、プロジェクト内のすべてのタスクを「エクスポート」する必要があるようです。ただし、これを自動的に行う方法や、より良い方法があるかどうかはわかりません。さらに、C に 2 番目のシェルを開いて SystemVerilog タスク (実行したい) を入力させる方法がわかりません。
これは私の同僚が繰り返す問題であり、テストベンチをコンパイルするまでに 10 分間待たなくても済むようになれば、人生の苦痛が大幅に軽減されます。