An interface block in SystemVerilog can use a clocking block to specify the timing of synchronous signals relative to the clock.

Key Points

@(posedge clk)
@(posedge clk1 or negedge clk2)

This synchronization prevents race conditions between the testbench and the DUT.
Once a clocking block is defined, your testbench can use:

@my_interface.cb

instead of explicitly writing out the clock and edge.
If the clock or edge changes, only the clocking block definition needs to be updated — not the entire testbench.


Interface with a Clocking Block

interface arb_if(input bit clk);
  logic [1:0] grant, request;
  logic reset;

  // Declare clocking block
  clocking cb @(posedge clk);
    output request;
    input grant;
  endclocking

  // Modport for testbench
  modport TEST (clocking cb, output reset);

  // Modport for DUT
  modport DUT (input request, reset, output grant);
endinterface

Explanation