我目前正在实施一个MUX,为了测试这个,我创建了一个生成器和一个监视器来生成数据作为输入并监视其输出。
MUX采用Avalon Streaming接口作为输入和输出,因此也支持背压。
我的问题是。我的测试台在下降沿运行,而我的DUT和输入数据在上升沿产生。我的输入时钟和输入数据都是在Delta周期0生成的。但是从DUT返回并控制发生器的背压就绪信号设置为Delta 3.现在这会产生一些采样问题,因为DUT必须每次加载数据来自发电机的时间数据(在delta 0处)有效且DUT就绪有效(Delta 3处的背压信号)。
现在,如果我以1 ps的方式扭曲DUT输入时钟,它可以解决问题。但感觉这是错误的做法。这里的正确设计原则是什么? ?
将时钟歪斜1 ps或至少移动4个增量,这样我确保在rising_edge之前设置了所有信号?
或
移动我生成的数据,使其与DUT输出就绪信号对齐?
或
这只是从测试台到测试台的决定吗?
我还认为测试平台上的时钟应该在delta 0处生成,其他一切都必须在之后。
我在Riviera-pro中模拟
答案 0 :(得分:0)
您有多种选择:
i)让一切都同步。换句话说,驱动输入并在与DUT使用的时钟相同的边沿上对输出进行采样。毕竟,DUT不会遇到任何竞争问题,所以如果你只是将时钟策略扩展到测试平台,一切都会正常工作。 在RTL,但不在门级。所以,如果你正在进行门级模拟(你应该这样做),那么这个策略对此没有好处。
ii)将测试台中的所有内容从时钟的相对边缘移到DUT使用的边缘。同样,对于RTL来说很好,但是对于门级来说是否合适取决于设计中的延迟。
iii)在时钟沿之后驱动DUT的输入,并在它之前采样DUT输出。 时钟边沿是DUT使用的边缘。同样,这对于RTL来说也很好,对于门级来说也是最强大的。
iv)为每个DUT接口实现实际时序。这应该适用于RTL和门级,如果它不适用于门级,那么故障是DUT而不是测试平台。