1

変数 paddr diffrent 値を与えるタスクを作成しようとしています:

module paddr1 ;
task paddr1;
input [10:0]paddr;
input clock;

 @(posedge clock)
begin
paddr=10
#100; 
paddr=20; 
#100; 
paddr=30; 
#100;  
paddr=40;
#100;   
paddr=50;
#100;   
paddr=60;
#100;  
paddr=70;
#100; 
paddr=80;
#100;

end
endtask
endmodule

テストベンチからこのタスクを呼び出そうとしましたが、次のように書きました: paddr1 (paddr,clock);

コンパイルはパスしますが、シミュレーションを実行しようとすると、「paddr1」への未解決の参照というエラー メッセージが表示されます。回答ありがとうございます。タスクは別のファイルにあり、テスト ベンチにあります。

ありがとうヤニフ

4

2 に答える 2

5

モジュール内にタスクがあります。テストベンチでモジュールをインスタンス化しましたか? 実行した場合は、モジュール内を覗いてタスクを呼び出す必要があります。

module tb();

  paddr1 U0; // instantiate module with the task in it...

  initial begin
     U0.paddr1(paddr,clock);
  end

endmodule

ただし、はるかに深刻な問題があります。Verilog では、引数は値によってタスクに渡されます。これは、'clock' の値が、タスクへの呼び出しの有効期間にわたって固定されることを意味します。あなたのタスクは時計のポーズエッジを見つけることはなく、永遠に待ちます。また、タスク入力に割り当てていますが、これは役に立ちません。

于 2009-04-18T18:25:17.067 に答える
0

initialタスクではなくブロックが必要だと思います。paddr と clock をモジュールへのポートとして配線し、initial beginブロック内で paddr を変更します。

もちろん、便利な場所で paddr1 をインスタンス化する必要があります。

于 2009-11-10T05:13:39.743 に答える