system-verilog - 如何比较边缘几乎位于同一位置的两个信号?

标签 system-verilog

我正在验证部分设计,该设计可生成具有精确定时边沿的脉冲。我有一个基本的行为模型,它产生的输出与设计类似,但不完全相同。两者之间的差异小于设计所需的精度,因此我的模型足够好。问题是:如何比较这两个信号?

我尝试过:

assert(out1 == out1_behav);

但是这会失败,因为两个信号的边沿间隔为 1ps。设计只要求边缘以 100ps 的精度放置,所以我希望在这种情况下通过。

我考虑过使用带有 $delay() 计时检查的指定 block ,但这会给我带来其他问题,因为我需要使用 +no_timing_checks 运行来保持我的内存模型在此 RTL 模拟中失败。

有没有一种简单的方法来检查这些边缘是否“几乎”相同?

最佳答案

根据信号在 100ps 内匹配的设计要求,您可以添加一个比较逻辑,将 100ps 转换延迟用作滤波器。

bit match;
assign #100ps match = (out1 == out1_behav);
always @*
    assert #0 (match==1);

Verilog 有不同的分配延迟的方式:转换和传输。转换延迟控制上升、下降和不确定/高阻时序。如果驱动信号给出的脉冲小于延迟,它们可以充当滤波器。传输延迟将始终跟随具有时移的驱动信号。当延迟很大时,过渡和传输看起来是一样的。

assign #delay transition = driver; // Transition delay
always @(rhs) transport <= #dealy driver; // Transport delay

<子>示例:http://www.edaplayground.com/s/6/878 ,点击运行按钮即可查看波形。

关于system-verilog - 如何比较边缘几乎位于同一位置的两个信号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21024524/

相关文章:

SystemVerilog 中的字符串搜索和替换

verilog - 在(系统)verilog 仿真中从命令行定义参数

verilog - 当有时输入和输出端口可以在 Verilog 中互换使用时,inout 端口的确切标准是什么?

inheritance - 为什么在 systemverilog 中继承常量变量不起作用

testing - 使用 System-Verilog 进行串行测试台架和断言

constraints - 系统Verilog随机化地址等于2以关闭电源

python - PyGears hdlgen 生成具有 DTI 接口(interface)的顶级模块,Vivado 需要 Verilog,但不支持此功能

javascript - 使用 for 循环将字符串变量分配给数组

vhdl - 优化 fpga 实现的流水线吞吐量的最佳实践是什么?

verilog - Verilog、SystemVerilog 的 Doxygen 替代品?