インターフェイスを関数またはタスクに渡す合成可能な方法はありますか? 私のユースケースは次のとおりです。いくつかの関数を含むパッケージがあります(ただし、それが役立つ場合はそれらをタスクに変換できます:))、これらはすべてモジュールで使用される可能性があり、モジュールのポートにアクセスする必要がある場合があります。通常、すべてのポートを にグループinterface
化し、それをモジュールに追加して、それをvirtual
関数に渡します。ただし、私の合成ツールのマニュアルには、virtual
サポートされていないと記載されています。
何か不足していますか?signal
VHDL の引数と同様に、合成用のタスクにポートを提供する方法が必要ですか?
いくつかのコード例:
module mymod (
input logic clk,
input logic rst,
input uint16_t adr,
input bit cyc,
input uint32_t dat_m,
input bit stb,
input bit we,
output bit ack,
output uint32_t dat_s
);
always_comb begin
mypack::do_something(a, b, c, adr, cyc, dat_m, stb, we, ack, dat_s);
endmodule
理想的には、タスクmypack::do_something
はポートをポートとして使用できます。つまり、ポートの変更を待機したり、ポートに値を書き込んだりできます。signal
基本的に、VHDL で(variable
または引数ではなく) 引数として渡すことで実現するのと同じですconstant
。