如何从系统 verilog 接口传递具有不同极性的多个时钟块?

How do I pass multiple clocking blocks with different polariy from an system verilog interface?

我有一个系统verilog接口

interface XZY(input clk, input reset, input a, output b);
    clocking cb @(posedge clk);
        input a;
        output b;
    endclocking: cb

   modport master(clocking cb, input reset);


endinterface: XYZ

我正在将接口作为 virtual interface 传递给我的驱动程序。

驱动程序正在使用 moport(master).

现在我需要访问驱动程序中时钟的 posedgenegedge

我可以通过 @cb 轻松访问 posedge

如何访问 negedge

我是否需要为 negedge 创建另一个 modport/clocking block 并将其单独传递给驱动程序?

如果您选择使用时钟块作为访问接口中信号的唯一机制,那么您将必须创建另一个时钟块。我通常不会在验证接口中使用 modports,但您必须将时钟块添加到现有的 modport 或添加另一个。

我会推荐一个用于正边沿时钟和负边沿时钟的时钟块。您可以在您的 modport 中列出两个时钟块。在 driver/monitor.

中不需要 modport

如果您想使用相同的时钟块动态选择极性,请在此处查看我的回答:。这适用于极性模式开关;如果在同一笔交易中需要两条边,我不会推荐它。