System verilog SystemVerilog接口输入信号定时
我正在尝试为具有有效/就绪握手的模块开发一个测试台驱动程序。 但是,来自接口(就绪信号)的输入值显示其时钟的不确定性行为 在大多数上升沿上,它提供上升沿前的值,但在其他情况下,它提供上升沿后的值。 我正在使用QuestaSim 64位10.5c运行模拟 下面是接口声明System verilog SystemVerilog接口输入信号定时,system-verilog,System Verilog,我正在尝试为具有有效/就绪握手的模块开发一个测试台驱动程序。 但是,来自接口(就绪信号)的输入值显示其时钟的不确定性行为 在大多数上升沿上,它提供上升沿前的值,但在其他情况下,它提供上升沿后的值。 我正在使用QuestaSim 64位10.5c运行模拟 下面是接口声明 // interface interface mem_intf(input logic clk, reset); logic req_valid; logic
// 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
`如果mem_vif.DRIVER.DRIVER_cb定义DRIV_
类驱动程序;
...
//创建虚拟接口句柄
虚拟内存intf mem_vif;
//建造师
新功能(虚拟内存intf内存vif等);
//获取接口
this.mem_vif=mem_vif;
...
端功能
任务运行();
叉
驱动器_req();
...
参加
结束任务;
任务驱动需求;
//初始值
`DRIV\u IF.req\u有效您将显示mem\u vif.driver\u cb.req\u ready
<代码>驱动程序
不是层次范围,它是一个modport。@非常感谢dave_59。它解决了我的问题,如果没有你,我要花几个星期才能发现我的错误!您将显示mem\u vif.driver\u cb.req\u ready
<代码>驱动程序不是层次范围,它是一个modport。@非常感谢dave_59。它解决了我的问题,如果没有你,我要花几个星期才能发现我的错误!