私は2つのプログラムで作業してきました.llvmのoptとクリフォードウルフのyosysはどちらもパス用の同様のインターフェースを持っています.(それらは最適化パスとして共有ライブラリを使用します)
llvm opt パスによって生成されたデータに基づいて、yosys.h の特定のデータ構造と関数を使用して、デザイン モジュール (その後、Verilog でファイルに書き込まれます) を構築したいと考えています。
問題: llvm-opt のパスで yosys.h の関数やデータを使用したいと考えています。そのようなコードをコンパイルするにはどうすればよいですか (編集: また、llvm-opt または yosys または別のバイナリ実行可能ファイルで実行します)。個別に、個別のパスとしてコンパイルおよび実行できます。
YOSYS PASSのコンパイル
gcc `yosys-config --cxxflags --ldlibs --ldflags` --shared yosyspass.cpp -o yosyspass.so
そしてそれを実行します
yosys -m yosyspass.so verilogfile.v
コンパイルLLVMパス
gcc `llvm-config --cxxflags --ldlibs` --shared llvmpass.ccp -o llvmpass.so
そしてそれを実行します
opt -load ./llvmpass.so -llvmpass Somefile.bc
しかし、 llvm 、 yosys の両方のコンポーネントを持つコードを構築する方法は? そしてそれを実行する方法は?
yosysのソースコードをあまり変更せずにこれを実現するにはどうすればよいですか? これはすべて、llvm-opt パスの verilog 生成バックエンドを作成しないようにするためです。
私の解決策の1つ:
メタプログラミング: つまり、コンパイルして yosys パスとして実行すると結果が得られるコードを生成します (llvm opt 入力に基づく Verilog デザイン ファイル)。
共有ライブラリを構築する際に何か基本的なことが欠けているのではないでしょうか? 私はこの種のことに慣れていません。任意の入力を歓迎します。
このプロジェクト (無関係ですが) は、Rotems C-to-Verilog および toronto の legup HLS ツールの univ に似ている可能性があります。