启用功能/方法调用

时间:2013-10-09 04:09:20

标签: verilog system-verilog hdl

当且仅当在该循环上调用接口方法/任务时,是否可以合成在循环中断言的使能信号?需要类似以下的东西:

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期间不太可能被优化掉。我真正需要的是一个具有语义的逻辑元素,当分配给它时,它会获取指定的值,否则它将变为默认值。

1 个答案:

答案 0 :(得分:2)

您只能写入来自单个进程的信号。但是你可以从同一个进程多次写入同一个变量,最后写入获胜。所以你可以做到

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

请注意,您必须始终使用NBA <=在任务中分配enable(如果读/写不消耗时间,则使用void函数而不是任务。