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 回答