嗨,任何使用 Mentor Graphic Modelsim Tool 的 SystemVerilog 专家。
我正在编写一个监视器任务来处理一个简单的 PCI 单字写/读总线事件。不知何故,EDAplayground Altera Modelsim 10.1d 需要额外的时钟周期,原因不明,而我的 Modelsim DE 10.2c / 10.4 不需要。我想了解这是否正确。
这是编写监视器类代码的示例:
@(negedge bus.MONCLK.FRAMEn);
@(bus.MONCLK); // EDA playground Modelsim 10.1d requires this extra clock cycle for getting data right. It is also required for read as well.
address = bus.MONCLK.AD;
if (bus.MONCLK.CBEn == IO_Write_CMD) begin
//tran_type = PCI_WRITE;
write = 1; // true
@(bus.MONCLK);
data = bus.MONCLK.AD;
status = 1'b1; // success
end else begin
status = 1'b0; // not success
end
这是读取监视器类代码的示例:
@(negedge bus.MONCLK.FRAMEn);
@(bus.MONCLK); // EDA playground Modelsim 10.1d requires this extra clock cycle for getting data right. It is also required for read as well.
address = bus.MONCLK.AD;
if (bus.MONCLK.CBEn == IO_Read_CMD) begin
write = 0; // false
@(bus.MONCLK);
@(bus.MONCLK);
data = bus.MONCLK.AD;
status = 1'b1; // success
end else begin
status = 1'b0; // not success
end
http://www.edaplayground.com/x/7kG 如果我有这个额外的时钟周期,一个例子显示了正确的结果。我将正确获取 data = c 进行读取或写入。 http://www.edaplayground.com/x/TSE 如果我删除了这个额外的时钟周期,一个例子会显示错误的结果。我得到 data = 516 (地址)用于写入和 data = z 用于读取。但是,我的 Modelsim 10.2c 和 10.4 将显示正确的结果(数据 = c)。
你能帮我理解这个问题吗?谢谢你。
迈克尔