如何从系统 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
).
现在我需要访问驱动程序中时钟的 posedge
和 negedge
。
我可以通过 @cb
轻松访问 posedge
。
如何访问 negedge
?
我是否需要为 negedge
创建另一个 modport
/clocking block
并将其单独传递给驱动程序?
如果您选择使用时钟块作为访问接口中信号的唯一机制,那么您将必须创建另一个时钟块。我通常不会在验证接口中使用 modports,但您必须将时钟块添加到现有的 modport 或添加另一个。
我会推荐一个用于正边沿时钟和负边沿时钟的时钟块。您可以在您的 modport 中列出两个时钟块。在 driver/monitor.
中不需要 modport
如果您想使用相同的时钟块动态选择极性,请在此处查看我的回答:。这适用于极性模式开关;如果在同一笔交易中需要两条边,我不会推荐它。
我有一个系统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
).
现在我需要访问驱动程序中时钟的 posedge
和 negedge
。
我可以通过 @cb
轻松访问 posedge
。
如何访问 negedge
?
我是否需要为 negedge
创建另一个 modport
/clocking block
并将其单独传递给驱动程序?
如果您选择使用时钟块作为访问接口中信号的唯一机制,那么您将必须创建另一个时钟块。我通常不会在验证接口中使用 modports,但您必须将时钟块添加到现有的 modport 或添加另一个。
我会推荐一个用于正边沿时钟和负边沿时钟的时钟块。您可以在您的 modport 中列出两个时钟块。在 driver/monitor.
中不需要 modport如果您想使用相同的时钟块动态选择极性,请在此处查看我的回答: