SystemVerilog接口输入信号时序

时间:2016-12-22 23:17:49

标签: system-verilog

我正在尝试为具有有效/准备握手的模块开发测试平台驱动程序。 但是来自接口的输入值(就绪信号)显示出与其时钟有关的不确定行为。

在大多数上升沿,它提供了上升沿前的值,但在其他上升沿,它提供了后上升沿值。 我正在使用QuestaSim 64-bit 10.5c运行模拟。

这是界面声明。

// interface
interface mem_intf(input logic clk, reset);
    logic               req_valid;
    logic               req_ready;

    // driver clocking block
    clocking driver_cb @(posedge clk);
        default input #1 output #0;
        output req_valid;
        input  req_ready;
    endclocking

    // driver modport
    modport DRIVER  (clocking driver_cb, input clk, reset);

endinterface

这是驱动/监控信号的任务。

`define DRIV_IF mem_vif.DRIVER.driver_cb

class driver;
    ...
    // creating virtual interface handle
    virtual mem_intf mem_vif;

    // constructor
    function new(virtual mem_intf mem_vif, ...);
        // getting the interface
        this.mem_vif = mem_vif;
        ...
    endfunction

    task run();
        fork
            drive_req();
            ...
        join
    endtask;

    task drive_req;
        // initial values
        `DRIV_IF.req_valid  <= 0;

        // wait for the completion of reset
        wait(!mem_vif.reset);
        @(mem_vif.DRIVER.driver_cb);

        forever begin
            @(mem_vif.DRIVER.driver_cb);
            $display("%d %d %d", $time, mem_vif.DRIVER.req_valid, mem_vif.DRIVER.req_ready);
        end
    endtask

0 个答案:

没有答案