我正在尝试为具有有效/准备握手的模块开发测试平台驱动程序。 但是来自接口的输入值(就绪信号)显示出与其时钟有关的不确定行为。
在大多数上升沿,它提供了上升沿前的值,但在其他上升沿,它提供了后上升沿值。 我正在使用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