1

インターフェイスメソッド/タスクがそのサイクルで呼び出された場合にのみ、そのサイクルでアサートするイネーブル信号を合成することは可能ですか? 次のようなものが必要です。

interface RAM (logic clk);
  logic enable;
  // ...

  always_ff @(posedge clk) enable = 0;

  task Read(input address_t address);
    enable = 1;
    // ...
  endtask

  //...

  modport server(input clk, input enable, ...);
  modport client(input clk, export Read, ...);
endinterface

上記は明らかに違法です。私が持っていた唯一のアイデアは、以前の状態を保存し、現在と以前の割り当てがalways_ffで同じかどうかを比較し、タスクの呼び出しで否定することです。ただし、これは実用的ではないようです。非常に具体的であるため、P&R 中に最適化される可能性は低くなります。私が本当に必要としているのは、割り当て時に割り当てられた値を受け取り、それ以外の場合はデフォルト値になるというセマンティクスを持つ論理要素です。

4

1 に答える 1

2

単一のプロセスからのシグナルにのみ書き込むことができます。ただし、同じプロセスから同じ変数を複数回書き込むことができ、最後の書き込みが優先されます。だからあなたはすることができます

always_ff @(posedge clk) 
    begin 
    enable <= 0;
    case(opcode)
    READ_OP: Read(...);
    WRITE_OP: Write(...);
    endcase

<=常に NBAを使用してタスク内に割り当てる必要があることに注意してenableください (また、読み取り/書き込みに時間がかからない場合は、タスクの代わりに void 関数を使用してください。

于 2013-10-10T03:17:39.097 に答える